Packages
grizzly
8.6.8
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, DSK}
alias Grizzly.ZWave.CommandClasses.NodeProvisioning
alias Grizzly.ZWave.SmartStart.MetaExtension
@type param() ::
{:seq_number, Grizzly.ZWave.seq_number()}
| {:dsk, DSK.t()}
| {:meta_extensions, [MetaExtension.extension()]}
@impl Grizzly.ZWave.Command
@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 Grizzly.ZWave.Command
@spec encode_params(Command.t()) :: binary()
def encode_params(command) do
seq_number = Command.param!(command, :seq_number)
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::3, dsk_byte_size::5>> <>
dsk_binary <> NodeProvisioning.encode_meta_extensions(meta_extensions)
end
@impl Grizzly.ZWave.Command
def decode_params(
<<seq_number, _::3, dsk_byte_size::5, dsk_binary::binary-size(dsk_byte_size)-unit(8),
meta_extensions_binary::binary>>
) do
dsk = NodeProvisioning.optional_binary_to_dsk(dsk_binary)
meta_extensions = MetaExtension.parse(meta_extensions_binary)
{:ok,
[
seq_number: seq_number,
dsk: dsk,
meta_extensions: meta_extensions
]}
end
defp params_with_defaults(params) do
defaults = [meta_extensions: [], dsk: nil]
Keyword.merge(defaults, params)
end
end