Packages
grizzly
0.22.1
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_remove_status.ex
defmodule Grizzly.ZWave.Commands.FailedNodeRemoveStatus do
@moduledoc """
This command reports on the attempted removal of a presumed failed node.
Params:
* `:node_id` - the id of the node which removal for failure was attempted
* `:seq_number` - the sequence number of the removal command
* `:status` - whether the presumed failed node was removed
When encoding the params you can encode for a specific command class version
by passing the `:command_class_version` to the encode options
```elixir
Grizzly.ZWave.Commands.FailedNodeRemoveStatus.encode_params(failed_node_remove_status, command_class_version: 3)
```
If there is no command class version specified this will encode to version 4 of
the `NetworkManagementInclusion` command class. This version supports the use
of 16 bit node ids.
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave
alias Grizzly.ZWave.{Command, DecodeError, NodeId}
alias Grizzly.ZWave.CommandClasses.NetworkManagementInclusion
@type status() :: :done | :failed_node_not_found | :failed_node_remove_fail
@type param() :: {:node_id, char()} | {:seq_number, ZWave.seq_number()} | {:status, status}
@impl Grizzly.ZWave.Command
@spec new([param()]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :failed_node_remove_status,
command_byte: 0x08,
command_class: NetworkManagementInclusion,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
def encode_params(command, opts \\ []) do
seq_number = Command.param!(command, :seq_number)
node_id = Command.param!(command, :node_id)
status_byte = Command.param!(command, :status) |> encode_status()
case Keyword.get(opts, :command_class_version, 4) do
4 ->
<<seq_number, status_byte, NodeId.encode_extended(node_id)::binary>>
v when v < 4 ->
<<seq_number, status_byte, node_id>>
end
end
@impl Grizzly.ZWave.Command
@spec decode_params(binary()) :: {:ok, [param()]} | {:error, DecodeError.t()}
def decode_params(<<seq_number, status_byte, node_id_bin::binary>>) do
with {:ok, status} <- decode_status(status_byte) do
node_id = NodeId.parse(node_id_bin)
{:ok, [seq_number: seq_number, node_id: node_id, status: status]}
else
{:error, %DecodeError{} = error} ->
error
end
end
defp encode_status(:failed_node_not_found), do: 0x00
defp encode_status(:done), do: 0x01
defp encode_status(:failed_node_remove_fail), do: 0x02
defp decode_status(0x00), do: {:ok, :failed_node_not_found}
defp decode_status(0x01), do: {:ok, :done}
defp decode_status(0x02), do: {:ok, :failed_node_remove_fail}
defp decode_status(byte),
do: {:error, %DecodeError{value: byte, param: :status, command: :failed_node_remove_status}}
end