Lichtfarbe nach Tageszeit, Fehler in der Rule?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von MrCrashy »

Hallo,

Ich möchte bei meiner Lampe im Schlafzimmer die Farbe ändern. Dies soll nach Tageszeit passieren.
Nun habe ich die Rule fertig, jedoch schaltet diese nur die Farbe durch und geh danach wieder aus. Irgendwas geht da irgendwie schief? :?:

Rule:

Code: Alles auswählen

rule "Lichtschalter Schlafzimmer"
when 
    Channel "hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event" triggered 
then 
    if(receivedEvent == "1000.0"){
        if(now.getHour > 5 || now.getHour < 8)      HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(100)   HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        if(now.getHour > 8 || now.getHour < 16)     HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(40)    HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(0)
        if(now.getHour > 16 || now.getHour < 23)    HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(75)   HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        if(now.getHour > 23 || now.getHour < 5)     HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(30)    HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
    }
    if(receivedEvent == "2000.0")                  HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand("INCREASE")
    if(receivedEvent == "3000.0")                  HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand("DECREASE")
    if(receivedEvent == "4000.0")                  HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
    if(receivedEvent == "4001.0"){
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(30)
        timerCeilingLamp_Off = createTimer(now.plusSeconds(120),[|
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
        ])
    }
end 
Loggs:

Code: Alles auswählen

2021-03-18 15:29:41.959 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 1002.0 to 1000.0

2021-03-18 15:29:41.960 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 1000.0

2021-03-18 15:29:41.964 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:19:46.000+0100 to 2021-03-18T15:29:41.000+0100

2021-03-18 15:29:42.476 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 1002.0

2021-03-18 15:29:42.477 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 1000.0 to 1002.0

2021-03-18 15:29:42.814 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SysteminfoMemoryAvailable' changed from 3075 to 3076

2021-03-18 15:29:44.825 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SysteminfoMemoryAvailable' changed from 3076 to 3078

2021-03-18 15:29:44.826 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SysteminfoMemoryUsed' changed from 802 to 799

2021-03-18 15:29:45.275 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 100

2021-03-18 15:29:45.277 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 100

2021-03-18 15:29:45.281 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 100

2021-03-18 15:29:45.283 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 40

2021-03-18 15:29:45.287 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 0

2021-03-18 15:29:45.290 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 100

2021-03-18 15:29:45.291 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 75

2021-03-18 15:29:45.293 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 100

2021-03-18 15:29:45.295 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 0 to 100

2021-03-18 15:29:45.296 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 100

2021-03-18 15:29:45.297 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 40

2021-03-18 15:29:45.299 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 0

2021-03-18 15:29:45.301 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' changed from 0 to 100

2021-03-18 15:29:45.301 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 75

2021-03-18 15:29:45.303 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 100

2021-03-18 15:29:45.304 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 100

2021-03-18 15:29:45.305 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 100 to 40

2021-03-18 15:29:45.306 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' changed from 100 to 0

2021-03-18 15:29:45.307 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 40 to 75

2021-03-18 15:29:45.307 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' changed from 0 to 100

2021-03-18 15:29:49.791 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 4000.0

2021-03-18 15:29:49.793 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 1002.0 to 4000.0

2021-03-18 15:29:49.799 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:29:41.000+0100 to 2021-03-18T15:29:49.000+0100

2021-03-18 15:29:49.801 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 0

2021-03-18 15:29:49.803 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 0

2021-03-18 15:29:49.805 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 75 to 0

2021-03-18 15:29:50.314 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 4002.0

2021-03-18 15:29:50.315 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 4000.0 to 4002.0

2021-03-18 15:29:50.838 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 1000.0

2021-03-18 15:29:50.840 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 4002.0 to 1000.0

2021-03-18 15:29:50.844 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:29:49.000+0100 to 2021-03-18T15:29:50.000+0100

2021-03-18 15:29:50.846 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 100

2021-03-18 15:29:50.851 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 100

2021-03-18 15:29:50.854 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 40

2021-03-18 15:29:50.857 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 100

2021-03-18 15:29:50.858 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 0

2021-03-18 15:29:50.862 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 100

2021-03-18 15:29:50.863 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 75

2021-03-18 15:29:50.865 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 100

2021-03-18 15:29:50.867 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' received command 100

2021-03-18 15:29:50.869 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 40

2021-03-18 15:29:50.870 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 0

2021-03-18 15:29:50.872 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 0 to 100

2021-03-18 15:29:50.872 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 75

2021-03-18 15:29:50.874 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 100

2021-03-18 15:29:50.875 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' predicted to become 100

2021-03-18 15:29:50.876 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 100 to 40

2021-03-18 15:29:50.877 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' changed from 100 to 0

2021-03-18 15:29:50.877 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 40 to 75

2021-03-18 15:29:50.878 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' changed from 0 to 100

2021-03-18 15:29:51.361 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 1002.0

2021-03-18 15:29:51.363 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 1000.0 to 1002.0

2021-03-18 15:29:53.958 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 4002.0

2021-03-18 15:29:53.959 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 1002.0 to 4002.0

2021-03-18 15:29:53.962 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:29:50.000+0100 to 2021-03-18T15:29:53.000+0100

2021-03-18 15:29:55.515 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 4000.0

2021-03-18 15:29:55.517 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 4002.0 to 4000.0

2021-03-18 15:29:55.522 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:29:53.000+0100 to 2021-03-18T15:29:54.000+0100

2021-03-18 15:29:55.523 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' received command 0

2021-03-18 15:29:55.526 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' predicted to become 0

2021-03-18 15:29:55.529 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Brightness' changed from 75 to 0

2021-03-18 15:29:56.040 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 4002.0

2021-03-18 15:29:56.041 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_DimmerSwitch' changed from 4000.0 to 4002.0

2021-03-18 15:29:56.045 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:29:54.000+0100 to 2021-03-18T15:29:55.000+0100

2021-03-18 15:30:01.703 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_ColorTemperature' changed from 100 to 87

2021-03-18 15:30:01.704 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Alert' changed from NONE to SELECT

2021-03-18 15:30:03.702 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_Ceilinglamp_Alert' changed from SELECT to NONE

2021-03-18 15:30:08.523 [INFO ] [openhab.event.ChannelTriggeredEvent ] - hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event triggered 4002.0

2021-03-18 15:30:08.530 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HUE_MasterBedroom_MainSwitch_LastUpdated' changed from 2021-03-18T15:29:55.000+0100 to 2021-03-18T15:30:07.000+0100
Irgendwie scheint der Dimmer-Schalter auch zwischendurch andere Events zu triggern. Zum Beispiel:
Ich drücke "Ein" also Event "1000.0". Kurz darauf triggert er aufeinmal Event "1002.0" . So langsam versehe ich nicht was da nicht simmt.

Weiß jemand wie ich das beheben kann?

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von udo1toni »

Wofür stehen denn die einzelnen Zahlen? Kann es sein, dass die letzte Vorkommastelle eine 0 für gedrückt und eine 2 für losgelassen enthält?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von MrCrashy »

Das kann ich nicht genau beantworten. Laut der openhab.org - Seite muss bei jedem Event eine ".0" angehangen sein. Warum? Das steht da leider nicht beschrieben.
Allerdings steht das Event "1002.0" für "Short Released".

Was ich noch nicht verstehe ist, warum die Lampe einmal alle "Lichtstufen" der Rule durchschaltet und danach aus auf der "Standard"-Stufe stehen bleibt.

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von udo1toni »

Ja, das ist leicht erklärbar. Du hast jeweils zwei Bedingungen gesetzt, von denen nur eine erfüllt sein muss, das || bedeutet "ODER". Außerdem hast Du zwei Anweisungen hinter der bedingten Verzweigung stehen. Ich formatiere die Rule mal etwas um:

Code: Alles auswählen

rule "Lichtschalter Schlafzimmer"
when 
    Channel "hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event" triggered 
then 
    if(receivedEvent == "1000.0"){
        if(now.getHour > 5 || now.getHour < 8) // entweder größer als 5 oder kleiner als 8 -> immer true
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(100)
        HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        if(now.getHour > 8 || now.getHour < 16) // entweder größer als 8 oder kleiner als 16 -> immer true
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(40)
        HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(0)
        if(now.getHour > 16 || now.getHour < 23)  // entweder größer als 16 oder kleiner als 23 -> immer true
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(75)
        HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        if(now.getHour > 23 || now.getHour < 5)  // entweder größer als 23 oder kleiner als 5 -> von 0 Uhr bis 4:59:59 true
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(30)
        HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
    }
    if(receivedEvent == "2000.0")
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand("INCREASE")
    if(receivedEvent == "3000.0")
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand("DECREASE")
    if(receivedEvent == "4000.0")
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
    if(receivedEvent == "4001.0"){
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(30)
        timerCeilingLamp_Off = createTimer(now.plusSeconds(120),[|
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
        ])
    }
end
Die Formatierung gibt wieder, wie die Befehle der Reihenfolge nach abgearbeitet werden.
Du kannst statt dem || ein && schreiben, dann müssen beide Bedingungen erfüllt sein (das gilt für die ersten drei Bedingungen), allerdings hast Du da noch einen weiteren Fehler...
Damit jeweils beide Befehle nur bedingt ausgeführt werden, müssen die beiden Befehle in geschweifte Klammern (die hast Du ja schon an anderer Stelle verwendet). Die korrekte Rule sähe also eher so aus:

Code: Alles auswählen

rule "Lichtschalter Schlafzimmer"
when
    Channel "hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event" triggered 
then
    if(receivedEvent == "1000.0"){
        if(now.getHour > 4 && now.getHour <  8) { // zwischen 5 und 8 Uhr
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(100)
            HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        }
        if(now.getHour > 7 && now.getHour < 16) { // zwischen 8 und 16 Uhr
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(40)
            HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(0)
        }
        if(now.getHour > 15 && now.getHour < 23) { // zwischen 16 und 23 Uhr
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(75)
            HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        }
        if(now.getHour > 22 || now.getHour < 5) { // zwischen 23 und 5 Uhr
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(30)
            HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)
        }
    }
    if(receivedEvent == "2000.0")
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand("INCREASE")
    if(receivedEvent == "3000.0")
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand("DECREASE")
    if(receivedEvent == "4000.0")
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
    if(receivedEvent == "4001.0") {
        HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(30)
        timerCeilingLamp_Off = createTimer(now.plusSeconds(120), [|
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
        ])
    }
end
.getHour liefert die aktuelle Stunde, der Wert geht von 0 bis 23 und ist vom Typ Integer. Von 05:00:00.000 Uhr bis 5:59:59.999 Uhr ist .getHour also 5 (.000 sind die Millisekunden, genauer wollte ich es nicht angeben...).

Du kannst auch auf >= (größer oder gleich) oder <= (kleiner oder gleich) prüfen, das ist letztlich Geschmacksache.

.getHour ist eine Funktion von JavaTime, worasu ich schließe, dass Du mit OH3 unterwegs bist. Wenn das der Fall ist, solltest Du now an allen Stellen mit ZonedDateTime.now ersetzen, damit die Rule korrekt funktioniert.
Solltest Du noch mit OH2.x unterwegs sein, müsstest Du überall .getHour durch .getHourOfDay ersetzen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von MrCrashy »

Ja, da liegst du richtig. Ich bin mit OH3 unterwegs.
Ich habe auch schon mit dem "&&" ausprobiert und es hat ebenfalls nicht funktioniert. Ich gehe mal stark davon aus, dass es an meiner Formatierung lag.

Habe ich das mit dem "zonedDateTime.now" so richtig verstanden?

Code: Alles auswählen

rule "Lichtschalter Schlafzimmer"
when
    Channel "hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event" triggered 
then
    if(receivedEvent == "1000.0"){
        if(ZonedDateTime.now.getHour > 4 && ZonedDateTime.now.getHour <  8) { // zwischen 5 und 8 Uhr
            HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(100)
            HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(100)

end
Der Grund warum ich die Befehle hinten dran gehangen habe, ist folgender:

Ich wollte die Rule etwas kleiner und Übersichtlicher gestalten. Du hattest mir damals eine Rule gebastelt, welche so verkürzt war. Ich habe auch mit anderen Dingen herumprobiert, wie z.B.

Code: Alles auswählen

rule "Schalter"
when 
    Channel "schalter" triggered 
then 
    var clct = HUE_MasterBedroom_Ceilinglamp_ColorTemperature.state as DecimalType 
    var clbn = HUE_MasterBedroom_Ceilinglamp_Brightness.state as DecimalType 

    if(receivedEvent == "1000.0")
        if(now.getHour > 4 && now.getHour < 8)      clct = 100  clbn = 80

        // usw
end
Leider habe ich das mit dem "Verkürzen" gar nicht auf dem Schirm. :D

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von udo1toni »

Ja, wie gesagt fehlen da einfach die geschweiften Klammern. Für die Übersichtlichkeit:

Code: Alles auswählen

var Timer tAutoOff = null

rule "Lichtschalter Schlafzimmer"
when
    Channel "hue:0820:ecb5fa2fc0d3:2:dimmer_switch_event" triggered 
then
    var strBri = "30"
    var nCol = -1
    val nHour = ZonedDateTime.now.getHour
    switch(receivedEvent) {
        case : "1000.0" {
            tAutoOff?.cancel
            if     (nHour <  5) {             nCol=100}
            else if(nHour <  8) {strBri="100" nCol=100}
            else if(nHour < 16) {strBri= "40" nCol=  0}
            else if(nHour < 23) {strBri= "75" nCol=100}
            else                {             nCol=100}
        }
        case : "2000.0" {strBri= "INCREASE" tAutoOff?.cancel}
        case : "3000.0" {strBri= "DECREASE" tAutoOff?.cancel}
        case : "4000.0" {strBri=        "0" tAutoOff?.cancel}
        case : "4001.0" {
            tAutoOff?.cancel
            tAutoOff =  createTimer(now.plusSeconds(120), [|
                HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(0)
            ])
        }
        default : return;
    }
    HUE_MasterBedroom_Ceilinglamp_Brightness.sendCommand(strBri)
    if(nCol > -1) 
        HUE_MasterBedroom_Ceilinglamp_ColorTemperature.sendCommand(nCol)
end
Verschiedene Optimierungen für die Lesbarkeit...
Erst mal die Verwendung lokaler Variablen für die beiden zu setzenden Befehle. Da das Brightness Item auch INCREASE oder DECREASE senden soll, muss hier ein String verwendet werden. Für die Farbtemperatur reicht eine Zahl. Da dieser Befehl aber nicht immer gesendet wird, wird ein "ungültiger" Wert als Default gesetzt. Ist am Ende dieser Wert noch gesetzt, so wird der Befehl nicht gesendet.
Dann kommt die lokale Konstante nHour zum Zug, die mit der aktuellen Stunde gefüllt wird.
Nun wird mit der switch Anweisung die Unterscheidung der verschiedenen Tastendrücke unterschieden, was bei konkreten werten wesentlich schlanker ist als das if Konstrukt.
In jedem der einzelnen Zweige wird jeweils der Timer beendet :) das fehlt in der ursprünglichen Rule völlig. Leider kann das nicht zu Beginn der Rule passieren, denn ausgerechnet der default Zweig der switch-Anweisung darf den Timer keinesfalls beenden.
Im ersten case-Block kommen nun if-Anweisungen zum Einsatz, aber durch die Reihenfolge muss nur ein Grenzwert geprüft werden. Die erste if-Anweisung die matcht, ist auch die einzige Anweisung, die zum Zug kommt.
Es werden jeweils nur die beiden Variablen verändert (die sehr kurze Namen haben...)
Im Fall des langen Tastendrucks auf Aus wird der Timer gestartet.
Sollte keiner der case-Blöcke zutreffen, kommt der default-Block zum Zug und beendet die Rule umgehend.

Ansonsten kommt der letzte Block der Rule zum Einsatz. Der Helligkeitsbefehl wird gesendet, falls nCol verändert wurde, wird auch noch der ColorTemperatur Befehl gesendet.

Ansonsten gäbe es auch noch eine weitere mögliche Optimierung, die allerdings die Verständlichkeit der Rule beeinträchtigt, das wäre, die nHour anders zu berechnen, nämlich so:

Code: Alles auswählen

nHour = ZonedDateTime.now.plusHours(1).getHour
In der Folge müssen die Grenzen im ersten case um 1 erhöht werden. Damit wird dann der else-Block obsolet und in der letzten else if() Zeile kann die Bedingung entfallen. Aber zu einem späteren Zeitpunkt ist das natürlich schwerer nachzuvollziehen...
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von MrCrashy »

Ok, das macht auch schon viel mehr Sinn. :)

Zwei Fragen hätte ich aber zum Verständnis:

1. Wieso wird bei jedem Timer-Abbruch ein "?" gesetzt?
2. Kannst du mir eine Seite, ein Buch o.ä empfehlen um mich mit der Materie "OpenHAB" und vor allem die Codierung von OpenHAB besser auseinander setzen zu können?

EDIT: Nach dem Ausprobieren ist mir ein positiver Nebeneffekt aufgefallen. Die Schaltzeiten der Lampe haben merklich abgenommen.

Vielen Dank!

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Lichtfarbe nach Tageszeit, Fehler in der Rule?

Beitrag von udo1toni »

Das ? bedeutet: Führe den Befehl nur aus, wenn der Zeiger nicht auf null zeigt. Die Zeile

Code: Alles auswählen

tAutoOff?.cancel
ist also gleichbedeutend mit der Zeile

Code: Alles auswählen

if(tAutoOff !== null) tAutoOff.cancel
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten