Seite 1 von 1

Und Verknüfpung in Regel

Verfasst: 13. Apr 2020 13:39
von JoschiRaab
Hallo ,
ich möchte um 22.00 Uhr prüfen ob das Garagentor zu ist und alle Türen verschlossen.
Meine Regel dazu sieht so aus :

Code: Alles auswählen

rule "Garagentor noch AUF"
when 
    Time cron "0 0 22 * * ?" and
    Item Garagentor is ON 
then
    Echo_Schlafzimmer_TTS.sendCommand('Das Garagentor ist noch AUF')
end
Das es "and" in einer Regel wohl nicht gibt habe ich schon herausgefunden , aber wie könnte ich das Lösen ?
am besten wäre es wenn ab 22.00 Uhr jede 15 Minten überprüft wird ob noch alles abgeschlossen ist .
Bis um 5.00 Uhr morgens oder so .

Kann mir da jemand was schreiben ?
Ich denke es gibt diese Frage schon irgendwo , habe auch danach gesucht , aber nix gefunden was mich weiter bringt .

Vielen Dank
Joschi

Re: Und Verknüfpung in Regel

Verfasst: 13. Apr 2020 13:46
von Darkwin101
Also zu Verständnis bei dem Was du Versucht müssten beide Ereignisse zu selben Zeit auf die Milisekunde eintreffen damit das funktionieren würde, darum gibt es die UND Bedingung nicht bei Triggern du musst dir einen Trigger nehmen und dann die Unterscheidung in den Then Teil

Code: Alles auswählen

rule "Garagentor noch AUF"
when 
    Time cron "0 0/15 * * * ?"  // Ausführung alle 15 Minuten
    then
    if ( Garagentor.state == ON && ((now.getHourOfDay < 5) || (now.getHourOfDay >= 22))){ //Garagentor ist auf und Uhrzeit zwischen 22 Uhr und 5 Uhr
     Echo_Schlafzimmer_TTS.sendCommand('Das Garagentor ist noch AUF') } 
end
Ein Oder mehrere Ereignisse lösen die Rule aus im When Teil aber nie 2 Erreignisse gleichzeitig da das gleichzeitige Auftreten in der Realität so gut wie nie erreicht wird.

Re: Und Verknüfpung in Regel

Verfasst: 13. Apr 2020 14:34
von udo1toni
Knapp daneben... :)

Der Time cron Trigger ist schon ok. Du möchtest um 22 Uhr etwas prüfen, also Trigger für 22 Uhr.
Die andere Sache ist, festzustellen, ob zu diesem Zeitpunkt ein Item einen bestimmten Status hat. Dieser Teil ist aber per Definition kein Trigger, sondern eine Bedingung. Dieser Teil wird also im Verlauf der Rule überprüft. Deine Rule muss also lauten:

Code: Alles auswählen

rule "Garagentor noch AUF"
when 
    Time cron "0 0 22 * * ?" 
then
    if(Garagentor.state == ON)
        Echo_Schlafzimmer_TTS.sendCommand('Das Garagentor ist noch AUF')
end
Diese Rule triggert nur um 22 Uhr, sollte also das Tor nach 22 Uhr geöffnet werden, gibt es keine Meldung. Das würde ich aber nicht wie von Darkwin101 vorgeschlagen lösen, sondern eher eine Rule anlegen, die, falls das Tor nach 22 Uhr geöffnet wird, einen Timer startet, der dann z.B. nach 5 Minuten eine Meldung verschickt.

Re: Und Verknüfpung in Regel

Verfasst: 13. Apr 2020 17:47
von Darkwin101
@Udo1Toni meine Regel zielt halt auf seine Konkrete Frage ab ich wüsste jetzt nicht wie ich das anders lösen könnte :D
JoschiRaab hat geschrieben: 13. Apr 2020 13:39 am besten wäre es wenn ab 22.00 Uhr jede 15 Minten überprüft wird ob noch alles abgeschlossen ist .
Bis um 5.00 Uhr morgens oder so .

Re: Und Verknüfpung in Regel

Verfasst: 13. Apr 2020 22:22
von udo1toni
Ah. Den Teil hatte ich überlesen.

Man könnte den Trigger Zeitraum eingrenzen über

Code: Alles auswählen

Zime cron "0 0/15 0-4,22-23 * * ?"

aber sonderlich schön ist das auch nicht.

Wie gesagt würde ich das eher andersrum lösen, um 22 Uhr triggert die Rule, wenn das Tor zu dem Zeitpunkt offen ist, wird die Meldung ausgegeben. Man kann dann auch einen Timer starten, der alle 15 Minuten die Meldung wiederholt. Ansonsten beim Öffnen des Tors prüfen, ob es zwischen 22 Uhr und 5 Uhr ist und gegebenenfalls einen Timer starten. Der Timer kann dann immer wieder neu geplant werden. Wenn das Tor geschlossen wird, wird der Timer abgebrochen, ebenso von einer Rule, die um 5 Uhr triggert.

Das mag komplizierter in der Programmierung sein, vermeidet aber Rules, die zyklisch starten, es vermeidet auch eine ungleichmäßige Meldung, wenn man z.B. das Tor um 22:14 auffährt, kommt bei zyklischer Meldung schon um 22:15 die Meldung, dass das Tor noch offen ist, das ist unschön.