developers.home-assistant/website/versioned_docs/version-0.78.0/device_registry_index.md

2.8 KiB

title sidebar_label id original_id
Device Registry Introduction version-0.78.0-device_registry_index 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.

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.

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.

# 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.

# 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,
)