Z-waveJS losing thermostat on set temp service call randomly

I’ve been having issues with Z-WaveJS randomly losing my thermostat (radio thermostat CT101). It appears to happen when the “set target temperature service” is called. In Home Assistant the thermostat entity just becomes unavailable. Today it was unavailable for several hours, though the service to set target temp would not have been called during that time. When I got home to a hot house I manually set the temp on the thermostat, and instantly the device came back from unavailable. About 20 mins later it fell off once again, becoming unavailable when I noticed that it was still warm in the house and tried to adjust the thermostat setting from my HA dashboard.

This appears to happen randomly as far as I can tell. It will run fine for weeks at a time, calling the set target temperature service multiple times per day without issue. Then suddenly this will happen for a few days and then it’s fine again. I’m unable to communicate at all with the thermostat to re-interview or heal the node from the device UI in HA either.

I can’t seem to figure it out and am hoping someone else has found an solution to something like this.

Here’s what Z-WaveJS logs show:

2023-10-01T21:44:15.384Z CNTRLR   [Node 004] The node did not respond after 3 attempts, it is presumed dead
2023-10-01T21:44:15.385Z CNTRLR   [Node 004] The node is now dead.
Z-Wave error ZWaveError: The node did not acknowledge the command (ZW0204)
    at Driver.sendMessage (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:4889:23)
    at Driver.sendCommandInternal (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:5091:28)
    at Driver.sendCommand (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:5202:15)
    at Proxy.set (/usr/src/node_modules/@zwave-js/cc/src/cc/ThermostatSetpointCC.ts:260:24)
    at Proxy.<anonymous> (/usr/src/node_modules/@zwave-js/cc/src/cc/ThermostatSetpointCC.ts:171:30)
    at ZWaveNode.setValue (/usr/src/node_modules/zwave-js/src/lib/node/Node.ts:1139:39)
    at NodeMessageHandler.handle (/usr/src/node_modules/@zwave-js/server/dist/lib/node/message_handler.js:20:43)
    at Object.node (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:42:96)
    at Client.receiveMessage (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:119:99)
    at WebSocket.<anonymous> (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:51:45) {
  code: 204,
  context: SendDataRequestTransmitReport {
    host: [Driver],
    type: 0,
    functionType: 19,
    payload: <Buffer db 01>,
    _callbackId: 219,
    transmitStatus: 1,
    txReport: undefined
  },
  transactionSource: '    at Driver.sendMessage (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:4889:23)\n' +
    '    at Driver.sendCommandInternal (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:5091:28)\n' +
    '    at Driver.sendCommand (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:5202:15)\n' +
    '    at Proxy.set (/usr/src/node_modules/@zwave-js/cc/src/cc/ThermostatSetpointCC.ts:260:24)\n' +
    '    at Proxy.<anonymous> (/usr/src/node_modules/@zwave-js/cc/src/cc/ThermostatSetpointCC.ts:171:30)\n' +
    '    at ZWaveNode.setValue (/usr/src/node_modules/zwave-js/src/lib/node/Node.ts:1139:39)\n' +
    '    at NodeMessageHandler.handle (/usr/src/node_modules/@zwave-js/server/dist/lib/node/message_handler.js:20:43)\n' +
    '    at Object.node (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:42:96)\n' +
    '    at Client.receiveMessage (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:119:99)\n' +
    '    at WebSocket.<anonymous> (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:51:45)'
}
2023-10-01T21:44:15.455Z CNTRLR » [Node 004] pinging the node...
2023-10-01T21:44:15.761Z CNTRLR   [Node 004] The node did not respond after 1 attempts, it is presumed dead
2023-10-01T21:44:15.765Z CNTRLR   [Node 004] ping failed: The node did not acknowledge the command (ZW0204)
Z-Wave error ZWaveError: The message cannot be sent because node 4 is dead (ZW0202)
    at Driver.sendMessage (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:4819:12)
    at Driver.sendCommandInternal (/usr/src/node_modules/zwave-js/src/lib/driver/Driver.ts:5091:17)
    at Proxy.<anonymous> (/usr/src/node_modules/@zwave-js/cc/src/cc/ThermostatSetpointCC.ts:171:19)
    at ZWaveNode.setValue (/usr/src/node_modules/zwave-js/src/lib/node/Node.ts:1139:19)
    at NodeMessageHandler.handle (/usr/src/node_modules/@zwave-js/server/dist/lib/node/message_handler.js:20:32)
    at Client.receiveMessage (/usr/src/node_modules/@zwave-js/server/dist/lib/server.js:119:62) {
  code: 202,
  context: undefined,
  transactionSource: undefined
}

It sounds to me like either a bad device or a zwave mesh that is borderline. Things to try:

  • adding some additional zwave repeaters
  • repositioning the stick (should be on an extension cable and mounted away from the computer)
  • replacing the thermostat (having a spare is a good idea anyways)

Do you have zwavejsui? If so look at the network diagram and post a copy. If not, consider switching to it as its new diagnostic tools can be helpful.