Seite 1 von 1

Mathe-Funktion in Blockly

Verfasst: 25. Mai 2024 19:03
von mccoy
Liebe Gemeinde,

ich monitore mit Openhab 4.1.2 meine PV Anlage und allgemein meinen Stromverbrauch.
Hierzu gibt es ein Shelly Plug S mit dem Channel "Gesamtverbrauch" in kWh, gespeichert wird in eine Influx Datenbank. Um den Verbrauch der letzten 24 Stunden zu ermitteln, habe ich ein Blockly Script geschrieben:

Code: Alles auswählen

var a, b, c;
var thread = Java.type('java.lang.Thread')

a = items.getItem('PVShelly01_Gesamtverbrauch').history.historicState(time.ZonedDateTime.now().minusDays(1))?.state;
b = items.getItem('PVShelly01_Gesamtverbrauch').state;
c = items.getItem('PVShelly01_Gesamtverbrauch').state;
console.info(a);
console.info(b);
console.info(c);
c = b - a;
thread.sleep(1000);
console.info('c:');
console.info(c);
"b" und "c" weise ich den gleichen Wert zu in der Hoffnung "c" so zu initialisieren.

Das führt zu folgendem Ergebnis:
2024-05-25 18:57:26.308 [INFO ] [hab.automation.script.ui.Verbrauch24] - 20.34 kWh
2024-05-25 18:57:26.311 [INFO ] [hab.automation.script.ui.Verbrauch24] - 24.324 kWh
2024-05-25 18:57:26.312 [INFO ] [hab.automation.script.ui.Verbrauch24] - 24.324 kWh
2024-05-25 18:57:27.315 [INFO ] [hab.automation.script.ui.Verbrauch24] - c:
2024-05-25 18:57:27.317 [INFO ] [hab.automation.script.ui.Verbrauch24] - NaN
Mein Verdacht ist, dass ich ein Problem mit den Einheiten kWh habe..
So richtig habe ich aber keine Ahnung wo ich suchen soll bzw. wo mein Fehler liegt!

Viele Grüße
Rolf

Re: Mathe-Funktion in Blockly

Verfasst: 25. Mai 2024 19:41
von Harka
Moin,
ja, mit deiner Vermutung liegst Du schon recht nah. Das Stichwort ist UoM #Units of Measurements
Mit solchen (String-)Werten kann Javascript nicht vernünftig rechnen. Du brauchst die oben verlinkten UoM-Funktionen. Alternativ ginge auch noch die Verwendung der reinen Zahlenwerte mit get_numeric_state_of_item und/oder dem Number-Block aus dem Math-Verzeichnis

Re: Mathe-Funktion in Blockly

Verfasst: 25. Mai 2024 20:49
von mccoy

Code: Alles auswählen

c = (Quantity(b).subtract(Quantity(a)));
Das hat das Problem gelöst!

Vielen Dank und allen ein schönes Wochenende!