Seite 1 von 1

Rule in openhab: Nur bestimmte Uhrzeit UND nur 1x am Tag

Verfasst: 26. Dez 2020 11:22
von chimera86
Hi zusammen,

habe mich gerade angemeldet, um neben dem englischen OH Forum auch hier mal reinzuschauen und mich von anderen inspirieren zu lassen.

Ich habe für eine Wohnung eine recht große OH Implementierung und möchte gerne in einer Rule morgens nach dem Aufstehen eine Routine ablaufen lassen. Das untenstehende Rule funktioniert auch soweit aber 2 Dinge fehlen noch. Diese Rule nur ausführen zwischen 6-9 Uhr + nur einmal am Tag. Habt ihr Ideen wie ich das hier integrieren kann? Das Problem ist, das ich die Timer in der Rule schon sehr angepasst habe und nicht sicher bin wie ich weitere Timer und Timechecks integriere. Ich würde mich über Vorschläge freuen wie ihr die beiden Aspekte integrieren würdet bei den bereits gesetzten Timern.

Code: Alles auswählen

var Timer tAutoOff = null
var int iAutoOff = 0
var Timer t1 = null
var Timer t2 = null

rule "Morgenroutine"
when
    Item LobbyMotionSensor changed from OFF to ON
then
    if(tAutoOff !== null)                       // timer already scheduled, so leave rule
        return;
    iAutoOff = 0                              // initialize counter
    tAutoOff = createTimer(now, [|
        iAutoOff ++
        switch(iAutoOff) {
            case  1 : {
                    AlexaTTS.sendCommand('XYZ') 
                    broadlink_rm3_78_0f_77_5a_be_d1_command.sendCommand("NUBERTON")
                    AllLightsSwitchGroup.sendCommand("ON") 
                    Receiver.sendCommand("ON") 
                    LivingRoomLoungeLight.sendCommand("ON")
                    BedroomLoungeLight.sendCommand("ON")     
                    }
            case  2 : {
                    t1 = createTimer(now.plusSeconds(10), [|
                    AlexaTraffic.sendCommand("Traffic") 
                    AlexaTraffic.sendCommand("Weather") 
                    ])
                     }
            case  3 : {
                    Sonos_Master_Bedroom_Add.sendCommand("RINCON_000E582AC07601400")
                    Sonos_Master_Bedroom_Add.sendCommand("RINCON_000E582AC07E01400")
                    Sonos_Master_Bedroom_Add.sendCommand("RINCON_B8E93783325201400")
                    Sonos_Master_Bedroom_Add.sendCommand("RINCON_B8E9375835EC01400")
                    LivingRoomSonosVolume.sendCommand("85")
                    SonosShuffle.sendCommand("ON")
                    SonosPlaylist.sendCommand("Fluid")
                     }
            case 4  : DenonInput.sendCommand('MPLAY')
            case 5  : {
                    t2 = createTimer(now.plusSeconds(10), [|
                    NubertSelect.sendCommand("NUBERTCHANOPTICAL") ])
                     } 
            default : {
                tAutoOff = null
                return;
            }
        }
        tAutoOff.reschedule(now.plusSeconds(3))
    ])
end 

Re: Rule in openhab: Nur bestimmte Uhrzeit UND nur 1x am Tag

Verfasst: 26. Dez 2020 11:47
von Darkwin101
Ich würde es so machen

Code: Alles auswählen

var Einmal = 0 // Variable ob Rule schon ausgeführt wurde
Rule"XY"
when Item XY changed to ON
then
if(((now.getHour > 6) && (now.getHour < 9)) && Einmal == 0) // Abfrage ob Zeit zwischen 6 und 9 und noch nicht ausgeführt
{
Einmal = 1 //Regel wurde ausgeführt
..... ///Weitere Kommandos
}
else { XY.postUpdate(OFF) }  // Wenn Bedingungen nicht erfüllt wird setze Schalter wieder auf OFF
end


eventuell musst du auf >5 Abfragen, ich weiß jetzt nicht genau ob er 6:01 schon als Gößer interpretiert.
Ist das eine openhab2 Installation ist es now.getHourofDay() als Befehl

Re: Rule in openhab: Nur bestimmte Uhrzeit UND nur 1x am Tag

Verfasst: 26. Dez 2020 22:33
von udo1toni
einfachste Variante: Eine Rule zum aktivieren, eine Rule zum deaktivieren, eine Abfrage in der eigentlichen Rule:

Code: Alles auswählen

var Boolean bEnable = false

rule "scharf schalten"
when
    Time cron "0 0 6 * * ?" // täglich um 6 Uhr
then
    bEnable = true // aktiviere Rule
end

rule "unscharf schalten"
when
    Time cron "0 0 9 * * ?" // täglich um 9 Uhr
then
    bEnable = false // deaktiviere Rule
end

rule "Morgenroutine"
when
    Item LobbyMotionSensor changed from OFF to ON
then
// Extra Code zusätzlich
    if(!bEnable) return; // falls bEnable != true -> Rule 
    bEnable = false
// Ab hier normaler Rule code
...
Natürlich kann man das auch in einer Rule erledigen, jedoch ergeben sich dadurch keine Vorteile. Der Ansatz oben ist (meiner Meinung!) insofern elegant, als er keinerlei Zeitabfragen in der Rule benötigt. Es wird noch nicht mal mehr als eine Variable benötigt.

Re: Rule in openhab: Nur bestimmte Uhrzeit UND nur 1x am Tag

Verfasst: 27. Dez 2020 11:31
von chimera86
Hallo,

danke für eure Antworten :) Habe gestern auf OH3 migriert und warte aktuell auf das RM3 mini binding und den Port davon, hoffentlich kommt der bald :) Dann teste ich eure Vorschläge und melde mich hier wieder :) Danke!