Vergleich zweier double-Werte, Unerwartetes Verhalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
thumm
Beiträge: 2
Registriert: 19. Aug 2019 15:21
Answers: 0

Vergleich zweier double-Werte, Unerwartetes Verhalten

Beitrag von thumm »

In einer Regel wird folgender Vergleich durchgeführt

Code: Alles auswählen

    var position = 100.0 - Double::parseDouble(i_rolladenaz_shutter.state.toString)
    if (position != i_rolladenaz_shutter_invert_percentage.state)
    {
      logInfo("rolladenaz.rules", "Received postUpdate " + position + ", " + i_rolladenaz_shutter_invert_percentage.state)
      i_rolladenaz_shutter_invert_percentage.postUpdate(position)
    }
In der LOG-Datei ist jede Minute folgender Eintrag zu finden (das Device sendet jede Minute eine Status-Info per MQTT)

Code: Alles auswählen

   [INFO ] [rthome.model.script.rolladenaz.rules] - Received postUpdate 0.0, 0.0
Laut Doku handelt es sich bei != um einen equals-Vergleich und keinen Objektreferenzvergleich. Wieso wird der IF-Zweig durchlaufen, obwohl die beiden Werte identisch sind?

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

Re: Vergleich zweier double-Werte, Unerwartetes Verhalten

Beitrag von udo1toni »

Ob die Werte nun gleich sind, ist ja nicht gesagt. Ich verstehe aber auch nicht so ganz, was Du da tust.

Besser wäre folgender Code:

Code: Alles auswählen


  var Number position = 100 - (i_rolladenaz_shutter.state as Number)
    if (position != (i_rolladenaz_shutter_invert_percentage.state as Number))
    {
      logInfo("rolladenaz.rules", "Received postUpdate {}, {}", position,i_rolladenaz_shutter_invert_percentage.state)
      i_rolladenaz_shutter_invert_percentage.postUpdate(position)
    }
Natürlich solltest Du vorher sicherstellen, dass sowohl i_rolladenaz_shutter.state als auch i_rolladenaz_shutter_invert_percentage.state vom Typ Number sind. Das trifft normalerweise auf Rollershutter Items und auf Number Items zu, es sei denn das Item hat keinen gültigen Wert, z.B., weil openHAB gerade neu gestartet wurde.

Der Loggername ist auch nicht so ganz günstig, per Definition gehören alle logs aus dne rules zur Rubrik org.openhab.model.script, bzw. org.eclipse.smarthome.model.script, warum sollte man hier also eine Redundanz schaffen?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten