Skip to content

ThinkingHome.Alice

ThinkingHome.Alice.Mapping

AliceMapper Class

Перевод нейтральной модели устройств (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'ем в маппере.

csharp
public static class AliceMapper

Inheritance System.Object → AliceMapper

Methods

AliceMapper.ToActionResult(CommandOutcome) Method

Общий результат операции: нейтральный CommandOutcome → action_result Алисы.

csharp
public static ThinkingHome.Alice.Model.ActionResult.ActionResult ToActionResult(ThinkingHome.DeviceModel.CommandOutcome outcome);

Parameters

outcome CommandOutcome

Returns

ActionResult

AliceMapper.ToCallbackState(string, IReadOnlyList<StateChange>, long) Method

Report: пачка изменений за окно → один callback-запрос Notification API (user_id = hostId). Дедуп по слоту кэша (устройство, endpoint, instance) — последнее значение побеждает (то же правило, что у кэша хоста, включая осознанно общий слот цвета); затем группировка по (устройство, endpoint) и чистый реюз query-ветки: разъезд по capabilities/properties и derivation работают как в query.

csharp
public static ThinkingHome.Alice.Model.Callback.CallbackStateRequest ToCallbackState(string userId, System.Collections.Generic.IReadOnlyList<ThinkingHome.DeviceModel.State.StateChange> changes, long ts);

Parameters

userId System.String

changes System.Collections.Generic.IReadOnlyList<StateChange>

ts System.Int64

Returns

CallbackStateRequest

AliceMapper.ToCapabilityActionResult(CapabilityActionParamsBase, CommandOutcome) Method

Action: результат нейтральной команды → результат способности Алисы.

csharp
public static ThinkingHome.Alice.Model.Capabilities.CapabilityActionResultBase ToCapabilityActionResult(ThinkingHome.Alice.Model.Capabilities.CapabilityActionParamsBase action, ThinkingHome.DeviceModel.CommandOutcome outcome);

Parameters

action CapabilityActionParamsBase

outcome CommandOutcome

Returns

CapabilityActionResultBase

AliceMapper.ToCommand(CapabilityActionParamsBase, int) Method

Action: параметры способности Алисы + endpoint → нейтральная команда.

csharp
public static ThinkingHome.DeviceModel.Commands.DeviceCommand ToCommand(ThinkingHome.Alice.Model.Capabilities.CapabilityActionParamsBase action, int endpointId);

Parameters

action CapabilityActionParamsBase

endpointId System.Int32

Returns

DeviceCommand

AliceMapper.ToDevices(DeviceDescriptor) Method

Discovery: нейтральный дескриптор → по одному Device Алисы на каждый endpoint.

csharp
public static System.Collections.Generic.IEnumerable<ThinkingHome.Alice.Model.Device> ToDevices(ThinkingHome.DeviceModel.DeviceDescriptor descriptor);

Parameters

descriptor DeviceDescriptor

Returns

System.Collections.Generic.IEnumerable<Device>

AliceMapper.ToDeviceState(AliceDeviceId, DeviceSnapshot) Method

Query: весь снимок устройства + id → DeviceState (только значения нужного endpoint'а); значения способностей и свойств разъезжаются по своим веткам по типу значения.

csharp
public static ThinkingHome.Alice.Model.DeviceState ToDeviceState(ThinkingHome.Alice.Mapping.AliceDeviceId id, ThinkingHome.DeviceModel.State.DeviceSnapshot snapshot);

Parameters

id AliceDeviceId

snapshot DeviceSnapshot

Returns

DeviceState

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