JSScripting ECMA Rev.11

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

kaiserdom
Beiträge: 13
Registriert: 27. Apr 2020 20:19
Answers: 0

JSScripting ECMA Rev.11

Beitrag 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

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: JSScripting ECMA Rev.11

Beitrag von Harka »

Hi,
versuch es mal mit

Code: Alles auswählen

item1 = items.getItem("TempKollektor").state;
PS: ab OH 4 geht es auch wieder kürzer

Code: Alles auswählen

item1 = items.TempKollektor.state;

kaiserdom
Beiträge: 13
Registriert: 27. Apr 2020 20:19
Answers: 0

Re: JSScripting ECMA Rev.11

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: JSScripting ECMA Rev.11

Beitrag von udo1toni »

Kannst Du mal die komplette Rule zeigen? denn in dem Schnipsel wird das Status gar nicht abgefragt, warum also beschwert sich openHAB?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

kaiserdom
Beiträge: 13
Registriert: 27. Apr 2020 20:19
Answers: 0

Re: JSScripting ECMA Rev.11

Beitrag 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!

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: JSScripting ECMA Rev.11

Beitrag 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.

kaiserdom
Beiträge: 13
Registriert: 27. Apr 2020 20:19
Answers: 0

Re: JSScripting ECMA Rev.11

Beitrag von kaiserdom »

ich lasse mir die (Zwischen)ergebnisse per logger.info() anzeigen, also z.B.

Code: Alles auswählen

logger.info(items.getItem("TempKollektor").state);
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?

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: JSScripting ECMA Rev.11

Beitrag von udo1toni »

Das ist aber eigentlich kein vollständiges Script...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

kaiserdom
Beiträge: 13
Registriert: 27. Apr 2020 20:19
Answers: 0

Re: JSScripting ECMA Rev.11

Beitrag 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!

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: JSScripting ECMA Rev.11

Beitrag 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

Antworten