Changelog
v0.17.3 - 2021-1-14
Added
Grizzly.Tracemodule for logging Z/IP packets that are sent from and received by Grizzly.
Fixed
- No match error when trying to encode a node id list
v0.17.2 - 2021-1-13
Added
- Decoding the
NodeInfoCacheGetcommand
Fixed
- Incorrect return value for
NodeInfoCacheGetwhen decoding the params - Issues around firmware updates and
zipgatewayversions >= 7.14.2
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.17.1 - 2021-1-12
Added supported for using zipgateway versions >= 7.14.2.
When upgrading from a zipgateway version less than 7.14.2 you should provide
the zgw_eeprom_to_sqlite utility in your system or firmware. The utility should
be located in /usr/bin. Grizzly will try to run the utility if we detected it.
You can configure the database file and eeprom file via :database_file and
:eeprom_file options for the Grizzly.Supervisor. These are optional and no
changes are necessary for how you start Grizzly if you have already been using
Grizzly.
Added
- Support for
zipgatewayversions >= 7.14.2 :eeprom_fileto supervisor args (optional):database_fileto supervisor args (optional)
Thank you to those who contributed to this release:
- Frank Hunleth
v0.17.0 - 2021-1-8
Breaking change with how Grizzly reports water alarms.
If you are listening for water alarm notifications you will need to update from
:water to :water_alarm. This change was made to align better with the Z-Wave
specification.
Added
- Complete support for all notification events
- Support for version 2 of the Antitheft command class
- Support for SceneActuatorConf command class
- Support for SceneActivation command class
- More support for Erlang 23.2 DSL messages
Changed
:wateris not:water_alarmnotification
Fixed
- When receiving the supervision command class with a command encapsulated Grizzly was not actually processing the encapsulated command.
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.16.2 - 2020-12-23
Added
:list_modeparam for theGrizzly.ZWave.Commands.AssociationGroupInfoReportcommand.
v0.16.1 - 2020-12-22
Added
Fixed
- Data structure change in the associations file when deleting all associations
- Wrong
MultiChannelAssociationversion number being reported to devices - Ensure ack responses are sent when extra commands are received
- Force bind to
fd00::aaaa::2sincezipgatewayforces that all acks come from this address - Crash when receiving errors other than timeouts when trying to establish
connections to
zipgateway
Thank you to those who contributed to this release:
- Frank Hunleth
v0.16.0 - 2020-12-21
This release introduces a breaking change to the naming of the command class get and command class report modules. If you are using those modules directly, you will need to update to the use the new module names.
Changed
Grizzly.ZWave.Commands.CommandClassGetis nowGrizzly.ZWave.Commands.VersionCommandClassGet- The
:namefield for:command_class_getis now:version_command_class_get Grizzly.ZWave.Commands.CommandClassReportis nowGrizzly.ZWave.Commands.VersionCommandClassReport- The
:namefield for:command_class_reportis now:version_command_class_report
Added
- Added support for forcing the Z-Wave cache to update when fetching node
information. See
Grizzly.Node.get_info/2for more information. - Support for OTP 23.2
Fixed
- In some GenServers an exception would cascade
Updates
- Easier to read stack traces when some GenServers crash
v0.15.11 - 2020-12-11
Added
- Support for DoorLock command class version 4
Fixed
- Querying command class versions for extra commands on the LAN will return the version report correctly now.
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.10 - 2020-12-8
Added
- Support for querying the gateway about the command class versions it supports when querying extra supported command classes.
Fixed
- Spelling error fix for the
WakeUpNoMoreInformationcommand name
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.9 - 2020-12-4
Added
- Sending commands directly to the Z-Wave Gateway by passing
Grizzly.send_command/4:gatewayas the node id. - How to get DSK for a device in the cookbook docs
Fixed
- Spelling, whitespace and markdown issues in docs
Thank you to those who contributed to this release:
- Frank Hunleth
v0.15.8 - 2020-12-1
Added
- Support for
ZwavePlusInfocommand class
Fixed
- No function clause matching error when a connection closes
- Missing support for
:undefinedindicator
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.7 - 2020-11-30
Added
Fixed
- Error when handling older Z-Wave devices that use CRC16 checksums over any security schema
- Internal typo
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.6 - 2020-11-19
Added
- Add support for
NetworkUpdateRequestcommand - Add
Grizzly.Network.request_network_update/0
Changes
- Drop support for Elixir 1.8 and 1.9
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.5 - 2020-11-12
Added
- Support multi-channel associations in the unsolicited destination
Fixed
- Add the
:aggregated_endpointsparams to theMultiChannelEndpointReport
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.4 - 2020-11-5
Added
- Network management installation and maintenance command class
- Clock command class
- Unsolicited server support for the extra command classes:
- Association group command class list
- Association group name get
- Association group info get
- Device reset locally notification
Changed
- When a supervision get command is received in the unsolicited destination we send the supervision report for that command back to the sender.
- Dev deps updates
- Code clean up
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.3 - 2020-10-27
Fixed
- Documentation fixes
- Internal firmware update runner bug
Changed
- Updates in internal association persistence
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.2 - 2020-10-23
Added
- Support for the
unknown_eventnotification event for theaccess_controlnotification type
Fixed
- Support
SupervisionGetcommand for notifications. - Tried to send
:ack_responsevia unsolicited server which the unsolicited server should not be sending anything directly. - Fix typo in code
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.15.1 - 2020-10-09
Added
- Support for getting association grouping report via the Z-Wave PAN
- Support for setting associations via the Z-Wave PAN
- Support for removing associations via the Z-Wave PAN
- Support for getting specific associations via the Z-Wave PAN
- Added option to
Grizzly.Supervisorfor where to store data used by the unsolicited server for support of extra command classes
Changed
- When getting the associations via the Z-Wave PAN, Grizzly will now look at the stored data and respond accordingly.
Fixed
Grizzly.ZWave.Commands.SwitchBinaryReportdid not properly encode and decode the version 2 of the switch binary command class
v0.15.0 - 2020-10-08
This release does a major overhaul on the Grizzly.Transport behaviour. If you
haven't implemented a custom transport this release should not effect you and
you should be able to update with out too many issues, see the "Removed" section
of this release to note any other breaking changes. If you have created a
custom transport please see the documentation for Grizzly.Transport to see how
transports are now implemented.
Added
- How to resetting the controller to the cook book
- The
:unsolicited_destinationoption to theGrizzly.Supervisor - Support for the association get command via the Z-Wave PAN network
- Support proper ack response when a command is delivered through the Z-Wave PAN
Grizzly.Transports.UDP- This is experimental and is subject to change.Grizzly.ZWave.CommandClasses.CRC16EncapGrizzly.ZWave.Commands.CRC16EncapGrizzly.ZWave.CommandClasses.PowerLevelGrizzly.ZWave.Commands.PowerlevelGetGrizzly.ZWave.Commands.PowerlevelReportGrizzly.ZWave.Commands.PowerlevelSetGrizzly.ZWave.Commands.PowerlevelTestNodeGetGrizzly.ZWave.Commands.PowerlevelTestNodeReportGrizzly.ZWave.Commands.PowerlevelTestNodeSet
Changed
- Refactored the
Grizzly.Transportbehaviour - please see documentation to see how to use the behaviour now.
Removed
Grizzly.Node.get_node_info/1
Fixed
MultiChannelAssociationGetcommand name fix- Documentation
- Command class fixes for the
Grizzly.ZWave.CommandClasses.Time
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
- Jon Wood
v0.14.8 - 2020-09-29
Added
- Support for power management notifications
v0.14.7 - 2020-09-25
Added
- Added
Grizzly.ZWave.Commands.FailedNodeListReportcommand
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.14.6 - 2020-09-18
Added
- Cookbook documentation for common uses of Grizzly
Changed
- Reduced the amount of logging
v0.14.5 - 2020-09-02
Fixed
- Commands with aggregated reports did not aggregate the results as expected
- Commands with aggregated reports would crash if that device was also handling another command due to the aggregate handler assuming that only one command was being processed at one time
v0.14.4 - 2020-09-01
Added
- Full support for
ThermostatFanModemode types
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.14.3 - 2020-08-31
Fixed
- Fix the start order of the connection supervisor and Z-Wave ready checker to ensure the supervisor process is alive before trying to test the connection
v0.14.2
Added
Grizzly.ZWave.CRCmodule for CRC functions related to the Z-Wave protocol
Removed
crcdependency
v0.14.1
Enhancements
- Support
zipgateway7.14.01 - Add
Grizzly.ZWave.CommandClasses.CentralScene - Add
Grizzly.ZWave.Commands.CentralSceneConfigurationGet - Add
Grizzly.ZWave.Commands.CentralSceneConfigurationSet - Add
Grizzly.ZWave.Commands.CentralSceneConfigurationReport - Add
Grizzly.ZWave.Commands.CentralSceneNotification - Add
Grizzly.ZWave.Commands.CentralSceneSupportedGet - Add
Grizzly.ZWave.Commands.CentralSceneSupportedReport
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.14.0
This breaking change has to do with how Grizzly is started. It is no longer an
application. Grizzly exposes the Grizzly.Supervisor module for a consuming
application to add to its supervision tree. All other APIs are backwards capable.
See the upgrade guide for more specifics on how to upgrade.
Breaking Changes
- Grizzly is not an OTP application anymore and will need to be started
manually via the new
Grizzly.Supervisormodule - All application config/mix config options are not used
- Removed the
Grizzly.Runtimemodule
Enhancements
- Add
Grizzly.Supervisormodule - Add
Grizzly.ZWave.CommandClasses.Indicator - Add
Grizzly.ZWave.Commands.IndicatorGet - Add
Grizzly.ZWave.Commands.IndicatorSet - Add
Grizzly.ZWave.Commands.IndicatorReport - Add
Grizzly.ZWave.Commands.IndicatorSupportedGet - Add
Grizzly.ZWave.Commands.IndicatorSupportedReport - Add
Grizzly.ZWave.CommandClasses.Antitheft - Add
Grizzly.ZWave.Commands.AntitheftGet - Add
Grizzly.ZWave.Commands.AntitheftReport - Add
Grizzly.ZWave.CommandClasses.AntitheftUnlock - Add
Grizzly.ZWave.Commands.AntitheftUnlockSet - Add
Grizzly.ZWave.Commands.AntitheftUnlockGet - Add
Grizzly.ZWave.Commands.AntitheftUnlockReport - Add
Grizzly.ZWave.Commands.ConfigurationBulkGet - Add
Grizzly.ZWave.Commands.ConfigurationBulkSet - Add
Grizzly.ZWave.Commands.ConfigurationBulkReport - Add
Grizzly.ZWave.Commands.ConfigurationPropertiesGet - Add
Grizzly.ZWave.CommandClasses.ApplicationStatus - Add
Grizzly.ZWave.Commands.ApplicationBusy - Add
Grizzly.ZWave.Commands.ApplicationRejectedRequest
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.13.0
This update breaks the main Grizzly.send_command/4 API as Grizzly use to
respond with different tuples but now it will return with the new
Grizzly.Report.t() data structure. A full guide on the breaking changes
and what needs to be updated can be found here.
This change allows us to gather more information about a response from Grizzly. For example, with this change you can get transmission stats about network properties when sending a command now:
{:ok, report} = Grizzly.send_command(node_id, command, command_args, transmission_stats: true)
report.transmission_statsSee the Grizzly.Report module for full details.
Enhancements
- Add
Grizzly.Report - Add getting transmission stats for sent commands
- Docs and type spec updates
v0.12.3
Fixes
- Handle multichannel commands that are not appropriately encapsulated
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.12.2
Enhancements
- Add
Grizzly.ZWave.CommandClasses.Hail - Add
Grizzly.ZWave.Commands.Hail - Support updated Z-Wave spec command params for
Grizzly.ZWave.Commands.DoorLockOperationReport
v0.12.1
Enhancements
- Add
Grizzly.ZWave.Commands.MultiChannelAggregatedMemberGet - Add
Grizzly.ZWave.Commands.MultiChannelAggregatedMemberReport - Add
Grizzly.ZWave.Commands.MultiChannelCapabilityGet - Add
Grizzly.ZWave.Commands.MultiChannelCommandEncapsulation - Add
Grizzly.ZWave.Commands.MultiChannelEndpointFind - Add
Grizzly.ZWave.Commands.MultiChannelEndpointFindReport - Add
Grizzly.ZWave.CommandClasses.MultiCommand - Add
Grizzly.ZWave.Commands.MultiCommandEncapsulation - Add
Grizzly.ZWave.CommandClasses.Time - Add
Grizzly.ZWave.Commands.DateGet - Add
Grizzly.ZWave.Commands.DateReport - Add
Grizzly.ZWave.Commands.TimeGet - Add
Grizzly.ZWave.Commands.TimeReport - Add
Grizzly.ZWave.Commands.TimeOffsetGet - Add
Grizzly.ZWave.Commands.TimeOffsetReport - Add
Grizzly.ZWave.Commands.TimeOffsetSet - Add
Grizzly.ZWave.CommandsClasses.TimeParameters - Add
Grizzly.ZWave.Commands.TimeParametersGet - Add
Grizzly.ZWave.Commands.TimeParametersReport - Add
Grizzly.ZWave.Commands.TimeParametersSet - Documentation updates
Fixes
- Some devices send alarm reports that do not match the specification in a minor way. So, we allow for parsing of these reports now.
- Fixed internal command class name to module implementation mapping issue
for
:switch_multilevel_setand:switch_multilevel_getcommands.
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.12.0
There is a small breaking change that will only effect you if you hard have
:water_leak_detected_known_location and :water_leak_dropped_known_location
hard coded into your application for any reason. These are notifications about
water leaks, and so if you have not directly tried to match on or handle logic
about water leak notifications then this breaking change should not effect you.
From a high level this release provides updates to Z-Wave notifications in terms of command support and package parsing, extra tooling for better introspection, a handful of new commands and command classes, and helpful configuration items.
Enhancements
- Add
Grizzly.ZWave.Commands.ApplicationNodeInfoReport - Add
Grizzly.ZWave.CommandClass.NodeNaming - Add
Grizzly.ZWave.Commands.NodeLocationGet - Add
Grizzly.ZWave.Commands.NodeLocationReport - Add
Grizzly.ZWave.Commands.NodeLocationSet - Add
Grizzly.ZWave.Commands.NodeNameGet - Add
Grizzly.ZWave.Commands.NodeNameReport - Add
Grizzly.ZWave.Commands.NodeNameSet - Add
Grizzly.ZWave.Commands.AlarmGet - Add
Grizzly.ZWave.Commands.AlarmSet - Add
Grizzly.ZWave.Commands.AlarmEventSupportedGet - Add
Grizzly.ZWave.Commands.AlarmEventSupportedReport - Add
Grizzly.ZWave.Commands.AlarmTypeSupportedGet - Add
Grizzly.ZWave.Commands.AlarmTypeSupportedReport - Add
Grizzly.ZWave.Commands.AssociationGroupingsGet - Add
Grizzly.ZWave.Commands.AssociationGroupingsReport - Add
Grizzly.ZWave.Commands.AssociationRemove - Add
Grizzly.ZWave.Commands.AssociationReport - Add
Grizzly.ZWave.Commands.AssociationSpecificGroupingsGet - Add
Grizzly.ZWave.Commands.AssociationSpecificGroupingsReport - Add
Grizzly.ZWave.CommandClasses.MultiChannelAssociation - Add
Grizzly.ZWave.Commands.MultiChannelAssociationGroupingsGet - Add
Grizzly.ZWave.Commands.MultiChannelAssociationGroupingsReport - Add
Grizzly.ZWave.Commands.MultiChannelAssociationRemove - Add
Grizzly.ZWave.Commands.MultiChannelAssociationReport - Add
Grizzly.ZWave.Commands.MultiChannelAssociationSet - Add
Grizzly.ZWave.CommandClass.DeviceResetLocally - Add
Grizzly.ZWave.Commands.DeviceResetLocallyNotification - Add
Grizzly.ZWave.Commands.LearnModeSet - Add
Grizzly.ZWave.Commands.LearnModeSetStatus - Add
Grizzly.Inclusions.learn_mode/1 - Add
Grizzly.Inclusions.learn_mode_stop/0 - Support version 8 of the
Grizzly.ZWave.Commands.AlarmReport - Support parsing naming and location parameters from Z-Wave notifications
- Add
mix zipgateway.cfgto print out the zipgateway config that Grizzly is configured to use. - Add
Grizzly.list_commands/0to list all support Z-Wave commands in Grizzly. - Add
Grizzly.commands_for_command_class/1for listing the Z-Wave commands support by Grizzly for a particular command class. - Add
:handlersto:grizzlyconfiguration options for firmware update and inclusion handlers. - Documentation updates
Fixes
- Parsing the wrong byte for into the wrong notification type
- Invalid type spec for
Grizzly.ZWave.Security.failed_type_from_byte/1
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.11.0
Grizzly now supports parsing alarm/notification parameters as a keyword list of parameters. This change is breaking because the event parameters use to be the raw binary we received from the Z-Wave network and now it is a keyword list.
We only support lock and keypad event parameters currently, but this puts into place the start of being able to support event parameters.
Enhancements
- Support parsing event parameters for lock and keypad operations
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.10.3
Enhancements
- Add
handle_timeout/2to theGrizzly.InclusionHandlerbehaviour. This allows for handling when an inclusion process timesout. - Add
Grizzly.Inclusions.stop/0force stop any type of inclusion process. - Add
Grizzly.FirmwareUpdatesmodule for updating the Z-Wave firmware on Z-Wave hardware
Fixes
- not parsing command classes correctly on
Grizzly.ZWave.Commands.NodeAddStatus - Not stopping an inclusion process correctly when calling
Grizzly.Inclusions.add_node_stop/0
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v.0.10.2
Enhancements
Fixes
- Sensor types returned from the support sensors report
- Broken link in docs
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v.0.10.1
Enhancements
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.10.0
Removed the parameter :secure_command_classes from
Grizzly.ZWave.Command.NodeInfoCacheReport. Also updated the param
:command_classes to be a keyword list of the various command classes that
the node can have.
The fields in the keyword list are:
:non_secure_supported:non_secure_controlled:secure_supported:secure_controlled
If you are using :secure_command_classes for checking if the device is
securely added you can update like this:
{:ok, node_info} = Grizzly.Node.get_info(10)
Keyword.get(Grizzly.ZWave.Command.param!(node_info, :command_classes), :secure_controlled)Enhancements
- Add
Grizzly.ZWave.Commands.AssociationGroupCommandListGet - Add
Grizzly.ZWave.Commands.AssociationGroupCommandListReport - Add
Grizzly.ZWave.Commands.AssociationGroupInfoGet - Add
Grizzly.ZWave.Commands.AssociationGroupInfoReport - Add
Grizzly.ZWave.Commands.AssociationGroupNameGet - Add
Grizzly.ZWave.Commands.AssociationGroupNameReport - Add
Grizzly.ZWave.Commands.MultiChannelEndpointGet - Add
Grizzly.ZWave.Commands.MultiChannelEndpointReport
Fixes
- Internal command class name discrepancies
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.9.0
The official v0.9.0 release!
If you trying to upgrade from v0.8.x please see Grizzly v0.8.0 -> v0.9.0
guide and follow the Changelog from the initial v0.9.0-rc.0 release.
Changes from the last rc are:
Enhancements
- Support Erlang 23.0 with Elixir 1.10
- Dep updates and tooling enhancements
Fixes
- miss spellings of command names
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.9.0-rc.4
Enhancements
- Add
Grizzly.ZWave.Commands.FirmwareMDGet - Add
Grizzly.ZWave.Commands.FirmwareUpdateMDRequestGet - Add
Grizzly.ZWave.Commands.FirmwareUpdateMDRequestReport - Add
Grizzly.ZWave.Commands.FirmwareUpdateMDStatusReport - Add
Grizzly.ZWave.Commands.FirmwareUpdateMDReport - Add
Grizzly.ZWave.Commands.FirmwareUpdateActivationSet - Add
Grizzly.ZWave.Commands.FirmwareUpdateActivationReport - Remove some dead code
Fixes
- When resetting the controller we were not closing the connections to
the nodes. This caused some error logging in
zipgatewayand also left open unused resources. This could cause problems later when reconnecting devices to resources that were already in the system.
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.9.0-rc.3
Enhancements
- Some Z-Wave devices report the wrong value for the switch multilevel report so we added support for those values.
Fixes
- When two processes quickly sent the same command to the same device only one process would receive the response
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.9.0-rc.2
Deprecated
Grizzly.Node.get_node_info/1- useGrizzly.Node.get_info/1instead
Added
Grizzly.Node.get_info/1Grizzly.ZWave.CommandClasses.SupervisionGrizzly.ZWave.Commands.SupervisionGetGrizzly.ZWave.Commands.SupervisionReportGrizzly.ZWave.CommandClasses.SensorBinaryGrizzly.ZWave.Commands.SensorBinaryGetGrizzly.ZWave.Commands.SensorBinaryReport
Enhancements
- Support for
DoorLockOperationReport>= V3 parsing
Fixes
- Bad parsing of
NodAddStatus:failedvalue
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
v0.9.0-rc.1
Breaking Changes
Grizzly.ZWave.IconTypesremovedicon_typefrom the atom values of the icon name.Grizzly.ZWave.DeciveTypes.icon_name()->Grizzly.ZWave.DeviceTypes.name()Grizzly.ZWave.DeciveTypes.icon_integer()->Grizzly.ZWave.DeviceTypes.value()
Enhancements
- Doc updates
- Internal code quality
- Deps updates
- Better types around DSKs
- CI support for elixir versions 1.8, 1.9, and 1.10
- Support all versions of the meter report
- Support a low battery report
v0.9.0-rc.0
For more detailed guide to the breaking changes and how to upgrade please see our Grizzly v0.8.0 -> v0.9.0 guide.
This release presents a simpler API, faster boot time, more robustness in Z-Wave communication, and resolves all open issues on Grizzly that were reported as bugs.
Removed APIs
Grizzly.NodestructGrizzly.ConnmoduleGrizzly.NotificationsmoduleGrizzly.PacketmoduleGrizzly.close_connectionGrizzly.command_class_versions_known?Grizzly.update_command_class_versionsGrizzly.start_learn_modeGrizzly.get_command_class_versionGrizzly.has_command_classGrizzly.connected?Grizzly.has_command_class_namesGrizzly.configGrizzly.Network.busy?Grizzly.Network.ready?Grizzly.Network.get_stateGrizzly.Network.set_stateGrizzly.Network.get_nodeGrizzly.Node.newGrizzly.Node.updateGrizzly.Node.put_ipGrizzly.Node.get_ipGrizzly.Node.connectGrizzly.Node.disconnectGrizzly.Node.make_configGrizzly.Node.has_command_class?Grizzly.Node.connected?Grizzly.Node.command_class_namesGrizzly.Node.update_command_class_versionsGrizzly.Node.get_command_class_versionGrizzly.Node.command_class_version_known?Grizzly.Node.update_command_classGrizzly.Node.put_associationGrizzly.Node.get_association_listGrizzly.Node.configure_associationGrizzly.Node.get_network_informationGrizzly.Node.initialize_command_versions
Moved APIs
Grizzly.reset_controller->Grizzly.Network.reset_controllerGrizzly.get_nodes->Grizzly.Network.get_node_idsGrizzly.get_node_info->Grizzly.Node.get_node_infoGrizzly.Notifications.subscribe->Grizzly.subscribe_commandandGrizzly.subscribe_commandsGrizzly.Notifications.unsubscribe->Grizzly.unsubscribeGrizzly.add_node->Grizzly.Inclusions.add_nodeGrizzly.remove_node->Grizzly.Inclusions.remove_nodeGrizzly.add_node_stop->Grizzly.Inclusions.add_node_stopGrizzly.remove_node_stop->Grizzly.Inclusions.remove_node_stopGrizzly.Client->Grizzly.TransportGrizzly.Security->Grizzly.ZWave.SecurityGrizzly.DSK->Grizzly.ZWave.DSKGrizzly.Node.add_lifeline_group->Grizzly.Node.set_lifeline_association
We moved all the commands and command classes to be under the the
Grizzly.ZWave module namespace and refactored the command behaviour.
Grizzly.send_command Changes
The main API function to Grizzly has changed in that it only takes a node id, command name (atom), command args, and command options.
Also it no longer returns a plain map when there is data to report back from
a Z-Wave node but it will return {:ok, %Grizzly.ZWave.Command{}}.
Please see Grizzly and Grizzly.ZWave.Command docs for more information.
Connections
Grizzly uses the zipgateway binary under the hood. The binary has its own
networking stack and provides a DTLS server for us to connect to. Prior to
Grizzly v0.9.0 we greatly exposed that implementation detail. However, starting
in Grizzly v0.9.0 we have hidden that implementation detail away and all
connection functionally is handle by Grizzly internally. This leaves the
consumer of Grizzly to just work about sending and receiving commands.
If you are using %Grizzly.Conn{} directly this is no longer available and you
should upgrade to just using the node id you were sending commands to.
When Grizzly is Ready
We use to send a notification to let the consumer to know when Grizzly is
read. Staring in v0.9.0 the consumer needs to configure Grizzly's runtime
with the on_ready module, function, arg callback.
config :grizzly,
runtime: [
on_ready: {MyApp, :some_function, []}
]See Grizzly.Runtime for more details
Inclusion Handler Behaviour
Adding and removing a Z-Wave node can be a very interactive process that involves users being able to talk to the including controller and device. The way Grizzly < v0.9.0 did it wasn't vary useful or robust. By adding the the inclusion handler behaviour we allow the consumer to have full control over the inclusion process, enabling closer to Z-Wave specification inclusion process.
See Grizzly.InclusionHandler and Grizzly.Inclusions for more information.
Command Handler Behaviour
If you need to handle a Z-Wave command lifecycle differently than the default
Grizzly implementation you can make your own handler and pass it into
Grizzly.send_command as an option:
Grizzly.send_command(node_id, :switch_binary_set, [value: :on], handler: MyHandler)See Grizzly.CommandHandler for more information.
Supporting Commands
At the point of the rc.0 release are not fully 100% supporting the same
commands as in < v0.8.8, but we are really close. The commands that we haven't
pulled over are not critical to average Z-Wave device control. We will work to
get all the commands back into place.
Thank you to Jean-Francois Cloutier for contributing so much to this release.
v0.8.8
- Enhancements
- Make Z-Wave versions standard version formatting
- Fixes
- Paring the FirmwareMD report for version 5
- Fix spec for queued commands
v0.8.7
- Enhancements
- Support
FIRMWARE_UPDATE_MDmeta data report command v5
- Support
v0.8.6
- Fixes
- duplicate fields on the
Grizzly.Nodestruct
- duplicate fields on the
v0.8.5
- Fixes
- various spelling and documentation fixes
- dialzyer fixes
v0.8.4
- Fixes
- Handle when there are no nodes in the node provisioning list when requesting all the DSKs.
v0.8.3
- Enhancements
- Support Wake Up v2 and Multi Channel Association v3
v0.8.2
- Enhancements
- Support SWITCH_BINARY_REPORT version 2
v0.8.1
- Enhancements
- Update docs and resources
- Fixes
- An issue when the unsolicited message server would cause a no match error that propagated up the supervision tree
Thank you to those who contributed to this release:
- Ryan Winchester
v0.8.0
Adds support for handling SmartStart meta extension fields.
These fields give more information about the current status, inclusion methods, and product information for the SmartStart device.
There are two breaking changes:
- All SmartStart meta extensions were moved from
Grizzly.CommandClass.NodeProvisioningnamespace into theGrizzly.SmartStart.MetaExtensionnamespace. - Upon finalizing the meta extension behaviour and API we made changes to how
previously supported meta extensions worked. Namely, we added a
new/1callback that does parameter validation, and returns{:ok, MetaExtension.t()}. This breaks the pervious behaviour ofto_binary/1functions in perviously implemented meta extensions.
- Enhancements
- Full support for SmartStart meta extensions
- Add
meta_extensionsfield toGrizzly.CommandClass.NodeProvisioningcommands that can handle meta extensions - Update
Grizzly.Conn.Server.Configdocs
- Fixes
- Invalid keep alive (heart beat) interval
- Set correct constraints on
Timecommand offset values
Thank you to those who contributed to this release:
- Jean-Francois Cloutier
- Ryan Winchester
v0.7.0
Introduces SmartStart support!
SmartStart will allow you to pair a device to a Z-Wave controller with out turning the device on. Devices that support SmartStart will have a device specific key (DSK) that you can provide to the controller prior to turning on the device.
iex> Grizzly.send_command(Grizzly.Controller, Grizzly.CommandClass.NodeProvisioning.Set, dsk: dsk)
:okAfter running the above command you can plug in your SmartStart device and the controller will try to join the Z-Wave network automatically.
As a note, your controller might not have the necessary firmware to have SmartStart.
To verify this you can use RingLogger to read zipgateway logs which at the start
will log if the controller supports SmartStart.
Breaking Changes
Breaking change to the return value of sending Grizzly.CommandClass.ZipNd.InvNodeSolicitation.
When using that function send_command would return
{:ok, {:node_ip, node_id, ip_address}} but now it returns
{:ok, %{ip_address: ip_address, node_id: node_id, home_id: home_id}}.
- Enhancements
- SmartStart support through the
NodeProvisioningcommand class - Added
home_idfield toGrizzly.Node.t() - Support fetching
home_idof the Z-Wave nodes when fetching Z-Wave information about the node
- SmartStart support through the
v0.6.6
- Fixes
- Application start failure when providing the correct
data structure to the
zipgateway_cfgconfiguration field
- Application start failure when providing the correct
data structure to the
v0.6.5
- Enhancements
- Support
GetDSKcommand - Support
FailedNodeRemovecommand - Allow
zipgateway_pathconfiguration - Generate the
zipgateway.cfgto allow device specific information to be passed into thezipgatewayruntime.
- Support
v0.6.4
- Enhancements
- Validation of UserCode arguments to help ensure usage of Grizzly follows the Z-Wave specification
v0.6.3
- Enhancements
- Supports AssociationGroupInformation Command Class
v0.6.2
- Enhancements
- Remove the dependence on
pidofallowinggrizzlyto work on any nerves device without the need ofbusybox
- Remove the dependence on
v0.6.1
- Enhancements
- Update commands
IntervalGetandManufacturerSpecificGetto be more consistent - Better handling of invalid
ManufacturerSpecificinfo received from devices
- Update commands
v0.6.0
Changed Grizzly.CommandClass.CommandClassVersion to Grizzly.CommandClass.Version
and changed Grizzly.ComamndClass.CommandClassVersion.Get to
Grizzly.CommandClass.Version.CommandClassGet as these names reflect the Z-Wave
specification better.
If you only have used Grizzly.get_command_class_version/2 and the related function
in Grizzly.Node module this change should not effect you.
- Enhancements
- Add support for:
- MultiChannelAssociation Command Class
- WakeUp Command Class NoMoreInformation command
- Complete Association Command Class
- ZwaveplusInfo Command Class
- Version Get Command
- Clean up docs
- Renamed
Grizzly.CommandClass.CommandClassVersiontoGrizzly.CommandClass.Version - Renamed
Grizzly.CommandClass.CommandClassVersion.GettoGrizzly.CommandClass.Version.CommandClassGet
- Add support for:
v0.5.0
Introduces Grizzly.Command.EncodeError exception and updates encoding and
decoding functions to return tagged tuples. We now use these things when trying
to send a command via Grizzly.send_command/3 so if you have invalid command
arguments we can provide useful error handling with
{:error, Grizzly.Command.EncodeError.t()}. The EncodeError.t() implements
Elixir's exception behaviour so you can leverage the standard library to
work with the exception.
Unless you have implemented custom commands or used one of the many command
encoders or decodes explicitly this update should not affect you too much. If
you have used the encoder/decoders explicitly please see the documentation for
the ones you have used to see the updated API. If you have written a command we
encourage you to validate the arguments and return the {:error, EncodeError.t()}
to improve the usability of and robustness your command. The new
Grizzly.Command.Encoding module provides some useful functionality for
validating specs for command arguments.
- Enhancements
- Provide command argument validation and error handling via
Grizzly.Command.EncodeError.() - Update all the command arg encoder/decoder to use tagged tuples for better handling of invalid command arguments
- Introduces new
Grizzly.Command.Encodingmodules for helping validate command arugment specifications
- Provide command argument validation and error handling via
- Fixes
- Crashes when providing invalid command arguments
v0.4.3
- Enhancements
- Support Powerlevel command class
- Doc clean up
Grizzly.send_command/2andGrizzly.send_command/3can be passed a node id instead of a node.
v0.4.2
- Enhancements
- Support NoOperation command class
v0.4.1
- Enhancements
- Add support for Network Management Installation Maintenance
- Updates to docs and examples
v0.4.0
Changed how configuration works.
Grizzly now requires the serial port to be configured:
config :grizzly,
serial_port: "/dev/ttyACM0"Also added the pidof_bin configuration option to allow official
Nerves systems to work with some of the Grizzly scripts the call
that utility by using the busybox package and
pointing to the executable of pidof that is compiled with busybox.
If you are using a custom system you can add that utility to the busybox config, and not need to use this configuration option.
config :grizzly,
pidof_bin: "/srv/erlang/lib/busybox-0.1.2/priv/bin/pidof"Double check the version of busybox you are using and make sure that
version matches the version in the pidof_bin path.
Changed run_grizzly_bin to run_zipgateway_bin.
v0.3.1
- Enhancements
- Implement multilevel sensor command to get supported sensor types
v0.3.0
The big change here is removing the in memory cache for devices on the network. Most common use cases will be for a consuming application to hold on to the network device information and apply some costume logic to now that is managed.
Also, we would have to keep both the external and internal cache in sync, which is really hard and was creating an odd event based system, which also lends itself to complexity.
Breaking Changes
Grizzly.list_nodes() -> Grizzly.get_nodes()
This is mostly because before we were listing nodes from a cache, and now we are getting nodes from the Z-Wave network.
Also with get_nodes we don't automatically connect
to the nodes. So getting and connecting to all nodes
on the Z-Wave network might look something like this:
def get_and_connect() do
case Grizzly.get_nodes() do
{:ok, nodes} -> Enum.map(nodes, &Grizzly.Node.connect/1)
error -> error
end
endGrizzly.update_command_class_versions/2 -> Grizzly.update_command_class_versions/1
Before we would pass if the update would be async or not
after reviewing how this gets used it made sense to
always do it sync. Also it returns a Node.t() now
with the command classes updated with the version.
This is the same change found in Grizzly.Node.update_command_class_versions
Grizzly.command_class_version/3 -> Grizzly.get_command_class_version/2
Removed the use_cache param as there is no longer a cache.
Same change found in Grizzly.Node.get_command_class_version
- Enhancements
- Support
Grizzly.CommandClass.Timecommand class - Support
Grizzly.CommandClass.TimeParametersGETandSETcommands - Support
Grizzly.CommandClass.ScheduleEntryLockcommand class Grizzly.Notifications.subscribe_all/1- subscribe to many notifications at onceGrizzly.CommandClass.name/1- get the name of the command classGrizzly.CommandClass.version/1- get the version of the command classGrizzly.Network.get_nodes/0- get the nodes on the networkGrizzly.Network.get_node/1- get a node by node id from the networkGrizzly.Network.get_node_info/1- get node information about a node via node idGrizzly.Node.get_ip/1- can now take either aNode.t()or a node id
- Support
- Updates
- Docs and type clean up
- Fixes
- Timeout when getting command class versions
v0.2.1
- Updates
- Support for the time command class
- Fixes
- Time-boxing of getting a command class version
v0.2.0
- Fixes
- Logging with old
ZipGatewaylabel is nowGrizzly - Fix queued API from
{ZipGateway, :queued_response, ref, response}to{Grizzly, :queued_response, ref, response} - Fix timeout error when waiting for DTLS server from the
zipgatewayside
- Logging with old