Open-source home automation platform running on Python 3.
69
Central registries for managing entities, devices, and areas within Home Assistant. Provides persistent storage, relationship tracking, and metadata management for the entity ecosystem.
Central registry for managing entity metadata, customization, and persistence across Home Assistant restarts.
class EntityRegistry:
"""Registry for entity metadata and configuration."""
def __init__(self, hass: HomeAssistant):
"""Initialize entity registry.
Args:
hass: Home Assistant instance
"""
async def async_get_or_create(self, domain: str, platform: str, unique_id: str,
suggested_object_id: str = None, config_entry: ConfigEntry = None,
device_id: str = None, known_object_ids: set[str] = None,
disabled_by: str = None, capabilities: dict = None,
supported_features: int = None, device_class: str = None,
unit_of_measurement: str = None, original_name: str = None,
original_icon: str = None) -> RegistryEntry:
"""Get or create entity registry entry.
Args:
domain: Entity domain
platform: Entity platform
unique_id: Unique identifier
suggested_object_id: Suggested object ID
config_entry: Associated config entry
device_id: Associated device ID
known_object_ids: Known object IDs to avoid
disabled_by: Reason entity is disabled
capabilities: Entity capabilities
supported_features: Supported features bitmask
device_class: Device class
unit_of_measurement: Unit of measurement
original_name: Original entity name
original_icon: Original entity icon
Returns:
Registry entry
"""
async def async_update_entity(self, entity_id: str, *, name: str = None,
icon: str = None, area_id: str = None,
device_class: str = None, disabled_by: str = None,
entity_category: str = None, hidden_by: str = None,
new_entity_id: str = None, new_unique_id: str = None,
**kwargs) -> RegistryEntry:
"""Update entity registry entry.
Args:
entity_id: Entity ID to update
name: New name
icon: New icon
area_id: New area ID
device_class: New device class
disabled_by: Disable reason
entity_category: Entity category
hidden_by: Hide reason
new_entity_id: New entity ID
new_unique_id: New unique ID
**kwargs: Additional update parameters
Returns:
Updated registry entry
"""
async def async_remove(self, entity_id: str) -> None:
"""Remove entity from registry.
Args:
entity_id: Entity ID to remove
"""
def async_get_entity_id(self, domain: str, platform: str, unique_id: str) -> str:
"""Get entity ID for domain/platform/unique_id.
Args:
domain: Entity domain
platform: Entity platform
unique_id: Unique identifier
Returns:
Entity ID or None if not found
"""
def async_get_device_class(self, entity_id: str) -> str:
"""Get device class for entity.
Args:
entity_id: Entity ID
Returns:
Device class or None
"""
@property
def entities(self) -> dict[str, RegistryEntry]:
"""Return all entities."""
class RegistryEntry:
"""Entity registry entry."""
def __init__(self, entity_id: str, unique_id: str, platform: str, domain: str,
config_entry_id: str = None, device_id: str = None,
area_id: str = None, capabilities: dict = None,
supported_features: int = None, device_class: str = None,
unit_of_measurement: str = None, original_name: str = None,
original_icon: str = None, entity_category: str = None,
disabled_by: str = None, hidden_by: str = None,
icon: str = None, name: str = None):
"""Initialize registry entry.
Args:
entity_id: Entity ID
unique_id: Unique identifier
platform: Entity platform
domain: Entity domain
config_entry_id: Config entry ID
device_id: Device ID
area_id: Area ID
capabilities: Entity capabilities
supported_features: Supported features
device_class: Device class
unit_of_measurement: Unit of measurement
original_name: Original name
original_icon: Original icon
entity_category: Entity category
disabled_by: Disabled reason
hidden_by: Hidden reason
icon: Custom icon
name: Custom name
"""
@property
def entity_id(self) -> str:
"""Return entity ID."""
@property
def unique_id(self) -> str:
"""Return unique ID."""
@property
def platform(self) -> str:
"""Return platform."""
@property
def domain(self) -> str:
"""Return domain."""
@property
def config_entry_id(self) -> str:
"""Return config entry ID."""
@property
def device_id(self) -> str:
"""Return device ID."""
@property
def area_id(self) -> str:
"""Return area ID."""
@property
def name(self) -> str:
"""Return entity name."""
@property
def icon(self) -> str:
"""Return entity icon."""
@property
def disabled(self) -> bool:
"""Return True if entity is disabled."""
@property
def hidden(self) -> bool:
"""Return True if entity is hidden."""Central registry for managing device information, connections, and relationships with entities.
class DeviceRegistry:
"""Registry for device information and configuration."""
def __init__(self, hass: HomeAssistant):
"""Initialize device registry.
Args:
hass: Home Assistant instance
"""
async def async_get_or_create(self, *, config_entry_id: str, connections: set = None,
identifiers: set = None, manufacturer: str = None,
model: str = None, name: str = None,
sw_version: str = None, hw_version: str = None,
entry_type: str = None, via_device: tuple = None,
area_id: str = None, name_by_user: str = None,
suggested_area: str = None, disabled_by: str = None,
configuration_url: str = None) -> DeviceEntry:
"""Get or create device registry entry.
Args:
config_entry_id: Config entry ID
connections: Device connections
identifiers: Device identifiers
manufacturer: Device manufacturer
model: Device model
name: Device name
sw_version: Software version
hw_version: Hardware version
entry_type: Entry type
via_device: Parent device
area_id: Area ID
name_by_user: User-defined name
suggested_area: Suggested area
disabled_by: Disable reason
configuration_url: Configuration URL
Returns:
Device entry
"""
async def async_update_device(self, device_id: str, *, area_id: str = None,
manufacturer: str = None, model: str = None,
name: str = None, name_by_user: str = None,
sw_version: str = None, hw_version: str = None,
disabled_by: str = None, new_identifiers: set = None,
merge_identifiers: set = None, merge_connections: set = None,
configuration_url: str = None, **kwargs) -> DeviceEntry:
"""Update device registry entry.
Args:
device_id: Device ID to update
area_id: New area ID
manufacturer: New manufacturer
model: New model
name: New name
name_by_user: User-defined name
sw_version: Software version
hw_version: Hardware version
disabled_by: Disable reason
new_identifiers: New identifiers
merge_identifiers: Identifiers to merge
merge_connections: Connections to merge
configuration_url: Configuration URL
**kwargs: Additional update parameters
Returns:
Updated device entry
"""
async def async_remove_device(self, device_id: str) -> None:
"""Remove device from registry.
Args:
device_id: Device ID to remove
"""
def async_get_device(self, identifiers: set = None, connections: set = None) -> DeviceEntry:
"""Get device by identifiers or connections.
Args:
identifiers: Device identifiers
connections: Device connections
Returns:
Device entry or None
"""
@property
def devices(self) -> dict[str, DeviceEntry]:
"""Return all devices."""
class DeviceEntry:
"""Device registry entry."""
def __init__(self, id: str, config_entries: set[str], connections: set,
identifiers: set, manufacturer: str = None, model: str = None,
name: str = None, sw_version: str = None, hw_version: str = None,
entry_type: str = None, via_device_id: str = None,
area_id: str = None, name_by_user: str = None,
disabled_by: str = None, configuration_url: str = None):
"""Initialize device entry.
Args:
id: Device ID
config_entries: Associated config entries
connections: Device connections
identifiers: Device identifiers
manufacturer: Device manufacturer
model: Device model
name: Device name
sw_version: Software version
hw_version: Hardware version
entry_type: Entry type
via_device_id: Parent device ID
area_id: Area ID
name_by_user: User-defined name
disabled_by: Disabled reason
configuration_url: Configuration URL
"""
@property
def id(self) -> str:
"""Return device ID."""
@property
def identifiers(self) -> set:
"""Return device identifiers."""
@property
def connections(self) -> set:
"""Return device connections."""
@property
def manufacturer(self) -> str:
"""Return device manufacturer."""
@property
def model(self) -> str:
"""Return device model."""
@property
def name(self) -> str:
"""Return device name."""
@property
def name_by_user(self) -> str:
"""Return user-defined name."""
@property
def sw_version(self) -> str:
"""Return software version."""
@property
def hw_version(self) -> str:
"""Return hardware version."""
@property
def via_device_id(self) -> str:
"""Return parent device ID."""
@property
def area_id(self) -> str:
"""Return area ID."""
@property
def disabled(self) -> bool:
"""Return True if device is disabled."""
@property
def configuration_url(self) -> str:
"""Return configuration URL."""Registry for managing logical areas and organizing entities and devices into rooms or zones.
class AreaRegistry:
"""Registry for area information and configuration."""
def __init__(self, hass: HomeAssistant):
"""Initialize area registry.
Args:
hass: Home Assistant instance
"""
async def async_create(self, name: str, *, normalized_name: str = None,
picture: str = None) -> AreaEntry:
"""Create area registry entry.
Args:
name: Area name
normalized_name: Normalized name
picture: Area picture
Returns:
Created area entry
"""
async def async_update(self, area_id: str, *, name: str = None,
picture: str = None) -> AreaEntry:
"""Update area registry entry.
Args:
area_id: Area ID to update
name: New name
picture: New picture
Returns:
Updated area entry
"""
async def async_delete(self, area_id: str) -> None:
"""Delete area from registry.
Args:
area_id: Area ID to delete
"""
def async_get_area(self, area_id: str) -> AreaEntry:
"""Get area by ID.
Args:
area_id: Area ID
Returns:
Area entry or None
"""
def async_get_area_by_name(self, name: str) -> AreaEntry:
"""Get area by name.
Args:
name: Area name
Returns:
Area entry or None
"""
@property
def areas(self) -> dict[str, AreaEntry]:
"""Return all areas."""
class AreaEntry:
"""Area registry entry."""
def __init__(self, id: str, name: str, normalized_name: str,
picture: str = None):
"""Initialize area entry.
Args:
id: Area ID
name: Area name
normalized_name: Normalized name
picture: Area picture
"""
@property
def id(self) -> str:
"""Return area ID."""
@property
def name(self) -> str:
"""Return area name."""
@property
def normalized_name(self) -> str:
"""Return normalized name."""
@property
def picture(self) -> str:
"""Return area picture."""Utility functions for working with registries and managing entity relationships.
async def async_get_registry(hass: HomeAssistant, registry_type: str) -> Union[EntityRegistry, DeviceRegistry, AreaRegistry]:
"""Get registry instance.
Args:
hass: Home Assistant instance
registry_type: Registry type ('entity', 'device', 'area')
Returns:
Registry instance
"""
def async_entries_for_device(registry: EntityRegistry, device_id: str,
include_disabled_entities: bool = False) -> list[RegistryEntry]:
"""Get entity entries for device.
Args:
registry: Entity registry
device_id: Device ID
include_disabled_entities: Include disabled entities
Returns:
List of entity entries
"""
def async_entries_for_area(registry: EntityRegistry, area_id: str) -> list[RegistryEntry]:
"""Get entity entries for area.
Args:
registry: Entity registry
area_id: Area ID
Returns:
List of entity entries
"""
def async_entries_for_config_entry(registry: EntityRegistry,
config_entry_id: str) -> list[RegistryEntry]:
"""Get entity entries for config entry.
Args:
registry: Entity registry
config_entry_id: Config entry ID
Returns:
List of entity entries
"""
async def async_migrate_entries(hass: HomeAssistant, config_entry_id: str,
entity_migration: dict[str, str]) -> None:
"""Migrate entity registry entries.
Args:
hass: Home Assistant instance
config_entry_id: Config entry ID
entity_migration: Migration mapping
"""# Entity registry disabled reasons
DISABLED_USER = "user"
DISABLED_DEVICE = "device"
DISABLED_CONFIG_ENTRY = "config_entry"
DISABLED_INTEGRATION = "integration"
# Entity registry hidden reasons
HIDDEN_USER = "user"
HIDDEN_INTEGRATION = "integration"
# Device registry entry types
ENTRY_TYPE_SERVICE = "service"
# Device registry disabled reasons
DISABLED_USER = "user"
DISABLED_CONFIG_ENTRY = "config_entry"
DISABLED_INTEGRATION = "integration"
# Device connection types
CONNECTION_NETWORK_MAC = "mac"
CONNECTION_UPNP = "upnp"
CONNECTION_ZIGBEE = "zigbee"
CONNECTION_BLUETOOTH = "bluetooth"
# Entity categories
ENTITY_CATEGORY_CONFIG = "config"
ENTITY_CATEGORY_DIAGNOSTIC = "diagnostic"from typing import Any, Dict, List, Optional, Set, Union
# Registry entry types
RegistryEntryType = Dict[str, Any]
DeviceEntryType = Dict[str, Any]
AreaEntryType = Dict[str, Any]
# Registry data types
EntityRegistryType = Dict[str, RegistryEntry]
DeviceRegistryType = Dict[str, DeviceEntry]
AreaRegistryType = Dict[str, AreaEntry]
# Device connection/identifier types
DeviceConnectionType = tuple[str, str]
DeviceIdentifierType = tuple[str, str]
DeviceConnectionsType = Set[DeviceConnectionType]
DeviceIdentifiersType = Set[DeviceIdentifierType]
# Registry ID types
EntityIdType = str
DeviceIdType = str
AreaIdType = str
ConfigEntryIdType = strInstall with Tessl CLI
npx tessl i tessl/pypi-homeassistantdocs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10