Управление откатными воротами из Home Assistant и ESPHome

Некоторое время назад я установил на даче откатные ворота с мотором. Как было со старыми воротами: приезжаешь, вылезаешь из машины, заходишь, снимаешь замок, руками открыл ворота. После установки новых ворот стало гораздо удобнее: подъезжаешь, нажал на кнопку на пульте, ворота открылись, заехал, еще раз нажал на кнопку на пульте и ворота закрылись.

На даче у меня установлен сервер Home Assistant, который помогает в некоторых вещах: управляет освещением, контролирует температуру. Мне захотелось чтобы у меня была возможность управлять воротами из системы Home Assistant. Пошел разбираться как это сделать.

Мотор для ворот — это вот такая коробка:

Если снять крышку, то будет видна плата и то как сейчас все подключено:

У меня используется двигатель CAME BX608AGS и плата ZBX6N.

К мотору идет небольшая книжка с инструкцией.

Я внимательно прочитал всю эту книжку и нашел каким образом можно управлять воротами с помощью этой платы: нужно замкнуть контакты 2 и 7 на плате.

Вот страница инструкции с этой информацией:

Первый эксперимент

Пошел проверять. Вставил провод в клемму 2 (в дополнение к тому проводу что там уже был), вставил провод в клемму 7. Соединил повода на секунду и тут же разъединил — ворота начали открываться. Опять на секунду соединил провода — ворота остановились. Еще раз соединил провода — ворота начали закрываться.

Т.е. задача стала совершенно понятна — для того чтобы я мог управлять воротами из компьютера нужно уметь замыкать/размыкать контакты 2 и 7 на плате.

Я описываю все так как будто у меня сразу все хорошо получилось, но это совсем не так. Я снял крышку, подключил провода, замкнул — и ничего не произошло. На led дисплее появилась ошибка E-8. Я взял пульт — с него тоже ворота больше не управляются. Пошел читать инструкцию. Оказалось что ошибка E-8 означает что не закрыта крышка мотора, при открытой крышке мотор не работает. Закрыл крышку, с пульта стало все управляться и замыкание контактов 2-7 тоже стали управлять воротами.

Изначально замыкание контактов давало действия не открыть-стоп-закрыть, а открыть-закрыть. Понадобилось еще переключить что делает мотор при замыкании контактов (для этого нужно было войти в меню с помощью кнопок в правой нижней части платы и выбрать нужный режим)

Выбор устройства

Итак, понятно что нужно для того чтобы из Home Assistant управлять воротами нужно какое-то устройство которое умеет замыкать контакты и чтобы можно было из Home Assistant давать этому устройству команду на замыкание/размыкание.

Пошел выяснять какие бывают устройства для решения этой задачи. Составил список реле с сухим контактом.

Достаточно большой выбор. Есть устройства которые питаются от розетки 230 вольт, а есть для питания которых можно использовать постоянный ток разного напряжения. Есть устройства которые подключаются по Wi-Fi, а есть те который используют Zigbee (если вам интересно что такое Zigbee, можно прочитать мой текст на эту тему).

Я решил что мне нужно устройство которое я могу перешить на ESPHome, так что выбирал только между Wi-Fi устройств. В итоге я решил что я возьму Sonoff Basic и буду использовать его для этой задачи. Я выбрал это устройство во многом потому что у меня в ящике уже лежало несколько Sonoff Basic, ничего не пришлось покупать. Но Sonoff Basic изначально не дает сухой контакт, на выходе у него 230 вольт. Для того чтобы делать с его помощью замыкание контактов нужно его сначала переделать под сухой контакт. Я разобрался как это сделать, сделал и написал инструкцию.

Скорее всего, если бы мне пришлось что-то покупать для решения этой задачи я бы купил Shelly 1. Это устройство дороже чем Sonoff Basic, но по сравнению с Basic там сразу есть сухой контакт и можно запитать это устройство не только от 230 вольт, но и от 12В или 24-60.

Код ESPHome

Итак, есть устройство. Sonoff Basic переделанный под суходй контакт. Его нужно запитать от сети 230 вольт и подключить к Wi-Fi.

Для того чтобы управлять Sonoff Basic из Home Assistant можно использовать компонент SonoffLAN. Но я предпочитаю перешить устройство на ESPHome.

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

Home Assistant может давать команду на Sonoff Basic:

Я хочу чтобы Home Assistant подавал одну команду:

Так надежнее. Для решения этой задачи я написал вот такой код прошивки ESPHome (файл gate.yaml):

esphome:
  name: gate
  platform: ESP8266
  board: esp01_1m
  board_flash_mode: dout

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

logger:

ota:
  password: !secret ota_password

api:
  password: !secret api_password

  services:
    - service: click
      then:
        - switch.turn_on: relay
        - delay: 500ms
        - switch.turn_off: relay

switch:
  - platform: gpio
    id: relay
    pin: GPIO12
    name: relay
    internal: true

binary_sensor:
  - platform: status
    name: "Gate Status"

status_led:
  pin:
    number: GPIO13
    inverted: True

Прошил этот код на ESPHome и после этого могу дергать в Home Assistant сервис esphome.gate_click При вызове этого сервиса Sonoff Basic сначала замкнет контакт, подождет немного, а потом разомкнет этот контакт без какой-либо дополнительной команды.

Результат

После того как у меня появился Sonoff Basic переделанный на сухой контакт и с нужной прошивкой, я подключил его к мотору.

Вот что получилось:

Sonoff Basic подключился к Wi-Fi, автоматически появился в Home Assistant (это фишка ESPHome) и я написал вот такой код в UI:

cards:

  - type: entities
    show_header_toggle: false
    entities:
      - entity: binary_sensor.gate_status

  - type: 'custom:button-card'
    name: Gate Click
    icon: 'mdi:gesture-tap-button'
    confirmation:
      text: '[[[ return `Are you sure?` ]]]'
    tap_action:
      action: call-service
      service: esphome.gate_click
    styles:
      card:

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

Что еще можно сделать и что можно сделать лучше

То что я сделал — работает, я могу управлять воротами из Home Assistant. В Home Assistant у меня появилась новая кнопка в интерфейсе, но теперь очень просто при желании пробросить ворота в Алису или Сири чтобы можно было голосом говорить "Открой ворота".

Недостаток этого решения то что Home Assistant не знает статус ворот. Ворота сейчас открыты или закрыты? Это можно решить с помощью установки дополнительного оборудования — чтобы в конечных положениях ворота зажимали кнопки, а данные с этих кнопок были в HA.

Меня это не сильно беспокоит — у меня есть камера которая смотрит на ворота, статус ворот я понимаю из картинки с камеры.

Другой момент который мне не очень нравится в этом решнеии — это то что запитываю устройство от 230 вольт. На плате уже есть 24 вольта, более правильно было бы использовать их.

Иван Бессарабов
ivan@bessarabov.ru

22 декабря 2020

Кстати, у меня есть телеграм канал про Home Assistant: https://t.me/bessarabov_ha