Skip to content

ThinkingHome.DeviceModel

ThinkingHome.DeviceModel Namespace

Classes
CommandOutcomeРезультат исполнения команды. Адаптеры переводят его в свой формат (у Алисы — action_result).
DeviceDescriptorПолное описание устройства — то, что драйвер отдаёт при discovery.
DeviceEntryЗапись об одном зарегистрированном устройстве. Инкапсулирует host-level кэш последнего состояния и подписку на изменения устройства. О самом хосте не знает — общается с ним только через два колбэка, полученных в конструкторе: onChanged (фан-аут изменений наверх) и onRemoved (самоудаление из хоста при ThinkingHome.DeviceModel.DeviceEntry.Dispose).
DeviceHostРеализация хоста устройств: сразу обе грани — IDeviceRegistry (регистрация драйверов) и IDeviceHost (потребительский .NET API). Хранит карту id → DeviceEntry и агрегированное событие изменений. Всё, что касается конкретного устройства (кэш, подписка на его изменения), инкапсулировано в DeviceEntry; хост общается с записью только через её публичный интерфейс, а записи передаёт два колбэка — сама запись про хост не знает.
DeviceManufacturerПаспортные данные устройства: производитель, модель, версии.
EndpointЛогическая часть устройства: тип + способности и свойства.
VendorExtensionAttributeПометка вендорского расширения словаря: концепт, которого нет в словаре Matter (аналог manufacturer-specific элементов самого Matter — §7.19, MEI). Допустимо только при реальной потребности и отсутствии концепта в актуальном Matter; семантика описывается так же строго, как у Matter-концептов (нормализованная единица, полный набор, doc-комментарий). Сверка словаря со спекой (CI-гейт по data_model XML) помеченные типы пропускает; непомеченные обязаны соответствовать Matter. Если Matter позже вводит стандартный концепт с той же семантикой — пометка снимается; если семантика расходится — новый тип + deprecation (правило идентификаторов).
Interfaces
IDeviceКонтракт драйвера (провайдер-грань). Реализуется классом, умеющим общаться с конкретным физическим устройством. Регистрируется в IDeviceRegistry.
IDeviceHostПотребитель-грань хоста — публичный .NET API слоя устройств. Его вызывают адаптеры экосистем (Алиса, Matter, HomeKit) и код ThinkingHome. Экосистемные адаптеры не лезут в реестр напрямую.
IDeviceRegistryПровайдер-грань хоста: драйверы регистрируют экземпляры устройств.
Enums
AirQualityИндекс качества воздуха — значения атрибута AirQuality кластера Air Quality (0x005B) Matter. Значение Unknown из Matter не переносится: «нет данных» в модели выражается отсутствием значения.
ColorModelМодель полного цвета. Модели взаимоисключающие — устройство поддерживает одну; пока только RGB. Как добавить HSV: сюда — значение Hsv; в State/Commands завести подтипы ColorHsvState/ColorHsvCommand с полями { H, S, V } (значение не число, поэтому отдельный тип, а не поле в существующем); на стороне Алисы значение hsv у color_setting — объект {h,s,v}, поэтому Alice-DTO цвета придётся разветвить (скаляр для rgb/temperature_k vs объект hsv).
CommandErrorCodeНейтральные коды ошибок; маппятся в коды экосистем (например, в error_code Алисы).
CommandStatusСтатус исполнения команды.
DeviceTypeТип устройства. Значения выровнены на device types из Matter Device Library; в комментарии — идентификатор Matter. Каждый адаптер (Алиса/HomeKit) держит свою таблицу перевода этих значений в свой формат. Заведены типы, покрытые текущим словарём способностей и свойств; остальные добавляются со сверкой по Matter.
FanSpeedСкорость вентиляции — выбор из набора. Совпадает с Alice mode:fan_speed (auto/low/medium/high) и с Matter Fan Control FanMode. Устройство объявляет поддержанное подмножество.
ThermostatModeРежим работы термостата/кондиционера — выбор из набора. Совпадает с Alice mode:thermostat (auto/heat/cool/dry/fan_only) и с Matter Thermostat SystemMode. Устройство объявляет поддержанное подмножество.

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