OpenZWave / Zwave2Mqtt

Fully configurable Zwave to MQTT gateway and Control Panel using NodeJS and Vue
MIT License
356 stars 93 forks source link

[bug] - Latest version removed which user code unlocks lock BE469ZP #742

Closed jaburges closed 4 years ago

jaburges commented 4 years ago

Version

Build/Run method

Zwave2Mqtt version: 4.0.3 Openzwave Version: 1.6.1240

Describe the bug In previous 3.X build - when the door was unlocked by a user the user slot number was available here: zwave/lock/113/1/260

However on updating (maybe OZW update?) this is no longer being sent to MQTT. In the XML:

  <CommandClass id="113">
    <!-- These Door Locks don't send a DoorLockReport when the
        Lock Status is Changed, but instead send a Alarm Message -
        So we trigger a Refresh of the DoorLock Command Class when
        we recieve a Alarm Message Instead -->
    <TriggerRefreshValue Genre="user" Index="0" Instance="1">
      <RefreshClassValue CommandClass="98" Index="1" Instance="1" RequestFlags="0"/>
    </TriggerRefreshValue>
  </CommandClass>

There should be the same value but at 98/1/1 however there is nothing sent to that effect.

I briefly spun up qt-openzwave and notice the values for alarm level & alarm type are present, so i'm not entirely sure at what point this value is not being sent any more.

To Reproduce Steps to reproduce the behavior:

  1. unlock door
  2. no MQTT value updated other than: 98/1/0 - false 98/1/1 - Unsecured
  3. Z2M UI doesnt show any values for this either.

Expected behavior when a certain code is used, the value is sent corresponding to that user code slot (so you know who unlocked the door)

Additional context Add any other context about the problem here.

jaburges commented 4 years ago

subscribing to zwave/lock/#

shows only the 2 values 98/1/1 Unsecured & Secured 98/1/0 false & true

robertsLando commented 4 years ago

@jaburges could you tell me which ozw version is using qt-openzwave? Do you have auto-update device db option enabled? Anyway this is for sure something related to OZW and not z2m

jaburges commented 4 years ago

I dont have auto update device DB (although I have compared the devices xml and ozwcache xml and they are the same for both dockers). Does that mean qt-openzwave is using a newer version of OZW ? I'm not sure where to find the version of OZW being used by qt-openzwave. The Kwikset locks are reporting correctly still (the state, how is was unlocked and the event code)

I've looked at the device on the OZW repo and the BE469ZP hasnt been changed in a long while - so are you saying something on the OZW build is causing the issue?

robertsLando commented 4 years ago

Everything you see in the UI is what I get from OZW, so if something is missing it means OZW didn't sent me that, or there should be some kind of error in console log, try to enable zwave logging and check the "value added" logs to see if there is any error there. Also as another try, try to send a "refresh node info" command against that node to refresh its config

jaburges commented 4 years ago

ok will try logging (tried refresh node info a couple of times)

robertsLando commented 4 years ago

Let me know

jaburges commented 4 years ago

so its coming from the lock to OZW - but seems i'm missing a parameter ParamUserCodeid

OpenZWave Detail, Node101, Received: 0x01, 0x24, 0x00, 0x04, 0x00, 0x65, 0x1e, 0x98, 0x81, 0xd9, 0x02, 0x39, 0x78, 0xc4, 0x9c, 0x6b, 0xd1, 0xde, 0x44, 0x0e, 0xd0, 0x37, 0x75, 0xb2, 0xc3, 0x22, 0x4e, 0x3e, 0x7d, 0x08, 0xf6, 0x31, 0x31, 0x37, 0x35, 0xad, 0x90, 0x5c
OpenZWave Info, Raw: 0x98, 0x81, 0xd9, 0x02, 0x39, 0x78, 0xc4, 0x9c, 0x6b, 0xd1, 0xde, 0x44, 0x0e, 0xd0, 0x37, 0x75, 0xb2, 0xc3, 0x22, 0x4e, 0x3e, 0x7d, 0x08, 0xf6, 0x31, 0x31, 0x37, 0x35, 0xad, 0x90, 0x5c
OpenZWave Detail, Node101, Decrypted Packet: 0x00, 0x71, 0x05, 0x13, 0x05, 0x00, 0xff, 0x06, 0x06, 0x01, 0x05
OpenZWave Detail,
OpenZWave Info, Node101, Got a AlarmCmd_Report Message....
OpenZWave Info, Node101, Received Notification report (>v1): Type: Access Control (6) Event: Keypad Unlock Operation (6) Status: true, Param Length: 1
OpenZWave Warning, Node101, Couldn't Find ValueID_Index_Alarm::Type_ParamUserCodeid
OpenZWave Warning, Node101, Couldn't Find a ValueList for Notification Type 6 (1)
OpenZWave Detail, Node101, Received: 0x01, 0x08, 0x00, 0x04, 0x00, 0x65, 0x02, 0x98, 0x40, 0x4c
OpenZWave Info, Node101, Received SecurityCmd_NonceGet from node 101
OpenZWave Info, NONCES: 0x25, 0xaf, 0xc9, 0xcf, 0xaf, 0x6c, 0xfb, 0xbc
OpenZWave Info, NONCES: 0x4b, 0x8c, 0x0b, 0xc2, 0x9d, 0x6b, 0x32, 0xb9
OpenZWave Info, NONCES: 0x7d, 0x94, 0xb8, 0x4c, 0x85, 0x19, 0x06, 0xc8
OpenZWave Info, NONCES: 0xb4, 0xc5, 0x25, 0x58, 0x9d, 0x36, 0xa1, 0xab
OpenZWave Info, NONCES: 0x3a, 0x03, 0x54, 0xc5, 0xf8, 0x81, 0x12, 0xf8
OpenZWave Info, NONCES: 0x73, 0x8f, 0x0c, 0x55, 0xb4, 0xef, 0x71, 0x41
OpenZWave Info, NONCES: 0x1b, 0x87, 0x64, 0xa7, 0x21, 0x78, 0x78, 0x57
OpenZWave Info, NONCES: 0x4e, 0x44, 0x32, 0xd5, 0x42, 0xd4, 0x38, 0xb4
OpenZWave Info, Node101, Sending (Command) message (Callback ID=0x01, Expected Reply=0x00) - Nonce_Report - 0x01, 0x11, 0x00, 0x13, 0x65, 0x0a, 0x98, 0x80, 0xb4, 0xc5, 0x25, 0x58, 0x9d, 0x36, 0xa1, 0xab, 0x05, 0x01, 0x23:
OpenZWave Detail, Received: 0x01, 0x04, 0x01, 0x13, 0x01, 0xe8
OpenZWave Detail, ZW_SEND_DATA delivered to Z-Wave stack
OpenZWave Detail, Received: 0x01, 0x07, 0x00, 0x13, 0x01, 0x00, 0x00, 0x0e, 0xe4
OpenZWave Detail, ZW_SEND_DATA Request with callback ID 0x01 received (expected 0x01)
2020-10-01T19:27:56.254Z z2m:Zwave zwave node 101: changed: 98-1-0:Locked:true -> false
2020-10-01T19:27:56.254Z z2m:Zwave zwave node 101: changed: 98-1-1:Locked (Advanced):Secured -> Unsecure
OpenZWave Detail, Node101, Received: 0x01, 0x21, 0x00, 0x04, 0x00, 0x65, 0x1b, 0x98, 0x81, 0xec, 0xcb, 0xee, 0xe4, 0x6c, 0xe4, 0x00, 0xe1, 0x59, 0xa6, 0x0d, 0x90, 0x12, 0xe6, 0xaf, 0xc5, 0xb4, 0x89, 0xbe, 0x3f, 0x25, 0x14, 0x0e, 0xb9, 0x39, 0x06
OpenZWave Info, Raw: 0x98, 0x81, 0xec, 0xcb, 0xee, 0xe4, 0x6c, 0xe4, 0x00, 0xe1, 0x59, 0xa6, 0x0d, 0x90, 0x12, 0xe6, 0xaf, 0xc5, 0xb4, 0x89, 0xbe, 0x3f, 0x25, 0x14, 0x0e, 0xb9, 0x39, 0x06
OpenZWave Detail, Node101, Decrypted Packet: 0x00, 0x62, 0x03, 0x00, 0x00, 0x02, 0xfe, 0xfe
OpenZWave Detail,
OpenZWave Info, Node101, Received DoorLock report: DoorLock is Unsecure
OpenZWave Detail, Node101, Value Updated: old value=true, new value=false, type=bool
OpenZWave Detail, Node101, Changes to this value are not verified
OpenZWave Detail, Node101, Value Updated: old value=6, new value=0, type=list
OpenZWave Detail, Node101, Changes to this value are not verified
OpenZWave Detail, Node101, Notification: ValueChanged CC: COMMAND_CLASS_DOOR_LOCK Instance: 1 Index: 0
OpenZWave Detail, Node101, Notification: ValueChanged CC: COMMAND_CLASS_DOOR_LOCK Instance: 1 Index: 1
jaburges commented 4 years ago

ok my knowledge of OZW isnt great BUT, it seems comparing to the kwikset lock (and the non Zwave Plus BE469)

The BE469ZP:

  <CommandClass id="113">
    <!-- These Door Locks don't send a DoorLockReport when the
        Lock Status is Changed, but instead send a Alarm Message -
        So we trigger a Refresh of the DoorLock Command Class when
        we recieve a Alarm Message Instead -->
    <TriggerRefreshValue Genre="user" Index="0" Instance="1">
      <RefreshClassValue CommandClass="98" Index="1" Instance="1" RequestFlags="0"/>
    </TriggerRefreshValue>
  </CommandClass>

The Index="0" when I think it should be "6" (i seem to remember on an old thread, Fishwaldo advised to change it to 6 - but it looks like its pulled the new revision so should be: <TriggerRefreshValue Genre="user" Index="6" Instance="1">

Note the BE469 lock has the correct index value (as it was the lock I had previously when I raised the bug)

I'll make the change and report back

robertsLando commented 4 years ago

@jaburges I would like to help more but as most of the issues here are device related or ozw related I cannot help more then this, let me know if you fix your problem :pray:

jaburges commented 4 years ago

ok - made the update, and i think it updated ozwcache...xml but still doesnt work :(

turns out its missing any of the sensors that used to be alarm_type and alarm_level as they have been replaced with Command Class Notification. On reading more information the lock changing state is working - but i'm not entirely sure how to add the right info to update the ozwcache to include this: Couldn't Find ValueID_Index_Alarm::Type_ParamUserCodeid

i cant find any more info, so calling in the big guns .... @Fishwaldo any thoughts?

jaburges commented 4 years ago

Couldn't Find a ValueList for Notification Type 6 (1) seems odd as above:

 Received Notification report (>v1): Type: Access Control (6) Event: Keypad Unlock Operation (6) Status: true, Param Length: 1

OZW is aware of the type - 6 . access control > 6. "Keypad Unlock Operation" Notification, but then not able to look up the right alarm trigger. Looking a ValueIDIndexDefines.def there isn't any reference under Alarm of usercodeid

ENUM(ValueID_Index_Alarm,
...
Type_Event_Param_UserCode = 260,
...

If that is the case Couldn't Find ValueID_Index_Alarm::Type_ParamUserCodeid should be looking for ValueID_Index_Alarm::Type_Event_ParamUserCode

jaburges commented 4 years ago

Seems its coming from Alarm.cpp https://raw.githubusercontent.com/OpenZWave/open-zwave/master/cpp/src/command_classes/Alarm.cpp

robertsLando commented 4 years ago

@jaburges Everything you said seems legit, hope the ozw author will answer you :(

jaburges commented 4 years ago

ok, so for some reason - no clue why (despite many RefreshNodeInfo attempts the usercode (index 260) was not being pulled into my ozwcache xml. Adding it manually resolved the problem.

<Value type="byte" genre="user" instance="1" index="260" label="UserCode" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="1">
                    <Help>Alarm Level Received</Help>
                </Value>
robertsLando commented 4 years ago

despite many RefreshNodeInfo attempts

I think there could be a bug in ozw code that prevetns that value to be added to the cache. Anyway like I said it's something ozw related and I cannot do anything on my side :(