udo1toni hat geschrieben: ↑9. Jan 2021 22:07
Jepp, UoM ist gerne mal ein Fallstrick. Das ist aber schon in openHAB2 so gewesen...
Ich selber habe ja openHAB2 nie selber administriert und stolpere jetzt nur drüber, weil ich eine übernommene Rule laufen lassen wollte, was wahrscheinlich eh nicht das beste war. Daher versuche ich jetzt erst mal zu verstehen, was ich da mache. Eigentlich ist es ja eine gute Sache mit dem UoM, man muss es nur wissen.
udo1toni hat geschrieben: ↑9. Jan 2021 22:07
wobei es auch sein kann, dass der Teil hinter der Pipe in Anführungszeichen stehen muss. Natürlich funktioniert das auch ohne Variablen zu nutzen, also so:
Genau so funktioniert es, danke!
udo1toni hat geschrieben: ↑9. Jan 2021 22:07
Der Vorteil mit Einheit besteht natürlich darin, dass man die Umrechnung abgenommen bekommt:
Das ist natürlich eindrcksvoller, wenn es z.B. um Temperaturen geht, wo der Vergleichswert zu einem Temperatur in °Celsius dann auch gerne in °Fahrenheit oder in Kelvin angegeben werden darf.
Das hat diverse Vorteile. Erst mal macht es auch Code verständlicher, weil bei "2|W" weiß man beim lesen, dass das ein Leistung in Watt ist, während das sonst im besten Fall aus dem Kontext hervorgeht. Es macht die Sache aber auch sehr viel sicherer. Nun ist es vielleicht nicht so tragisch, wenn jemand sich den Ar**** abfriert, weil er sein Haus auf 20 Grad Celsius heizen wollte, aber der Thermostat das als 20 Grad Fahrenheit interpretiert hat. Es sind aber auch in der Geschichte der Softwareentwicklung schon sehr tragische Dinge passiert, weil Software einen Zahlenwert anders interpretiert hat, als er gedacht war.
Was mich aber eigentlich sehr wundert ist, dass so etwas:
einfach durchläuft. Wenn "state" ein Datentyp ist und "5" ein andere hätte ich eins von folgendem erwartet:
* Das sicherste: Spätestens das Ausführen der Zeile erzeugt eine Fehlermeldung, dass man hier unzulässigerweise zwei unterschiedliche Datentypen
vergleicht.
* Weniger sicher: der Wert 5 wird implizit zum selben Datentyp konvertiert, also aus "5" wird beispielsweise 5 Watt wenn MeinUoMItem.state auch in
Watt ist.
Es passiert aber keins von beidem. Der Ausdruck läuft einfach durch und macht irgendwas was mir nicht klar ist. Evaluiert vielleicht immer zu "false" egal was MeinUoMItem.state für einen Wert hat.