Packages
grizzly
8.2.2
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/zwave/command_classes/scene_actuator_conf.ex
defmodule Grizzly.ZWave.CommandClasses.SceneActuatorConf do
@moduledoc """
"SceneActuatorConf" Command Class
The Scene Actuator Configuration Command Class is used to configure scenes settings for a node
supporting an actuator Command Class, e.g. a multilevel switch, binary switch etc.
"""
@behaviour Grizzly.ZWave.CommandClass
alias Grizzly.ZWave.DecodeError
@type dimming_duration :: :instantly | [seconds: 1..127] | [minutes: 1..127] | :factory_settings
@type level :: :on | :off | 1..99
@impl true
def byte(), do: 0x2C
@impl true
def name(), do: :scene_actuator_conf
@spec dimming_duration_to_byte(dimming_duration) :: byte
def dimming_duration_to_byte(:instantly), do: 0
def dimming_duration_to_byte(:factory_settings), do: 255
def dimming_duration_to_byte(seconds: seconds) when seconds in 1..127, do: seconds
# 0x80..0xFE 1 minute (0x80) to 127 minutes (0xFE) in 1 minute resolution.
def dimming_duration_to_byte(minutes: minutes) when minutes in 1..127, do: 0x7F + minutes
@spec dimming_duration_from_byte(byte) ::
{:ok, dimming_duration} | {:error, Grizzly.ZWave.DecodeError.t()}
def dimming_duration_from_byte(0), do: {:ok, :instantly}
def dimming_duration_from_byte(255), do: {:ok, :factory_settings}
def dimming_duration_from_byte(byte) when byte in 1..127, do: {:ok, [seconds: byte]}
def dimming_duration_from_byte(byte) when byte in 0x80..0xFE, do: {:ok, [minutes: byte - 0x7F]}
def dimming_duration_from_byte(byte),
do: {:error, %DecodeError{param: :dimming_duration, value: byte}}
@spec level_to_byte(level) :: byte
def level_to_byte(:on), do: 0xFF
def level_to_byte(:off), do: 0x00
def level_to_byte(byte) when byte in 1..99, do: byte
@spec level_from_byte(byte) :: {:ok, level} | {:error, Grizzly.ZWave.DecodeError.t()}
def level_from_byte(0), do: {:ok, :off}
def level_from_byte(0xFF), do: {:ok, :on}
def level_from_byte(byte) when byte in 1..99, do: {:ok, byte}
def level_from_byte(byte), do: {:error, %DecodeError{param: :level, value: byte}}
end