Dimmer Rule für IKEA Schalter

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

forrest
Beiträge: 19
Registriert: 13. Jan 2021 20:32
Answers: 0

Re: Dimmer Rule für IKEA Schalter

Beitrag von forrest »

Na dann sollte das doch jetzt mit dem Timer auch noch gehen oder ? Wenn etwas „gröbere“ Schritte beim Dimmen auch OK sind, kannst Du auch mit INCREASE/DECREASE arbeiten.

Code: Alles auswählen

 sendCommand(GF_Office_Light, INCREASE ) 
Ist einen Versuch wert.

VG

Stefan

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Dimmer Rule für IKEA Schalter

Beitrag von Quautiputzli »

Ja, ich denke den Rest bekomme ich auch noch hin.

Increase und decrease hab ich auch schon probiert, funktionierte aber nicht. Ich denke es hängt dabei auch vom verlinkten channel ab.

Außerdem will ich auch noch probieren die Farbe (hue) auf diese Weise zu verstellen.
Servus

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Dimmer Rule für IKEA Schalter

Beitrag von Quautiputzli »

Hi,
ich hab es nun 2 verschiedene Regelarten erstellt, einmal:

Code: Alles auswählen

var Timer tdimmer = null

rule "HSB Brightness heller"

when 
    Channel "mqtt:topic:broker:gf_office_switch:office_switch_trigger" triggered 
then
    if (tdimmer !== null) tdimmer.cancel() 
    if (receivedEvent == "button_3_hold") {
        tdimmer = createTimer(now, [ |
            var HSBType currentState
            currentState = GF_Office_Light.state as HSBType
            var DecimalType new_H = currentState.hue
            var PercentType new_S = currentState.saturation
            var PercentType new_B = new PercentType(currentState.brightness + 2)
            if( new_B > 100)
                new_B = new PercentType(100)
            var HSBType newState = new HSBType(new_H,new_S,new_B)
            sendCommand(GF_Office_Light,newState.toString)
            if(new_B < 100)
                tdimmer.reschedule(now.plusNanos(200000000))
        ])
    } else if (receivedEvent == "button_3_release") {
        if(tdimmer !== null) tdimmer.cancel
    }
end

rule "HSB Brightness dunkler"

when 
    Channel "mqtt:topic:broker:gf_office_switch:office_switch_trigger" triggered 
then
    if (tdimmer !== null) tdimmer.cancel() 
    if (receivedEvent == "button_4_hold") {
        tdimmer = createTimer(now, [ |
            var HSBType currentState
            currentState = GF_Office_Light.state as HSBType
            var DecimalType new_H = currentState.hue
            var PercentType new_S = currentState.saturation
            var PercentType new_B = new PercentType(currentState.brightness - 2)
            if( new_B < 20)
                new_B = new PercentType(0)
            var HSBType newState = new HSBType(new_H,new_S,new_B)
            sendCommand(GF_Office_Light,newState.toString)
            if(new_B > 19)
                tdimmer.reschedule(now.plusNanos(200000000))
        ])
    } else if (receivedEvent == "button_4_release") {
        if(tdimmer !== null) tdimmer.cancel
    }
end
und:

Code: Alles auswählen

when 
    Channel "mqtt:topic:broker:gf_office_switch:office_switch_trigger" triggered 
then
    if (tdimmer !== null) tdimmer.cancel()
    switch(receivedEvent)  {
        case "button_3_hold" : {
            tdimmer = createTimer(now, [ |
                var HSBType currentState
                currentState = GF_Office_Light.state as HSBType
                var DecimalType new_H = currentState.hue
                var PercentType new_S = currentState.saturation
                var PercentType new_B = new PercentType(currentState.brightness + 2)
                if( new_B > 100)
                    new_B = new PercentType(100)
                var HSBType newState = new HSBType(new_H,new_S,new_B)
                sendCommand(GF_Office_Light,newState.toString)
                if(new_B < 100)
                    tdimmer.reschedule(now.plusNanos(200000000))
            ])
        }
        case "button_3_release" : {
            if(tdimmer !== null) tdimmer.cancel
        }
        case "button_4_hold" : {
            tdimmer = createTimer(now, [ |
                var HSBType currentState
                currentState = GF_Office_Light.state as HSBType
                var DecimalType new_H = currentState.hue
                var PercentType new_S = currentState.saturation
                var PercentType new_B = new PercentType(currentState.brightness - 2)
                if( new_B < 20)
                    new_B = new PercentType(0)
                var HSBType newState = new HSBType(new_H,new_S,new_B)
                sendCommand(GF_Office_Light,newState.toString)
                if(new_B > 19)
                    tdimmer.reschedule(now.plusNanos(200000000))
            ])
        }
        case "button_4_release" : {
            if(tdimmer !== null) tdimmer.cancel
        }
    }
end
Ich denke ich nehme die mit "case", da ich da mehr Funktionen in die Regel packen kann.
Ich musste die Zeit nun mit Nanosekunden machen. Millis funktioniert irgendwie nicht. Ansonsten scheint es so zu funktionieren.
Servus

forrest
Beiträge: 19
Registriert: 13. Jan 2021 20:32
Answers: 0

Re: Dimmer Rule für IKEA Schalter

Beitrag von forrest »

Ist es nicht immer so, dass deine Rule sich immer wieder wiederholt bis 100% erreicht sind?? Ist doch dann kein Dimmer?

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Dimmer Rule für IKEA Schalter

Beitrag von Quautiputzli »

Nein, sobald man den Taster loslässt, wird gestoppt.
Servus

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

Re: Dimmer Rule für IKEA Schalter

Beitrag von udo1toni »

Du kannst den else-Teil gepflegt entfallen lassen, denn tdimmer wird ja schon zu Beginn der Rule zurückgesetzt.

Vermutlich gibt es noch einen Trigger für einen kurzen Tastendruck? Dieser kann jedoch nicht während des hold kommen, denn der Taster muss ja zwingend zunächst losgelassen werden.

Du kannst also die Rule mit nur zwei Bedingungen für alle drei Fälle programmieren, einmal hold, einmal short_press (oder wie auch immer dieser Trigger heißt) und nichts für das release, denn das ist eh schon abgefrühstückt.

Ob man das mit switch-case oder zwei Zeilen if() erledigt, ist Geschmacksache ;)


Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Dimmer Rule für IKEA Schalter

Beitrag von Quautiputzli »

Okay, sowas in Richtung habe ich mir schon gedacht. Das heißt also sobald irgendein anderer Trigger kommt, wird die Schleife quasi unterbrochen. Kann man das so sagen?

Was mich noch gewundert hat, dass

Code: Alles auswählen

now.plusMillis(200)
nicht funktioniert.
Servus

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

Re: Dimmer Rule für IKEA Schalter

Beitrag von udo1toni »

Unter OH3 gibt es kein Joda Time mehr, da ist es Java Time. Du könntest (wenn Du millisekundengenau sein willst) auf plusNanos() ausweichen, dann halt plusNanos(2000000000) für zwei Sekunden. Gewöhnlich reicht aber Sekundenzeiger, dan nimmst Du einfach plusSeconds(2).


Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Dimmer Rule für IKEA Schalter

Beitrag von Quautiputzli »

Ja, mit Nanosekunden hab ich es hinbekommen.
Servus

Antworten