Packages
grizzly
9.0.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_report.ex
defmodule Grizzly.ZWave.Commands.SwitchBinaryReport do
@moduledoc """
Module for the SWITCH_BINARY_REPORT command
Params:
* `:target_value` - `:on`, `:off`, or `:unknown` (required)
* `:current_value` - `:on`, `:off`, or `:unknown` (required V2)
* `: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
(required V2)
"""
@behaviour Grizzly.ZWave.Command
import Grizzly.ZWave.Encoding
alias Grizzly.ZWave.Command
alias Grizzly.ZWave.DecodeError
alias Grizzly.ZWave.Encoding
@type value() :: :on | :off | :unknown
@type param() ::
{:target_value, value()}
| {:duration, Encoding.duration()}
| {:current_value, value()}
@impl Grizzly.ZWave.Command
def encode_params(_spec, command) do
target_value_byte = encode_target_value(Command.param!(command, :target_value))
case Command.param(command, :current_value) do
nil ->
<<target_value_byte>>
current_value ->
duration = Command.param!(command, :duration)
duration_byte = encode_duration(duration)
current_value_byte = encode_target_value(current_value)
<<current_value_byte, target_value_byte, duration_byte>>
end
end
defp encode_target_value(:off), do: 0x00
defp encode_target_value(:unknown), do: 0xFE
defp encode_target_value(:on), do: 0xFF
@impl Grizzly.ZWave.Command
def decode_params(_spec, <<target_value_byte>>) do
with {:ok, target_value} <- value_from_byte(target_value_byte) do
{:ok, [target_value: target_value]}
end
end
def decode_params(_spec, <<current_value, target_value, duration_byte>>) do
with {:ok, target_value} <- value_from_byte(target_value),
{:ok, current_value} <- value_from_byte(current_value) do
{:ok,
[
target_value: target_value,
duration: decode_duration(duration_byte),
current_value: current_value
]}
end
end
defp value_from_byte(0x00), do: {:ok, :off}
defp value_from_byte(0xFE), do: {:ok, :unknown}
defp value_from_byte(0xFF), do: {:ok, :on}
defp value_from_byte(byte),
do: {:error, %DecodeError{value: byte, param: :target_value, command: :switch_binary_report}}
end