Packages
grizzly
8.0.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/node_remove_status.ex
defmodule Grizzly.ZWave.Commands.NodeRemoveStatus do
@moduledoc """
Z-Wave command for NODE_REMOVE_STATUS
This command is useful to respond to a `Grizzly.ZWave.Commands.NodeRemove`
command.
Params:
* `:seq_number` - the sequence number from the original node remove command
* `:status` - the status of the result of the node removal
* `:node_id` - the node id of the removed node
* `:command_class_version` - explicitly set the command class version used
to encode the command (optional - defaults to NetworkManagementInclusion v4)
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.NodeRemoveStatus.encode_params(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.{Command, DecodeError, NodeId}
alias Grizzly.ZWave.CommandClasses.NetworkManagementInclusion
@type status() :: :done | :failed
@impl Grizzly.ZWave.Command
def new(params \\ []) do
# TODO validate params
command = %Command{
name: :node_remove_status,
command_byte: 0x04,
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)
status = Command.param!(command, :status)
node_id = Command.param!(command, :node_id)
case Keyword.get(opts, :command_class_version, 4) do
4 ->
<<seq_number, encode_status(status), NodeId.encode_extended(node_id)::binary>>
n when n < 4 ->
<<seq_number, encode_status(status), node_id>>
end
end
@impl Grizzly.ZWave.Command
@spec decode_params(binary()) :: {:ok, keyword()} | {:error, DecodeError.t()}
def decode_params(<<seq_number, status_byte, node_id::binary>>) do
case decode_status(status_byte) do
{:ok, status} ->
{:ok,
[
seq_number: seq_number,
status: status,
node_id: NodeId.parse(node_id)
]}
{:error, %DecodeError{}} = error ->
error
end
end
@spec encode_status(status()) :: 0x06 | 0x07
def encode_status(:done), do: 0x06
def encode_status(:failed), do: 0x07
@spec decode_status(byte()) :: {:ok, status()} | {:error, DecodeError.t()}
def decode_status(0x06), do: {:ok, :done}
def decode_status(0x07), do: {:ok, :failed}
def decode_status(byte),
do: {:error, %DecodeError{value: byte, param: :status, command: :node_remove_status}}
end