Packages
grizzly
6.5.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/node_add.ex
defmodule Grizzly.ZWave.Commands.NodeAdd do
@moduledoc """
Command for NODE_ADD
Params:
* `:seq_number` - the sequence number for the network command (required)
* `:mode` - the inclusion mode (optional default `:node_add_any_s2`)
* `:tx_opts` - the transmission options (optional default `:explore`)
If your controller does not support the `NETWORK_MANAGEMENT_INCLUSION`
version 2, you will ned to pass `:node_add_any` as the `:mode` parameter.
This command should return the `NodeAddStatus` report after inclusion is
complete.
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.{Command, DecodeError}
alias Grizzly.ZWave.CommandClasses.NetworkManagementInclusion, as: NMI
@type mode :: :node_add_any | :node_add_stop | :node_add_any_s2
@type tx_opt :: :null | :low_power | :explore
@type param :: {:mode, mode()} | {:tx_opt, tx_opt()} | {:seq_number, Grizzly.seq_number()}
@impl true
@spec new([param]) :: {:ok, Command.t()}
def new(params) do
# TODO validate params
command = %Command{
name: :node_add,
command_byte: 0x01,
command_class: NMI,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl true
def encode_params(command) do
seq_number = Command.param!(command, :seq_number)
mode = Command.param(command, :mode, :node_add_s2_any)
tx_opt = Command.param(command, :tx_opt, :explore)
<<seq_number, 0x00, encode_mode(mode), NMI.tx_opt_to_byte(tx_opt)>>
end
@impl true
def decode_params(<<seq_number, _reserved, mode_byte, tx_opt_byte>>) do
with {:ok, mode} <- decode_mode(mode_byte),
{:ok, tx_opt} <- NMI.tx_opt_from_byte(tx_opt_byte) do
{:ok, [mode: mode, seq_number: seq_number, tx_opt: tx_opt]}
end
end
@spec encode_mode(mode()) :: byte()
def encode_mode(:node_add_any), do: 0x01
def encode_mode(:node_add_stop), do: 0x05
def encode_mode(:node_add_s2_any), do: 0x07
@spec decode_mode(byte()) :: {:ok, mode()} | {:error, DecodeError.t()}
def decode_mode(0x01), do: {:ok, :node_add_any}
def decode_mode(0x05), do: {:ok, :node_add_stop}
def decode_mode(0x07), do: {:ok, :node_add_s2_any}
def decode_mode(byte), do: {:error, %DecodeError{value: byte, param: :mode, command: :node_add}}
end