NEWS
[gelöst] Influxdb Abfrage
-
Hallo zusammen,
ich würde gerne meine InfluxDB abfragen und einen Wert daraus in ein Objekt in iobroker schreiben.
Die Daten werden von einem vzlogger vom Volkszähler Projekt in die influxdb geschrieben.Ich bekomme auch eine Abfrage auf den letzten Wert hin mit:
sendTo('influxdb.0', 'query', 'SELECT * FROM vzlogger.autogen."xxxxxxxx" LIMIT 1', function (result) { if (result.error) { console.error(result.error); } else { // show result console.log(JSON.stringify(result.result[0])); //setState('javascript.0.Eigene_Datenpunkte.volkszaehler', JSON.stringify(result.result[0])); } });
Die Ausgabe ist dann der komplette String: [{"uuid":"xxxxxxxxxxxxxx","value":yyyyyyyyyy,"ts":xxxxxxx}]
Ich hab nun leider keine Ahnung wie ich nur die value yyyyyyyyy daraus bekomme.
Vielen Dank schon einmal.
Gruß Saboti -
@Saboti sagte:
Die Ausgabe ist dann der komplette String: [{"uuid":"xxxxxxxxxxxxxx","value":yyyyyyyyyy,"ts":xxxxxxx}]
result.result[0] liefert immer noch ein Array ? Dann
log(result.result[0][0].value);
Wahrscheinlicher aber so
log(result.result[0].value);
-
@paul53 sagte in Influxdb Abfrage:
[0].value
Danke Dir, mit dem ersten hat es funktioniert und ich bekomme nur den Wert in das Objekt
Gruß Saboti
-
Für interessierte mit der gleichen Problemstellung. Hier mein finales Script.
Es frägt eine Influxdb ab und holt den aktuellsten Wert daraus. Diesen muss ich durch 1000 teilen um auf kWh zu kommen.createState('Eigene_Datenpunkte.volkszaehler.zaehlerstand', 0,{ name: 'Zaehlerstand', desc: 'Aktueller Zaehlerstand', type: 'number', role: 'value', unit: 'kWh' }); Gruß Saboti schedule("*/5 * * * * *", function () { sendTo('influxdb.0', 'query', 'SELECT * FROM <datenbank_name>.autogen."<measurement_name>" ORDER BY DESC LIMIT 1', function (result) { if (result.error) { console.error(result.error); } else { //console.log(JSON.stringify(result.result[0][0].value / 1000)); //setState('javascript.0.Eigene_Datenpunkte.volkszaehler.zaehlerstand', JSON.stringify(result.result[0][0].value / 1000)); var value = (JSON.stringify(result.result[0][0].value / 1000)); var zaehlerstand = parseFloat(value); //console.log(zaehlerstand); setState('javascript.0.Eigene_Datenpunkte.volkszaehler.zaehlerstand', zaehlerstand); } }); });
Das ganze wird dann über Sourceanalytix weiterverarbeitet.
Gruß Saboti
-
@Saboti sagte:
var value = (JSON.stringify(result.result[0][0].value / 1000)); var zaehlerstand = parseFloat(value);
Weshalb machst Du aus der Zahl erst einen String und wandelst den String dann in eine Zahl ?
-
@paul53 aus dem einfachen Grund weil ich es nicht besser kann/weiß
Bin Blutiger Anfänger was Java angeht und bin froh das das Script so läuft.
Wie könnte ich das denn direkt ändern? -
@Saboti sagte:
Wie könnte ich das denn direkt ändern?
var zaehlerstand = result.result[0][0].value / 1000;
-
@paul53 vielen Dank für Deine Hilfe.
Klappt wunderbar