Packages
grizzly
0.12.2
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_provisioning_report.ex
defmodule Grizzly.ZWave.Commands.NodeProvisioningReport do
@moduledoc """
Module for working with the `NODE_PROVISIONING_REPORT` command
This command is used to advertise the contents of an entry in the node Provisioning List of the sending node
Params:
* `:seq_number` - the network command sequence number (required)
* `:dsk` - a DSK string for the device see `Grizzly.ZWave.DSK` for more more information (optional)
* `:meta_extensions` - a list of `Grizzly.ZWave.SmartStart.MetaExtension.t()` (optional default `[]`)
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.{Command, DecodeError, DSK}
alias Grizzly.ZWave.CommandClasses.NodeProvisioning
alias Grizzly.ZWave.SmartStart.MetaExtension
@type param ::
{:seq_number, Grizzly.ZWave.seq_number()}
| {:dsk, DSK.dsk_string()}
| {:meta_extensions, [MetaExtension.t()]}
@impl true
@spec new([param()]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :node_provisioning_report,
command_byte: 0x06,
command_class: NodeProvisioning,
params: params_with_defaults(params),
impl: __MODULE__
}
{:ok, command}
end
@impl true
@spec encode_params(Command.t()) :: binary()
def encode_params(command) do
seq_number = Command.param!(command, :seq_number)
{:ok, dsk_binary} = NodeProvisioning.optional_dsk_to_binary(Command.param!(command, :dsk))
dsk_byte_size = byte_size(dsk_binary)
meta_extensions = Command.param!(command, :meta_extensions)
<<seq_number, 0x00::size(3), dsk_byte_size::size(5)>> <>
dsk_binary <> NodeProvisioning.encode_meta_extensions(meta_extensions)
end
@impl true
def decode_params(
<<seq_number, _::size(3), dsk_byte_size::size(5),
dsk_binary::size(dsk_byte_size)-unit(8)-binary, meta_extensions_binary::binary>>
) do
with {:ok, dsk_string} <- NodeProvisioning.optional_binary_to_dsk(dsk_binary),
{:ok, meta_extensions} <- MetaExtension.extensions_from_binary(meta_extensions_binary) do
{:ok,
[
seq_number: seq_number,
dsk: dsk_string,
meta_extensions: meta_extensions
]}
else
{:error, reason} when reason in [:dsk_too_short, :dsk_too_long] ->
{:error, %DecodeError{value: dsk_binary, param: :dsk, command: :node_provisioning_report}}
{:error, _other} ->
{:error,
%DecodeError{
value: meta_extensions_binary,
param: :meta_extension,
command: :node_provisioning_report
}}
end
end
defp params_with_defaults(params) do
defaults = [meta_extensions: [], dsk: ""]
Keyword.merge(defaults, params)
end
end