Packages
grizzly
0.10.1
9.1.4
9.1.2
9.1.1
9.1.0
9.0.0
8.15.3
8.15.2
8.15.1
8.15.0
8.14.0
8.13.0
8.12.0
8.11.3
8.11.2
8.11.1
8.11.0
8.10.0
8.9.0
8.8.1
8.8.0
8.7.1
8.7.0
8.6.12
8.6.11
8.6.10
8.6.9
8.6.8
8.6.7
retired
8.6.6
8.6.5
8.6.4
8.6.3
8.6.2
8.6.1
8.6.0
8.5.3
8.5.2
8.5.1
8.5.0
8.4.0
8.3.0
8.2.3
8.2.2
8.2.1
8.2.0
8.1.0
8.0.1
8.0.0
7.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.0
7.1.4
7.1.3
7.1.2
7.1.1
7.1.0
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.8.8
6.8.7
6.8.6
6.8.5
6.8.4
6.8.3
6.8.2
6.8.1
6.8.0
6.7.1
6.7.0
6.6.1
6.6.0
6.5.1
6.5.0
6.4.0
6.3.0
6.2.0
6.1.1
6.1.0
6.0.1
6.0.0
5.4.1
5.4.0
5.3.0
5.2.8
5.2.7
5.2.6
5.2.5
5.2.4
5.2.3
5.2.2
5.2.1
5.2.0
5.1.2
5.1.1
5.1.0
5.0.2
5.0.1
5.0.0
4.0.1
4.0.0
3.0.0
2.1.0
2.0.0
1.0.1
1.0.0
0.22.7
0.22.6
0.22.5
0.22.4
0.22.3
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.7
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.9.0-rc.4
0.9.0-rc.3
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.3
0.4.2
Elixir Z-Wave library
Current section
Files
Jump to
Current section
Files
lib/grizzly/commands/table.ex
defmodule Grizzly.Commands.Table do
@moduledoc false
# look up support for supported command classes and their default Grizzly
# runtime related options. This where Grizzly and Z-Wave meet in regards to
# out going commands
defmodule Generate do
@moduledoc false
alias Grizzly.CommandHandlers.{AckResponse, WaitReport, AggregateReport}
alias Grizzly.ZWave.Commands
@table [
{:default_set,
{Commands.DefaultSet, handler: {WaitReport, complete_report: :default_set_complete}}},
# Noop
{:no_operation, {Commands.NoOperation, handler: AckResponse}},
# Basic
{:basic_get, {Commands.BasicGet, handler: {WaitReport, complete_report: :basic_report}}},
{:basic_set, {Commands.BasicSet, handler: AckResponse}},
# Battery
{:battery_get,
{Commands.BatteryGet, handler: {WaitReport, complete_report: :battery_report}}},
# Binary switches
{:switch_binary_get,
{Commands.SwitchBinaryGet, handler: {WaitReport, complete_report: :switch_binary_report}}},
{:switch_binary_set, {Commands.SwitchBinarySet, handler: AckResponse}},
# Configuration
{:configuration_set, {Commands.ConfigurationSet, handler: AckResponse}},
{:configuration_get,
{Commands.ConfigurationGet, handler: {WaitReport, complete_report: :configuration_report}}},
# Manufacturer specific
{:manufacturer_specific_get,
{Commands.ManufacturerSpecificGet,
handler: {WaitReport, complete_report: :manufacturer_specific_report}}},
{:manufacturer_specific_device_specific_get,
{Commands.ManufacturerSpecificDeviceSpecificGet,
handler: {WaitReport, complete_report: :manufacturer_specific_device_specific_report}}},
# Multilevel switches
{:switch_multilevel_get,
{Commands.SwitchMultilevelGet,
handler: {WaitReport, complete_report: :switch_multilevel_report}}},
{:switch_multilevel_set, {Commands.SwitchMultilevelSet, handler: AckResponse}},
{:switch_multilevel_start_level_change,
{Commands.SwitchMultilevelStartLevelChange, handler: AckResponse}},
{:switch_multilevel_stop_level_change,
{Commands.SwitchMultilevelStopLevelChange, handler: AckResponse}},
# Node management
{:node_list_get,
{Commands.NodeListGet, handler: {WaitReport, complete_report: :node_list_report}}},
{:node_add, {Commands.NodeAdd, handler: {WaitReport, complete_report: :node_add_status}}},
{:node_info_cached_get,
{Commands.NodeInfoCachedGet,
handler: {WaitReport, complete_report: :node_info_cache_report}}},
{:node_remove,
{Commands.NodeRemove, handler: {WaitReport, complete_report: :node_remove_status}}},
# DSKs
{:node_add_keys_set, {Commands.NodeAddKeysSet, handler: AckResponse}},
{:node_add_dsk_set, {Commands.NodeAddDSKSet, handler: AckResponse}},
{:dsk_get, {Commands.DSKGet, handler: {WaitReport, complete_report: :dsk_report}}},
# Door Lock
{:door_lock_operation_set, {Commands.DoorLockOperationSet, handler: AckResponse}},
{:door_lock_operation_get,
{Commands.DoorLockOperationGet,
handler: {WaitReport, complete_report: :door_lock_operation_report}}},
# Associations
{:association_set, {Commands.AssociationSet, handler: AckResponse}},
{:association_get,
{Commands.AssociationGet,
handler: {AggregateReport, complete_report: :association_report, aggregate_param: :nodes}}},
# Association Group Info
{:association_group_name_get,
{Commands.AssociationGroupNameGet,
handler: {WaitReport, complete_report: :association_group_name_report}}},
{:association_group_info_get,
{Commands.AssociationGroupInfoGet,
handler: {WaitReport, complete_report: :association_group_info_report}}},
{:association_group_command_list_get,
{Commands.AssociationGroupCommandListGet,
handler: {WaitReport, complete_report: :association_group_command_list_report}}},
# Keep alive
{:keep_alive, {Commands.ZIPKeepAlive, handler: AckResponse}},
# Version
{:version_get,
{Commands.VersionGet, handler: {WaitReport, complete_report: :version_report}}},
{:version_command_class_get,
{Commands.CommandClassGet, handler: {WaitReport, complete_report: :command_class_report}}},
# Firmware update metadata
{:firmware_md_get,
{Commands.FirmwareMDGet, handler: {WaitReport, complete_report: :firmware_md_report}}},
{:firmware_update_md_request_get,
{Commands.FirmwareUpdateMDRequestGet,
handler: {WaitReport, complete_report: :firmware_update_md_request_report}}},
{:firmware_update_md_report, {Commands.FirmwareUpdateMDReport, handler: AckResponse}},
{:firmware_update_activation_set,
{Commands.FirmwareUpdateActivationSet,
handler: {WaitReport, complete_report: :firmware_update_activation_report}}},
# Wake up
{:wake_up_interval_get,
{Commands.WakeUpIntervalGet,
handler: {WaitReport, complete_report: :wake_up_interval_report}}},
{:wake_up_interval_set, {Commands.WakeUpIntervalSet, handler: AckResponse}},
{:wake_up_no_more_information, {Commands.WakeUpNoMoreInformation, handler: AckResponse}},
{:wake_up_interval_capabilities_get,
{Commands.WakeUpIntervalCapabilitiesGet,
handler: {WaitReport, complete_report: :wake_up_interval_capabilities_report}}},
# Sensor Multilevel
{:sensor_multilevel_get,
{Commands.SensorMultilevelGet,
handler: {WaitReport, complete_report: :sensor_multilevel_report}}},
{:sensor_multilevel_supported_sensor_get,
{Commands.SensorMultilevelSupportedSensorGet,
handler: {WaitReport, complete_report: :sensor_multilevel_supported_sensor_report}}},
# User code
{:user_code_set, {Commands.UserCodeSet, handler: AckResponse}},
{:user_code_get,
{Commands.UserCodeGet, handler: {WaitReport, complete_report: :user_code_report}}},
{:user_code_users_number_get,
{Commands.UserCodeUsersNumberGet,
handler: {WaitReport, complete_report: :user_code_users_number_report}}},
# Meter
{:meter_get, {Commands.MeterGet, handler: {WaitReport, complete_report: :meter_report}}},
# Thermostat mode
{:thermostat_mode_set, {Commands.ThermostatModeSet, handler: AckResponse}},
{:thermostat_mode_get,
{Commands.ThermostatModeGet,
handler: {WaitReport, complete_report: :thermostat_mode_report}}},
# Thermostat setpoint
{:thermostat_setpoint_set, {Commands.ThermostatSetpointSet, handler: AckResponse}},
{:thermostat_setpoint_get,
{Commands.ThermostatSetpointGet,
handler: {WaitReport, complete_report: :thermostat_setpoint_report}}},
# Thermostat fan mode
{:thermostat_fan_mode_set, {Commands.ThermostatFanModeSet, handler: AckResponse}},
{:thermostat_fan_mode_get,
{Commands.ThermostatFanModeGet,
handler: {WaitReport, complete_report: :thermostat_fan_mode_report}}},
# Thermostat fan state
{:thermostat_fan_state_get,
{Commands.ThermostatFanStateGet,
handler: {WaitReport, complete_report: :thermostat_fan_state_report}}},
# Thermostat setback
{:thermostat_setback_set, {Commands.ThermostatSetbackSet, handler: AckResponse}},
{:thermostat_setback_get,
{Commands.ThermostatSetbackGet,
handler: {WaitReport, complete_report: :thermostat_setback_report}}},
# Thermostat operating state
{:thermostat_operating_state_get,
{Commands.ThermostatOperatingStateGet,
handler: {WaitReport, complete_report: :thermostat_operating_state_report}}},
# Node provisioning
{:node_provisioning_set, {Commands.NodeProvisioningSet, handler: AckResponse}},
{:node_provisioning_get,
{Commands.NodeProvisioningGet,
handler: {WaitReport, complete_report: :node_provisioning_report}}},
{:node_provisioning_delete, {Commands.NodeProvisioningDelete, handler: AckResponse}},
{:node_provisioning_list_iteration_get,
{Commands.NodeProvisioningListIterationGet,
handler: {WaitReport, complete_report: :node_provisioning_list_iteration_report}}},
# Supervision
{:supervision_get,
{Commands.SupervisionGet, handler: {WaitReport, complete_report: :supervision_report}}},
# Sensor binary
{:sensor_binary_get,
{Commands.SensorBinaryGet, handler: {WaitReport, complete_report: :sensor_binary_report}}},
# Multi Channel
{:multi_channel_endpoint_get,
{Commands.MultiChannelEndpointGet,
handler: {WaitReport, complete_report: :multi_channel_endpoint_report}}}
]
defmacro __before_compile__(_) do
lookup =
for {command_class, spec} <- @table do
quote location: :keep do
def lookup(unquote(command_class)), do: unquote(spec)
end
end
quote location: :keep do
@doc """
Look up the Z-Wave command module and default Grizzly command options via the
command name
"""
@spec lookup(Grizzly.command()) :: {module(), [Grizzly.command_opt()]}
unquote(lookup)
def lookup(command_class) do
raise ArgumentError, """
The command #{inspect(command_class)} you are trying to send is not supported
"""
end
end
end
end
@before_compile Generate
@doc """
Get the handler spec for the command
"""
@spec handler(Grizzly.command()) :: module() | {module(), args :: list()}
def handler(command_name) do
{_, opts} = lookup(command_name)
Keyword.fetch!(opts, :handler)
end
end