NEWS
[Gelöst] Einzelwert aus Array-Objekt?
-
Hallo,
ich frage einen einzelnen Wert aus der InfluxDB ab (z.B. Stromverbrauch der Wärmepumpe der letzten 24h) und möchte diesen in einen Datenpunkt schreiben.
Das Ergebnis der Query sieht so aus:
{"result":[[{"result":"_result","table":0,"_start":"2022-01-28T09:00:12.676771291Z","_stop":"2022-01-29T09:00:12.676771291Z","_measurement":"Strom.Heizung.Energie_in_der_letzten_Stunde","_value":14.683000000000117,"_time":"2022-01-29T09:00:12.676771291Z","ts":1643446812676}]],"ts":1643446812684,"error":null}
Ich benötige den _value, den ich mir so aus dem Objekt hole:
value = query.result[0].map(elm => (elm._value));
Wenn ich jetzt den Inhalt der Variablen value in einen DP schreibe, steht das Ergebnis noch in eckigen Klammern [14.683000000000117].
Es fehlt wohl noch eine Kleinigkeit, um den reinen Wert da herauszuholen. Könnt Ihr mir helfen?
Hier das vollständige Skript:
refresh(); function refresh() { let targetDP = '0_userdata.0.Strom.Heizung.Heizung_Energie_gestern'; let value = 0; sendTo('influxdb.0', 'query', 'from(bucket: "iobroker") \ |> range(start: -24h) \ |> filter(fn: (r) => r["_measurement"] == "Strom.Heizung.Energie_in_der_letzten_Stunde") \ |> drop(columns: ["_field", "ack", "from", "q"]) \ |> aggregateWindow(every: 1w, fn: sum, createEmpty: false) \ |> limit(n:1) \ ', function (query) { if (query.error) { console.error(query.error); } else { // Ergebnis in Datenpunkt console.log('Row: ' + JSON.stringify(query)); value = query.result[0].map(elm => (elm._value)); setState(targetDP, value, true); console.log("value: " + value); } }) };
Danke.
Grüße Frank
-
@frank2604 sagte in Einzelwert aus Array-Objekt?:
{"result":[[{"result":"_result","table":0,"_start":"2022-01-28T09:00:12.676771291Z","_stop":"2022-01-29T09:00:12.676771291Z","_measurement":"Strom.Heizung.Energie_in_der_letzten_Stunde","_value":14.683000000000117,"_time":"2022-01-29T09:00:12.676771291Z","ts":1643446812676}]],"ts":1643446812684,"error":null}
Der Pfad müsste meines Erachtens so lauten:
result[0][0]._value
-
Ja, funktioniert. Vielen Dank!
refresh(); function refresh() { let targetDP = '0_userdata.0.Strom.Heizung.Heizung_Energie_gestern'; let value = 0; sendTo('influxdb.0', 'query', 'from(bucket: "iobroker") \ |> range(start: -24h) \ |> filter(fn: (r) => r["_measurement"] == "Strom.Heizung.Energie_in_der_letzten_Stunde") \ |> drop(columns: ["_field", "ack", "from", "q"]) \ |> aggregateWindow(every: 1w, fn: sum, createEmpty: false) \ |> limit(n:1) \ ', function (query) { if (query.error) { console.error(query.error); } else { // Ergebnis in Datenpunkt console.log('Row: ' + JSON.stringify(query)); value = query.result[0][0]._value console.log("value: " + value); setState(targetDP, value, true); } }) };