Seite 1 von 2
IF Verzweigung - Problem
Verfasst: 12. Sep 2021 09:12
von SaschaQ
Hallo zusammen,
ich habe folgende Rule in Openhab 3 geschrieben.
Code: Alles auswählen
if (now.getHour() <= 22 && now.getHour() >= 6) {
if (all_kind1_schlafen.state==OFF || all_kind1_schlafen_prion_schalter.state==OFF || all_kind2_schlafen.state==OFF || all_kind2_schlafen_prion_schalter.state==OFF){
createTimer(now.plusSeconds(3), [ |
echo_wohnzimmer_TTS.sendCommand('Willkommen zuhause Person 1')
])
createTimer(now.plusSeconds(3), [ |
echo_wohnzimmer_TTS_Volume.sendCommand(25)
])
}
}
Wenn die Kinder schlafen, schalte ich eines der Items, die hinter der Uhrzeitabfrage kommen auf ON, sodass dann keine Durchsagen durch meine Echos im Haus mehr kommen sollen, wenn eines der oben genannten Items auf AN steht.
Komischerweise rutscht die Rule aber immer wieder in die Durchsage obwohl eines der Items auf AN steht.
In den Logs sehe ich auch das beispielsweie das ITem all_kind1_schlafen auf ON steht.
Was mache ich falsch?
Viele Grüße
Sascha
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 09:45
von BOP
SaschaQ hat geschrieben: ↑12. Sep 2021 09:12
Komischerweise rutscht die Rule aber immer wieder in die Durchsage obwohl eines der Items auf AN steht.
Ja, aber die anderen stehen dann noch auf OFF? Du hast alles mit ODER verknüpft. Es reicht also, wenn einer der Ausdrucke erfüllt ist, damit er in IF-Verzweigung "rutscht".
EDIT: Wieso erzeugst du eigentlich zwei Timer mit gleicher Ablaufzeit direkt hintereinander? Du kannst die zwei Befehle auch in einem Timeraufruf zusammen packen.
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 09:49
von Mannklappe
So lange eins immer auf OFF steht wird die Rule ausgeführt. Du müsstest eine Abfrage rein machen, die prüft ob einer auf ON steht und die Regel abbrechen dann.
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 09:51
von BOP
Mannklappe hat geschrieben: ↑12. Sep 2021 09:49
Du müsstest eine Abfrage rein machen, die prüft ob einer auf ON steht und die Regel abbrechen dann.
Oder schlicht alles mit && verknüpfen. Wenn ich das richtig verstehe, geht es ja nicht darum die Kinder einzeln zu betrachten. Sondern sobald eines Schläft, sollen die Befehle nicht mehr ausgeführt werden.
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 09:53
von Mannklappe
Er schreibt doch, er möchte EINES der Items auf ON stellen. Somit wäre && hier falsch, weil ja nur eines auf ON steht.
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 09:58
von BOP
Deswegen schrieb ich ja: "Wenn ich das richtig verstehe, geht es ja nicht darum die Kinder einzeln zu betrachten."
Sollte das nicht so sein, hast du recht. Dann reicht es nicht, alle mit && zu verknüpfen.
Oder sagen wir es so: Sobald eines auf ON steht, würde bei && Verknüpfungen die Befehle in der IF-Verzweigung nicht mehr ausgeführt.
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 10:02
von Mannklappe
Vielleicht erhellt uns SachaQ

Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 10:09
von SaschaQ
Hallo zusammen,
ich habe mit || gearbeitet, da tatsächlich nur eines der Items ausreichen soll, damit die Durchsage nicht mehr kommen soll.
Ich verstehe den Ansatz von && nicht. Dies würde doch bewirken, dass alle Items den Status OFF haben müssen.
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 10:15
von Mannklappe
Einfach eine If-Regel am Anfang einfügen, in dem du abfragst ober einer der Items auf ON steht und dann einfach die Regel abbrechen. Somit umgehst du, dass die Schleife dauerhaft ausgeführt wird.
Code: Alles auswählen
if (all_kind1_schlafen.state == ON || all_kind1_schlafen_prion_schalter.state == ON || all_kind2_schlafen.state == ON || all_kind2_schlafen_prion_schalter.state == ON)
{
return;
}
Re: IF Verzweigung - Problem
Verfasst: 12. Sep 2021 10:20
von BOP
SaschaQ hat geschrieben: ↑12. Sep 2021 10:09
Ich verstehe den Ansatz von && nicht. Dies würde doch bewirken, dass alle Items den Status OFF haben müssen.
Ja genau. Oder anders ausgedrückt. Sobald eines der Items
nicht OFF ist, würde sie nicht abgearbeitet.