SberEntityLoader¶
Загрузчик сущностей моста: чтение HA registry, применение YAML-overrides, разрешение linked-сенсоров, детекция конфликтов устройств.
Извлечён из SberBridge._load_exposed_entities в v1.25.1 — метод моста
превратился в 30-строчный оркестратор поверх SberEntityLoader.load(),
возвращающего EntityLoadResult для атомарного swap-on-replace.
Entity loader / registry for Sber MQTT Bridge.
Extracted from SberBridge to isolate HA entity registry lookups,
YAML overrides, link resolution, and conflict detection from the
bridge's transport and lifecycle concerns (SRP).
Usage::
loader = SberEntityLoader(hass, entry)
result = loader.load()
# result.entities: dict[entity_id, BaseEntity]
# result.enabled_entity_ids: list[str]
# result.entity_links: dict[primary, dict[role, linked_id]]
# result.linked_reverse: dict[linked_id, (primary, role)]
# result.redefinitions: dict[entity_id, dict]
EntityLoadResult
dataclass
¶
EntityLoadResult(entities=dict(), enabled_entity_ids=list(), entity_links=dict(), linked_reverse=dict(), redefinitions=dict())
Result of a full entity reload pass.
Attributes:
| Name | Type | Description |
|---|---|---|
entities |
dict[str, BaseEntity]
|
Fresh dict of |
enabled_entity_ids |
list[str]
|
Ordered list of exposed entity IDs. |
entity_links |
dict[str, dict[str, str]]
|
Mapping primary entity → {role: linked_entity_id}. |
linked_reverse |
dict[str, tuple[str, str]]
|
Reverse mapping linked_entity_id → (primary, role). |
redefinitions |
dict[str, dict]
|
Updated redefinitions dict (pruned of stale entries). |
SberEntityLoader
¶
Build Sber BaseEntity instances from HA registry and YAML config.
This class owns the read-only lookup logic that turns HA entity
registry entries into Sber-friendly entity objects. It does NOT own
runtime state (debouncing, MQTT, acknowledgments) — those stay in
SberBridge.
Initialize the loader.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
hass
|
HomeAssistant
|
Home Assistant core instance. |
required |
entry
|
ConfigEntry
|
Config entry providing options (exposed IDs, overrides). |
required |
Source code in custom_components/sber_mqtt_bridge/entity_registry.py
load
¶
Perform a full entity reload pass.
Uses a swap-on-replace pattern: callers receive a new result set and should atomically replace their previous state to avoid race conditions with concurrent readers.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
existing_redefinitions
|
dict[str, dict] | None
|
Current in-memory redefinitions; merged with persisted options before pruning stale entries. |
None
|
Returns:
| Type | Description |
|---|---|
EntityLoadResult
|
class: |