# `Grizzly.ZWave.CommandClasses.NetworkManagementInclusion`
[🔗](https://github.com/smartrent/grizzly/blob/v9.1.4/lib/grizzly/zwave/command_classes/network_management_inclusion.ex#L1)

Network Management Inclusion Command Class

This command class provides the commands for adding and removing Z-Wave nodes
to the Z-Wave network

# `extended_node_info_report`

```elixir
@type extended_node_info_report() :: %{
  listening?: boolean(),
  basic_device_class: Grizzly.ZWave.DeviceClasses.basic_device_class(),
  generic_device_class: Grizzly.ZWave.DeviceClasses.generic_device_class(),
  specific_device_class: Grizzly.ZWave.DeviceClasses.specific_device_class(),
  command_classes: Grizzly.ZWave.CommandClasses.command_class_list(),
  granted_keys: [Grizzly.ZWave.Security.key()],
  kex_fail_type: Grizzly.ZWave.Security.key_exchange_fail_type()
}
```

Extended node info report

Node information from an extended node add status report

* `:listening?` - is the device a listening device
* `:basic_device_class` - the basic device class
* `:generic_device_class` - the generic device class
* `:specific_device_class` - the specific device class
* `:command_classes` - list of command classes the new device supports
* `:granted_keys` - S2 keys granted by the user during the time of inclusion
* `:kex_fail_type` - the type of key exchange failure if there is one

# `node_add_status`

```elixir
@type node_add_status() :: :done | :failed | :security_failed
```

The status of the inclusion process

* `:done` - the inclusion process is done without error
* `:failed` - the inclusion process is done with failure, the device is not
  included
* `:security_failed` - the inclusion process is done, the device is included
  but their was an error during the security negotiations. Device   functionality will be degraded.

# `node_info_report`

```elixir
@type node_info_report() :: %{
  :seq_number =&gt; byte(),
  :node_id =&gt; Grizzly.ZWave.node_id(),
  :status =&gt; node_add_status(),
  :listening? =&gt; boolean(),
  :basic_device_class =&gt; Grizzly.ZWave.DeviceClasses.basic_device_class(),
  :generic_device_class =&gt; Grizzly.ZWave.DeviceClasses.generic_device_class(),
  :specific_device_class =&gt; Grizzly.ZWave.DeviceClasses.specific_device_class(),
  :command_classes =&gt; Grizzly.ZWave.CommandClasses.command_class_list(),
  optional(:granted_keys) =&gt; [Grizzly.ZWave.Security.key()],
  optional(:kex_fail_type) =&gt; Grizzly.ZWave.Security.key_exchange_fail_type(),
  optional(:input_dsk) =&gt; Grizzly.ZWave.Security.key_exchange_fail_type()
}
```

Node info report

node information from a node add status report

* `:listening?` - is the device a listening device
* `:basic_device_class` - the basic device class
* `:generic_device_class` - the generic device class
* `:specific_device_class` - the specific device class
* `:command_classes` - list of command classes the new device supports
* `:granted_keys` - S2 keys granted by the user during the time of inclusion
  version 2 and above
* `:kex_fail_type` - the type of key exchange failure if there is one version
  2 and above
* `input_dsk` - the DSK of the device version 3 and above. If the info report is used

# `tx_opt`

```elixir
@type tx_opt() :: :null | :low_power | :explore
```

# `node_add_status_to_byte`

```elixir
@spec node_add_status_to_byte(node_add_status()) :: 6 | 7 | 9
```

Encode a `node_add_status()` to a byte

# `parse_node_add_status`

```elixir
@spec parse_node_add_status(6 | 7 | 9) :: node_add_status()
```

Parse the node add status byte into an atom

# `parse_node_info`

```elixir
@spec parse_node_info(binary()) :: node_info_report() | extended_node_info_report()
```

Parse node information from node add status and extended node add status reports

# `tx_opt_from_byte`

```elixir
@spec tx_opt_from_byte(byte()) ::
  {:ok, tx_opt()} | {:error, Grizzly.ZWave.DecodeError.t()}
```

# `tx_opt_to_byte`

```elixir
@spec tx_opt_to_byte(tx_opt()) :: byte()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
