Packages
grizzly
8.6.6
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_set.ex
defmodule Grizzly.ZWave.Commands.AntitheftSet do
@moduledoc """
This command is used to lock or unlock a node.
Params:
* `:state` - This field MUST indicate the desired :locked or :unlocked state
for the receiving node (required v2+)
* `:magic_code` - This field contains the 1 to 10 byte Magic Code used to
lock or unlock the node (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 retriving 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)
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.{Command, DecodeError}
alias Grizzly.ZWave.CommandClasses.Antitheft
@type param ::
{:state, Antitheft.lock_state()}
| {:magic_code, String.t()}
| {:manufacturer_id, non_neg_integer}
| {:antitheft_hint, String.t()}
| {:locking_entity_id, non_neg_integer}
@impl Grizzly.ZWave.Command
@spec new([param()]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :antitheft_set,
command_byte: 0x01,
command_class: Antitheft,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
@spec encode_params(Command.t()) :: binary()
def encode_params(command) do
state_bit = Command.param!(command, :state) |> Antitheft.state_to_bit()
magic_code = Command.param!(command, :magic_code) |> Antitheft.validate_magic_code_or_hint()
manufacturer_id = Command.param!(command, :manufacturer_id)
antitheft_hint =
Command.param!(command, :antitheft_hint) |> Antitheft.validate_magic_code_or_hint()
locking_entity_id = Command.param(command, :locking_entity_id)
if locking_entity_id == nil do
<<state_bit::1, byte_size(magic_code)::size(7)>> <>
magic_code <>
<<manufacturer_id::16, byte_size(antitheft_hint)>> <>
antitheft_hint
else
<<state_bit::1, byte_size(magic_code)::size(7)>> <>
magic_code <>
<<manufacturer_id::16, byte_size(antitheft_hint)>> <>
antitheft_hint <>
<<locking_entity_id::16>>
end
end
@impl Grizzly.ZWave.Command
@spec decode_params(binary()) :: {:ok, [param()]} | {:error, DecodeError.t()}
# v3
def decode_params(
<<state_bit::1, magic_code_length::7, magic_code::binary-size(magic_code_length),
manufacturer_id::16, antitheft_hint_length,
antitheft_hint::binary-size(antitheft_hint_length), locking_entity_id::16>>
) do
state = Antitheft.state_from_bit(state_bit)
{:ok,
[
state: state,
magic_code: magic_code,
manufacturer_id: manufacturer_id,
antitheft_hint: antitheft_hint,
locking_entity_id: locking_entity_id
]}
end
# v2
def decode_params(
<<state_bit::1, magic_code_length::7, magic_code::binary-size(magic_code_length),
manufacturer_id::16, antitheft_hint_length,
antitheft_hint::binary-size(antitheft_hint_length)>>
) do
state = Antitheft.state_from_bit(state_bit)
{:ok,
[
state: state,
magic_code: magic_code,
manufacturer_id: manufacturer_id,
antitheft_hint: antitheft_hint
]}
end
end