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 -
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); -
@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); -
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
-
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;
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden