Packages
grizzly
0.15.10
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/sensor_binary_report.ex
defmodule Grizzly.ZWave.Commands.SensorBinaryReport do
@moduledoc """
This command is used to advertise whether a binary sensor was triggered.
Params:
* `:triggered` - whether the sensor is triggered (required)
* `:sensor_type` - the type of sensor (optional)
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.{Command, DecodeError}
alias Grizzly.ZWave.CommandClasses.SensorBinary
@type param :: {:sensor_type, SensorBinary.sensor_type()} | {:triggered, boolean()}
@impl true
@spec new([param()]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :sensor_binary_report,
command_byte: 0x03,
command_class: SensorBinary,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl true
def encode_params(command) do
triggered = Command.param!(command, :triggered)
sensor_type = Command.param(command, :sensor_type)
if sensor_type == nil do
<<encode_triggered(triggered)>>
else
<<encode_triggered(triggered), SensorBinary.encode_type(sensor_type)>>
end
end
@impl true
def decode_params(<<triggered_byte, sensor_type_byte>>) do
with {:ok, sensor_type} <- SensorBinary.decode_type(sensor_type_byte),
{:ok, triggered} <- decode_triggered(triggered_byte) do
{:ok, [triggered: triggered, sensor_type: sensor_type]}
else
{:error, %DecodeError{} = error} ->
error
end
end
def decode_params(<<triggered_byte>>) do
with {:ok, triggered} <- decode_triggered(triggered_byte) do
{:ok, [triggered: triggered]}
else
{:error, %DecodeError{} = error} ->
error
end
end
defp encode_triggered(true), do: 0xFF
defp encode_triggered(false), do: 0x00
defp decode_triggered(0x00), do: {:ok, false}
defp decode_triggered(0xFF), do: {:ok, true}
defp decode_triggered(byte),
do: {:error, %DecodeError{value: byte, param: :triggered, command: :sensor_binary_report}}
end