- Added Aeotec thermostatic Valve ZWA021
- Added Q-Light Puck and Zerodim 2pol
- Added Q-Light Zerodim
- Fixed wrong label and description for Z-Wave.Me UZB
- When a node does not respond because it is asleep, the corresponding transaction is no longer rejected and moved to the wakeup queue instead. This should restore the pre-5.0.0 behavior.
- Added missing label to Binary Sensor CC
- Added missing
%
unit to Battery level - Timeouts when querying User Codes and the current Lock status are now ignored
User Code CC Reports
without a user code are no longer discarded when the user status isAvailable
. This should improve compatibility with some non-compliant nodes- The
targetValue
for theBinary Switch
,Multilevel Switch
andBasic
CCs is now persisted in the Value DB when setting values through the API.
- Config files can now be used specify additional CCs that a node does not advertise in its NIF.
- Added support for fallback config files without a firmware version. These can be used to set some parameters for devices which wouldn't complete the
Version CC
interview otherwise
- Add Heiman Smoke detector
- New product ID for Fibaro Heat controller
- Add product config for AEOTEC Range Extender 7
- Missing responses from the node when requesting the current values during the
Indicator CC
no longer abort the interview
- Added a config file for
HeatIt Z-TRM3
- Added a config file for
Eurotronic Air quality sensor
- The Application CC value IDs of the root endpoint are now preserved for the
Qubino Flush 2 Relay
- Added the compat config option
preserveRootApplicationCCValueIDs
to disable hiding the root endpoint's application CC value IDs - The helper method
guessFirmwareFileFormat
was added to guess the firmware format based on the file contents - The value IDs of the
Z-Wave+ CC
are now internal and can instead be accessed through the corresponding properties on theZWaveNode
andEndpoint
instances - The value IDs of the
Node Naming and Location CC
are now internal and can instead be accessed through the corresponding properties on theZWaveNode
instance - Added support for sending multicast and broadcast commands (non-secure only)
Driver.destroy()
no longer does anything after the first callSound Switch Tone Play Report
commands now parse the volume if it exists- The log entries for
Notification CC Report
s now contain the correct notification event/state - The value IDs of
Multi Channel Association CC
are now marked as internal - When encapsulating commands, the
secure
flag is now correctly propagated - Fixed a bug where commands that belong to a different transaction could be mismatched, resulting in unexpected messages
- The mapping of root to endpoint 1 now works correctly if the node does not support
Multi Channel Association CC
at all - When the
Multilevel Switch CC
level change commands indicate that Supervision is not supported, this is now remembered and the command gets retried without supervision. - Removed some debug logging which could blow up the log file size
Notification CC Reports
are now parsed correctly when theV1 Alarm
bytes are not zeroColor Switch CC
: Setting the warm whitetargetValue
no longer falsely claims that thepropertyKey
is missing- Added support for
*.gbl
firmware files and Aeotec updater executables which include a checksum and a target chip byte. - Removing a node association no longer throws an error when both multi channel and normal associations are supported.
getDefinedValueIDs
no longer returns value IDs that are only controlled by a node
- Types, interfaces and enum declarations in the docs can now be automatically copied and updated from the TypeScript sources
- Fixed some leaky tests
- Added a config file for
Jasco ZW3010
- Added new Notification definitions
- Added new Indicator definitions
- Implemented the
replaceFailedNode
API - Added a third argument to the
"interview failed"
event handler which includes an object with additional details about the interview attempt (see docs).
WARNING: The current signature is deprecated and will be changed in the next major version! - Metadata can now be customized by CCs with the
ccSpecific
property. This is used in several CCs to allow applications to identify which value a value ID describes (e.g. sensor type, meter type, etc...)
- The logs of
ConfigurationCC::PropertiesGet
now include the correct next parameter # - The
targetValue
of switch-type CCs is no longer overwritten withundefined
when a report without target value is received
- Switched to
npm@7
workspaces to get rid of TypeScript'spaths
config and support project-relative auto-imports
- Fibaro Keyfob no longer uses special chars in param labels
- Changed the
valueSize
of param 9 for Shenzhen Neo PD03Z from2
to1
- Added the compat config option
keepS0NonceUntilNext
to disable automatic nonce invalidation for bugged devices (e.g. ID Lock) which reuse nonces in some situations
- If a node association is duplicated between
Association CC
andMulti Channel Association CC
, it is now removed from both when usingController.removeAssociations
- Add missing production dependency
semver
to@zwave-js/config
- The
duration
property for theBinary Switch
,Color Switch
,Multilevel Switch
andScene Activation
CCs is now writeable - The
Central Scene CC
interview is now skipped if a device does not respond to the supported scenes request - Empty user codes are now also handled as strings instead of Buffer objects
- The
targetValue
property for theBinary Switch
,Multilevel Switch
andBasic
CCs is now created, even if isundefined
. - The type
CommandClass
is now exported fromzwave-js/CommandClass
- The interview process for
Configuration CC V3+
now continues even if the response toNameGet
and/orInfoGet
commands is missing or incomplete - The interview process for
Association Group Info
now continues even if a response is missing or incomplete - Multi Channel Lifeline Associations are no longer created automatically if the device does not support the
Multi Channel CC
- Fixed an issue where marking nodes with active transaction as asleep would mess up the serial communication with the controller
- The receiver of an S0 nonce is now stored and after a successful reply, all nonces for said issuer are now invalidated
- Unsuccessful controller commands now return the response message instead of throwing
- The log messages for unsuccessful controller commands no longer claim that the controller did not respond
- Compatibility with non-spec-compliant devices has been improved:
User Code CC
: trim zero-padded user codes, handle non-ascii user codes as Buffers instead of stringsNotification CC
: support deserializing Notification Reports where theAlarm Level
is not 0Notification CC
: support deserializing Notification Reports with Keypad events that only contain a User ID instead of aUserCode::Report
- Errors while updating the
Multilevel Switch
value in response to aSupervision
report are now caught - Added missing metadata to the
duration
property inColor Switch CC
- Updated config param description for
Z-Wave.Me ZME_05459 Blinds controller
- Added a device config for
Z-Wave.Me ZME_06436 Flush Mountable Blind Control
- Added more debug logging to track down a particularly sneaky bug
- Including controller-type nodes (the bare minimum) is now supported
Alarm Sensor CC Report
s no longer overwrite the node ID with0
.- The timespan that a node is assumed to be awake is now prolonged when it acknowledges a command
- Fixed a crash while serializing a
DoorLockCC::ConfigurationSet
with invalid input
- In case of an unexpected error while handling a message, the original error stack is now preserved if possible
- Added / fixed some missing or incorrect exports from
zwave-js
:- The
CCAPI
type is now exported NODE_ID_BROADCAST
andNODE_ID_MAX
are now value exports- The
Endpoint
class is now exported - The
InterviewStage
enum is now exported
- The
- Several user-facing errors were converted from
Error
toZWaveError
in order to be consistent with other errors. - Warnings about insecure communication with a node because of missing security configuration are now emitted as
ZWaveError
s with codeZWaveErrorCodes.Controller_NodeInsecureCommunication
- Internal references to
@types/fs-extra
andjest
are no longer leaked, allowing users to consume this library withoutskipLibCheck
User Code CC
no longer uses V2 methods during the interview of a V1 node- Fixed an error during the
Central Scene CC
interview that could occur ifAssociation Group Information
is not supported - For several CCs, missing responses to non-critical requests are now ignored during the interview
- Sent nonces are now transmitted using the
ACK
andAutoRoute
transmit options to fix secure inclusion issues with some devices - Fixed an error during logging of a
DoorLockCC::ConfigurationSet
command - After a fresh interview, battery-powered nodes that are temporarily mains-powered, are no longer sent into a "go to sleep" loop
- When a node requests multiple nonces in a short timespan, only respond to the most recent request
SpyTransport
was moved to@zwave-js/testing
, a development-only testing package
- The
targetValue
metadata inColor Switch CC
no longer claims that the value is readonly
- Changed how the transaction creation stack is included in error logs
- Transactions now remember where they were created. This can be used to track down unhandled transaction rejections.
- When a message should be sent to a node that is assumed to be dead, the node is now pinged first to check if it is really dead.
- If a device supports
Notification CC
but sendsAlarm CC
(V1) frames, those are treated asNotification Report
s if possible.
- The value IDs controlling
Start/Stop Level Change
commands in theMultilevel Switch CC
are now also created for V1 and V2 nodes during the interview - The
Alarm Sensor CC
value IDs for supported sensor types are now created as soon as they are known to be supported.
- Added
Electronic Solutions DBMZ EU
- Fixed a crash when receiving truncated messages
- When an unexpected error occurs while executing API commands (e.g.
Security CC requires a nonce to be sent!
), the corresponding transaction is now retried or rejected instead of crashing the driver. - Nodes are sent to sleep again when they have no pending messages
- Compat queries are removed from the queue when a node goes to sleep
- Pending pings are resolved when a node wakes up
sendNoMoreInformation
now continues to work after it failed onceWakeUpCC::NoMoreInformation
is no longer moved to the wakeup queue when a node falls asleep
- Removed some unused code
- Fixed a crash while trying to determine the notification mode of a node
- Fixed a crash while defining metadata for a non-idle notification value
- It is now possible to add an expiration timeout to sent messages by using the
expire
option forsendMessage
. Security CC
now stores unsolicited nonces as "free" and tries to use free nonces instead of requesting a new one if possible.- Several improvements to
Notification CC
:- The interview now detects whether a node is push or pull
- Push nodes now have their supporting values set to idle if no value is yet known
- Pull nodes are now auto-refreshed every 6 hours and on wakeup
- During secure inclusion, the timeouts required by the Z-Wave specs are now correctly enforced
- When starting a network heal, the
"heal network progress"
event is now emitted immediately with the initial progress. - Fixed a crash that could when queueing handshake messages while controller messages are pending
Thermostat Setpoint Set
commands now use the device-preferred scale instead of defaulting to the first one.- A couple of
Notification CC
variables were changed to not have an idle state
- Formatting log messages has been simplified. Log messages are now defined as objects and the log formatter auto-aligns the values.
- All remaining CCs had their log representation improved. If an error occurs during this conversion, this error is now caught.
- Code cleanup: TODOs, useless string interpolations
- Updated a bunch of dependencies
- Added support for
User Code CC V2
- All timeouts and the number of retry attempts are now configurable through the
Driver
options.
- Nodes are now only marked as dead or asleep if the controller receives no ACK for the sent messages. Missing responses to potentially unsupported requests no longer change the node status.
SendSupervisedCommandOptions
now correctly extendsCommandOptions
- Timeouts configured through
Driver
options are now respected correctly
- The status
Alive
was added to theNodeStatus
enumeration. The node status can no longer switch between all states, only betweenDead
andAlive
, betweenAsleep
andAwake
and from and toUnknown
. - The
status
property onZWaveNode
is now readonly. To change the status, use themarkAsAsleep
and similar methods, which only change the status if it is legal to do so. - Unsolicited commands are now discarded in accordance with the Z-Wave specs if they are unencrypted but the CC is supported secure only
driver.start()
now throws if no handler for the"error"
is attached
- A new method
withOptions
was added toCCAPI
, which controls the usedSendCommandOptions
. For example, this allows changing the priority of each API call for that instance. - All interview messages now automatically have a lower priority than most other messages, e.g. the ones created by user interaction. This should make the network feel much more responsive while an interview process is active.
- The node events
asleep
,awake
,alive
anddead
now include the previous status aswell. - Added the method
isEncapsulatedWith
toCommandClass
to perform checks on the encapsulation stack. - In addition to serial ports, serial-over-tcp connections (e.g. by using
ser2net
) are now supported. You can connect to such a host using a connection string of the formtcp://hostname:port
. Use theseser2net
settings to host a serial port:<external-port>:raw:0:<path-to-serial>:115200 8DATABITS NONE 1STOPBIT
- Improved performance of reading from the Value DB
- Retransmission of commands now distinguishes between errors on the controller side and missing responses from nodes
- If a node that is known to be included securely does not respond to the
Security CC
interview, it is no longer assumed to be non-secure - If a node that is assumed to be included non-securely sends secure commands, it is now marked as secure and the interview will be restarted
- The interview for sensor-type CCs is now skipped if a timeout occurs waiting for a response. Previously the whole interview was aborted.
Basic CC
values that are mapped toBinary Switch
orBinary Sensor
are now interpreted correctly.- Fixed a crash that could occur when assembling a partial message while the driver is not ready yet.
- The driver has been completely rewritten with state machines for a well-defined program flow and better testability. This should solve issues where communication may get stuck for unknown reasons.
- A node's
status
andready
properties are now managed by state machines to have better control over how and when the status changes. - Enabled the TypeScript option
strictFunctionTypes
and the usage of several decorators is now statically enforced - Added more fine-grained control over expected responses, and distinguish between responses, callbacks and node updates for sent messages.
- Many CCs had their log representation improved. If an error occurs during this conversion, this error is now caught and logged.
- (slangstrom) Add support for
Everspring AC301
- Removed parameter #5 from
Aeon Labs ZW130
because it doesn't seem to be supported in any firmware version
- A node is no longer marked as dead or asleep if it fails to respond to a
Configuration CC::Get
request. This can happen if the parameter is not supported.
- (Mojito-Joe) Added a configuration file for
ABUS CFA3010
.
- Invalid
Multi Channel CC::Command Encapsulation
which follow the V2+ format but use a V1 header are now treated like valid commands
- Further performance improvements while decoding
Configuration CC::Report
s
- Reduced CPU usage in networks with a lot of values
- The
Basic CC
interview is no longer performed if any actuator CC is supported - If a node does not respond to a
Basic CC::Get
, the interview is no longer aborted. Instead theBasic CC
is marked as unsupported.
- Added the ability to send
Multilevel Sensor Reports
using the newsendReport
method
- Updated dependencies including bugfixes and security patches
- Replaced Sentry.io DSN
- Each installation now generates a random ID that is can be used to suppress error reports on a per-user basis
- Logs are no longer split across two logfiles.
- Made
Meter CC::Reset
accessible through theSET_VALUE
API.
- During the interview, endpoint associations are now converted to node associations if required
- Allow
Set
andSupportedSet
commands inAlarm CC
V2
- If a node fails to respond to
Multi Channel Endpoint Find
, the interview is no longer aborted and sequential endpoints are assumed instead - Renamed the manufacturer
Goap
to Qubino - For many Qubino devices, the lifeline now uses a node association
- The driver no longer goes into an infinite loop when receiving a
CRC-16 Command Encapsulation CC
(#888)
See "Changes under the hood". I don't expect anything to break, but to be safe, I'll declare this as a major version.
- It is now assumed that the Basic CC API is always supported
- Mandatory supported CCs that are defined in the device class config are now respected. This should improve support for legacy devices that don't include all CCs in the NIF.
- Added support for
Sound Switch CC
- Added support for
Alarm Sensor CC
. This CC will only be interviewed ifNotification CC
is not supported. - Added a
sendReport
command to theNotification CC
API, which can be used to send customNotificationCCReport
s.
-
Moved the definition of legacy Z-Wave device classes to a config file.
-
This project has been converted to a monorepo and split into the following packages:
zwave-js
: As before, this is the main entry point for consumers@zwave-js/config
: The configuration files and methods to access them@zwave-js/core
: The core modules, which are shared betweenzwave-js
and@zwave-js/config
@zwave-js/serial
: A lightweight wrapper aroundnode-serialport
with a built-in parser for received serial API messages@zwave-js/shared
: Utility methods that are shared between all other packages
It is likely that other packages will be added in the future.
- Overlapping
SendData(Multicast)
commands are now avoided SendData(Multicast)
commands without a callback are now aborted after a while
- The
CRC-16 Command Encapsulation CC
is now correctly detected as an encapsulating CC
- Missing information is included in logfiles again when the
LOGTOFILE
env variable is set after the library was imported - The
CRC-16 Command Encapsulation CC
is now correctly detected as implemented - If an association group is configured to use node associations, the
Multi Channel Association CC
version heuristic is now ignored
- Added some details to the
Multi Channel Association CC
interview logging
- Associations to the controller are not checked for supported CCs anymore
addAssociations
now respects thenoEndpoint
flag- Removing multi channel endpoint association to the root endpoint no longer removes the equivalent node association
getAllDestinationsCached
no longer treats node id associations like multi channel associations to endpoint 0
- Added the
noEndpoint
flag to force lifeline associations to use node id associations - The
Multi Channel Association CC
interview now falls back to setting associations withAssociation CC
if the node does not accept the added associations
- Changed
AEON Labs ZW095
lifeline to a node id association - (nicoh88) Added config files for Devolo Dimmer (MT2760) and Shutter (MT2761)
- Logfiles are created again when the
LOGTOFILE
env variable is set after the library was imported
- If a configured lifeline association is outside the range of multi channel associations, a normal association is now used instead
- The
Association CC
interview now always requests the group count, even ifMulti Channel Association CC
is supported getAssociations
andgetAssociationGroups
now respect all associations (the ones done withMulti Channel Association CC
and the ones done withAssociation CC
).
- Logfiles now contain all logs in the correct order
- Fixed an error when using the DoorLockCC setValue API when not all configuration values have been received
- Errors in the async part of handleFirmwareUpdateGet are now caught and logged
- When a non Z-Wave serialport is configured or loading the configuration files, the
"error"
event is now emitted and the driver is destroyed instead of crashing - If a
MultiChannelCCEndpointFindReport
does not contain any bytes for the found endpoints, the CC is no longer discarded. This should improve compatibility with some devices, e.g. TKB Home TZ74 Dual Switch.
- Removed some unnecessary logging
- Fixed a crash that happens when receiving a
Multi Command CC
- Removing a multi channel endpoint association to the root endpoint now also removes the equivalent node association (REVERTED in v3.8.1)
- Improved logging for
Multi Channel Association CC
- Assembling partial CCs now works if there are multiple levels (e.g. Security CC -> Multi Channel Association Report)
- Logging for the following CCs has been improved:
MultiChannelCCCommandEncapsulation
- The source endpoint was addedSupervisionCCGet
andSupervisionCCReport
- Added parameter loggingMultilevelSwitchCCSet
,MultilevelSwitchCCReport
andMultilevelSwitchCCStartLevelChange
- Added parameter logging
ZWaveError
is now exported as a value- The
Firmware
type is now exported - Node information frames after
node.refreshInfo
are no longer discarded - Firmware updates we don't know about are now aborted without emitting an event
- Failed firmware updates are now handled correctly
- All associations of the Fibaro FGMS-001 motion sensor are now configured to point to the controller
- During the interview, the cached lifeline destinations for
Multi Channel Association
andAssociation
CCs are now updated.
node.refreshInfo
no longer causes an event to be emitted for every cleared valuenode.refreshInfo
resets the state of theready
event and all cached CCs and API instances
- The compat queries for Danfoss thermostats now query setpoint 1
- Always send pings, even if the target node is asleep
- Several report-type commands now correctly store their values in the value DB when received
MultiChannelCCV1Get
now checks whether the returnedMultiChannelCCV1Report
is for the correct endpoint- A node's neighbors are now persisted in the cache so they can be used to visualize the network until a repeat interview is complete
- Added labels to metadata of
Language CC
values
- Added support for
Door Lock CC V4
- Added support for
Lock CC
- Added interview for
Language CC
- Added support for over-the-air (OTA) firmware updates with
Firmware Update Meta Data CC
- Lifeline reports for the root endpoint are now mapped to Endpoint 1 if the node supports Multi Channel Association CC in V1 or V2
ZWaveNode
s now have arefreshInfo
method which resets all known information and restarts the node interview- The node interview is no longer aborted if a response for the following requests times out:
- Battery status
- Battery health
- Binary Sensor status
- Multilevel Sensor status
- Added
driver.waitForCommand
method to expect receipt of a command that matches a given predicate - Added
driver.computeNetCCPayloadSize
method to compute how many payload bytes can be transmitted with a given CC (taking encapsulation into account). - During build, CCs constructors for report-type commands are now checked if they call
persistValues
. Application CCs that don't will cause an error, all others a warning.
Thermostat Setpoint Set
has been removed from the compat queries for Danfoss thermostats, because it overwrites queued commands
- Always send handshakes replies, even if the target node is asleep
- "Not implemented" or "Invalid payload" errors that happen while merging partial CCs are now correctly handled
GetNodeProtocolInfoRequest
is no longer treated as a message to a node- When moving messages to the wakeup queue, all pings are now rejected instead of only the pending ones. This avoids interviews getting stuck on a ping.
- Added support for
Protection CC
- The driver now sends a nonce in reply to
SecurityCCCommandEncapsulationNonceGet
commands
- Nodes that ask for a nonce are now automatically marked secure
- Fixed the computation of the authentication code when secure auth data length was a multiple of 16 bytes.
- Nonces are now marked as used immediately after (de)serialization
- If a message fails to serialize, the corresponding transaction is now rejected instead of crashing the driver
- Sequenced S0 encapsulated commands can now be received
- Unsolicited commands are now correctly decoded if they are split across multiple messages
- The
Security CC
interview no longer stalls the interview process if the node is not included securely. - Nonces that could not be sent are now expired immediately
- The security status of nodes is now stored and updated correctly
- The driver now correctly handles nested transactions and their retransmission (e.g. for security encapsulated messages)
- Updated TypeScript to v3.9
- Updated ESLint to v7, some changes to lint rules
- All emitted
"error"
events now correctly contain anError
instance as the parameter. - When a node sends a NIF, pending pings are resolved. This should increase the consistency of manually waking up nodes during the interview.
- When an interview is cut short due to missing network key, the
"error"
event is only emitted once. - When a node is removed, its interview process is canceled and all errors are suppressed.
- If
Multi Channel Association CC
is V1, removing all destinations from all groups now correctly loops through all groups instead of using0
as the group id.
Various fixes related to Security CC
when the network key is not configured. This means that the driver will not crash but likely there's no meaningful communication with secure nodes possible:
- The list of securely supported commands is not requested
Nonce Get
requests are not answered- CCs are no longer encapsulated securely. This means that the interview for battery-powered nodes won't complete if
Wake Up CC
is only supported securely.
- Cache values that are
Map
s are now correctly serialized. Fixes crashissuedCommands.has is not a function
- Fixed crashes with the message
Security CC can only be used when the network key for the driver is set
.
- Added experimental support for Security S0 (#814)
- The
"inclusion started"
event now includes a boolean parameter to indicate whether the inclusion was started securely
- It is now possible to stop inclusion and exclusion processes again
ZWaveNode
class: exposeready
as a property (instead of only a one-time event), which can be missed
- The
NodeStatus
enum is now exposed as a value (instead of a type-only export)
- The endpoint interview for
Version CC
is now skipped - The node status is now determined more quickly during the interview
- If the current transaction is a ping, the calling code no longer gets stuck when messages are moved to the wakeup queue
- Config parameter 5 has been removed from the
WallMote Quad
for firmware versions<= 1.5
- Unsolicited messages are now logged
- Messages to nodes which don't expect an acknowledgement are now correctly retransmitted if the response doesn't come (e.g.
RequestNodeInfo
) - Pings are no longer dropped if the controller failed to send them (in contrast to a missing response from the node)
- The log for unrecoverable errors during the interview now include the node ID
- The interview process should now correctly be rescheduled when communication fails outside the CC interview stage
Multi Channel Association CC
: Fall back to config files during the interview if the node does not support Z-Wave+ (like Association CC does)
Multi Channel Association CC
: After the controller is assigned to the lifeline in the interview, this association is added to the cached association listController
:getAssociationGroups
now includes the last group aswell- adding and removing associations now updates the list of known associations
- Fixed a crash that happened when received CCs tried to access the Value DB before it was opened
- Multi Channel node associations to the controller are converted to endpoint associations if necessary
VersionCCCommandClassGet
now verifies that the response matches the requested CC- Removed a duplicate line when logging the protocol information of a node
- Added compatibility option
queryOnWakeup
to configure which API methods must be called when a device wakes up. Some devices (like the Danfoss thermostats) expect to be queried after wakeup, even if they send the required information themselves.
- CCs that can split their information into multiple messages now correctly store that information when only a single message is received
- Added
getAssociationGroups
method toController
to retrieve all defined association groups and their information for a node (#794)
- Node information (especially CC versions) are correctly restored from cache again
- The metadata for the manufacturer info for the Controller is now correctly stored as metadata, not values
- All handles for the optimized network cache are now closed when destroying the driver
- Nodes are now sent to sleep 1 second after waking up if there are no pending messages
- The
healNetwork
method was removed from the Controller class (deprecated inv2.4.0
) (#731).
If you're still using it, you need to switch tobeginHealingNetwork
. - The minimum supported Node.js version is now 10
- Reduced CPU usage of the network cache (#784)
- During the network heal, the routes from all nodes to the controller and between associated nodes are now updated.
Duration
objects are now correctly deserialized from the cache- During the interview, value events for value IDs of the root endpoint are now correctly suppressed if they mirror functionality of other endpoints.
- Added support for
Color Switch CC
- Added exports for all the relevant things needed by consuming applications (zwave-js#762 (comment))
- Log outputs can now be filtered by nodes using the
LOG_NODES
env variable (#772) - Nodes now emit a
"interview failed"
event when the interview fails with some additional info why (#769)
- Fixed error text in
getAssociations
WakeUp CC
is now marked as supported when receiving wake up notification- The byte length of Configuration values is now validated under more circumstances
- TypeScript 3.8 with all its goodies!
- Filter out a bunch of user errors before reporting them with Sentry
- Use
gulp
for better control over some build tasks - Check out the new Documentation!
- Added missing setValue API for
Fibaro Venetian Blind CC
Fibaro Venetian Blind CC Reports
are now correctly deserialized
- Delayed the check for manufacturer ID until the
Manufacturer Proprietary CC
needs it to avoid crashing during cache serialization
- The
FibaroVenetianBlindCCGet
now correctly expects a response
- The
firmwareVersion
property of a node now returns a value again - Fixed the interview procedure of
Manufacturer Proprietary CC
by reading the manufacturer ID from the Value DB inside the constructor
- Fixed the logic for filtering out root endpoint values
- Send data transmit reports for singlecast messages are detected correctly again
- Config files may now specify manufacturer proprietary parameters. This can be used to enable certain manufacturer proprietary commands
- Completed support for the
Fibaro Venetian Blind CC
- Added support for some legacy devices by implementing
Multi Instance CC
(version 1 of theMulti Channel CC
) - When the wake up interval of a device seems to be longer than configured, the current interval is now re-queried
- Upon receipt of a
ClockCCReport
which deviates from the controller's clock, the sending node's clock setting now gets updated - Value IDs of the root endpoint which have a corresponding value on another endpoint are now filtered out
- Fixed a compilation issue regarding
Send Data
message arguments - When testing potential responses of Multi Channel requests, the response's source endpoint is now checked
- When testing potential responses of
ConfigurationGet
requests, the response's parameter number is now checked - The device config for the controller node now gets loaded if possible
- Updated
ZHC5002
configuration for firmware versions >= 2.02 - Removed a bunch of duplicate and incomplete configuration files
- Added support for multicast destinations in CCs
Multichannel CC
: The interview now needs less messages when a node reports identical endpoint capabilities
- The
setValue
API no longer crashes the driver if an invalid value for the CC is passed Configuration CC
: TheSet
command no longer accepts values that are too large for the param's value size.
Multi Channel CC
: TheEndPointFind
is no longer used in V2
- The config file for
HeatIt Z-Push Button 8
is now correctly retrieved Multilevel Switch CC
: Start level change commands now include the start level even if theignoreStartLevel
flag is set. Some devices might ignore this flag and behave oddly.
- The lower limit for the
Multi Channel CC
has been set to V2
- Improved support for notifications with the following event parameters: Duration, Command Classes, named numeric values
- Added support for the
Clock CC
. Multilevel Switch CC
:Start/StopLevelChange
commands are now supervised if possible
Get
-type commands which request a specific type now inspect receivedReport
s whether they match the request
- The interview sequence for
Thermostat CC
V1/V2 should no longer get stuck - Nodes that confirm the receipt of a request but do not respond are no longer marked as sleeping or dead
- Messages from wrong nodes are no longer considered as a potential response to the current transaction
- The RTT calculation now works correctly for retransmitted messages
- Fixed a crash that could happen when receiving a
MultiChannelCCAggregatedMembersReport
- Fixed a crash that could happen during the
Notification CC
interview
Thermostat Setpoint CC
: In Version 1 and 2, the setpoint typeN/A
is no longer scanned.
- The node interview is no longer aborted when an unexpected
ConfigurationReport
is received - Retrying the interview procedure now happens after a short waiting period to give nodes time to recover
- If a node times out after a confirmation, the sent message is retried just like if there was no response at all
- Messages to sleeping nodes are now also retried before immediately assuming they are asleep
- When a node is removed from the network, all associations to it are also removed
- The interview procedure is now canceled and retried when an error occurs instead of silently failing all futher steps
- The progress report for network healing distinguishes between failed, skipped, pending and healed nodes.
- The network heal now skips nodes that are dead or likely dead
- Added some lint rules for the firmware in device config files
- A potential source of stalled communication because of a missing timeout was eliminated
- The progress report for network healing now correctly distinguishes between not yet healed nodes and nodes that failed to heal
- Improved the log output for bullet points as well as sent and received messages
- Log lines that are completely filled and have secondary tags no longer include garbage when logging to a file
- Implemented the
Supervision
CC. TheDriver
now has two additional methods to make use of that feature:sendSupervisedCommand()
: Sends a command to a node using supervision and returns with the reported status (success, working, fail). This method throws ifSupervision CC
is not supported.trySendCommandSupervised()
: Convenience wrapper aroundsendSupervisedCommand
andsendCommand
. Automatically determines whether supervision is supported. Returns the supervision status if it is, and nothing otherwise
- The
Multilevel Switch CC
now makes use of supervised set commands if possible.
- Messages to sleeping nodes are now correctly de-prioritized when the awake timeout elapses
- Messages are now automatically re-transmitted when the controller responds with a
NAK
or when it fails to respond at all ACK
s from the controller after a retransmit are no longer treated as unexpected- The logic that determines a message's role (expected, unexpected, confirmation, ...) now takes the encapsulation stack into account.
- Locally reset devices are now treated like failing nodes and automatically removed from the controller
- The
Notification
status is now also queried on wakeup - The status of non-reporting listening nodes is now regularly queried
- The controller is now correctly treated as an awake node when prioritizing messages
- The partial interview for the
Meter
CC no longer re-queries the capabilities - All timeouts and intervals are now cleared when the driver is shut down.
Notification CC
Reports that are received as a response during the interview are now correctly handled- The
ready
event is now only for nodes that are known to be alive or asleep - After
removeFailedNode()
has succeeded, the node is removed from the driver and the corresponding events are emitted - The
alive
,awake
anddead
events are now also emitted for nodes if their status was previously unknown. - After a node was removed or marked as dead, the check for
all nodes ready
is performed again - Dead nodes are ignored in the check for
all nodes ready
to avoid the necessity for physical user interaction
- Added
isFailedNode()
andremoveFailedNode()
to theController
class - The scenes of the
Scene Activation
CC are now automatically reset after the duration has elapsed.
- Added the driver options
fs
andcacheDir
to replace the default fs driver and/or cache directory
- The
Indicator CC
setValue
API now acceptsboolean
values for binary indicators
Basic CC
reports no longer create a value when they are mapped to another CCIndicatorCC
:- Binary indicators now use
boolean
values - V1 indicators (unspecified) are now ignored if an endpoint is known to have V2 indicators
- Binary indicators now use
- Many occurences of
TODO: no handler for application command
in the log were removed - The driver is no longer reset when unexpected data is received. Instead the invalid bytes are skipped.
- Implemented
Scene Activation
CC
- The env variables
LOGTOFILE
andLOGLEVEL
are now lazily evaluated
- Removed a duplicate config parameter from Heatit Z-Scene Controller
IndicatorCC
: The first indicator ID is no longer ignored
- The device config is now also loaded when deserializing nodes from the cache
- Added the event
"ready"
toZWaveNode
and"all nodes ready"
toDriver
to notify users that a node respectively all nodes are safe to be used
BasicCCSet
commands that are received from a node are now treated like reports- If possible, received
BasicCC
commands are mapped to specific CCs
- Avoid resetting the IO layer while the driver is not ready
IndicatorCC
:- Corrected the expected response to
SupportedGet
command - Improved property(Key) translation
- Corrected the expected response to
MeterCC
: Add translation for property and propertyKey- Nodes and timers are now cleaned up after a hard reset of the controller
- Supported CC and their versions are now correctly stored in the cache file
- The cache file is no longer discarded when it contains a value of an unsupported CC
- Endpoints can no longer be accessed before the
Multi Channel
interview is completed. - Duplicate labels for several configuration parameters were renamed
- Updated several dependencies
- Duplicate configuration parameter labels are now marked as a warning
- Fixed a crash that happens when a
MultiChannelCCAggregatedMembersReport
is received. - Fixed a crash that happens when receiving a message from a node endpoint, but that endpoint was not known to the controller
- The log output now contains the version of this library (and a fancy title!)
- Reworked the
healNetwork
process:- The controller now has two additional methods:
beginHealingNetwork
andstopHealingNetwork
. The originalhealNetwork
now simply callsbeginHealingNetwork
and is deprecated. - Two additional events (
heal network progress
andheal network done
) are emitted during the process. The event callback receives a map with the current process: node id (number
) => heal done (boolean
).
- The controller now has two additional methods:
- Pending messages are now automatically removed from the send queue if they no longer serve a purpose (e.g. node removed or healing process stopped)
- The status of sleeping nodes is automatically reset to
asleep
10 seconds after the wake up or the last completed transaction.
- Config parameters are no longer queried multiple times if there are partial config params defined
- If a ping failed and the node's messages are moved to the wake up queue, the send queue is no longer stalled by the unanswered ping
- When sending a message to a node that is known to be asleep, the message's priority is automatically set to
Wake Up
(except forNoOperationCC
s).
- Using the env variable
LOGTOFILE=true
, the log output can now be redirected to a file instead ofstdout
.
- Updated
alcalzone-shared
lib to a working version - The parameter number during interview of
Configuration CC
is now logged correctly instead of[object Object]
.
- Updated several dependencies
- Removed deadlocks that happened when stopping the inclusion or exclusion process
- The start and stop of an in- or exclusion process is now correctly announced using the
inclusion started
,inclusion stopped
,exclusion started
andexclusion stopped
events.
- Accessing a node's or endpoint's
commandClasses
property withSymbol
s no longer causes a crash - Revised querying logic for devices without Z-Wave+ or Lifeline associations
- Added support for
Indicator CC
- The serial port will now only be closed if it is already open. This causes less errors to be thrown when opening the port fails.
- Added support for
Meter CC
- Fixed a crash that happened when setting a configuration value that would not fit in the configured value size by marking many configuration parameters in device config files as unsigned.
- The min/max value for configuration parameters in device config files is now validated
- Fixed a crash that happened when saving the network cache with a CC that is neither supported nor controlled
- Errors in stack traces are now mapped to the original TypeScript sources.
- The
value updated
event is no longer emitted forinterviewComplete
every time a command is received Basic CC
is no longer reported as supported when other actuator CCs are supported- If a node only controls a CC, the corresponding CCAPI is no longer falsely offered
- The driver no longer overrides the CC version that was determined by the CC constructor
Binary Sensor CC
is now correctly interviewed- Added a large amount of device configuration files. This powers the
Configuration CC
for versions <3 and enables lifeline associations for devices that don't support the Z-Wave+ standard. - Renamed a few manufacturers
- When devices wake up that neither support Z-Wave+ nor have a lifeline association, all sensor and actuator CCs are queried for updated values
Multi Channel CC
no longer queries endpoint #0 if EndpointFind returns no results or only zeroes.- When values and metadata are deserialized from the cache, no more events are emitted. If you relied on this behavior, use
getDefinedValueIDs()
instead after the interview was completed.
- Added a new member to
ValueID
:property
(number | string
) replacespropertyName
as the property identifier.propertyName
is now in line withcommandClassName
andpropertyKeyName
and contains a speaking representation of the property
- Deduplicated some code in the config lint script
- Upgrade to TypeScript 3.7
- The
ccCommand
properties' types are now specified usingdeclare
class fields instead of interface merging
- Support interviewing multi channel endpoints
- Improve performance by not formatting logs that won't be visible
Multi Channel CC
: MarkcommandClasses
property as internal- Upgrade to TypeScript 3.7 RC
- Remove secondary switch functionality from
Multilevel Switch CC
- Implement interview procedure for
Multilevel Switch CC
- Upgrade Prettier and ESLint to make use of the new TS 3.7 syntax
- Update Multilevel Sensor definitions to latest specs and rename some sensor types
- Move sensor type and scale definitions to JSON config files
- Extract named scales to their own configuration file
- Also use scale configuration for
Thermostat Setpoint CC
- Improve error output for
lint:config
script - Upgrade
serialport
to version 8 - Create CC instances for all endpoints in
getDefinedValueIDs
- Implement Multi Channel Association CC and prefer it to Association CC if possible
- Implement AssociationGroupInfoCC
- Add support for CRC-16 CC
- Bump Association CC to V3, which adds no new commands
- Add setValue API to TimeParametersCC and use JS date objects
- Add set value API to NodeNamingAndLocationCC
- Add interview for Multilevel Sensor CC, fix scale parsing
- Add interview for Thermostat Setback CC
- Add interview for Central Scene CC
- Filter out internal key value pairs in
getDefinedValueIDs
- Add tests (and the necessary snippets) for CC serialization and deserialization routines and fix the found errors:
- Central Scene: fix calculation of scene bitmask size
- Association Group Information: fix offset during parsing of InfoReport
- (Multi Channel) Association: fix broken check for negative group IDs
- Handle encapsulation (de)serialization correctly
- Help GitHub understand that this is not a C(++)-repo
- Add interview implemention to tracking issue
- Moved
supportsCommand
fromCommandClass
toCCAPI
- CC API methods now check that the underlying command is supported by the node
- Improved handling of bit masks
- Implement interview for ConfigurationCC, include spec changes
- Don't interview CCs the VersionCC reports as unsupported
- Cleanup loglevels for some log outputs
- Update dependencies
- Add the remaining notification configurations:
- Gas Alarm (
0x12
) - Pest Control (
0x13
) - Light Sensor (
0x14
) - Water Quality Monitoring (
0x15
) - Home monitoring (
0x16
)
- Gas Alarm (
- Check all received request messages for a matching callback id
- Add interview procedure for ThermostatSetpointCC
- Add setValue API for ThermostatSetpointCC
- Hide more CC values of newer CC versions
- Fix translation of enum values to state metadata so it is able to handle strings starting with a number
- Interview new nodes immediately after inclusion
- Automatically determine the correct CC interview sequence
getDefinedValueIDs
now returns statically defined, dynamically registered and created value IDs
- Partially re-interview CCs after restart from cache
- Add interview procedure for BasicCC
- Add the option to specify a minimum version for ccValues
- Implement BatteryCC V2 (including API)
- ThermostatOperatingStateCC: bump CC version
- Add setValue API to WakeUp CC
- Add more notification configurations:
- Appliance (
0x0C
) - Home Health (
0x0D
) - Siren (
0x0E
) - Water Valve (
0x0F
) - Weather Alarm (
0x10
) - Irrigation (
0x11
)
- Appliance (
- Prepare for TS 3.7
- Add missing callbackId to HardResetRequest
- Create callback ids centrally on the driver instance
- Implement TimeCC v2 and TimeParametersCC v1
- TimeParametersCC: use local time if the node has no means to determine timezone
- Add support for excluding nodes from the network
- Update dependencies
- Mark
options
inIDriver
as internal
- Add more notification configurations:
- Power Management (
0x08
) - System (
0x09
) - Emergency Alarm (
0x0A
) - Clock (
0x0B
)
- Power Management (
- Implement node and network heal
- Add method to enumerate serial ports
- Mark readonly CCs
- Implement AssociationCC (V2)
- fix CC interview not being done completely
- Implement ThermostatModeCC (V3)
- Implement ThermostatOperatingStateCC (V1)
- Make a bunch of CC values internal
- allow preventing notification variables from going idle
- Add more notification configurations:
- Access Control (
0x06
) - Water Alarm (
0x05
) - Heat Alarm (
0x04
) - CO2 Alarm (
0x03
) - CO Alarm (
0x02
)
- Access Control (
- add a lint step for config files
- handle errors in config files more gracefully
- dependency updates
- Drop messages with non-implemented CCs instead of crashing
- Fix parsing of MultiChannelCC encapsulated CCs
- Fix unwrapping of MultiChannelCCs inside ApplicationCommandRequests
- Include
config
dir and TypeScript definitions in package - Move
ansi-colors
from dev to production dependencies
- Improve support for notification CC: named variables and events
- Fix log message for metadata updates
- Remove unused dependencies, exports and methods
- Fix broken setValue API test
- First working release