Skip to content

ThinkingHome.Alice

ThinkingHome.Alice.Mapping Namespace

Classes
AliceMapperПеревод нейтральной модели устройств (ThinkingHome.DeviceModel) в DTO Алисы и обратно. Модель Алисы плоская, поэтому каждый нейтральный endpoint → отдельное устройство с составным id (AliceDeviceId). Здесь живёт вся специфика формата Яндекса; ядро о ней не знает. Пока покрыты OnOff, range (яркость, положение, температура), цвет (color_setting), режимы (mode: fan_speed, thermostat), тумблеры (toggle: oscillation) и свойства-сенсоры (properties: float temperature/humidity/battery_level/illumination/pressure/co2_level/water_meter, event motion/open/water_leak) — свойства read-only, идут в отдельную ветку properties у Алисы. Маппинг ограничен замкнутым словарём преобразований (все — детерминированные, чистые функции): • 1:1 relabel — OnOff → on_off • value-transform — Brightness (int) → range (0–100) • type ↔ instance — Color{Rgb,Temperature}State ↔ color_setting {rgb, temperature_k} • derivation (1:N) — Open → range:open + производное on_off (открыто = положение > 0) • suppression (1:0) — свойство ядра, невыразимое в словаре Алисы, осознанно не отдаётся (AirQuality). Допустим только для свойств; устройство не исчезает никогда: тип без соответствия у Алисы мапится в devices.types.other. Правила: (1) ядро — гранулярность Matter; (2) любой маппинг выражается этим словарём; (3) если не выражается — это дефект ядра, чинится там, а не escape-hatch'ем в маппере.
Structs
AliceDeviceIdИдентификатор устройства для Алисы: составной deviceId#endpointId. Модель Алисы плоская, поэтому каждый нейтральный endpoint становится отдельным устройством, а endpoint кодируется в id (и восстанавливается при query/action).

Опубликовано под лицензией MIT