Packages
grizzly
8.6.1
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/sensor_binary.ex
defmodule Grizzly.ZWave.CommandClasses.SensorBinary do
@moduledoc """
Deprecated command class for triggered/not triggered sensors.
"""
@behaviour Grizzly.ZWave.CommandClass
alias Grizzly.ZWave.DecodeError
import Grizzly.ZWave.Encoding
@type sensor_type() ::
:general_purpose
| :smoke
| :co
| :co2
| :heat
| :water
| :freeze
| :tamper
| :aux
| :door_window
| :tilt
| :motion
| :glass_break
@impl Grizzly.ZWave.CommandClass
def byte(), do: 0x30
@impl Grizzly.ZWave.CommandClass
def name(), do: :sensor_binary
@doc """
Encode the type value for the sensor report
"""
@spec encode_type(sensor_type()) :: byte()
def encode_type(:general_purpose), do: 0x01
def encode_type(:smoke), do: 0x02
def encode_type(:co), do: 0x03
def encode_type(:co2), do: 0x04
def encode_type(:heat), do: 0x05
def encode_type(:water), do: 0x06
def encode_type(:freeze), do: 0x07
def encode_type(:tamper), do: 0x08
def encode_type(:aux), do: 0x09
def encode_type(:door_window), do: 0x0A
def encode_type(:tilt), do: 0x0B
def encode_type(:motion), do: 0x0C
def encode_type(:glass_break), do: 0x0D
@doc """
Parse the type value from a byte
"""
@spec decode_type(byte()) :: {:ok, sensor_type()} | {:error, DecodeError.t()}
def decode_type(0x01), do: {:ok, :general_purpose}
def decode_type(0x02), do: {:ok, :smoke}
def decode_type(0x03), do: {:ok, :co}
def decode_type(0x04), do: {:ok, :co2}
def decode_type(0x05), do: {:ok, :heat}
def decode_type(0x06), do: {:ok, :water}
def decode_type(0x07), do: {:ok, :freeze}
def decode_type(0x08), do: {:ok, :tamper}
def decode_type(0x09), do: {:ok, :aux}
def decode_type(0x0A), do: {:ok, :door_window}
def decode_type(0x0B), do: {:ok, :tilt}
def decode_type(0x0C), do: {:ok, :motion}
def decode_type(0x0D), do: {:ok, :glass_break}
def decode_type(byte),
do: {:error, %DecodeError{value: byte, param: :sensor_type, command: :sensor_binary}}
@doc """
Decode a list of sensor types from a bitmap.
## Examples
iex> decode_sensor_types(<<0x40, 0x00>>)
{:ok, sensor_types: [:water]}
"""
@spec decode_sensor_types(binary) :: {:ok, [sensor_types: [atom]]} | {:error, DecodeError.t()}
def decode_sensor_types(binary) do
sensor_types =
binary
|> decode_bitmask()
|> Enum.map(fn value ->
case decode_type(value) do
{:ok, type} -> type
{:error, _error} -> nil
end
end)
|> Enum.reject(&is_nil/1)
{:ok, [sensor_types: sensor_types]}
end
@doc """
Encode a list of sensor types as a bitmap.
## Examples
iex> encode_sensor_types([:water])
<<0x40, 0x00>>
"""
@spec encode_sensor_types([atom]) :: binary
def encode_sensor_types(sensor_types) do
sensor_types
|> Enum.map(&encode_type/1)
|> encode_bitmask(min_bytes: 2)
end
end