Seite 2 von 2
Re: Dimmer Rule für IKEA Schalter
Verfasst: 3. Apr 2021 20:03
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.
Ist einen Versuch wert.
VG
Stefan
Re: Dimmer Rule für IKEA Schalter
Verfasst: 3. Apr 2021 20:14
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.
Re: Dimmer Rule für IKEA Schalter
Verfasst: 4. Apr 2021 09:32
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.
Re: Dimmer Rule für IKEA Schalter
Verfasst: 4. Apr 2021 20:01
von forrest
Ist es nicht immer so, dass deine Rule sich immer wieder wiederholt bis 100% erreicht sind?? Ist doch dann kein Dimmer?
Re: Dimmer Rule für IKEA Schalter
Verfasst: 4. Apr 2021 20:19
von Quautiputzli
Nein, sobald man den Taster loslässt, wird gestoppt.
Re: Dimmer Rule für IKEA Schalter
Verfasst: 6. Apr 2021 09:19
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
Re: Dimmer Rule für IKEA Schalter
Verfasst: 6. Apr 2021 10:45
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
nicht funktioniert.
Re: Dimmer Rule für IKEA Schalter
Verfasst: 6. Apr 2021 14:24
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
Re: Dimmer Rule für IKEA Schalter
Verfasst: 6. Apr 2021 15:05
von Quautiputzli
Ja, mit Nanosekunden hab ich es hinbekommen.