Wert unter Funktioniert nicht

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Piko
Beiträge: 93
Registriert: 26. Nov 2019 19:05
Answers: 0

Wert unter Funktioniert nicht

Beitrag von Piko »

Nabend zusammen,

nach langer zeit melde ich mich mal wieder mit einem problem.

Openhabversion 4.1.0.M3

Ich bekomme eine regel via Blocky nicht zum laufen.

Code: Alles auswählen

if (((time.ZonedDateTime.now()) > (time.toZDT('05:00')) && (time.ZonedDateTime.now()) < (time.toZDT('08:00')) || (time.ZonedDateTime.now()) > (time.toZDT('16:00')) && (time.ZonedDateTime.now()) < (time.toZDT('23:59'))) && items.getItem('Aussendaten_Helligkeit_Aussen').state < '100') {
  console.info('Licht AN');
  console.info(items.getItem('Aussendaten_Helligkeit_Aussen').state);
} else {
  console.info('Licht AUS');
  console.info(items.getItem('Aussendaten_Helligkeit_Aussen').state);
}
Ich möchte ie beleuchtung einschränkten zwischen 05:00 und 08:00 sowie zwischen 16:00 und 23:59, soweit so gut. Aber der wert des Items scheint probleme zu machen. Egal ob ich größer oder kleiner angebe, es kommt immer OFF.

Mir scheint es so als würde der abgleich nicht funktionieren.

Die regel wurde mit Blocky erstellt, vielleicht liegt da auch irgendwo der fehler.
Gedanke war wenn zwischen 05:00 und 08:00 Uhr oder zwischen 16:00 und 23:59 und item Hellligkeit Aussen gibt wert < 100 zurück mache Licht an, sonst aus. Es sei denn der Wert ist 0.

im Log seh ich dann aber nur Aus

Code: Alles auswählen

2023-11-23 23:14:22.079 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AN
2023-11-23 23:14:22.082 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 0
2023-11-23 23:28:53.875 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AUS
2023-11-23 23:29:25.467 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AN
2023-11-23 23:29:25.469 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 0
2023-11-23 23:29:52.562 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AUS
2023-11-23 23:30:45.293 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AUS
2023-11-23 23:30:45.296 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 101
2023-11-23 23:32:12.194 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AUS
2023-11-23 23:32:12.198 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 99
2023-11-23 23:33:26.573 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AUS
2023-11-23 23:33:26.578 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 50
2023-11-23 23:33:43.654 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AUS
2023-11-23 23:33:43.657 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 50
2023-11-23 23:34:24.483 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - Licht AN
2023-11-23 23:34:24.487 [INFO ] [nhab.automation.script.ui.86f8e7ad86] - 0
Was passt hier nicht ?

Danke im voraus für die Hilfe.

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

Re: Wert unter Funktioniert nicht

Beitrag von Harka »

Moin,
eine Fehlerquelle haben wir gerade erst hier behandelt. Der Vergleich mit dem String/Text "100" funktioniert nicht wie von Dir erwartet weil z.B. "2" größer als "100" ist. Du brauchst hier den Number-Block mit 100 aus Math und get_numericState zum Auslesen der Helligkeit.

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

Re: Wert unter Funktioniert nicht

Beitrag von udo1toni »

Ein weiterer Punkt sind die Klammern und die Bool'sche Algebra.
Der Ausdruck a UND b ODER c UND d wird gewöhnlich von links nach rechts verarbeitet. Das heißt: zunächst wird a UND b gebildet (Ergebnis ist b'). Anschließend wird b' ODER c gebildet (Ergebnis ist c'). Zum Abschluss wird c' UND d gebildet., also muss d immer erfüllt sein. Zum Glück ist das ohnehin immer der Fall (also bis auf die letzte Minute des Tages). Das bedeutet aber auch, dass die Bedingung im Grunde unnötig ist - ich denke nicht, dass diese eine Minute tatsächlich eine Rolle spielt.

Besser wäre (a UND b) ODER (c UND d), allerdings ist die letzte Bedingung ja vermutlich eh unnötig, also bleibt (a UND b) ODER c übrig.
Dazu kommt dann noch die Bedingung e, welche aber schon korrekt mittels Klammern hierarchisch eingebunden ist. :)

Ansonsten, da Du so oder so den Wert des Items ausgibst, bietet es sich an, zum einen das console.log aus der Klammer herauszuziehen (eine Zeile weniger...) und evtl. auch direkt mit einer Variablen zu arbeiten.
Merke: Jeder Wert, der mehrfach verwendet wird, sollte über eine lokale Konstante oder Variable verwendet werden, weil die Abfrage über den Bus grundsätzlich mehr Zeit in Anspruch nimmt als die Verwendung der Variablen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten