Packages
grizzly
8.7.0
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 """
Lookup table for sendable Z-Wave commands.
"""
alias Grizzly.CommandHandlers.{AckResponse, AggregateReport, WaitReport}
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}},
configuration_bulk_set: {Commands.ConfigurationBulkSet, handler: AckResponse},
configuration_bulk_get:
{Commands.ConfigurationBulkGet,
handler:
{AggregateReport, complete_report: :configuration_bulk_report, aggregate_param: :values}},
configuration_properties_get:
{Commands.ConfigurationPropertiesGet,
handler: {WaitReport, complete_report: :configuration_properties_report}},
configuration_name_get:
{Commands.ConfigurationNameGet,
handler:
{AggregateReport, complete_report: :configuration_name_report, aggregate_param: :name}},
configuration_info_get:
{Commands.ConfigurationInfoGet,
handler:
{AggregateReport, complete_report: :configuration_info_report, aggregate_param: :info}},
configuration_default_reset: {Commands.ConfigurationDefaultReset, handler: AckResponse},
# 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}},
failed_node_list_get:
{Commands.FailedNodeListGet,
handler: {WaitReport, complete_report: :failed_node_list_report}},
node_add: {Commands.NodeAdd, handler: {WaitReport, complete_report: :node_add_status}},
failed_node_replace:
{Commands.FailedNodeReplace,
handler: {WaitReport, complete_report: :failed_node_replace_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}},
failed_node_remove:
{Commands.FailedNodeRemove,
handler: {WaitReport, complete_report: :failed_node_remove_status}},
learn_mode_set:
{Commands.LearnModeSet, handler: {WaitReport, complete_report: :learn_mode_set_status}},
network_update_request:
{Commands.NetworkUpdateRequest,
handler: {WaitReport, complete_report: :network_update_request_status}},
network_management_multi_channel_end_point_get:
{Commands.NetworkManagementMultiChannelEndPointGet,
handler: {WaitReport, complete_report: :network_management_multi_channel_end_point_report}},
network_management_multi_channel_capability_get:
{Commands.NetworkManagementMultiChannelCapabilityGet,
handler: {WaitReport, complete_report: :network_management_multi_channel_capability_report}},
node_neighbor_update_request:
{Commands.NodeNeighborUpdateRequest,
handler: {WaitReport, complete_report: :node_neighbor_update_status}},
node_information_send: {Commands.NodeInformationSend, handler: AckResponse},
# S0
# s0_commands_supported_get should technically use AggregateReport, but it would
# require changes to AggregateReport. Few devices support so many CCs that they
# don't all fit into one frame.
s0_nonce_get: {Commands.S0NonceGet, handler: {WaitReport, complete_report: :s0_nonce_report}},
s0_network_key_set:
{Commands.S0NetworkKeySet, handler: {WaitReport, complete_report: :s0_network_key_verify}},
s0_security_scheme_get:
{Commands.S0SecuritySchemeGet,
handler: {WaitReport, complete_report: :s0_security_scheme_report}},
s0_security_scheme_inherit:
{Commands.S0SecuritySchemeInherit,
handler: {WaitReport, complete_report: :s0_security_scheme_report}},
s0_commands_supported_get:
{Commands.S0CommandsSupportedGet,
handler: {WaitReport, complete_report: :s0_commands_supported_report}},
s0_message_encapsulation: {Commands.S0MessageEncapsulation, handler: AckResponse},
# S2
s2_kex_get:
{Commands.S2KexGet,
handler: {WaitReport, complete_report: :s2_kex_report, supports_supervision?: false}},
s2_kex_set:
{Commands.S2KexSet,
handler: {WaitReport, complete_report: :s2_kex_report, supports_supervision?: false}},
s2_kex_fail: {Commands.S2KexFail, handler: {AckResponse, supports_supervision?: false}},
s2_kex_report: {Commands.S2KexReport, handler: {AckResponse, supports_supervision?: false}},
s2_public_key_report:
{Commands.S2PublicKeyReport, handler: {AckResponse, supports_supervision?: false}},
s2_network_key_get:
{Commands.S2NetworkKeyGet,
handler:
{WaitReport, complete_report: :s2_network_key_report, supports_supervision?: false}},
s2_network_key_report:
{Commands.S2NetworkKeyReport, handler: {AckResponse, supports_supervision?: false}},
s2_network_key_verify:
{Commands.S2NetworkKeyVerify, handler: {AckResponse, supports_supervision?: false}},
s2_transfer_end:
{Commands.S2TransferEnd, handler: {AckResponse, supports_supervision?: false}},
s2_commands_supported_get:
{Commands.S2CommandsSupportedGet,
handler: {WaitReport, complete_report: :s2_commands_supported_report}},
# DSKs
node_add_keys_set:
{Commands.NodeAddKeysSet, handler: {AckResponse, [supports_supervision?: false]}},
node_add_dsk_set:
{Commands.NodeAddDSKSet, handler: {AckResponse, [supports_supervision?: false]}},
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}},
door_lock_configuration_set: {Commands.DoorLockConfigurationSet, handler: AckResponse},
door_lock_configuration_get:
{Commands.DoorLockConfigurationGet,
handler: {WaitReport, complete_report: :door_lock_configuration_report}},
door_lock_capabilities_get:
{Commands.DoorLockCapabilitiesGet,
handler: {WaitReport, complete_report: :door_lock_capabilities_report}},
# Associations
association_set: {Commands.AssociationSet, handler: AckResponse},
association_get:
{Commands.AssociationGet,
handler: {AggregateReport, complete_report: :association_report, aggregate_param: :nodes}},
association_remove: {Commands.AssociationRemove, handler: AckResponse},
association_groupings_get:
{Commands.AssociationGroupingsGet,
handler: {WaitReport, complete_report: :association_groupings_report}},
association_specific_group_get:
{Commands.AssociationSpecificGroupGet,
handler: {WaitReport, complete_report: :association_specific_group_report}},
# Multi Channel Associations
multi_channel_association_set: {Commands.MultiChannelAssociationSet, handler: AckResponse},
multi_channel_association_get:
{Commands.MultiChannelAssociationGet,
handler:
{AggregateReport,
complete_report: :multi_channel_association_report, aggregate_param: :nodes}},
multi_channel_association_remove:
{Commands.MultiChannelAssociationRemove, handler: AckResponse},
multi_channel_association_groupings_get:
{Commands.MultiChannelAssociationGroupingsGet,
handler: {WaitReport, complete_report: :multi_channel_association_groupings_report}},
# 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_capabilities_get:
{Commands.VersionCapabilitiesGet,
handler: {WaitReport, complete_report: :version_capabilities_report}},
version_zwave_software_get:
{Commands.VersionZWaveSoftwareGet,
handler: {WaitReport, complete_report: :version_zwave_software_report}},
version_command_class_get:
{Commands.VersionCommandClassGet,
handler: {WaitReport, complete_report: :version_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}},
sensor_multilevel_supported_scale_get:
{Commands.SensorMultilevelSupportedScaleGet,
handler: {WaitReport, complete_report: :sensor_multilevel_supported_scale_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}},
user_code_capabilities_get:
{Commands.UserCodeCapabilitiesGet,
handler: {WaitReport, complete_report: :user_code_capabilities_report}},
user_code_checksum_get:
{Commands.UserCodeChecksumGet,
handler: {WaitReport, complete_report: :user_code_checksum_report}},
extended_user_code_set: {Commands.ExtendedUserCodeSet, handler: AckResponse},
extended_user_code_get:
{Commands.ExtendedUserCodeGet,
handler: {WaitReport, complete_report: :extended_user_code_report}},
user_code_keypad_mode_set: {Commands.UserCodeKeypadModeSet, handler: AckResponse},
user_code_keypad_mode_get:
{Commands.UserCodeKeypadModeGet,
handler: {WaitReport, complete_report: :user_code_keypad_mode_report}},
admin_code_set: {Commands.AdminCodeSet, handler: AckResponse},
admin_code_get:
{Commands.AdminCodeGet, handler: {WaitReport, complete_report: :admin_code_report}},
# Meter
meter_get: {Commands.MeterGet, handler: {WaitReport, complete_report: :meter_report}},
meter_supported_get:
{Commands.MeterSupportedGet,
handler: {WaitReport, complete_report: :meter_supported_report}},
meter_reset: {Commands.MeterReset, handler: AckResponse},
# Thermostat mode
thermostat_mode_set: {Commands.ThermostatModeSet, handler: AckResponse},
thermostat_mode_get:
{Commands.ThermostatModeGet,
handler: {WaitReport, complete_report: :thermostat_mode_report}},
thermostat_mode_supported_get:
{Commands.ThermostatModeSupportedGet,
handler: {WaitReport, complete_report: :thermostat_mode_supported_report}},
# Thermostat setpoint
thermostat_setpoint_set: {Commands.ThermostatSetpointSet, handler: AckResponse},
thermostat_setpoint_get:
{Commands.ThermostatSetpointGet,
handler: {WaitReport, complete_report: :thermostat_setpoint_report}},
thermostat_setpoint_supported_get:
{Commands.ThermostatSetpointSupportedGet,
handler: {WaitReport, complete_report: :thermostat_setpoint_supported_report}},
thermostat_setpoint_capabilities_get:
{Commands.ThermostatSetpointCapabilitiesGet,
handler: {WaitReport, complete_report: :thermostat_setpoint_capabilities_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_mode_supported_get:
{Commands.ThermostatFanModeSupportedGet,
handler: {WaitReport, complete_report: :thermostat_fan_mode_supported_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}},
sensor_binary_supported_sensor_get:
{Commands.SensorBinarySupportedSensorGet,
handler: {WaitReport, complete_report: :sensor_binary_supported_sensor_report}},
# Multi Channel
multi_channel_endpoint_get:
{Commands.MultiChannelEndpointGet,
handler: {WaitReport, complete_report: :multi_channel_endpoint_report}},
multi_channel_capability_get:
{Commands.MultiChannelCapabilityGet,
handler: {WaitReport, complete_report: :multi_channel_capability_report}},
multi_channel_endpoint_find:
{Commands.MultiChannelEndpointFind,
handler:
{AggregateReport,
complete_report: :multi_channel_endpoint_find_report, aggregate_param: :end_points}},
multi_channel_aggregated_members_get:
{Commands.MultiChannelAggregatedMembersGet,
handler: {WaitReport, complete_report: :multi_channel_aggregated_members_report}},
multi_channel_get_command_encapsulation:
{Commands.MultiChannelCommandEncapsulation, handler: {WaitReport, complete_report: :any}},
multi_channel_command_encapsulation:
{Commands.MultiChannelCommandEncapsulation, handler: AckResponse},
# Application
application_node_info_get:
{Commands.ApplicationNodeInfoGet,
handler: {WaitReport, complete_report: :application_node_info_report}},
# Node Naming and Location
node_name_get:
{Commands.NodeNameGet, handler: {WaitReport, complete_report: :node_name_report}},
node_name_set: {Commands.NodeNameSet, handler: AckResponse},
node_location_get:
{Commands.NodeLocationGet, handler: {WaitReport, complete_report: :node_location_report}},
node_location_set: {Commands.NodeLocationSet, handler: AckResponse},
# Time parameters
time_parameters_get:
{Commands.TimeParametersGet,
handler: {WaitReport, complete_report: :time_parameters_report}},
time_parameters_set: {Commands.TimeParametersSet, handler: AckResponse},
# Alarm
alarm_get: {Commands.AlarmGet, handler: {WaitReport, complete_report: :alarm_report}},
alarm_set: {Commands.AlarmSet, handler: AckResponse},
alarm_type_supported_get:
{Commands.AlarmTypeSupportedGet,
handler: {WaitReport, complete_report: :alarm_type_supported_report}},
alarm_event_supported_get:
{Commands.AlarmEventSupportedGet,
handler: {WaitReport, complete_report: :alarm_event_supported_report}},
# Time
time_get: {Commands.TimeGet, handler: {WaitReport, complete_report: :time_report}},
date_get: {Commands.DateGet, handler: {WaitReport, complete_report: :date_report}},
time_offset_get:
{Commands.TimeOffsetGet, handler: {WaitReport, complete_report: :time_offset_report}},
time_offset_set: {Commands.TimeOffsetSet, handler: AckResponse},
# Indicator
indicator_get:
{Commands.IndicatorGet, handler: {WaitReport, complete_report: :indicator_report}},
indicator_set: {Commands.IndicatorSet, handler: AckResponse},
indicator_supported_get:
{Commands.IndicatorSupportedGet,
handler: {WaitReport, complete_report: :indicator_supported_report}},
indicator_description_get:
{Commands.IndicatorDescriptionGet,
handler: {WaitReport, complete_report: :indicator_description_report}},
# Antitheft
antitheft_get:
{Commands.AntitheftGet, handler: {WaitReport, complete_report: :antitheft_report}},
antitheft_set: {Commands.AntitheftSet, handler: AckResponse},
# Antitheft unlock
antitheft_unlock_get:
{Commands.AntitheftUnlockGet,
handler: {WaitReport, complete_report: :antitheft_unlock_report}},
antitheft_unlock_set: {Commands.AntitheftUnlockSet, handler: AckResponse},
# Central scene
central_scene_supported_get:
{Commands.CentralSceneSupportedGet,
handler: {WaitReport, complete_report: :central_scene_supported_report}},
central_scene_configuration_get:
{Commands.CentralSceneConfigurationGet,
handler: {WaitReport, complete_report: :central_scene_configuration_report}},
# Scene actuator configuration
scene_actuator_conf_get:
{Commands.SceneActuatorConfGet,
handler: {WaitReport, complete_report: :scene_actuator_conf_report}},
scene_actuator_conf_set: {Commands.SceneActuatorConfSet, handler: AckResponse},
# Scene activation
scene_activation_set: {Commands.SceneActivationSet, handler: AckResponse},
# Powerlevel
powerlevel_get:
{Commands.PowerlevelGet, handler: {WaitReport, complete_report: :powerlevel_report}},
powerlevel_set: {Commands.PowerlevelSet, handler: AckResponse},
powerlevel_test_node_get:
{Commands.PowerlevelTestNodeGet,
handler: {WaitReport, complete_report: :powerlevel_test_node_report}},
powerlevel_test_node_set: {Commands.PowerlevelTestNodeSet, handler: AckResponse},
device_reset_locally_notification:
{Commands.DeviceResetLocallyNotification, handler: AckResponse},
# Clock
clock_get: {Commands.ClockGet, handler: {WaitReport, complete_report: :clock_report}},
clock_set: {Commands.ClockSet, handler: AckResponse},
# Network Management Installation Maintenance
priority_route_set: {Commands.PriorityRouteSet, handler: AckResponse},
priority_route_get:
{Commands.PriorityRouteGet, handler: {WaitReport, complete_report: :priority_route_report}},
statistics_get:
{Commands.StatisticsGet, handler: {WaitReport, complete_report: :statistics_report}},
statistics_clear: {Commands.StatisticsClear, handler: AckResponse},
rssi_get: {Commands.RssiGet, handler: {WaitReport, complete_report: :rssi_report}},
zwave_long_range_channel_set: {Commands.ZWaveLongRangeChannelSet, handler: AckResponse},
zwave_long_range_channel_get:
{Commands.ZWaveLongRangeChannelGet,
handler: {WaitReport, complete_report: :zwave_long_range_channel_report}},
# Zwaveplus Info
zwaveplus_info_get:
{Commands.ZwaveplusInfoGet, handler: {WaitReport, complete_report: :zwaveplus_info_report}},
# Schedule Entry Lock
schedule_entry_lock_week_day_get:
{Commands.ScheduleEntryLockWeekDayGet,
handler: {WaitReport, complete_report: :schedule_entry_lock_week_day_report}},
schedule_entry_lock_year_day_get:
{Commands.ScheduleEntryLockYearDayGet,
handler: {WaitReport, complete_report: :schedule_entry_lock_year_day_report}},
schedule_entry_type_supported_get:
{Commands.ScheduleEntryTypeSupportedGet,
handler: {WaitReport, complete_report: :schedule_entry_type_supported_report}},
schedule_entry_lock_time_offset_get:
{Commands.ScheduleEntryLockTimeOffsetGet,
handler: {WaitReport, complete_report: :schedule_entry_lock_time_offset_report}},
schedule_entry_lock_daily_repeating_get:
{Commands.ScheduleEntryLockDailyRepeatingGet,
handler: {WaitReport, complete_report: :schedule_entry_lock_daily_repeating_report}},
schedule_entry_lock_enable_set: {Commands.ScheduleEntryLockEnableSet, handler: AckResponse},
schedule_entry_lock_enable_all_set:
{Commands.ScheduleEntryLockEnableAllSet, handler: AckResponse},
schedule_entry_lock_week_day_set:
{Commands.ScheduleEntryLockWeekDaySet, handler: AckResponse},
schedule_entry_lock_year_day_set:
{Commands.ScheduleEntryLockYearDaySet, handler: AckResponse},
schedule_entry_lock_time_offset_set:
{Commands.ScheduleEntryLockTimeOffsetSet, handler: AckResponse},
schedule_entry_lock_daily_repeating_set:
{Commands.ScheduleEntryLockDailyRepeatingSet, handler: AckResponse},
# Barrier Operator
barrier_operator_get:
{Commands.BarrierOperatorGet,
handler: {WaitReport, complete_report: :barrier_operator_report}},
barrier_operator_set: {Commands.BarrierOperatorSet, handler: AckResponse},
barrier_operator_signal_supported_get:
{Commands.BarrierOperatorSignalSupportedGet,
handler: {WaitReport, complete_report: :barrier_operator_signal_supported_report}},
barrier_operator_signal_get:
{Commands.BarrierOperatorSignalGet,
handler: {WaitReport, complete_report: :barrier_operator_signal_report}},
barrier_operator_signal_set: {Commands.BarrierOperatorSignalSet, handler: AckResponse},
# Window Covering
window_covering_supported_get:
{Commands.WindowCoveringSupportedGet,
handler: {WaitReport, complete_report: :window_covering_supported_report}},
window_covering_get:
{Commands.WindowCoveringGet,
handler: {WaitReport, complete_report: :window_covering_report}},
window_covering_set: {Commands.WindowCoveringSet, handler: AckResponse},
window_covering_start_level_change:
{Commands.WindowCoveringStartLevelChange, handler: AckResponse},
window_covering_stop_level_change:
{Commands.WindowCoveringStopLevelChange, handler: AckResponse},
# Mailbox
mailbox_configuration_get:
{Commands.MailboxConfigurationGet,
handler: {WaitReport, complete_report: :mailbox_configuration_report}},
mailbox_configuration_set: {Commands.MailboxConfigurationSet, handler: AckResponse},
mailbox_configuration_report: {Commands.MailboxConfigurationReport, handler: AckResponse},
# Mailbox Queue will sometimes require the `WaitReport` handler (such as with
# the pop operation). It is up to the caller to use the correct handler.
mailbox_queue: {Commands.MailboxQueue, handler: AckResponse},
# Sound Switch
sound_switch_tones_number_get:
{Commands.SoundSwitchTonesNumberGet,
handler: {WaitReport, complete_report: :sound_switch_tones_number_report}},
sound_switch_tone_info_get:
{Commands.SoundSwitchToneInfoGet,
handler: {WaitReport, complete_report: :sound_switch_tone_info_report}},
sound_switch_configuration_set: {Commands.SoundSwitchConfigurationSet, handler: AckResponse},
sound_switch_configuration_get:
{Commands.SoundSwitchConfigurationGet,
handler: {WaitReport, complete_report: :sound_switch_configuration_report}},
sound_switch_tone_play_set: {Commands.SoundSwitchTonePlaySet, handler: AckResponse},
sound_switch_tone_play_get:
{Commands.SoundSwitchTonePlayGet,
handler: {WaitReport, complete_report: :sound_switch_tone_play_report}},
# Humidity Control Setpoint
humidity_control_setpoint_set: {Commands.HumidityControlSetpointSet, handler: AckResponse},
humidity_control_setpoint_get:
{Commands.HumidityControlSetpointGet,
handler: {WaitReport, complete_report: :humidity_control_setpoint_report}},
humidity_control_setpoint_supported_get:
{Commands.HumidityControlSetpointSupportedGet,
handler: {WaitReport, complete_report: :humidity_control_setpoint_supported_report}},
humidity_control_setpoint_scale_supported_get:
{Commands.HumidityControlSetpointScaleSupportedGet,
handler: {WaitReport, complete_report: :humidity_control_setpoint_scale_supported_report}},
humidity_control_setpoint_capabilities_get:
{Commands.HumidityControlSetpointCapabilitiesGet,
handler: {WaitReport, complete_report: :humidity_control_setpoint_capabilities_report}},
# Humidity Control Mode
humidity_control_mode_set: {Commands.HumidityControlModeSet, handler: AckResponse},
humidity_control_mode_get:
{Commands.HumidityControlModeGet,
handler: {WaitReport, complete_report: :humidity_control_mode_report}},
humidity_control_mode_supported_get:
{Commands.HumidityControlModeSupportedGet,
handler: {WaitReport, complete_report: :humidity_control_mode_supported_report}},
# Humidity Control Operating State
humidity_control_operating_state_get:
{Commands.HumidityControlOperatingStateGet,
handler: {WaitReport, complete_report: :humidity_control_operating_state_report}}
}
@spec lookup(Grizzly.command()) :: {module(), [Grizzly.command_opt()]}
def lookup(command_name) do
case Map.fetch(@table, command_name) do
{:ok, handler_spec} ->
handler_spec
:error ->
raise ArgumentError, """
The command #{inspect(command_name)} you are trying to send is not supported
"""
end
end
@doc """
Get the handler spec for the command
"""
@spec handler(Grizzly.command()) :: Grizzly.handler_spec()
def handler(command_name) do
{_, opts} = lookup(command_name)
opts
|> Keyword.fetch!(:handler)
|> format_handler_spec()
end
@doc """
Whether the command can be supervised (only commands that use the AckResponse
handler can be supervised).
"""
@spec supports_supervision?(Grizzly.command()) :: boolean()
def supports_supervision?(command_name) do
{module, default_opts} = handler(command_name)
module == AckResponse && default_opts[:supports_supervision?] != false
end
@spec format_handler_spec(module() | Grizzly.handler_spec()) :: Grizzly.handler_spec()
def format_handler_spec({_handler, _args} = spec), do: spec
def format_handler_spec(handler), do: {handler, []}
def dump(), do: @table
end