Packages
grizzly
0.14.3
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)
* `:magic_code` - This field contains the 1 to 10 byte Magic Code used to lock or unlock the node (required)
* `:manufacturer_id` - This field describes the Z-Wave Manufacturer ID of the company’s product that has locked the node (required)
* `:antitheft_hint` - This field is used as a 1 to 10 byte identifier or key value to help retriving the Magic Code (required)
* `:locking_entity_id` - This field MUST specify a unique Z-Wave Alliance identifier for the entity that has locked the node (required)
"""
@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 true
@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 true
@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)
<<state_bit::size(1), byte_size(magic_code)::size(7)>> <>
magic_code <>
<<manufacturer_id::size(16), byte_size(antitheft_hint)>> <>
antitheft_hint <>
<<locking_entity_id::size(16)>>
end
@impl true
@spec decode_params(binary()) :: {:ok, [param()]} | {:error, DecodeError.t()}
def decode_params(
<<state_bit::size(1), magic_code_length::size(7),
magic_code::binary-size(magic_code_length), manufacturer_id::size(16),
antitheft_hint_length, antitheft_hint::binary-size(antitheft_hint_length),
locking_entity_id::size(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
end