Seite 1 von 1
UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 27. Dez 2018 19:05
von Joe
Hi zusammen,
kann mir bitte jemand sagen, wie ich eine UND-Verknüpfung in der Nachfolgenden Regel hin bekomme?
"&&" kann ich nur in der "IF" Bedingung hinbekommen die ich nur unter "THEN" kenne. Ich benötige die "IF" jedoch unter "WHEN".
Code: Alles auswählen
rule "Beleuchtungssteuerung AN"
when
Item Testschalter1 changed from OFF to ON or
Item Testschalter2 changed from OFF to ON or
Item Testschalter3 changed from OFF to ON
then
Testschalter4.sendCommand(ON)
end
Testschalter4 darf nur auf ON gehen, wenn alle anderen 3 Schalter auf ON stehen.
Mit dem "OR" funzt es ja auch, wenn nur einer der 3 auf ON steht.
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 27. Dez 2018 19:07
von limdul79
Bei Auslösebedinungen in eine Rule kannst du nur OR verwenden - da das alles ja diskrete Ereignisse sind.
Das und musst du dann in die Regel verpacken:
Code: Alles auswählen
rule "Beleuchtungssteuerung AN"
when
Item Testschalter1 changed from OFF to ON or
Item Testschalter2 changed from OFF to ON or
Item Testschalter3 changed from OFF to ON
then
if (Testschalter1.state == ON && Testschalter2.state == ON && Testschalter3.state == ON) {
Testschalter4.sendCommand(ON)
}
end
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 27. Dez 2018 19:14
von Joe
lol das schaut logisch aus da hätte ich auch drauf kommen können

danke
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 28. Dez 2018 07:18
von Joe
Hi limdul79,
hat super funktioniert, sag mal ist es auch möglich nicht nur ITEMs sondern auch Channel und Cron Funktionen in die "IF" Bedingung mit einzubinden?
Somit könnte ich mich eine komplette Rule sparen?
Code: Alles auswählen
rule "Sonoff Dose 01 an"
when
Time cron "0 30 07 ? * SAT-SUN *" or
Channel 'astro:sun:local:nauticDawn#event' triggered START or
Channel 'astro:sun:local:set#event' triggered START
then
SonoffDose01.sendCommand(ON)
sendMail(xxxxxx)
end
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 28. Dez 2018 14:41
von killercorny
Wie wäre es denn die Schalter in einer Switch Gruppe mit AND Verknüpfung zu gruppieren?
Dann braucht man nur auf die Gruppe zu prüfen in der Regel.
Gesendet vom Redmi Note 5
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 29. Dez 2018 19:54
von udo1toni
Die Frage ist immer, was Du erreichen möchtest. Wenn es um astro-Events in Verbindung mit Zeit geht, ist es meist so, dass man z.B. ein Licht bei Sonnenuntergnag einschalten möchte, allerdings frühestens zum Zeitpunkt a und spätestens zum Zeitpunkt b, vielleicht noch versetzt um c Minuten. Alle drei Werte kann man im Astro Bindung hinterlegen, so dass man das mit einem Trigger abfeiern kann.
Ansonsten kann man natürlich auch Zeiten abfragen, z.B.
oder
Für Sonnenaufgang/-untergang muss man natürlich die Zeitpunkte nutzen, nicht die Events, was das Ganze schnell unübersichtlich macht. Im englischen Forum gibt es einen Thread dazu, der ein Item verwendet, um Zeiträume anzuzeigen, also z.B. Morgens, Mittags, Abends, Bettzeit,Nacht. Eine Rule steuert dann den Status dieses Items, während man in den anderen Rules nur noch den Status des Items abfragen muss, um entsprechend zu reagieren. Ein Link zu diesem Thema sollte sich in diesem Forum finden lassen, ich bin jetzt aber zu faul zum suchen...
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 30. Dez 2018 08:26
von sihui
udo1toni hat geschrieben: ↑29. Dez 2018 19:54
Ein Link zu diesem Thema sollte sich in diesem Forum finden lassen
https://community.openhab.org/t/design- ... -day/15407
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 31. Dez 2018 18:15
von Joe
habe mir das nochmals genauer überlegt und getestet.
Es macht nur Sinn, wenn die Regel innerhalb eines Zeitfensters reagieren darf.
Das ganze müsste wie folgt funktionieren:
Schritt 1) prüfe ob es zwischen 16:30 und 17:30 ist, wenn ja gehe zu Schritt 2 ansonsten mache nichts
Code: Alles auswählen
if (now.getHourOfDay() >= 16:30 && now.getHourOfDay() <= 17:30)
[|
Testschalter1.sendCommand(ON)
]
Mit Cron würde es gehen allerdings kommt das im Log mega dumm, wenn jede Sekunde zwischen 16 und 17 Uhr ein Eintrag steht.
Schritt 2) wenn alle 3 Testschalter (1-3) auf ON sind schalte Testschalter4 auf ON (diese Funktion ist bereits vorhanden)
Code: Alles auswählen
rule "Beleuchtungssteuerung AN"
when
Item Testschalter1 changed from OFF to ON or
Item Testschalter2 changed from OFF to ON or
Item Testschalter3 changed from OFF to ON
then
if (Testschalter1.state == ON && Testschalter2.state == ON && Testschalter3.state == ON) {
Testschalter4.sendCommand(ON)
}
end
Leider bekomme ich es nicht hin, den ersten Teil sinnvoll in die Regel einzubauen.
Re: UND-Verknüpfung anstelle OR-Verknüpfung
Verfasst: 31. Dez 2018 22:47
von udo1toni
Du denkst vom falschen Ende
Der Trigger ist keine Bedingung, die erfüllt sein muss, der Trigger startet die Rule.
wird die Rule täglich von 16 bis 17 Uhr zu jeder Sekunde starten. Du möchtest, dass der Code nur zwischen 16:30 und 17:30 ausgeführt wird. Die Rule wird von was auch immer getriggert (einer der Schalter hat seinen Zustand geändert):
Code: Alles auswählen
rule "Bedingungen"
when
Item Testschalter1 changed to ON or
Item Testschalter2 changed to ON or
Item Testschalter3 changed to ON or
then
if(now.minusMinutes(30).getHourOfDay == 16) { //jetzt minus 30 Minuten -> aus 16:30 wird 16:00, aus 17:30 wird 17:00
if(Testschalter1.state == ON && Testschalter2.state == ON && Testschalter3.state == ON) {
// Code wird ausgeführt
}
}
end
Du kannst wahlweise auch sehr kompliziert testen:
Code: Alles auswählen
if((now.getHourOfDay == 16 && now.getMinuteOfHour > 29) || (now.getHourOfDay == 17 && now.getMinuteOfHour < 31))
oder, wieder etwas einfacher:
Code: Alles auswählen
if(now.getMinuteOfDay > 16*60+29 && now.getMinuteOfDay < 17*60 + 31)
Es kommt immer darauf an, wie die Grenzwerte beschaffen sind, welche Variante man verwenden sollte.