Packages
grizzly
9.1.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/antitheft_report.ex
defmodule Grizzly.ZWave.Commands.AntitheftReport do
@moduledoc """
This command is used to advertise the lock/unlock state of a supporting node.
Params:
* `:status` - the antitheft status of the device, one of
:protection_disabled_unlocked, :protection_enabled_locked_fully_functional,
:protection_enabled_locked_restricted (required v2+)
* `:manufacturer_id` - This field describes the Z-Wave Manufacturer ID of the
company’s product that has locked the node (required v2+)
* `:antitheft_hint` - This field is used as a 1 to 10 byte identifier or key
value to help retrieving the Magic Code (required v2+)
* `:locking_entity_id` - This field MUST specify a unique Z-Wave Alliance
identifier for the entity that has locked the node (required v3 only)
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.Command
alias Grizzly.ZWave.DecodeError
@type status ::
:protection_disabled_unlocked
| :protection_enabled_locked_fully_functional
| :protection_enabled_locked_restricted
@type param ::
{:status, status()}
| {:manufacturer_id, non_neg_integer}
| {:antitheft_hint, String.t()}
| {:locking_entity_id, non_neg_integer}
@impl Grizzly.ZWave.Command
def encode_params(_spec, command) do
status_byte = Command.param!(command, :status) |> status_to_byte()
manufacturer_id = Command.param!(command, :manufacturer_id)
antitheft_hint = Command.param!(command, :antitheft_hint)
locking_entity_id = Command.param(command, :locking_entity_id)
if locking_entity_id == nil do
<<status_byte, manufacturer_id::16, byte_size(antitheft_hint)>> <>
antitheft_hint
else
<<status_byte, manufacturer_id::16, byte_size(antitheft_hint)>> <>
antitheft_hint <>
<<locking_entity_id::16>>
end
end
@impl Grizzly.ZWave.Command
# v3
def decode_params(
_spec,
<<status_byte, manufacturer_id::16, antitheft_hint_length,
antitheft_hint::binary-size(antitheft_hint_length), locking_entity_id::16>>
) do
with {:ok, status} <- status_from_byte(status_byte) do
{:ok,
[
status: status,
manufacturer_id: manufacturer_id,
antitheft_hint: antitheft_hint,
locking_entity_id: locking_entity_id
]}
else
{:error, %DecodeError{} = decode_error} ->
{:error, %DecodeError{decode_error | command: :antitheft_report}}
end
end
# v2
def decode_params(
_spec,
<<status_byte, manufacturer_id::16, antitheft_hint_length,
antitheft_hint::binary-size(antitheft_hint_length)>>
) do
with {:ok, status} <- status_from_byte(status_byte) do
{:ok,
[
status: status,
manufacturer_id: manufacturer_id,
antitheft_hint: antitheft_hint
]}
else
{:error, %DecodeError{} = decode_error} ->
{:error, %DecodeError{decode_error | command: :antitheft_report}}
end
end
defp status_to_byte(:protection_disabled_unlocked), do: 0x01
defp status_to_byte(:protection_enabled_locked_fully_functional), do: 0x02
defp status_to_byte(:protection_enabled_locked_restricted), do: 0x03
defp status_from_byte(0x01), do: {:ok, :protection_disabled_unlocked}
defp status_from_byte(0x02), do: {:ok, :protection_enabled_locked_fully_functional}
defp status_from_byte(0x03), do: {:ok, :protection_enabled_locked_restricted}
defp status_from_byte(byte), do: {:error, %DecodeError{value: byte, param: :status}}
end