# `Grizzly.Network`
[🔗](https://github.com/smartrent/grizzly/blob/v9.1.4/lib/grizzly/network.ex#L1)

Module for working with the Z-Wave network

# `opt`

```elixir
@type opt() :: {:node_id, Grizzly.ZWave.node_id()} | {:seq_number, integer()}
```

# `reset_opt`

```elixir
@type reset_opt() :: {:notify, boolean()}
```

Options for when you want to reset the device

- `:notify` - if the flag is set to true this will try to notify any node that
  is part of the lifeline association group (default `true`)

# `add_long_range_device`

```elixir
@spec add_long_range_device(Grizzly.ZWave.DSK.t(), [opt()]) ::
  Grizzly.send_command_response()
```

Add a long range device to the provisioning list

# `delete_node_provisioning`

```elixir
@spec delete_node_provisioning(Grizzly.ZWave.DSK.t(), [opt()]) ::
  Grizzly.send_command_response()
```

Delete a node from the network's provisioning list via the node's DSK

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

# `get_all_node_ids`
*since 3.0.0* 

```elixir
@spec get_all_node_ids([opt()]) ::
  {:ok, [Grizzly.ZWave.node_id() | Grizzly.VirtualDevices.id()]}
  | {:error, Grizzly.send_command_error()}
```

Gets all the node ids both from the Z-Wave network and any virtual nodes

If everything is okay the response will be `{:ok, list_of_node_ids}` where the
list of node ids will be a combination of actual Z-Wave devices and virtual
device ids.

# `get_node_ids`

```elixir
@spec get_node_ids([opt()]) :: Grizzly.send_command_response()
```

Get a list of node ids from the Z-Wave network

Just because a node id might be in the list does not mean the node is on the
network. A device might have been reset or unpaired from the controller with
out the controller knowing. However, in most use cases this shouldn't be an
issue.

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

# `get_node_provisioning`

```elixir
@spec get_node_provisioning(Grizzly.ZWave.DSK.t(), [opt()]) ::
  Grizzly.send_command_response()
```

Get the nodes provisioning list information via the node's DSK

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

# `list_node_provisionings`

```elixir
@spec list_node_provisionings(integer(), [opt()]) :: Grizzly.send_command_response()
```

List all the nodes on the provisioning list

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

# `node_neighbor_update_request`

```elixir
@spec node_neighbor_update_request(Grizzly.node_id(), [Grizzly.command_opt()]) ::
  Grizzly.send_command_response()
```

Request a node to perform a neighbor update operation.

# `remove_failed_node`

```elixir
@spec remove_failed_node([opt()]) :: Grizzly.send_command_response()
```

Remove a (presumably) failed node

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

# `report_failed_node_ids`

```elixir
@spec report_failed_node_ids([opt()]) ::
  {:ok, [Grizzly.ZWave.node_id()]} | {:error, atom()}
```

Get the list of ids of all failed nodes.

# `request_network_update`

```elixir
@spec request_network_update([opt()]) :: Grizzly.send_command_response()
```

Request a network update from another controller. This is a no-op if this is
the network's primary controller.

### Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

# `reset_controller`

```elixir
@spec reset_controller([reset_opt() | opt()]) :: Grizzly.send_command_response()
```

Reset the Z-Wave controller

This command takes a few seconds to run.

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.
  * `:notify` - Whether to notify the nodes in the lifeline association group
    that the controller is being reset. Used primarily to disable this behavior
    in unit tests. Default `true`.
  * `:associations_server` - Which associations server to use for notifications
    and to clear after a successful reset. Defaults to `Grizzly.Associations`.

# `set_node_provisioning`

```elixir
@spec set_node_provisioning(
  Grizzly.ZWave.DSK.t(),
  [Grizzly.ZWave.SmartStart.MetaExtension.extension()],
  [opt()]
) :: Grizzly.send_command_response()
```

A node to the network provisioning list

Options

  * `:node_id` - If your controller is part of another controller's network
    you might want to issue network commands to that controller. By default
    this option will chose your controller.

---

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