HomeSeer Switches, command ON/OFF vs Scene update debacle

I’m been fighting with this for days, and this is one of the reason I thought OH2 was broken. I have a bunch of these switches and they support “instant status” but what this means is that send out a scene update. I’m fine with this but it causes some issues that I’m trying to work around. Here are the two ways these lights can be changed.

This is what’s sent when I manually switch the light off

2017-02-27 08:31:20.678 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 19 00 49 84 04 13 04 10 01 5E 86 72 5A 85 59 73 25 27 70 2C 2B 5B 7A EF 5B 96
2017-02-27 08:31:20.682 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
2017-02-27 08:31:20.685 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 19 00 49 84 04 13 04 10 01 5E 86 72 5A 85 59 73 25 27 70 2C 2B 5B 7A EF 5B 96
2017-02-27 08:31:20.685 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 0B 00 04 00 04 05 5B 03 6B 00 02 C0
2017-02-27 08:31:20.686 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 19 00 49 84 04 13 04 10 01 5E 86 72 5A 85 59 73 25 27 70 2C 2B 5B 7A EF 5B 96
2017-02-27 08:31:20.686 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=ApplicationUpdate[0x49], type=Request[0x00], priority=High, dest=255, callback=0, payload=84 04 13 04 10 01 5E 86 72 5A 85 59 73 25 27 70 2C 2B 5B 7A EF 5B
2017-02-27 08:31:20.686 [DEBUG] [essage.ApplicationUpdateMessageClass] - NODE 4: Application update request. Node information received.
2017-02-27 08:31:20.687 [DEBUG] [alization.ZWaveNodeInitStageAdvancer] - NODE 4: Starting initialisation from DONE
2017-02-27 08:31:20.687 [DEBUG] [ve.internal.protocol.ZWaveController] - Event Listener org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer@3ba617db already registered
2017-02-27 08:31:20.687 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Sent Message: class=SendData[0x13], type=Request[0x00], priority=Get, dest=2, callback=115, payload=02 02 25 02
2017-02-27 08:31:20.688 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Recv Message: class=ApplicationUpdate[0x49], type=Request[0x00], priority=High, dest=255, callback=0, payload=84 04 13 04 10 01 5E 86 72 5A 85 59 73 25 27 70 2C 2B 5B 7A EF 5B
2017-02-27 08:31:20.688 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: class=ApplicationUpdate, callback id=115, expected=ApplicationCommandHandler, cancelled=false      MISMATCH
2017-02-27 08:31:20.689 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
2017-02-27 08:31:20.689 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 0B 00 04 00 04 05 5B 03 6B 00 02 C0
2017-02-27 08:31:20.690 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 0B 00 04 00 04 05 5B 03 6B 00 02 C0
2017-02-27 08:31:20.690 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 04 05 5B 03 6B 00 02
2017-02-27 08:31:20.690 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 4: Application Command Request (ALIVE:DONE)
2017-02-27 08:31:20.690 [DEBUG] [alization.ZWaveNodeInitStageAdvancer] - NODE 4: Starting initialisation from DONE
2017-02-27 08:31:20.690 [DEBUG] [ve.internal.protocol.ZWaveController] - Event Listener org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer@3ba617db already registered
2017-02-27 08:31:20.691 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 4: Incoming command class CENTRAL_SCENE
2017-02-27 08:31:20.691 [DEBUG] [dclass.ZWaveCentralSceneCommandClass] - NODE 4: Received CENTRAL_SCENE command V2
2017-02-27 08:31:20.691 [DEBUG] [dclass.ZWaveCentralSceneCommandClass] - NODE 4: Received scene 2 at key 0 [Single Press]
2017-02-27 08:31:20.691 [DEBUG] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveCommandClassValueEvent
2017-02-27 08:31:20.692 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 4: Got an event from Z-Wave network: ZWaveCommandClassValueEvent
2017-02-27 08:31:20.692 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 4: Got a value event from Z-Wave network, endpoint = 0, command class = CENTRAL_SCENE, value = 2.0
2017-02-27 08:31:20.692 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 4: Updating channel state zwave:device:500632da:node4:scene_number to 2.0 [DecimalType]
2017-02-27 08:31:20.693 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 2: Transaction not completed: node address inconsistent.  lastSent=2, incoming=255
2017-02-27 08:31:23.481 [ERROR] [io.openhabcloud.internal.CloudClient] - Socket.IO error: io.socket.engineio.client.EngineIOException: xhr post error
2017-02-27 08:31:23.482 [INFO ] [io.openhabcloud.internal.CloudClient] - Disconnected from the openHAB Cloud service (UUID = fd3fd4dd-ab5a-4dad-81a5-91afc3e22497, base URL = http://localhost:8090)

It got a scene update to 2.0 which is single tap down but this does not turn the switch OFF, in my events.log I see no event at all and in the GUI it does not update and it still looks like the light is on. Here is what happens when I trigger the light ON from either a rule or the GUI.

2017-02-27 08:32:13.894 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 4: Command received zwave:device:500632da:node4:switch_binary --> ON
2017-02-27 08:32:13.894 [DEBUG] [dclass.ZWaveBinarySwitchCommandClass] - NODE 4: Creating new message for application command SWITCH_BINARY_SET
2017-02-27 08:32:13.895 [DEBUG] [ve.internal.protocol.ZWaveController] - Message queued. Queue length = 1. Queue={}
2017-02-27 08:32:13.895 [DEBUG] [ocol.ZWaveController$ZWaveSendThread] - Took message from queue for sending. Queue length = 0
2017-02-27 08:32:13.895 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 0A 00 13 04 03 25 01 FF 25 76 69
2017-02-27 08:32:13.895 [DEBUG] [ing.zwave.handler.ZWaveSerialHandler] - NODE 4: Sending REQUEST Message = 01 0A 00 13 04 03 25 01 FF 25 76 69
2017-02-27 08:32:13.896 [INFO ] [impl.connections.SubscriptionManager] - Publishing changes for 170787487
2017-02-27 08:32:13.896 [INFO ] [impl.connections.SubscriptionManager] - Publishing changes for 170787487
2017-02-27 08:32:13.902 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 04 01 13 01 E8
2017-02-27 08:32:13.904 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
2017-02-27 08:32:13.904 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 04 01 13 01 E8
2017-02-27 08:32:13.905 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 04 01 13 01 E8
2017-02-27 08:32:13.905 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=SendData[0x13], type=Response[0x01], priority=High, dest=255, callback=0, payload=01
2017-02-27 08:32:13.905 [DEBUG] [l.serialmessage.SendDataMessageClass] - NODE 4: Sent Data successfully placed on stack.
2017-02-27 08:32:13.918 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 05 00 13 76 00 9F
2017-02-27 08:32:13.920 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
2017-02-27 08:32:13.920 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 07 00 13 76 00 00 00 9D
2017-02-27 08:32:13.920 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 07 00 13 76 00 00 00 9D
2017-02-27 08:32:13.920 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=SendData[0x13], type=Request[0x00], priority=High, dest=255, callback=0, payload=76 00
2017-02-27 08:32:13.921 [DEBUG] [l.serialmessage.SendDataMessageClass] - NODE 4: SendData Request. CallBack ID = 118, Status = Transmission complete and ACK received(0)
2017-02-27 08:32:13.921 [DEBUG] [alization.ZWaveNodeInitStageAdvancer] - NODE 4: Starting initialisation from DONE
2017-02-27 08:32:13.921 [DEBUG] [ve.internal.protocol.ZWaveController] - Event Listener org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer@3ba617db already registered
2017-02-27 08:32:13.921 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Sent Message: class=SendData[0x13], type=Request[0x00], priority=Set, dest=4, callback=118, payload=04 03 25 01 FF
2017-02-27 08:32:13.921 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Recv Message: class=SendData[0x13], type=Request[0x00], priority=High, dest=255, callback=0, payload=76 00
2017-02-27 08:32:13.921 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: class=SendData, callback id=118, expected=SendData, cancelled=false        transaction complete!
2017-02-27 08:32:13.922 [DEBUG] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveTransactionCompletedEvent
2017-02-27 08:32:13.922 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 4: Got an event from Z-Wave network: ZWaveTransactionCompletedEvent
2017-02-27 08:32:13.922 [DEBUG] [ocol.ZWaveController$ZWaveSendThread] - NODE 4: Response processed after 24ms/4987ms.

Here you can see that the switch was triggered. The GUI is updated but the scene is left as 2.0 so if I change the scene it appears it’s OFF (2.0 scene number) but if I check the switch it says it’s off. This puts it an an unknown state, basically because I only get updates of one of the other. I have a hack working which basically does this

rule "Update switch when scene changes"
when
  Item MudroomLight_SceneNumber changed to 1.0
then
  sendCommand(MudroomLight_Switch, ON)
end

rule "Update switch when scene changes"
when
  Item MudroomLight_SceneNumber changed to 2.0
then
  sendCommand(MudroomLight_Switch, OFF)
end

rule "Hack for manual switch"
when
  Item MudroomLight_Switch changed to OFF
then
  sendCommand(MudroomLight_SceneNumber, 2.0)
end

rule "Mudroom light turns on"
when
  Item MudroomLight_Switch changed to ON
then
  sendCommand(MudroomLight_SceneNumber, 1.0)
end

This seems kind of hacky and I have to do this for each switch. Am I doing something wrong is or this the best solution with what I have? Can I make this a more general rule that applies to all HS switches (maybe by a rule)?

That is the expected behavior of scene numbers. They can be used as triggers in rules.

Edit: I’m pretty sure you can add a channel with “ON/OFF” commands sent to switch the light directly, at least my Fibaro’s do that.
Example:

Switch FibFGS223_1_Sw_2 "Living Room 2" (gRestore) { channel="zwave:device:158b44ebf65:node30:switch_binary2" }
Number FibFGS223_1_Scenes "Living Room Scenes [%s]" (gRestore) { channel="zwave:device:158b44ebf65:node30:scene_number" }

Yeah, if I use the GUI (or via rule) I can switch the light but it’s never switched if I manually press it. So I press the light to shut it off and the scene updates but not the state. If I shut it off by a rule the switch changes but not the scene.