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

Z-Wave device classes

Z-Wave device classes allow grouping devices with the same functionality
together. Moreover, the device class specification for specific device classes
provide mandatory and recommended command class support.

# `command_class_spec`

```elixir
@type command_class_spec() :: %{
  support: %{
    required(Grizzly.ZWave.CommandClasses.command_class()) =&gt;
      command_class_version()
  },
  control: %{
    required(Grizzly.ZWave.CommandClasses.command_class()) =&gt;
      command_class_version()
  }
}
```

# `command_class_version`

```elixir
@type command_class_version() :: integer()
```

# `t`

```elixir
@type t() :: %{
  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: command_class_spec(),
  manufacturer_id: non_neg_integer(),
  product_id: non_neg_integer(),
  product_type_id: non_neg_integer(),
  library_type: Grizzly.ZWave.Commands.VersionReport.library_type()
}
```

# `get_command_class_version`

```elixir
@spec get_command_class_version(t(), Grizzly.ZWave.CommandClasses.command_class()) ::
  non_neg_integer() | nil
```

Get the command class version for the command class

# `has_command_class?`

```elixir
@spec has_command_class?(t(), Grizzly.ZWave.CommandClasses.command_class()) ::
  boolean()
```

Check if the device class specification includes a particular command class

# `multilevel_sensor`

```elixir
@spec multilevel_sensor() :: t()
```

Device class spec for a generic multilevel sensor

# `thermostat_hvac`

```elixir
@spec thermostat_hvac() :: t()
```

A device class for a HVAC thermostat

---

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