Issues removing/adding Schlage Z-Wave door lock

Hey folks, hoping someone can point me in the right direction or give a fresh set of eyes on an issue I’ve been dealing with for a few days.

Background: Migrated from the Z-Wave JS add-on over to Z-Wave JS UI add-on successfully. Migrated all of my existing security keys and all of my switches, power monitors and sensors moved without an issue. The issue started when I tried to pair my new Schlage Door lock (BE469ZP).

When I first tried to adopt it, it seemed to go without a hitch and I watched as the Z-Wave JS UI showed it was being adopted and interviewing it. I walked away and let it do it’s thing but it never seemed to move out of that state. Waited until the next day and it still showed that it was trying to interview it but stuck in ‘ProtocolInfo’ state.

  1. I stopped Z-Wave JS UI, started it back up and woke up the lock to see if it could complete the pairing. No Dice.
  2. Put the lock into exclusion mode and used the UI to complete the exclusion. This seemed to work but the node remained on my dashboard.
  3. Tried to pair the device AGAIN and it stayed in the same state, ‘ProtocolInfo’.

Now I have 2 instances of this lock, one that seemed to get more data (firmware version for example) but the other has no information other than being dead.

I opened up the debug log to see what could be happening as I now have nodes 56 (first time) and 60 (second time) showing as dead and I cannot remove them. I wonder if this is contributing to me being unable to pair the device again. Hoping it’s not something hardware related as I kinda like the lock (outside of how loud it is).

Z-Wave JS UI: 9.25.0
Z-Wave JS: 13.10.1
Controller: Zooz ZAC93 800 Series Long Range GPIO Module
-FW v1.50
-SDK: v7.22.1

Will periodically get this message
2024-10-29T20:55:51.021Z CNTRLR   [Node 060] The node did not respond after 1 attempts, it is presumed dead
2024-10-29T20:55:51.028Z CNTRLR   [Node 060] ping failed: The node did not acknowledge the command (ZW0204)
2024-10-29T20:55:51.029Z CNTRLR   [Node 060] Interview attempt (1/5) failed, node is dead

When trying to remove the failed node:
2024-10-29T20:57:51.968Z CNTRLR   [Node 060] The node did not respond after 1 attempts, it is presumed dead
2024-10-29T20:57:51.970Z CNTRLR   [Node 060] ping failed: The node did not acknowledge the command (ZW0204)

Full debug log for Node 56

{
  "id": 56,
  "name": "Schlage Door",
  "loc": "",
  "values": [],
  "groups": [],
  "neighbors": [],
  "ready": false,
  "available": false,
  "hassDevices": {},
  "failed": false,
  "inited": false,
  "eventsQueue": [
    {
      "time": "2024-10-29T16:13:09.903Z",
      "event": "dead",
      "args": [
        0
      ]
    },
    {
      "time": "2024-10-29T16:13:09.925Z",
      "event": "interview failed",
      "args": [
        {
          "errorMessage": "The node is dead",
          "isFinal": true
        }
      ]
    }
  ],
  "status": "Dead",
  "interviewStage": "ProtocolInfo",
  "priorityReturnRoute": {},
  "customReturnRoute": {},
  "customSUCReturnRoutes": [],
  "applicationRoute": false,
  "hexId": "0xXXXX 0xXXXX-0xXXXX",
  "dbLink": "https://devices.zwave-js.io/?jumpTo=0xXXXX:0xXXXX:0xXXXX:0.0",
  "productLabel": "Unknown product 0xXXXX",
  "productDescription": "0xXXXX",
  "manufacturer": "Unknown manufacturer 0xXXXX",
  "protocolVersion": 3,
  "nodeType": 1,
  "endpointsCount": 0,
  "endpoints": [
    {
      "index": 0,
      "label": "Root Endpoint",
      "deviceClass": {
        "basic": 4,
        "generic": 64,
        "specific": 3
      }
    }
  ],
  "supportsSecurity": false,
  "supportsBeaming": true,
  "isControllerNode": false,
  "isListening": false,
  "isFrequentListening": "1000ms",
  "isRouting": true,
  "keepAwake": false,
  "maxDataRate": 100000,
  "deviceClass": {
    "basic": 4,
    "generic": 64,
    "specific": 3
  },
  "lastActive": 1730154178673,
  "firmwareCapabilities": {
    "firmwareUpgradable": false
  },
  "protocol": 0,
  "deviceId": "undefined-undefined-undefined",
  "statistics": {
    "commandsTX": 0,
    "commandsRX": 0,
    "commandsDroppedRX": 0,
    "commandsDroppedTX": 0,
    "timeoutResponse": 0
  },
  "_name": "Schlage Door",
  "prioritySUCReturnRoute": false
}

Full debug log for Node 60

{
  "id": 60,
  "name": "Door",
  "loc": "",
  "values": [],
  "groups": [],
  "neighbors": [],
  "ready": false,
  "available": false,
  "hassDevices": {},
  "failed": false,
  "inited": false,
  "eventsQueue": [
    {
      "time": "2024-10-29T16:12:40.751Z",
      "event": "dead",
      "args": [
        0
      ]
    },
    {
      "time": "2024-10-29T16:12:40.760Z",
      "event": "interview failed",
      "args": [
        {
          "errorMessage": "The node is dead",
          "isFinal": true
        }
      ]
    },
    {
      "time": "2024-10-29T17:41:43.315Z",
      "event": "value added",
      "args": [
        {
          "commandClassName": "Node Naming and Location",
          "commandClass": 119,
          "property": "name",
          "newValue": "Door",
          "propertyName": "name"
        }
      ]
    },
    {
      "time": "2024-10-29T17:41:43.320Z",
      "event": "interview started",
      "args": []
    },
    {
      "time": "2024-10-29T17:41:43.352Z",
      "event": "interview stage completed",
      "args": [
        "ProtocolInfo"
      ]
    },
    {
      "time": "2024-10-29T17:42:12.853Z",
      "event": "interview failed",
      "args": [
        {
          "errorMessage": "The node is dead",
          "isFinal": true
        }
      ]
    },
    {
      "time": "2024-10-29T19:14:15.422Z",
      "event": "value added",
      "args": [
        {
          "commandClassName": "Node Naming and Location",
          "commandClass": 119,
          "property": "name",
          "newValue": "Door",
          "propertyName": "name"
        }
      ]
    },
    {
      "time": "2024-10-29T19:14:15.426Z",
      "event": "interview started",
      "args": []
    },
    {
      "time": "2024-10-29T19:14:15.453Z",
      "event": "interview stage completed",
      "args": [
        "ProtocolInfo"
      ]
    },
    {
      "time": "2024-10-29T19:14:35.428Z",
      "event": "interview failed",
      "args": [
        {
          "errorMessage": "The node is dead",
          "isFinal": true
        }
      ]
    },
    {
      "time": "2024-10-29T20:55:30.642Z",
      "event": "value added",
      "args": [
        {
          "commandClassName": "Node Naming and Location",
          "commandClass": 119,
          "property": "name",
          "newValue": "Door",
          "propertyName": "name"
        }
      ]
    },
    {
      "time": "2024-10-29T20:55:30.646Z",
      "event": "interview started",
      "args": []
    },
    {
      "time": "2024-10-29T20:55:30.794Z",
      "event": "interview stage completed",
      "args": [
        "ProtocolInfo"
      ]
    },
    {
      "time": "2024-10-29T20:55:51.033Z",
      "event": "interview failed",
      "args": [
        {
          "errorMessage": "The node is dead",
          "isFinal": true
        }
      ]
    }
  ],
  "status": "Dead",
  "interviewStage": "ProtocolInfo",
  "priorityReturnRoute": {},
  "customReturnRoute": {},
  "customSUCReturnRoutes": [],
  "applicationRoute": false,
  "hexId": "0x003b 0x0001-0x0469",
  "dbLink": "https://devices.zwave-js.io/?jumpTo=0x003b:0x0001:0x0469:0.0",
  "manufacturerId": 59,
  "productId": 1129,
  "productType": 1,
  "deviceConfig": {
    "filename": "/data/db/devices/0x003b/be469zp.json",
    "isEmbedded": true,
    "manufacturer": "Allegion",
    "manufacturerId": 59,
    "label": "BE469ZP",
    "description": "Touchscreen Deadbolt Z-Wave Plus",
    "devices": [
      {
        "productType": 1,
        "productId": 1129
      }
    ],
    "firmwareVersion": {
      "min": "0.0",
      "max": "255.255"
    },
    "preferred": false,
    "paramInformation": {
      "_map": {}
    },
    "compat": {
      "removeCCs": {},
      "reportTimeout": 10000
    }
  },
  "productLabel": "BE469ZP",
  "productDescription": "Touchscreen Deadbolt Z-Wave Plus",
  "manufacturer": "Allegion",
  "firmwareVersion": "3.3",
  "protocolVersion": 3,
  "zwavePlusVersion": 1,
  "zwavePlusNodeType": 0,
  "zwavePlusRoleType": 7,
  "nodeType": 1,
  "endpointsCount": 0,
  "endpoints": [
    {
      "index": 0,
      "label": "Root Endpoint",
      "deviceClass": {
        "basic": 4,
        "generic": 64,
        "specific": 3
      }
    }
  ],
  "isSecure": true,
  "security": "S2_AccessControl",
  "supportsSecurity": false,
  "supportsBeaming": true,
  "isControllerNode": false,
  "isListening": false,
  "isFrequentListening": "1000ms",
  "isRouting": true,
  "keepAwake": false,
  "maxDataRate": 100000,
  "deviceClass": {
    "basic": 4,
    "generic": 64,
    "specific": 3
  },
  "lastActive": 1730218065322,
  "firmwareCapabilities": {
    "firmwareUpgradable": true,
    "firmwareTargets": [
      0,
      1
    ]
  },
  "protocol": 0,
  "deviceId": "59-1129-1",
  "statistics": {
    "commandsTX": 0,
    "commandsRX": 0,
    "commandsDroppedRX": 0,
    "commandsDroppedTX": 0,
    "timeoutResponse": 0
  },
  "_name": "Door",
  "prioritySUCReturnRoute": false
}

Small update, stumbled on this post:

I followed these steps and physically placed the lock on top of my z-wave controller and it paired almost instantly. Took a few for the interview to be finished but now it seems to work. Still have an outstanding issue with the two old attempts still displaying and I cannot find a way to remove them.

1 Like

Been poking at this off and on the last two week or so. While the Schlage door lock paired after bringing the controller right next to the lock, the node went dead just a few minutes ago after engaging it via home assistant. The two previous entries are still there, sadly and using the ’ Remove Failed’ option appears to time out.

Plan is to try re-interviewing the device then excluding it and see if I can get all 3 to drop.

I’ve also picked up a Yale smart lock to try that in place. The Schlage motor is a lot louder than I thought it would be :thinking:

So I’ve been unable to remove the old entries of the Schlage lock and ended up actually returning the unit. While it works, not a fan of it’s touchscreen responsiveness and the motor is far too loud for the area it’s in. I like the build since it was so simple to physically install.

I’ll need to keep digging into why those old entries can’t be removed so any all suggestions are welcome.

Trying to dig into this a bit more, here is an output of the diagnostics from one of the bad devices. I’m no longer able to try and re-interview and remove as I have returned the lock.

              {
                "nodeId": 56,
                "index": 0,
                "status": 3,
                "ready": false,
                "isListening": false,
                "isRouting": true,
                "name": "Schlage Door",
                "interviewAttempts": 1,
                "endpoints": [
                  {
                    "nodeId": 56,
                    "index": 0,
                    "deviceClass": {
                      "basic": {
                        "key": 4,
                        "label": "Routing End Node"
                      },
                      "generic": {
                        "key": 64,
                        "label": "Entry Control"
                      },
                      "specific": {
                        "key": 3,
                        "label": "Secure Keypad Door Lock"
                      }
                    },
                    "commandClasses": []
                  }
                ],
                "values": [],
                "isFrequentListening": "1000ms",
                "maxDataRate": 100000,
                "supportedDataRates": [
                  40000,
                  100000
                ],
                "protocolVersion": 3,
                "supportsBeaming": true,
                "supportsSecurity": false,
                "nodeType": 1,
                "deviceClass": {
                  "basic": {
                    "key": 4,
                    "label": "Routing End Node"
                  },
                  "generic": {
                    "key": 64,
                    "label": "Entry Control"
                  },
                  "specific": {
                    "key": 3,
                    "label": "Secure Keypad Door Lock"
                  }
                },
                "interviewStage": "ProtocolInfo",
                "statistics": {
                  "commandsTX": 0,
                  "commandsRX": 0,
                  "commandsDroppedRX": 0,
                  "commandsDroppedTX": 0,
                  "timeoutResponse": 0
                },
                "isControllerNode": false,
                "keepAwake": false,
                "lastSeen": "2024-10-28T22:22:58.673Z",
                "protocol": 0
              }

So, oddly enough I was able to remove Node 056 using the standard ‘Remove Failed Node’. It took a minute or so but then it completed successfully.

Still encountering an issue with Node 060 (the original device that sent me down this rabbit hole). When I try to remove it, the controller reports back that the device is not on the list of failed nodes yet when I look at the event log for the node, it is clearly reporting as dead.

11/26/2024, 5:15:32 PM - interview failed
Arg 0:
└─errorMessage: The node is dead
└─isFinal: true
11/26/2024, 5:15:32 PM - dead
Arg 0:
0

When I try the same steps for this node, I get the following:
image

For good measure I tried another reboot and now I get that the node is not on the list of failed devices:
image

Welp, I kinda threw the kitchen sink at it and finally was able to remove the device.

I was following this guide: Z-Wave JS - Z-Wave driver written entirely in JavaScript/TypeScript

The smoking gun for me appeared to be that I had a few power monitors that were sending far too many updates. Once I corrected these thresholds to be more conservative, I was able to remove the lock successfully. I’m going to continue reviewing this troubleshooting guide and do some further tuning on my z-wave network.

But hey, I’ll take the win! Learned quite a bit reading over the .json files for z-wave and comparing working vs non-working devices to better understand what each state means and looks like.

1 Like