Packages
grizzly
9.0.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
alias Grizzly.ZWave.CommandClasses.NetworkManagementInclusion, as: NMI
alias Grizzly.ZWave.DecodeError
@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 Grizzly.ZWave.Command
def encode_params(_spec, 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 Grizzly.ZWave.Command
def decode_params(_spec, <<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()
defp encode_mode(:node_add_any), do: 0x01
defp encode_mode(:node_add_stop), do: 0x05
defp encode_mode(:node_add_s2_any), do: 0x07
@spec decode_mode(byte()) :: {:ok, mode()} | {:error, DecodeError.t()}
defp decode_mode(0x01), do: {:ok, :node_add_any}
defp decode_mode(0x05), do: {:ok, :node_add_stop}
defp decode_mode(0x07), do: {:ok, :node_add_s2_any}
defp decode_mode(byte),
do: {:error, %DecodeError{value: byte, param: :mode, command: :node_add}}
end