35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""Load optional legacy entity ID mappings for GREE Controller."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .const import ENTITY_MAP_FILE
|
|
|
|
|
|
def _load(path: Path) -> dict[str, str]:
|
|
if not path.exists():
|
|
return {}
|
|
with path.open("r", encoding="utf-8") as handle:
|
|
data: Any = json.load(handle)
|
|
items = data.get("entities", []) if isinstance(data, dict) else []
|
|
result: dict[str, str] = {}
|
|
for item in items:
|
|
if not isinstance(item, dict):
|
|
continue
|
|
device_id = str(item.get("device_id", "")).strip()
|
|
entity_id = str(item.get("entity_id", "")).strip()
|
|
if device_id and entity_id.startswith("climate."):
|
|
result[device_id] = entity_id
|
|
return result
|
|
|
|
|
|
async def async_load_entity_map(hass: HomeAssistant) -> dict[str, str]:
|
|
"""Load the optional mapping file without blocking Home Assistant's loop."""
|
|
path = Path(hass.config.path(ENTITY_MAP_FILE))
|
|
return await hass.async_add_executor_job(_load, path)
|