I am trying to controll my fibaro wall plug with with the button from fibaro on a single press but the rule didn’t even start and at the moment I don’t know why.
Maybe someone finds an obvious mistake that I don’t see and can help me.
“c_f_tb_01" is the button and "c_f_wp_01” is the wall plug.
The fibaro button can have the states: 1 / 1.1 / 1.2 / 1.3 / 1.4 / 1.5 / 1.6
My items:
Switch c_f_wp_01 "Fibaro WallPlug 01" <none> (zwave) {channel="zwave:device:XXXXXXXXd:node2:switch_binary"}
Number c_f_tb_01 "Fibaro The Button 01" <switch> (zwave) {channel="zwave:device:XXXXXXXX:node3:scene_number"}
My rule:
var int c_f_wp_01_state = 0
rule "c_f_tb_01_pressed"
when
Item c_f_tb_01 received command
then
logInfo("zwave", "[c_f_tb_01] c_f_tb_01 was pressed")
if(receivedCommand == 1 && c_f_wp_01_state == 0) {
sendCommand(c_f_wp_01, ON)
c_f_wp_01_state = 1
}
if(receivedCommand == 1 && c_f_wp_01_state == 1) {
sendCommand(c_f_wp_01, OFF)
c_f_wp_01 = 0
}
end
Another question: Am I able to get the state of the wallplug with something like “c_f_wp_01.state”?
Number FibBut01_Scene "FB01 Scene" <contact> (gZWave) {channel="zwave:device:ZW090C:node5:scene_number"}
Number FibBut01_Alarm "FB01 Alarm: [%s]" <fire> (gZWave) {channel="zwave:device:ZW090C:node5:alarm_general"}
Number FibBut01_Bat "FB01 Battery: [%d %%]" <energy> (gZWave) {channel="zwave:device:ZW090C:node5:battery-level"}
rule "Fibaro Button 01 Pushing"
when
Item FibBut01_Scene received update
then
if (FibBut01_Scene.state == 1.0) {
logInfo("FB01", "FB01 1x pushed")
WDim01_Dim.sendCommand(0)
}
if (FibBut01_Scene.state == 1.1) {
logInfo("FB01", "FB01 let go")
WDim01_Dim.sendCommand(10)
}
if (FibBut01_Scene.state == 1.2) {
logInfo("FB01", "FB01 kept in")
WDim01_Dim.sendCommand(50)
}
if (FibBut01_Scene.state == 1.3) {
logInfo("FB01", "FB01 2x pushed")
WDim01_Dim.sendCommand(100)
}
if (FibBut01_Scene.state == 1.4) {
logInfo("FB01", "FB01 3x pushed")
WDim01_Dim.sendCommand(3)
}
if (FibBut01_Scene.state == 1.5) {
logInfo("FB01", "FB01 4x pushed")
WDim01_Dim.sendCommand(2)
}
if (FibBut01_Scene.state == 1.6) {
logInfo("FB01", "FB01 5x pushed")
WDim01_Dim.sendCommand(1)
}
end
It’s not a very “clean” rule… maybe I can use switch function to clean it up
Ps: WDim01_Dim is a dimmer item controlling some LEDs accepting values from 0 to 100. In your case (Switch), you would send c_f_wp_01.sendCommand(ON) (or OFF)
Dimmer WDim01_Dim "Staircase LED Dim [%d %%]" <slider> (gZWave,GF_P02_Corridor) {channel="zwave:device:ZW090C:node4:switch_dimmer"}
Yes, of course. No need to use the c_f_wp_01_state variable.
Also, after you c_f_wp_01.sendCommand(ON), there is no need to further postUpdate the state of the item. The command will take care of that.
If the plug is turned on and I press the button it turns off as it should. But if I now press the button again openhab turns on the plug but half a second later it is off again which is really weird.
[c_f_tb_01] Button was pressed indicates that I pressed the button. The first time to turn the plug off the second time to turn the plug on but it turned off again.
14:45:15.132 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 145 to 146
14:45:15.158 [INFO ] [eclipse.smarthome.model.script.zwave] - [c_f_tb_01] Button was pressed
14:45:15.183 [INFO ] [smarthome.event.ItemCommandEvent ] - Item 'c_f_wp_01' received command OFF
14:45:15.192 [INFO ] [marthome.event.ItemStateChangedEvent] - c_f_wp_01 changed from ON to OFF
14:45:15.205 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_ack changed from 68 to 69
14:45:15.214 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 146 to 147
14:45:15.228 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 147 to 148
14:45:16.643 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 148 to 149
14:45:16.664 [INFO ] [eclipse.smarthome.model.script.zwave] - [c_f_tb_01] Button was pressed
14:45:16.680 [INFO ] [smarthome.event.ItemCommandEvent ] - Item 'c_f_wp_01' received command ON
14:45:16.691 [INFO ] [marthome.event.ItemStateChangedEvent] - c_f_wp_01 changed from OFF to ON
14:45:16.707 [INFO ] [smarthome.event.ItemCommandEvent ] - Item 'c_f_wp_01' received command OFF
14:45:16.719 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_ack changed from 69 to 70
14:45:16.726 [INFO ] [marthome.event.ItemStateChangedEvent] - c_f_wp_01 changed from ON to OFF
14:45:16.728 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 149 to 150
14:45:16.739 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 150 to 151
14:45:16.751 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_ack changed from 70 to 71
14:45:16.756 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 151 to 152
14:45:16.766 [INFO ] [marthome.event.ItemStateChangedEvent] - zwave_serial_zstick_8364744d_serial_sof changed from 152 to 153
My rule again:
rule "c_f_tb_01_pressed"
when
Item c_f_tb_01 received update
then
logInfo("zwave", "[c_f_tb_01] Button was pressed")
if(c_f_tb_01.state == 1.0 && c_f_wp_01.state == OFF) {
c_f_wp_01.sendCommand(ON)
}
if(c_f_tb_01.state == 1.0 && c_f_wp_01.state == ON) {
c_f_wp_01.sendCommand(OFF)
}
end
Fast response: Strange… Your rule seems to be ok to me and I don’t see why it would fire a second time by itself to send the OFF command without pressing the button…
Try to play around with the logic to see if the issue is fixed (or wait for a more expert rule fixer to reply to the thread )
You could add a logInfo under each sendCommand line to log the actions also.
I solved it by using the good old “else if”
For some reasons both if-conditions were accepted for turning on the plug and so it turned on and off but I still don’t know why.