Manuelles Ausschalten erkennen?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53
Answers: 0

Manuelles Ausschalten erkennen?

Beitrag von MrCrashy »

Hallo,
Ich bin gerade dabei mein System um ein paar Funktionen zu erweitern und bin auf ein "Problem" gestoßen. Ich möchte gerne dass mein System erkennt, dass das Licht manuell ausgeschaltet wurde.
Dies hat folgenden Hintergrund:

Ich habe ein Zeitschaltuhr mit Automatik-Funktion in meinem System, diese sieht wie folgt aus:

Code: Alles auswählen

rule "Zeitschaltuhren"
when 
    Time cron "0 00 17-23 * * ?" or 
    Item Sunset_State changed to ON or 
    Item Anwesend changed or 
    Item Kitchen_Spotlight1_Timer_On changed or 
    Item Kitchen_Spotlight1_Timer_Off changed or 
    Item Childsroom_Livingwall_Timer_On changed or 
    Item Childsroom_Livingwall_Timer_Off changed 
then 
    val Sl1_OnSel = if(Kitchen_Spotlight1_Timer_On.state instanceof Number)(Kitchen_Spotlight1_Timer_On.state as Number) else 0
    val Sl1_OffSel = if(Kitchen_Spotlight1_Timer_Off.state instanceof Number)(Kitchen_Spotlight1_Timer_Off.state as Number) else 0
    val Lc_OnSel = if(Childsroom_Livingwall_Timer_On.state instanceof Number)(Childsroom_Livingwall_Timer_On.state as Number) else 0
    val Lc_OffSel = if(Childsroom_Livingwall_Timer_Off.state instanceof Number)(Childsroom_Livingwall_Timer_Off.state as Number) else 0
    var Sl1 = OFF
    var Lc = OFF 
    if(Anwesend.state == ON){
        if(Sl1_OnSel == 0)
            if(Sunset_State.state == ON)                                Sl1 = ON 
        else if(now.getHour > (15 + Sl1_OnSel) && Sl1_OnSel != 0)       Sl1 = ON 
        if(now.getHour > (19 + Sl1_OffSel) || now.getHour < 15)         Sl1 = OFF 
        if(Lc_OnSel == 0)
            if(Sunset_State.state == ON)                                Lc = ON 
        else if(now.getHour > (15 + Lc_OnSel) && Lc_OnSel != 0)         Lc = ON 
        if(now.getHour > (19 + Lc_OffSel) || now.getHour < 15)          Lc = OFF 
    } else {
        Lc = OFF 
        Sl1 = OFF 
    }
    if(Sl1 != HUE_Kitchen_Spotlight1.getStateAs(OnOffType)) HUE_Kitchen_Spotlight1.sendCommand(Sl1)
    if(Lc != HUE_Childsroom_Livingwall.getStateAs(OnOffType)) HUE_Childsroom_Livingwall.sendCommand(Lc)
Nun möchte ich aber z.B über meine Alexa eine "Gute Nacht"-Scene aktivieren. Hierbei soll nach dem Sprachbefehl das "Spotlight1" und die "Childsroom_Livingwall" nach einer Minute ausgehen und das Licht im Schlafzimmer geht an.

Wenn jetzt allerdings das Licht über Alexa vor der Ausschaltzeit der Zeitschaltuhr ausgeschaltet wurde, dann wird beim nächsten triggern der Rule (z.B. weil der Time Cron triggert) das Licht wieder eingeschaltet. Das soll so aber nicht sein. Es sollte aus bleiben.
Ich hätte das Problem mit Schaltern gelöst, doch mich würde interessieren, ob es eine bessere und elegantere Lösung gibt.

MfG
Elias

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Manuelles Ausschalten erkennen?

Beitrag von sihui »

MrCrashy hat geschrieben: 18. Feb 2021 20:29 Ich möchte gerne dass mein System erkennt, dass das Licht manuell ausgeschaltet wurde.
Hier könnte ein Ansatz für die Problemlösung zu finden sein:

https://community.openhab.org/t/design- ... tion/32937
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Antworten