Seite 2 von 2

Re: JSScripting ECMA Rev.11

Verfasst: 6. Jun 2023 17:41
von kaiserdom
Hm, z.B.

Code: Alles auswählen

item1 = parseFloat(items.getItem("TempKollektor").state);
funktioniert bei mir nicht!
Muss ich da noch etwas importieren/definieren/einstellen?

Re: JSScripting ECMA Rev.11

Verfasst: 6. Jun 2023 19:11
von Harka
Du fragst Sachen. Habe openHABian als Unterbau am laufen aber parseFloat ist Standard. Ggf. kannst ja mal Number.parseFloat(...) versuchen. Kommt da eine Fehlermeldung? Bei bewusst falsch geschrieben Befehl läuft hier ein "ReferenceError: "parsiFloat" is not defined" auf.

Re: JSScripting ECMA Rev.11

Verfasst: 7. Jun 2023 10:19
von udo1toni
Nein, parseFloat ist eine Funktion um Strings zu verarbeiten. Die Strings dürfen allerdings (meines Wissens) ausschließlich Zahlen enthalten (d.h. die Zeichen -.0123456789 und sonst nichts. Eventuell wird ein Leerzeichen noch unterdrückt, aber Buchstaben oder das ° vermutlich eher nicht (kann mich da aber auch irren).
In der Rules DSL musst Du Float.parseFloat schreiben, also den Teil der Library mit angeben, von dem die Funktion stammt. bei JavaScript würde ich erwarten, dass Du zumindest zu Beginn die benötigten Funktionen importieren musst, aber auch hier: da ich es nicht nutze, ist das nur eine Vermutung.

Re: JSScripting ECMA Rev.11

Verfasst: 7. Jun 2023 11:16
von kaiserdom
Zur Klarstellung:
JavaScript parseFloat liefert tatsächlich den Zahlenwert einer gemischten (Ziffern und Buchstaben) Zeichenkette als Zahl (number), z.B.:

Code: Alles auswählen

item1 = parseFloat(items.getItem("TempKollektor").state);
item2=parseFloat("12.33 °C und so weiter");
liefern 23.5 bzw. 12.33
Mein Fehler war es, auftretende Fehlermeldungen dem parseFloat zuzuschieben,tatsächlich entstanden Fehler erst bei der Ausgabe.
Von früher (unter ECMA Rev 5.1) war ich es gewohnt, zu schreiben:

Code: Alles auswählen

logger.info(item1);
das liefert eine ellenlange, nichtssagende Fehlermeldung
Nun muss es heißen:

Code: Alles auswählen

logger.info((item1).toString()); //oder
logger.info((item1).toString()+" und "+item2.toString());
liefern "23.5" bzw. "23.5 und 12.33"
Offenbar ist die Typprüfung hier (ECMA Rev. 11) deutlich strenger.

Danke für alle Beiträge, kaiserdom

Re: JSScripting ECMA Rev.11

Verfasst: 7. Jun 2023 17:14
von Harka
Habe mal bei Blockly unter OH 4 gespickt und bei OH 3.4 mit dem aktuellem Javascript getestet -> funktioniert mit console-Variationen ohne Typ-Kollisionen

Code: Alles auswählen

console.info('Bla = ', diff);
console.warn(diff);
console.error(diff);