75 lines
2.8 KiB
Markdown
75 lines
2.8 KiB
Markdown
---
|
|
title: Device Registry
|
|
sidebar_label: Introduction
|
|
id: version-0.78.0-device_registry_index
|
|
original_id: device_registry_index
|
|
---
|
|
|
|
The device registry is a registry where Home Assistant keeps track of devices. A device is represented in Home Assistant via one or more entities. For example, a battery-powered temperature and a humidity sensor might expose entities for temperature, humidity and battery level.
|
|
|
|
<img
|
|
src='/img/en/device_registry/overview.png'
|
|
alt='Device registry overview'
|
|
/>
|
|
|
|
| Attribute | Description |
|
|
| --------- | ----------- |
|
|
| id | Unique ID of device (generated by Home Assistant)
|
|
| name | Name of this device
|
|
| connections | A set of tuples of `(connection_type, connection identifier)`. Connection types are defined in the device registry module.
|
|
| identifiers | Set of identifiers. They identify the device in the outside world. An example is a serial number.
|
|
| manufacturer | The manufacturer of the device.
|
|
| model | The model of the device.
|
|
| config_entries | Config entries that are linked to this device.
|
|
| sw_version | The firmware version of the device.
|
|
| via_hub | Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs. This is used to show device topology in Home Assistant.
|
|
|
|
## Defining devices
|
|
|
|
> Entity device info is only read if the entity is loaded via a [config entry](config_entries_index.md).
|
|
|
|
Each entity is able to define a device via the `device_info` property. This property is read when an entity is added to Home Assistant via a config entry. A device will be be matched up with an existing device via supplied identifiers and connections, like serial numbers or MAC addresses.
|
|
|
|
```python
|
|
# Inside a platform
|
|
class HueLight(LightEntity):
|
|
|
|
@property
|
|
def device_info(self):
|
|
return {
|
|
'identifiers': {
|
|
# Serial numbers are unique identifiers within a specific domain
|
|
(hue.DOMAIN, self.unique_id)
|
|
},
|
|
'name': self.name,
|
|
'manufacturer': self.light.manufacturername,
|
|
'model': self.light.productname,
|
|
'sw_version': self.light.swversion,
|
|
'via_hub': (hue.DOMAIN, self.api.bridgeid),
|
|
}
|
|
|
|
```
|
|
|
|
Components are also able to register devices in the case that there are no entities representing them. An example is a hub that communicates with the lights.
|
|
|
|
```python
|
|
# Inside a component
|
|
from homeassistant.helpers import device_registry as dr
|
|
|
|
device_registry = await dr.async_get_registry(hass)
|
|
|
|
device_registry.async_get_or_create(
|
|
config_entry=entry.entry_id,
|
|
connections={
|
|
(dr.CONNECTION_NETWORK_MAC, config.mac)
|
|
},
|
|
identifiers={
|
|
(DOMAIN, config.bridgeid)
|
|
},
|
|
manufacturer='Signify',
|
|
name=config.name,
|
|
model=config.modelid,
|
|
sw_version=config.swversion,
|
|
)
|
|
```
|