2021-01-22 12:20:16 +03:00
2020-12-29 11:22:24 +03:00
2020-12-28 22:23:56 +03:00
2020-12-29 10:06:22 +03:00
2021-01-22 10:53:15 +03:00

MegaD HomeAssistant integration

Интеграция с MegaD-2561

Основные особенности:

  • Настройка в веб-интерфейсе + yaml
  • Все порты автоматически добавляются как устройства (для обычных релейных выходов создается light, для шим - light с поддержкой яркости, для цифровых входов binary_sensor, для датчиков sensor)
  • Возможность работы с несколькими megad
  • Обратная связь по mqtt
  • События на двойные/долгие нажатия
  • Команды выполняются друг за другом без конкурентного доступа к ресурсам megad, это дает гарантии надежного исполнения большого кол-ва команд (например в сценах). Каждая следующая команда отправляется только после получения ответа о выполнении предыдущей.

Зависимости

Важно!! Перед использованием необходимо настроить интеграцию mqtt в HomeAssistant

Для максимальной совместимости необходимо обновить ваш контроллер до последней версии, тк были важные обновления в части mqtt

Установка

Рекомендованный способ с поддержкой обновлений - HACS:

HACS - Integrations - Explore, в поиске ищем MegaD.

Альтернативный способ установки:

# из папки с конфигом
wget -q -O - https://raw.githubusercontent.com/andvikt/mega_hacs/master/install.sh | bash -

Не забываем перезагрузить HA

Настройка

Настройки -> Интеграции -> Добавить интеграцию в поиске ищем mega

Все имеющиеся у вас порты будут настроены автоматически. Вы можете менять названия, иконки и entity_id так же из интерфейса.

Кастомизация устройств с помощью yaml:

# configuration.yaml

mega:
  hello: # ID меги, как в UI 
    7: # номер порта
      domain: switch # тип устройства (switch или light, по умолчанию для цифровых выходов используется light)
      invert: true # инвертировать или нет (по умолчанию false)
      name: Насос # имя устройства
    8:
      # исключить из сканирования
      skip: true
    33:
      # для датчиков можно кастомизировать только имя и unit_of_measurement
      # для температуры и влажность unit определяется автоматически, для остальных юнита нет 
      name: какой-то датчик
      unit_of_measurement:
        hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам
        temp: "°C"
    14:
      name: какой-то датчик
      unit_of_measurement: "°C" # если датчик один, то просто строчкой

События

binary_sensor срабатывает когда цифровой выход принимает значение 'ON', вместе с этим он сохраняет полученные параметры от меги в аттрибутах. Атрибутами можно пользоваться так:

- alias: some double click
  trigger:
    - platform: state
      entity_id: binary_sensor.mega_1
      attribute: cnt
      to: 2
  action:
    - service: light.toggle
      entity_id: light.some_light

Однако, особенность state-триггера в атоматизациях HA в том, что он срабатывает только когда state меняется. Это может мешать, тк если вы повторно совершите двойной клик, стейт уже не поменяется, поэтому рекомендуется пользоваться event-триггером.

При каждом срабатывании binary_sensor так же сообщает о событии типа mega.sensor. События можно использовать в автоматизациях, например так:

- alias: some double click
  trigger:
    - platform: event
      event_type: mega.sensor
      event_data:
        entity_id: binary_sensor.mega_1
        cnt: 2
  action:
    - service: light.toggle
      entity_id: light.some_light

Чтобы понять, какие события происходят, лучше всего воспользоваться панелью разработчика и подписаться на вкладке события на событие mega.sensor, понажимать кнопки.

Сервисы

Все сервисы доступны в меню разработчика с описанием и примерами использования

mega.save:
  description: Сохраняет текущее состояние портов (?cmd=s)
  fields:
    mega_id:
      description: ID меги, можно оставить пустым, тогда будут сохранены все зарегистрированные меги
      example: "mega"

mega.get_port:
  description: Запросить текущий статус порта (или всех)
  fields:
    mega_id:
      description: ID меги, можно оставить пустым, тогда будут порты всех зарегистрированных мег
      example: "mega"
    port:
      description: Номер порта (если не заполнять, будут запрошены все порты сразу)
      example: 1

mega.run_cmd:
  description: Выполнить любую произвольную команду
  fields:
    mega_id:
      description: ID меги
      example: "mega"
    port:
      description: Номер порта (это не порт, которым мы управляем, а порт с которого шлем команду)
      example: 1
    cmd:
      description: Любая поддерживаемая мегой команда
      example: "1:0"

Отладка

Интеграция находится в активной разработке, при возникновении проблем заводите issue

Просьба прикладывать детальный лог, который можно включить в конфиге так:

logger:
  default: info
  logs:
    custom_components.mega: debug
Description
MegaD HomeAssistant integration
Readme 1.2 MiB
Languages
Python 99.9%
Shell 0.1%