Платформы, компоненты, сущности и сервисы

Даже опытные пользователи Home Assistant не могут иногда внятно объяснить чем платформа отличается от компонента, когда речь заходит об архитектуре Home Assistant. Давайте разбираться.

Компонент

Один из главных кирпичиков Home Assistant, на которых строится автоматизация. Компоненты предоставляют HA возможность унифицированного взаимодействия с внешним миром. Например, компонент Light позволяет управлять светом, компонент Lock - замками, компонент Presence Detection - определять местоположение устройств и пользователей. Огромный список компонентов, которыми умеет управлять Home Assistant можно посмотреть в левой колонке здесь. Каждый из компонентов имеет стандартный набор действий, состояний и свойств, что делает возможным управление огромным зоопарком устройств с помощью минимального набора стандартных команд.

Платформа

Иногда разработчики решают разделить основную логику взаимодействия с какой-нибудь сущностью и низкоуровневые вещи, зависящие от конкретных устройств. В этом случае платформа обеспечивает “низкоуровневые” вещи типа установки соединения или конфигурации физических устройств. Компонент же, в свою очередь, предоставляет данные платформы в виде стандартного набора сервисов. Классический пример, это компонент TTS, обеспечивающий перевод текста в речь и платформы, позволяющие задействовать различные готовые сервисы: Google TTS, Yandex TTS, Amazon Polly, и т.п.

Другой пример - компонент Light, который реализуется различными платформами для устройств разных производителей: IKEA Trådfri lights, MQTT Light или Philips Hue Light.

Сущности (Entities)

Любое устройство или сервис, реализованные в виде компонентов, представляются в системе Home Assistant в виде сущностей. Ниже дан список основных сущностей из документации Home Assistant:

  • Кодовая панель
  • Двоичный сенсор
  • Термостат
  • Шторка (двери гаража, жалюзи, шторы и т.п.)
  • Вентилятор
  • Свет
  • Замок
  • Плеер
  • Пульт управления
  • Сенсор
  • Выключатель
  • Пылесос
  • Погода

Каждый тип сущностей имеет стандартный набор сервисов и атрибутов, а также может предоставлять расширенные атрибуты, специфические для какого-то определённого компонента.

Хабы

Хабами в Home Assistant называют объединение нескольких компонентов и/или сущностей под одной платформой. Например, хабы Ecobee и Nest объединяют компоненты термостата, камер, сенсоров температуры и других параметров, а также датчики состояния. Как правило, хабы подключаются как обычные компоненты и автоматически создают платформу и все нужные сущности. Ниже представлены примеры конфигурации для платформы и хаба, в результате подключения которых в обоих случаях в системе появляются компоненты и сущности для управления светом.

Платформа Yeelight для управления WiFi лампами Xiaomi с помощью стандартного компонента Light:

light:
  - platform: yeelight
    devices:
      192.168.1.25:
        name: Living Room
        transition: 1000
        use_music_mode: True #(defaults to False)
        save_on_change: False #(defaults to True)
      192.168.1.13:
        name: Front Door

Хаб Xiaomi Gateway подключается как кастомный компонент, который включает в себя платформу и набор стандартных компонентов для управления светом, розетками, выключателями, получения информации от сенсоров и т.п.

xiaomi_aqara:
  discovery_retry: 5
  gateways:
    - key: xxxxxxxxxxxxxxxx

То есть с точки зрения конфигурации это самодостаточный компонент, а с точки зрения архитектуры - хаб для нескольких компонентов и платформы для них.

Сервисы

Сервисы предоставляют возможность управления сущностями. Например, сервис tts.google_say позволяет перевести в речь произвольный текст и отправить его на любое доступное устройство воспроизведения (плеер). А сервис switch.toggle позволяет изменить состояние указанного выключателя с вкл на выкл или обратно.