Seite 1 von 2
JSScripting ECMA Rev.11
Verfasst: 5. Jun 2023 14:47
von kaiserdom
Hallo zusammen!
Ich setze mein openHAB-System neu auf und benutze die Gelegenheit, eine neue Script Sprache zu verwenden.
Bis jetzt habe ich JSScripting ECMA Rev. 5.1 verwendet, das aber angeblich bald ausläuft, deswegen also der Umstieg auf Rev. 11. Und da beginnen die Schwierigkeiten.
Einfaches Beispiel: Die (arithmetische) Differenz zweier Items soll einem dritten Item zugewiesen werden.
Unter JS Rev. 5.1 läuft folgendes Script einwandfrei:
Code: Alles auswählen
item1 = items['TempKollektor'];
item2 = items['TempPool'];
diff = item1 - item2;
events.postUpdate('TempDiff', diff);
Das entsprechende Script unter JS Rev. 11:
Code: Alles auswählen
item1 = items.getItem("TempKollektor");
item2 = items.getItem("TempPool");
diff = item1 - item2;
items.getItem("TempDiff").postUpdate(diff);
bringt zunächst eine Warnung im Log:
State 'NaN' cannot be parsed for item 'TempDiff'
und dann eine ellenlange Fehlermeldung:
Failed to execute script
Was ist hier los? Was muss ich ändern?
Kann mir bitte jemand helfen!
mfg kaiserdom
Re: JSScripting ECMA Rev.11
Verfasst: 5. Jun 2023 19:32
von Harka
Hi,
versuch es mal mit
PS: ab OH 4 geht es auch wieder kürzer
Re: JSScripting ECMA Rev.11
Verfasst: 5. Jun 2023 23:53
von kaiserdom
Danke Harka,
aber
Code: Alles auswählen
item1 = items.getItem("TempKollektor").state;
item2 = items.getItem("TempPool").state;
diff = item1 - item2;
items.getItem("TempDiff").postUpdate(diff);
bringt dieselbe Fehlermeldung:
State 'NaN' cannot be parsed for item 'TempDiff'
OH4 werde ich probieren, muss ich erst einrichten.
Gruß, kaiserdom
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 10:07
von udo1toni
Kannst Du mal die komplette Rule zeigen? denn in dem Schnipsel wird das Status gar nicht abgefragt, warum also beschwert sich openHAB?
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 11:16
von kaiserdom
Ich hab genau diese 4 Zeilen in ein Script gepackt und gestartet, darauf komm die Fehlermelung und das Item Tempdiff wird nicht geändert.
Code: Alles auswählen
item1 = items.getItem("TempKollektor").state;
item2 = items.getItem("TempPool").state;
diff = item1 - item2;
items.getItem("TempDiff").postUpdate(diff);
Die Variable diff ist offenbar nicht numerisch
Das Ganze läuft letztlich auf die Frage hinaus: Wie bekommt man den Zahlenwert eines Items?
Ich hab alles probiert: .state, .rawState, .numericState, .quantityState, etc. - nichts!
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 13:44
von Harka
Habe gerade nur das Handy hier aber parse-Befehl bzw. mit 1 multiplizieren sollte helfen.
Ohne .state kommt immer nur ein Objekt zurück. Du kannst Dir auch mit glaube console.log('Titel', variable) die Zwischenwerte anzeigen lassen.
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 14:18
von kaiserdom
ich lasse mir die (Zwischen)ergebnisse per
logger.info() anzeigen, also z.B.
liefert:
"29.4 °C", ist OK
Code: Alles auswählen
logger.info(typeof items.getItem("TempKollektor").state);
liefert:
" string", ist auch OK
aber bitte wie bekomme ich den
Zahlenwert des Items
TempKollektor für weitere numerische Operationen?
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 16:29
von udo1toni
Das ist aber eigentlich kein vollständiges Script...
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 16:48
von kaiserdom
Das ist aber eigentlich kein vollständiges Script...
Wenn ich obige Code-Zeilen im UI unter Scripts eingebe, und dann: Run now <Ctrl>-R - wieso ist das kein Skript?
Mich interessiert ja das Ergebnis bzw. allfällige Fehlermeldungen - und das kommt ja!
Re: JSScripting ECMA Rev.11
Verfasst: 6. Jun 2023 17:14
von Harka
ist unter OH 3.4 noch etwas umständlich
Code: Alles auswählen
item1 = parseFloat(items.getItem('OneCallAPIweatherandforecast_ForecastTomorrow_Maxtemperature').state);
console.log('item1 = ',item1);
item2 = parseFloat(items.getItem('OneCallAPIweatherandforecast_ForecastTomorrow_Mintemperature').state);
console.log('item2 = ',item2);
diff = item1 - item2;
console.log(diff);
items.getItem("Test").postUpdate(diff);
.numericState und .quantityState kommen erst in OH 4
Ich selbst klicke mir ja alles mit Blockly zusammen und bisher nutze ich dort für Messwerte grundsätzlich die Parse-Funktion von Guinnes um diese Probleme gar nicht erst zu haben. Quantity schau ich mir zur später sicher auch mal an.
Sehe gerade -> hier ist beschrieben wie die neue Version auch jetzt schon genutzt werden kann
https://community.openhab.org/t/ecmascr ... ned/144125