Files
mega_hacs/readme.md
2021-01-31 12:10:17 +03:00

12 KiB
Raw Blame History

MegaD HomeAssistant integration

hacs_badge Donate

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

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

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

Установка

Рекомендованный способ с поддержкой обновлений - 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:
        hum: "влажность"
        temp: "температура"
      unit_of_measurement:
        hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам
        temp: "°C"
      # можно так же указать шаблон для конвертации значения, может быть полезно для ацп-входа
      # текущее значение порта передается в шаблон в переменной "value"
      conv_template: "{{(value|float)/100}}"
    14:
      name: какой-то датчик
      unit_of_measurement: "°C" # если датчик один, то просто строчкой

Зависимости

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

HTTP in

Начиная с версии 0.3.1 интеграция стала поддерживать обратную связь без mqtt, используя http-сервер. Для этого в настройках интеграции необходимо снять галку с использовать mqtt

В самой меге необходимо прописать настройки:

srv: "192.168.1.4:8123" # ip:port вашего HA
script: "mega" # это api интеграции, к которому будет обращаться контроллер

Ответ на входящие события от контроллера

Контроллер ожидает ответ от сервера, который может быть сценарием (по умолчанию интеграция отвечает d, что означает запустить то что прописано в поле act в настройках порта).

Поддерживаются шаблоны HA. Это может быть использовано, например, для запоминания яркости (тк сам контроллер этого не умеет). В шаблоне можно использовать параметры, которые передает контроллер (m, click, pt, mdid, mega_id)

Примеры:

mega:
  mega1: # id меги, который вы сами придумываете в конфиге в UI
    4: # номер порта, с которого ожидаются события
      response_template: "5:2" # простейший пример без шаблона. Каждый раз когда будет приходить сообщение на этот порт, 
                             # будем менять состояние на противоположное
    5:
      # пример с использованием шаблона, порт 1 будет выключен если он сейчас включен и включен с последней сохраненной 
      # яркостью если он сейчас выключен     
      response_template: >-
        {% if is_state('light.some_port_1', 'on') %}
        1:0
        {% else %}
        1:{{state_attr('light.some_port_1', 'brightness')}}
        {% endif %}
    6:
      # в шаблон так же передаются все параметры, которые передает контроллер (pt, cnt, m, click)
      # эти параметры можно использовать в условиях или непосредственно в шаблоне в виде {{pt}}
      response_template: >-
        {% if m==2 %}1:0{% else %}d{% endif %}
    

binary_sensor и события

Входы будут доступны как binary_sensor, а так же в виде событий mega.sensor и mega.binary. Для корректной работы binary_sensor имеет смысл использовать режим P&R, для остальных режимов - лучше пользоваться событиями.

События можно использовать в автоматизациях, например так:

# Пример события с полями как есть прямо из меги
- alias: some double click
  trigger:
    - platform: event
      event_type: mega.sensor
      event_data:
        pt: 1
        click: 2
  action:
    - service: light.toggle
      entity_id: light.some_light

События могут содержать следующие поля:

  • mega_id: id как в конфиге HA
  • pt: номер порта
  • cnt: счетчик срабатываний
  • mdid: if как в конфиге контроллера
  • click: клик (подробнее в документации меги)
  • value: текущее значение (только для mqtt)
  • port: номер порта

Начиная с версии 0.3.7 появилось так же событие типа mega.binary:

# Пример события с полями как есть прямо из меги
- alias: some long click
  trigger:
    - platform: event
      event_type: mega.binary
      event_data:
        entity_id: binary_sensor.some_id
        type: long
  action:
    - service: light.toggle
      entity_id: light.some_light

Возможные варианты поля type:

  • long: долгое нажатие
  • release: размыкание (с гарантией что не было долгого нажатия)
  • long_release: размыкание после долгого нажатия
  • press: замыкание
  • single: одинарный клик (в режиме кликов)
  • double: двойной клик

Чтобы понять, какие события происходят, лучше всего воспользоваться панелью разработчика и подписаться на вкладке события на событие 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

Отладка ответов http-сервера

Для отладки ответов сервера можно самим имитировать запросы контроллера, если у вас есть доступ к консоли HA:

curl -v -X GET 'http://localhost:8123/mega?pt=5&m=1'

Если доступа нет, нужно в файл конфигурации добавить ip, с которого вы хотите делать запросы, например:

mega:
  allow_hosts:
    - 192.168.1.1

И тогда можно с локальной машины делать запросы на ваш сервер HA:

curl -v -X GET 'http://192.168.88.1.4:8123/mega?pt=5&m=1'

В ответ будет приходить либо d, либо скрипт, который вы настроили