Packages
grizzly
8.14.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/zwave/commands/switch_binary_set.ex
defmodule Grizzly.ZWave.Commands.SwitchBinarySet do
@moduledoc """
Module for the SWITCH_BINARY_SET command
Params:
* `:target_value` - `:on` or `:off`(required)
* `:duration` - How long in seconds the switch should take to reach target value or the factory default (:default)
Beyond 127 seconds, the duration is truncated to the minute. E.g. 179s is 2 minutes and 180s is 3 minutes
(optional V2)
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.{Command, DecodeError}
alias Grizzly.ZWave.CommandClasses.{SwitchBinary, SwitchSupport}
@type param :: {:target_value, :on | :off} | {:duration, SwitchSupport.duration()}
@impl Grizzly.ZWave.Command
def new(opts) do
# TODO: validate opts
command = %Command{
name: :switch_binary_set,
command_byte: 0x01,
command_class: SwitchBinary,
params: opts,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
def encode_params(command) do
target_value_byte = encode_target_value(Command.param!(command, :target_value))
case Command.param(command, :duration) do
nil ->
<<target_value_byte>>
duration ->
duration_byte = SwitchSupport.duration_to_byte(duration)
<<target_value_byte, duration_byte>>
end
end
def encode_target_value(:off), do: 0x00
def encode_target_value(:on), do: 0xFF
@impl Grizzly.ZWave.Command
def decode_params(<<target_value_byte>>) do
case target_value_from_byte(target_value_byte) do
{:ok, target_value} ->
{:ok, [target_value: target_value]}
{:error, %DecodeError{}} = error ->
error
end
end
def decode_params(<<target_value_byte, duration_byte>>) do
with {:ok, target_value} <- target_value_from_byte(target_value_byte),
{:ok, duration} <- SwitchSupport.duration_from_byte(duration_byte) do
{:ok, [target_value: target_value, duration: duration]}
else
{:error, %DecodeError{}} = error ->
error
end
end
defp target_value_from_byte(0x00), do: {:ok, :off}
defp target_value_from_byte(0xFF), do: {:ok, :on}
defp target_value_from_byte(byte),
do: {:error, %DecodeError{value: byte, param: :target_value, command: :switch_binary_report}}
end