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

Re: JSScripting ECMA Rev.11

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

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

Re: JSScripting ECMA Rev.11

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

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

Re: JSScripting ECMA Rev.11

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

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

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

Re: JSScripting ECMA Rev.11

Beitrag 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);

Antworten