Older changelog entries (v1...v10)
This release includes several more fixes and workarounds for the problematic interaction between some controller firmware bugs and the automatic controller recovery introduced in the v12
release:
- Added a workaround to recognize corrupted
ACK
frames after soft-reset of controllers running an 7.19.x firmware or higher. Previously this triggered the unresponsive controller detection and recovery process. (#6409) - When the response to a
Send Data
command times out, the command is now aborted, instead of retrying and potentially putting the controller in a bad state due to not waiting for the command cycle to complete. When this happens, Z-Wave JS no longer attempts to recover the controller by restarting it, unless the callback is also missing. (#6408) - When the callback to a
Send Data
command continues to be missing after restarting the controller, Z-Wave JS no longer restarts itself. Instead the old behavior of marking the node asdead
is now restored, as the node being unresponsive/unreachable is most likely the actual problem. (#6403) - In addition, the
Send Data
callback timeout has been reduced to 30 seconds and ongoing transmissions are now aborted before reaching this timeout. This should limit the impact of the controller taking excessively long to transmit, especially in busy networks with lots of unsolicited reporting and end nodes expecting a timely response (#6411)
- The
Driver
constructor now accepts multiple sets of options and curated presets are available (#6412)
- Only auto-refresh
Meter
andMultilevel Sensor CC
values if none were updated recently (#6398) - Export all option types for
Configuration CC
(#6413)
- Add NEO Cool Cam Repeater (#6332)
- Increase report timeout for Aeotec Multisensor 6 to 2s (#6397)
- Fixed a long standing issue that prevented multi-target firmware updates from being applied correctly (#6395)
- Fixed an issue with multi-target firmware updates where the wrong update capabilities were exposed to applications, preventing manual updates of the additional targets (#6396)
- Add parameter 26 to
Inovelli VZW31-SN
(#6391)
Almost 1000 device configuration files have been reworked to be more consistent, mostly affecting device labels, parameter labels, descriptions and predefined options. After updating, you should expect to see several notifications for changed device configurations, prompting you to re-interview the affected nodes. Unless the device is mentioned below, there's no need to do this immediately.
- Always set time for Namron 16A thermostats as UTC (#6388)
- Add Alloy (Zipato) devices (#6331)
- Parameter 21 of Inovelli VZW31-SN is readonly (#6389)
- Add Shelly Wave Shutter (#6382)
- Add Eurotronic Comet Z (700 series) (#6336)
- Add params 7, 18, 19 to Zooz ZEN71 FW 10.20 (#6375)
- Add Qubino Shades Remote Controller (#6335)
- Add fingerprint for new MH8-FC version, add new option for param 1 (#6358)
- Add Hank HKZW-SO08 (#6383)
- Add link to manual of Honeywell T6 Pro Thermostat (#6353)
- When a device has a default wakeup interval of 0 (never wake up), this is now preserved during the interview, even when outside of the valid range advertised by the device (#6387)
- Added a compat flag to always set the time using
Time Parameters CC
as UTC, even if the device exposes way to set the timezone (#6388)
- Lots of config file requirements from the style guide, especially regarding Title Case and Sentence case of strings, are now automatically enforced using ESLint (#6345)
- Normalize result of
Controller.getAvailableFirmwareUpdates
to always includechannel
field (#6359) - Fixed a crash that could happen while logging dropped sensor readings (#6379)
- Increased the range and default of the
response
timeout to accomodate slower 500 series controllers (#6378)
- Treat Basic Set as events for TKB TZ35S/D and TZ55S/D (#6381)
- Add Zooz ZAC38 Range Extender (#6136)
- Corrected the label of the notification event
0x0a
to beEmergency Alarm
(#6368)
The v12
release was supposed to increase reliability of Z-Wave JS, primarily by detecting situations where the controller was unable to transmit due to excessive RF noise or being unresponsive and automatically taking the necessary steps to recover.
Instead, it uncovered bugs and erratical behavior in the 500 series firmwares, which triggered the automatic recovery in situations where it was not necessary. In the worst case, this would cause Z-Wave JS to end up in an infinite loop or restart over and over.
This patch should fix and/or work around most (if not all) of these issues. Really sorry for the inconvenience!
- Fixed an infinite loop caused by assuming the controller was temporarily unable to transmit when when sending a command results in the transmit status
Fail
(#6361) - Added a workaround to avoid a restart loop caused by 500 series controllers replying with invalid commands when assigning routes back to the controller (SUC) failed (#6370, #6372)
- Automatically recovering an unresponsive controller by restarting it or Z-Wave JS in case of a missing callback is now only done for
SendData
commands. Previously some commands which were expecting a specific command to be received from a node could also trigger this, even if that command was not technically a command callback. (#6373) - Fixed an issue where rebuilding routes would throw an error because of calling the wrong method internally (#6362)
- The workaround from
v12.0.0
for the7.19.x
SDK bug was not working correctly when the command that caused the controller to get stuck could be retried. This has now been fixed. (#6343)
- Ignore when a node reports
Security S0/S2 CC
to have version 0 (unsupported) although it is using that CC (#6333)
- Add Shelly to manufacturers (#6339)
- Add Shelly Wave 1, Wave 2PM, update Wave 1PM association labels (#6326)
- Add Sunricher SR-ZV2833PAC (#6310)
- Added an ESLint rule to help with deciding whether a config parameter needs to be
unsigned
or not (#6325, #6338)
Home Assistant users who manage zwave-js-server
themselves, must install the following upgrades before upgrading to this driver version:
- Home Assistant 2023.10.0 or higher
zwave-js-server
1.32.0
Breaking changes · Migration guide
- Removed auto-disabling of soft-reset capability. If Z-Wave JS is no longer able to communicate with the controller after updating, please read this issue (#6256)
- Remove support for Node.js 14 and 16 (#6245)
- Subpath exports are now exposed using the
exports
field inpackage.json
instead oftypesVersions
(#5839) - The
"notification"
event now includes a reference to the endpoint that sent the notification (#6083) - Keep separate Supervision session ID counters for each node (#6175)
- Validate the device fingerprint before installing firmware update instead of when checking for updates (#6192)
- Removed some deprecated methods (#6250)
- Managing SUC routes with the non-SUC method variants is no longer allowed (#6251)
- "Heal (network)" was renamed to "rebuild routes" to better reflect what it does (#6252)
- Corrected the argument type for
Driver.constructor
,updateLogConfig
andupdateOptions
(#6254, #6319)
- Detect an unresponsive stick and reset it (#6244)
- The default time after which battery-powered devices with no pending commands are sent back to sleep is now
250 ms
(down from1000ms
). This timeout is now configurable using the driver optiontimeouts.sendToSleep
. This should result in significant battery savings for devices that frequently wake up. (#6312)
- A bug in the
7.19.x
SDK has surfaced where the controller gets stuck in the middle of a transmission. Previously this would go unnoticed because the failed commands would cause the nodes to be marked dead until the controller finally recovered. Sincev11.12.0
however, Z-Wave JS would consider the controller jammed and retry the last command indefinitely. This situation is now detected and Z-Wave JS attempts to recover by soft-resetting the controller when this happens. (#6296) - Default to RF protection state
Unprotected
if not given forProtection CC
V2+ (#6257)
- Add Heatit Z-Water 2 (#6299)
- Add Shelly Wave 1PM (#6280, #6317)
- Add Heatit Z-TRM6 (#6263)
- Increase poll delay for ZW500D (#6270)
- Add fingerprint for Simon IO Master Roller Blind (#6262)
- Add HOPPE eHandle ConnectSense (#6269)
- Add parameters to Zooz ZEN17 from firmware 1.30 (#6189)
- Update Zooz ZEN32 config to the latest firmware, include 800 series (#6283)
- Fixed the interpretation of
limit_options
in OpenSmartHouse import script (#6313) - Some Z-Wave JS specific implementation checks are now done using a custom ESLint plugin (#6276, #6279, #6315)
- Migrated more Z-Wave JS specific checks to the custom ESLint plugin (#6297, #6302)
- Use ESLint to enforce consistent property ordering in config parameters and avoid unnecessary
minValue/maxValue
(#6321, #6322) yarn test
now only runs tests affected by changed files by default. This is also done on CI in PRs to speed up check times (#6274)- Upgraded lots of dependencies (#6258)
- Fixed an issue where some
Notification CC Reports
including an enumeration value would cause the corresponding value ID to be set to the wrong value (#6282) - When the Serial API on a controller restarts unexpectedly, the node ID length is now synchronized again (#6271)
- Add warnings about broken controller firmware versions (#6293)
- Fixed an issue causing commands that have previously been moved to the wakeup queue for sleeping nodes would no longer be handled correctly on wakeup and block the send queue for an extended amount of time (#6266)
- The
mock-server
now supports loading mocks from outside thenode-zwave-js
repository (#6261)
Driver.sendCommand
,Driver.sendMessage
andNode.setValue
now accept an optional callback as part of the options that will be called with the transaction progress (queued, active, failed, complete) (#6212)- Optimized the order of node communication during startup to ensure responsive nodes are ready first (#6233)
- Transmit reports now include the routing scheme (direct, LWR, ...) used for the transmission (#6232)
- The start/stop time and date values in
Schedule Entry Lock CC
commands are now validated (#6231) - Fixed an issue where
hasDeviceConfigChanged
would return the opposite of what it should (#6240)
- Delay value refresh for
ZW500D
(#6230) - Update several Zooz devices to their 800 series revisions (#6218)
- Extend version range for
Vesternet VES-ZW-DIM-001
(#6216)
- No longer report errors to Sentry (#6225)
silly
level logging forsetValue
calls now includes the endpoint index (#6223)- Added a regression test for
setValue
with a temporary communication failure (#6224)
- Fixed a regression from
v11.13.0
whereMeter CC
andMultilevel Sensor CC
reports from an endpoint were discarded, although the endpoint did support them, but the root endpoint didn't (#6222) - Fixed a startup crash that happens when the controller returns an empty list of nodes (#6220)
- Fixed an issue where API calls would be rejected early or incorrectly resolved while the driver was still retrying a command to an unresponsive node (#6219)
- Fixed an issue where the controller would be considered jammed if it responds with a
Fail
status, even after transmitting (#6211)
- Switched formatting from
Prettier
to the much fasterDprint
(#6198) - Added a precommit hook to format files (#6205)
- Fix type definitions in the documentation for the
"firmware update finished"
controller event (#6206) - Fixed an issue during documentation generation where referencing the same type definition multiple times would not work (#6207)
- Moved the documentation for
Driver.interviewNode
toNode.interview
(#6209)
- Auto-detected serialports now prominently include
/dev/serial/by-id/*
paths (#6182)
- Discard
Meter CC
andMultilevel Sensor CC
reports when the node they supposedly come from does not support them (#6178) - Abort inclusion when a node with the same ID is already part of the network (#6180)
- Fixed an issue where a node that does not support S0 and/or S2 was shown with an unknown security class (#6187)
- Fixed a regression from
v11.12.0
where devices with aproprietary
field in the device config would not finish the interview (#6202)
- Remove unnecessary endpoint functionality for CT100 (#6185)
- Extended documentation for parsing QR codes (#6181)
- Fixed an issue where directly editing
driver.options
in tests would modify thedefaultOptions
and influence future driver instances (#6188)
- When the controller cannot transmit due to being jammed, this is now detected and exposed to applications. In this situation, nodes are no longer being marked as dead. (#6174)
- A hash of the device config used during the interview is now stored and can be used to detect whether a node needs to be re-interviewed after a configuration update (#6170)
- Fixed an issue where 700 series controllers were not soft-reset after NVM backup when soft-reset was disabled via config (#6176)
- Correct reporting frequency parameter values for Sensative AB Strips Comfort / Drips Multisensor (#6171)
- Config file checks now detect invalid firmware version ranges where
min > max
(#6169)
- The driver configuration now includes settings for RF region and TX power which will automatically be configured on startup (#6159)
- Add support for persistent node-specific defaults for transition duration and volume (#6162)
- Fixed a regression from
v11.10.1
where the controller's firmware version was not fully queried (x.y
instead ofx.y.z
) (#6165) - Fixed an issue where devices supporting
Notification CC
in push mode were incorrectly detected as using pull mode whenAssociation Group Information CC
is not supported (#6157) - Requests to the firmware update service now include the full
x.y.z
firmware version where known (#6166) - Fixed an issue where region-specific firmware updates would not be returned from the firmware update service (#6167)
- Disable Supervision for Kwikset HC620 to work around a device bug causing it to flood the network (#6155)
- Add fingerprint for Ring Outdoor Contact Sensor (#6163)
- Change order of commands so the startup does not fail when a controller is already set to use 16-bit node IDs and soft-reset is disabled (#6153)
- Soft-reset is now always enabled on 700+ series controllers (#6154)
- Queried user codes and their status are now preserved during re-interview when they won't be re-queried automatically (#6152)
- Remove unnecessary endpoint functionality for CT101 (#6146)
- The
mock-server
now supports loading a directory of mocks (#6145)
- The controller
identify
event callback now includes a reference to the node that requested the identification (#6140)
- When downloading a firmware file, the file extension of the final redirected URL is also considered (#6142)
- Add parameters 9-13 to
Minoston MP21ZP / MP31ZP
(#6139) - Add fingerprint to Yale
YRD446-ZW2
(#6135) - Add and update
Yale Assure ZW3
series locks (#6134)
- Fixed a regression from
v11.9.1
where the startup process could stall after soft-reset when using certain pre-700 series controllers (#6132)
- Fixed a regression from
v11.7.0
where the controller was incorrectly assumed to encode node IDs as 16-bit after a soft reset (#6130) - Improve heuristic to refresh values from legacy nodes when receiving a node information frame (#6121)
- Fixed an issue where no control values were exposed for devices that do not support/advertise
Version CC
(#6123)
- Correct value size for some Nortek
PD300EMZ5-1
params that were previously swapped (#6124) - Add new MCOHome MH-S411/S412 models (#6120)
- Add
getDateAndTime
method toZWaveNode
(#6073)
- Fixed an issue where turning on a
Multilevel Switch
with transition duration could update thecurrentValue
to an illegal value (#6111) - Fixed an issue where empty daily repeating schedules were encoded incorrectly in mocks (#6113)
- Support absolute config paths in
mock-server
(#6112)
- Recover from Security S2 collisions in a common scenario where nodes send a supervised command at the same time Z-Wave JS is trying to control them (#6106)
- During NVM migration, an incorrect flag for "on other network" is now automatically corrected instead of raising an error (#6108)
- Preserve endpoint 0 for Zooz ZEN14 to toggle both outlets at once (#6099)
- Fixed the message sequencing between mock controller and mock nodes in integration tests and the
mock-server
(#6101)
- Health checks now include the intermediate results in progress callbacks (#6086)
- Added the ability to abort health checks and testing whether a health check is in progress (#6091)
- When a CC version query times out, the CC version is now actually assumed to be 1 instead of only logging this (#6089)
- Correct state after power failure for Minoston MP21Z/31Z (#6087)
- Add Namron 4512757 (#6072)
- Add methods to read sensor/meter support information from cache for
Alarm/Binary/Multilevel Sensor CC
andMeter CC
(#6065) - Fall back to the embedded config directory when looking up
$import
targets from user-defined config files (#6067)
- Fixed an issue where a delayed endpoint capability report could be associated with the wrong query (#6076)
- During NVM migration, some invalid/unexpected bytes in the 500 series NVM can now be corrected (#6082)
- Hide configuration values for
Door Lock CC v4
functionality that is not supported by a lock (#6075)
- Add Leviton RZM10-1L (#6080)
- Force use of Multi Channel CC v1 for all versions of PE653 (#6077)
- Enable 16-bit node IDs in Serial API communication (#6070)
- Fix link in v11 Migration guide (#6071)
- Setting the date and time on a node will now also attempt sending unsolicited
Time CC
reports if no other way is supported (#6042)
- Fixed an issue where auto-discovered config parameters could create non-existing partial parameters (#6059)
- Auto-discovered config parameters that are missing from a config file are now preserved and exposed to applications. These can be distinguished from known parameters by checking the
isFromConfig
metadata property (#6058) - Fixed an issue where config parameter metadata from a config file could be overridden with auto-discovered information (#6060)
- Fixed a regression where unsuccessful pings to sleeping nodes would not resolve. Among other things, this could prevent the remove failed node function from working (#6064)
- Add new product id to
Fakro ZWS12
(#6027) - Disable Supervision for
NICE Spa IBT4ZWAVE
(#6050) - Add variant of
Inovelli NZW31T
with manufacturer ID0x015d
(#6057) - Split and correct
Minoston MP21Z/MP31Z/MP21ZP/MP31ZP
config files (#6056) - Add
EVA LOGIK (NIE Tech) ZKS31
Rotary Dimmer (#5877)
- Added a section to the documentation that explains how to use custom log transports (#6061)
- Throw when trying to heal or discover neighbors for the controller (#6043)
- Correct parameters of Zooz ZEN05 (#6045)
- Override supported setpoint types for Intermatic PE653 (#6044)
- Update Inovelli LZW31 parameter 52 for FW 1.54 (#6001)
- Implement mocks for
Basic CC
(#6041)
- Fixed an issue where partial param values were not exposed correctly (#6035)
- When a device unnecessarily sends a supervised GET request, the response is no longer sent with Supervision (#6034)
- Fixed another regression from
v11.2.0
where some time-critical requests weren't answered while waiting for a response from a different node (#6024)
- Fix Zooz ZSE40 parameters 7 and 8 (#6019)
- Reworked how build caching is done (#6040)
- Fixed an infinite loop that could happen when parsing 4-byte bitfield config parameters where the high bit is set (#6029)
- Allow associations between insecure devices which support the latest
(Multi Channel) Association CC
(#6011)
- Add
lastSeen
property to node and node statistics (#6008) - Make
ZWaveNode
events available via theDriver
(#6002)
- Handle when the controller sends a reserved status code after failed exclusion (#6004)
- Fixed a regression from
v11.2.0
where a node's S0 nonce requests weren't answered during a Get-Report command flow (#6024)
fix(config): add new fingerprint for Zooz ZST10-700 (#6022)
- Add mocks for
User Code CC
andSchedule Entry Lock CC
(#6023) - Add mocks for
Manufacturer Specific
,Thermostat Mode
andThermostat Setpoint CC
(#6013)
- Add Heatit ZM Dimmer (#5999)
- Add Heatit Z-HAN2 (#5998)
- Add Remotec ZXT-800 (#5955)
- Clarify Hand Button action for
ZVIDAR Z-CM-V01 Smart Curtain Motor
(#5946) - Add MCOHome MH-S220 FW 3.2 (#5832)
- Add another device ID for Switch IO On/Off Power Switch (#5801)
- Add/fix params for Intermatic PE653 (#5822)
- Add ShenZhen Sunricher Technology Multisensor SR-ZV9032A-EU (#5718)
- The
commandClasses.add/remove
compat flags now support specifying the CC name instead of its hexadecimal ID (#6000)
- Add missing product type to
Aeotec Water Sensor 7 Basic ZWA018
(#5989) - Override endpoint indizes for
heatapp! floor
(#5994) - Override schedule slot count for
P-KFCON-MOD-YALE
(#5991) - Override supported color channels for
Zipato RGBW Bulb2
(#5993) - Override supported thermostat modes for Z-Wave.me ZME_FT (#5997)
- Fixed a typo in the
discoverNodeNeighbors
JSDoc (#5984) - Added Node.js 20 to the test matrix (#5983)
- Added a compat flag to override (almost) arbitrary CC API queries (#5987, #5995)
- Added the
yarn configfind ...
CLI command to quickly find a config file by ID
- Added the ability to assign priority return routes along with custom fallbacks (#5980)
- Add
zwaveDataRateToString
method (#5978)
- Disable
Window Covering CC
for ZVIDAR Roller Blind (#5976)
- Upgrade to TypeScript 5.1.6 (#5977)
- The
withTXReport
proxy now has thesetValue
andpollValue
methods available (#3735)
- When checking incoming S2-encapsulated commands for duplicates, only the last command is now considered (#5967)
- Incoming multicast
SupervisionCC::Get
commands are no longer answered (#5973) - Automatically use
...SUC...
variant when assigning custom/priority return routes with the controller as the destination (#5972) - Clear cached custom SUC return routes after assigning a priority SUC return route (#5970)
- Ignore
Transport Service
andCRC16
encapsulation when checking if a command is received at a lower-than-expected security level (#5966) - Respond to
Inclusion Controller CC
commands without requiring support (#5949)
- Update Swidget devices to match their June 8th 2023 spec (#5956)
- Add endpoint configuration parameters to SES 302 (#5954)
- Upgrade to TypeScript 5.1 (#5950)
- Most state machines involved with sending commands have been removed. Queue handling is now done entirely in the driver, making it easier to follow and debug. (#5958)
- Add logging for
Energy Production CC
(#5951)
- The
ThermostatModeCC.set
API now acceptsmanufacturerData
as a hex string instead of just a Buffer (#5929) - Support responding to "identify" commands (#5934)
- An API for discovering neighbors is now available to applications (#5938)
- Added support for assigning custom return routes and reading previously set priority return routes from cache (#5941)
- Allow other devices to configure a single lifeline to receive factory reset notifications (#5931)
- Simplified the interview process to contain a sequence that was previously done before the actual interview (#5936)
- During network heals, routes to all association destinations are now assigned, instead of just 4 (#5938)
- Remove unnecessary endpoints for RTC CT32 (#5927)
Home Assistant users who manage zwave-js-server
themselves, must install the following upgrades before upgrading to this driver version:
- Home Assistant 2023.6.0 or higher
zwave-js-server
1.29.0
Breaking changes · Migration guide
- Hide
Multilevel Switch CC
in favor ofWindow Covering CC
(#5812) - Improve return type of
firmwareUpdateOTA
andfirmwareUpdateOTW
methods (#5815) - Rename some
ZWaveHost
interface methods (#5814) - Remove deprecated method signatures, enums and properties (#5816)
- Support configuration parameters on endpoints (#5818)
- Removed
preserveUnknownValues
driver option, distinguish between (known to be) unknown and not (yet) known states/values (#5843) - Auto-discovered
BitField
config params are now represented as partial params (#5870) - Change return type of
setValue
to include context on the execution result (#5897) - Changed
"node removed"
event callback to specify why a node was removed (#5920)
- Auto-remove nodes when they leave the network after failed SmartStart bootstrapping (#5922)
- Hide
Binary Switch CC
in favor ofWindow Covering CC
on iBlinds v3 (#5912)