Packages
grizzly
8.12.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/failed_node_replace.ex
defmodule Grizzly.ZWave.Commands.FailedNodeReplace do
@moduledoc """
Command for FAILED_NODE_REPLACE
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 ::
:start_failed_node_replace | :stop_failed_node_replace | :start_failed_node_replace_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
@spec new([param]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :failed_node_replace,
command_byte: 0x09,
command_class: NMI,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
def encode_params(command) do
seq_number = Command.param!(command, :seq_number)
node_id = Command.param!(command, :node_id)
mode = Command.param(command, :mode, :start_failed_node_replace_s2)
tx_opt = Command.param(command, :tx_opt, :explore)
<<seq_number, node_id, NMI.tx_opt_to_byte(tx_opt), encode_mode(mode)>>
end
@impl Grizzly.ZWave.Command
def decode_params(<<seq_number, node_id, tx_opt_byte, mode_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, node_id: node_id, tx_opt: tx_opt]}
end
end
@spec encode_mode(mode()) :: byte()
def encode_mode(:start_failed_node_replace), do: 0x01
def encode_mode(:stop_failed_node_replace), do: 0x05
def encode_mode(:start_failed_node_replace_s2), do: 0x07
@spec decode_mode(byte()) :: {:ok, mode()} | {:error, DecodeError.t()}
def decode_mode(0x01), do: {:ok, :start_failed_node_replace}
def decode_mode(0x05), do: {:ok, :stop_failed_node_replace}
def decode_mode(0x07), do: {:ok, :start_failed_node_replace_s2}
def decode_mode(byte),
do: {:error, %DecodeError{value: byte, param: :mode, command: :failed_node_replace}}
end