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

Functions for working directly with a Z-Wave node

# `id`

```elixir
@type id() :: non_neg_integer()
```

# `info_opt`

```elixir
@type info_opt() :: {:force_update, boolean()} | info_opt()
```

Options to use when getting device info.

* `:force_update` - By default there is a cache managed by `zipgateway` that
  tracks the device information. Sometimes that can get out of date, so you
  can pass `[force_update: true]` to force the cache to update the device
  info. By default this is `false`

# `lifeline_opts`

```elixir
@type lifeline_opts() ::
  {:controller_id, Grizzly.ZWave.node_id()}
  | {:extra_node_ids, [Grizzly.ZWave.node_id()]}
```

# `opt`

```elixir
@type opt() :: {:seq_number, integer()} | {:timeout, non_neg_integer()}
```

# `get_dsk`

```elixir
@spec get_dsk(Grizzly.ZWave.node_id() | :gateway, :add | :learn, [
  Grizzly.command_opt()
]) ::
  Grizzly.send_command_response()
```

Get a node's dsk.

The response to this command is the `DSKReport` command

Sending this command with `:gateway` will always go to your Z-Wave controller

# `get_info`

```elixir
@spec get_info(Grizzly.ZWave.node_id() | Grizzly.VirtualDevices.id(), [
  info_opt() | opt()
]) ::
  Grizzly.send_command_response()
```

Get the information for a node by its id

The response to this command is the `NodeInfoCachedReport` command

# `get_lifeline_association`

```elixir
@spec get_lifeline_association(Grizzly.ZWave.node_id() | Grizzly.VirtualDevices.id()) ::
  Grizzly.send_command_response()
```

Get the lifeline association group for a node.

# `get_statistics`

```elixir
@spec get_statistics(Grizzly.ZWave.node_id() | Grizzly.VirtualDevices.id()) ::
  {:ok,
   Grizzly.ZWave.CommandClasses.NetworkManagementInstallationMaintenance.statistics()}
  | {:error, any()}
```

Gets a node's statistics from Z/IP Gateway.

# `set_lifeline_association`

```elixir
@spec set_lifeline_association(
  Grizzly.ZWave.node_id() | Grizzly.VirtualDevices.id(),
  [lifeline_opts()]
) ::
  Grizzly.send_command_response()
```

Set lifeline association for the node

The lifeline associated is used to report events that happen at the Z-Wave
device level back to the Z-Wave controller. For example, if you turn on a
light and want to be notified, the device will need to have it's lifeline
association set.

Opts:

  * `:controller_id` - the idea of the main controller to send lifeline
    reports to (defaults to `1`)
  * `:extra_node_ids` - any extra nodes to set add to the association
    group

---

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