Es handelt sich um eine Phillips HUE die über zigbee2mqtt angebunden ist. Der Schalter ist ein Aquara Opple, der ebenfalls über zigbee2mqtt angebundnen ist. Wenn ich mir das logfile ansehe, sieht es aber danach aus, als ob die Verzögerung von openhab kommt.
Code: Alles auswählen
2021-04-18 09:51:58.090 [INFO ] [openhab.event.ChannelTriggeredEvent ] - mqtt:topic:broker:gf_office_switch:office_switch_trigger triggered button_1_single
2021-04-18 09:52:00.117 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'GF_Office_Light' received command 0,6,100
2021-04-18 09:52:00.127 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'GF_Office_Light' predicted to become 0,6,100
2021-04-18 09:52:00.132 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'GF_Office_Light' changed from 44,39,0 to 0,6,100
Das ist aber immer nur der Fall, wenn die Lampe eine Zeit lang nicht benutzt wurde, z.B. also morgens. Wenn ich dann nochmal schalte geht es ganz rasch.
Code: Alles auswählen
2021-04-18 10:03:28.453 [INFO ] [openhab.event.ChannelTriggeredEvent ] - mqtt:topic:broker:gf_office_switch:office_switch_trigger triggered button_4_single
2021-04-18 10:03:28.461 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'GF_Office_Light' received command 0,0,100
2021-04-18 10:03:28.462 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'GF_Office_Light' predicted to become 0,0,100
2021-04-18 10:03:28.465 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'GF_Office_Light' changed from 0,6,0 to 0,0,100
Code: Alles auswählen
var Timer tbuero = null
rule "Buero Schalter"
when
Channel "mqtt:topic:broker:gf_office_switch:office_switch_trigger" triggered
then
if (tbuero !== null) tbuero.cancel()
switch(receivedEvent) {
case "button_1_single" : GF_Office_Light.sendCommand("0,6,100")
case "button_2_single" : GF_Office_Light.sendCommand("180,6,100")
case "button_3_single" : {
if (GF_Office_Light.getStateAs(OnOffType) != ON)
GF_Office_Light.sendCommand(ON)
else
GF_Office_Light.sendCommand(OFF)
}
case "button_4_single" : {
if (GF_Office_Light.getStateAs(OnOffType) != ON)
GF_Office_Light.sendCommand("0,0,100")
else
GF_Office_Light.sendCommand(OFF)
}
case "button_5_single" : GF_Office_Shutter.sendCommand(UP)
case "button_6_single" : GF_Office_Shutter.sendCommand(DOWN)
case "button_1_double" : GF_Office_Light.sendCommand("0,15,100")
case "button_2_double" : GF_Office_Light.sendCommand("70,20,100")
case "button_3_double" : {
Office_Light_temp.sendCommand((Office_Light_temp.state as Number) + 20)
}
case "button_4_double" : {
Office_Light_temp.sendCommand((Office_Light_temp.state as Number) - 20)
}
case "button_5_double" : GF_Office_Shutter.sendCommand(STOP)
case "button_6_double" : GF_Office_Shutter.sendCommand(STOP)
case "button_1_triple" : GF_Office_Light_str.sendCommand("blink")
case "button_2_triple" : GF_Office_Light_str.sendCommand("breathe")
case "button_3_triple" : GF_Office_Light_str.sendCommand("okay")
case "button_4_triple" : GF_Office_Light_str.sendCommand("finish_effect")
case "button_5_triple" : GF_Office_Light_str.sendCommand("color_loop")
case "button_6_triple" : GF_Office_Light.sendCommand(new HSBType(new DecimalType(30), new PercentType(64), new PercentType(40)))
case "button_1_hold" : {
tbuero = 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 + 5)
if( new_B > 98)
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)
tbuero.reschedule(now.plusNanos(200000000))
])
}
case "button_1_release" : {
if(tbuero !== null) tbuero.cancel
}
case "button_2_hold" : {
tbuero = 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 - 5)
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 > 0)
tbuero.reschedule(now.plusNanos(200000000))
])
}
case "button_2_release" : {
if(tbuero !== null) tbuero.cancel
}
case "button_5_hold" : {
tbuero = createTimer(now, [ |
var HSBType currentState
currentState = GF_Office_Light.state as HSBType
var DecimalType new_H = new DecimalType(currentState.hue + 10)
var PercentType new_S = currentState.saturation
var PercentType new_B = currentState.brightness
if( new_H > 359)
new_H = new DecimalType(0)
var HSBType newState = new HSBType(new_H,new_S,new_B)
sendCommand(GF_Office_Light,newState.toString)
// if(new_H < 360)
tbuero.reschedule(now.plusNanos(200000000))
])
}
case "button_5_release" : {
if(tbuero !== null) tbuero.cancel
}
case "button_6_hold" : {
tbuero = createTimer(now, [ |
var HSBType currentState
currentState = GF_Office_Light.state as HSBType
var DecimalType new_H = new DecimalType(currentState.hue - 10)
var PercentType new_S = currentState.saturation
var PercentType new_B = currentState.brightness
if( new_H < 10)
new_H = new DecimalType(359)
var HSBType newState = new HSBType(new_H,new_S,new_B)
sendCommand(GF_Office_Light,newState.toString)
// if(new_H > 0)
tbuero.reschedule(now.plusNanos(200000000))
])
}
case "button_6_release" : {
if(tbuero !== null) tbuero.cancel
}
case "button_3_hold" : {
tbuero = createTimer(now, [ |
var HSBType currentState
currentState = GF_Office_Light.state as HSBType
var DecimalType new_H = currentState.hue
var PercentType new_S = new PercentType(currentState.saturation + 5)
var PercentType new_B = currentState.brightness
if( new_S > 95)
new_S = new PercentType(100)
var HSBType newState = new HSBType(new_H,new_S,new_B)
sendCommand(GF_Office_Light,newState.toString)
if(new_S < 100)
tbuero.reschedule(now.plusNanos(200000000))
])
}
case "button_3_release" : {
if(tbuero !== null) tbuero.cancel
}
case "button_4_hold" : {
tbuero = createTimer(now, [ |
var HSBType currentState
currentState = GF_Office_Light.state as HSBType
var DecimalType new_H = currentState.hue
var PercentType new_S = new PercentType(currentState.saturation - 5)
var PercentType new_B = currentState.brightness
if( new_S < 5)
new_S = new PercentType(0)
var HSBType newState = new HSBType(new_H,new_S,new_B)
sendCommand(GF_Office_Light,newState.toString)
if(new_S > 0)
tbuero.reschedule(now.plusNanos(200000000))
])
}
case "button_4_release" : {
if(tbuero !== null) tbuero.cancel
}
}
end