Добавляем немного ума обычному домофону

6 апреля, 2021Изменена: 4 ноября, 2023 в 22:42

В свое время мне попалась на глаза статья о том, как можно сделать самый обычный аналоговый домофон чуточку умнее с использованием ESP и некоторого кол-ва достаточно простых компонентов. На тот момент лень во мне взяла верх и я отложил реализацию этого в долгий ящик. Спустя время этот проект получил развитие, и когда я увидел предложение о покупке уже готовой платы я тут же ее заказал. Здесь я хочу поделится своим опытом использования и некоторыми полезными автоматизациями.

Для начала стоит обратить внимание на авторов этого проекта:
@Vasilchuk – автор статьи, а так же прошивки для ESP
@Ge1mer – автор готовой платы
Если вы пользуетесь их трудами, я думаю что будет справедливо выразить им материальную благодарность, т.к. разработка и реализация всего этого отнимает много сил и времени. Все ссылки для этого доступны в GitHub’е проекта.
Приобрести готовую плату можно здесь – espdomofon.ru.

Итак, приехавшая ко мне плата представляет из себя достаточно компактный прямоугольник размером примерно 54×30 мм:

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

Я же остановлюсь только на основных моментах. Плата подключается в разрыв линии домофона, т.е. между вызывной панелью внизу и трубкой в квартире.
Контакты на плате:
Line +” и “Line -” – для подключения линии, т.е. кабеля, который приходит к вам в квартиру от вызывной панели домофона.
Intercom +” и “Intercom -” – для подключения трубки домофона расположенной у вас в квартире.
Подключить плату к питанию можно как с помощью контактов “Power +” и “Power -“, так и с помощью обычного Micro-USB разъема.
Плата может питаться напряжением от 3.5 до 16 Вольт.

Лично я для питания платы выбрал вот такой БП 5В на DIN рейку:

Т.к. из щитка в подъезде до трубки домофона у меня проложен кабель UTP с 8 жилами, я рассчитывал разместить плату в самой трубке (точнее ее “базе”), а блок питания разместить в щитке, подав питание на плату по свободным жилам кабеля.
К сожалению, плата оказалась великовата для моей трубки и в базу не поместилась по толщине.
В итоге я разместил плату в подъезде, запрятав ее в распаечную коробку, оставив трубку в квартире нетронутой.

Стоит учесть, что в подобном варианте размещения теряется некоторый функционал платы, а именно не получится использовать светодиод и кнопку. Они призваны управлять логикой работы платы, менять ее режимы и т.д. Но т.к. я все равно планировал использовать плату вместе с HA, для меня это было не критично.

В итоге, после некоторого времени эксплуатации платы у меня появилось несколько полезных автоматизаций, все они собраны в отдельный package, доступный у меня на GitHub’е. Здесь же я опишу пару интересных на мой взгляд моментов.

Самая очевидная и полезная функция – оповещение в Telegram о входящих звонках, с inline-кнопками “Открыть” и “Отклонить”.
Это максимально удобно, а пример реализации доступен прямо в репозитории проекта.
В жизни это выглядит примерно так:

Помимо Телеграма, оповещения можно настроить и в виде push-сообщений на телефоне, например через родное приложение Home Assistant.

Не менее полезная, но чуть менее очевидная полезность – автоматическое открытие двери курьерам.
Можно делать это в полу-автоматическом режиме – по звонку курьера (буду у вас через N минут) включать однократное авто-открытие (при желании в паре с mute), а можно добавить еще немного автоматизации и включать эти режимы по получению оповещения на телефоне о том, что курьер выехал к вам.
Важный момент – описанный ниже способ только на телефонах с ОС Android.
У себя я это реализовал для доставок из Яндекс.Еды (там же и Яндекс.Лавка) и Delivery Club, но по аналогии можно сделать практически для любого приложения, которое умеет оповещать о том, что курьер скоро будет у вас.
Прежде всего, для того что бы эта схема заработала, необходимо как то перехватывать оповещения приходящие на телефон.
К счастью, этот функционал встроен в официальное приложение HA для Android из коробки. Нам остается только сходить в настройки приложения, включить соответствующий сенсор и ограничить список приложений на которые он будет реагировать:

После этого в HA появится сенсор, в state’е которого будет содержатся текст последнего уведомления от выбранных приложений, а в атрибутах некоторая дополнительная информация:

Если у вас нет желания хранить историю этих уведомлений (а в них зачастую приходит куча рекламы), стоит так же отключить сохранение в БД истории этих сенсоров, добавив в configuration.yaml примерно следующее:

recorder:
  exclude:
    entity_globs:
      - sensor.*_poslednee_uvedomlenie

На основе этого сенсора уже можно написать вот такую автоматизацию:

automation:
  - alias: Domofon - Open Once for Couriers
    trigger:
      # Автоматизация сработает при изменении любого из сенсоров (два телефона)
      - platform: state
        entity_id:
          - sensor.kb2003_poslednee_uvedomlenie
          - sensor.mi_8_poslednee_uvedomlenie
    condition:
      # Здесь можно добавить любое нужное кол-во condition в режиме "OR" для разных приложений
      condition: or
      conditions:
        # Яндекс.Еда
        # Если в уведомлении содержится текст "Курьер * будет у вас в течение"
        - condition: template
          value_template: >-
            {{ trigger.to_state.state | regex_search('Курьер .* будет у вас в течение .*') }}
        # Delivery Club
        # Или если в уведомлении содержится текст "Уже спешит к вам"
        - condition: template
          value_template: >-
            {{ trigger.to_state.state | regex_search('Уже спешит к вам') }}
    action:
      # Включится режим однократного автоматического открытия домофона
      - service: switch.turn_on
        data:
          entity_id: switch.domofon_automatically_open_once
      # Отправится уведомления в Телеграм
      - service: notify.telegram
        data:
          message: "Курьер уже в пути, для домофона включен режим однократного авто-открытия."

Работает это так: вы делаете заказ в приложении Яндекс.Еда или Delivery Club и как только ваш заказ готов – вам приходит оповещение о том, что курьер уже в пути. Текст этого оповещения будет передан в HA, по триггеру запустится автоматизация, и если в тексте будет найдена искомая фраза – включится нужный режим домофона.

Еще одна идея, подсмотренная в профильном чате – включать режим однократного авто-открытия двери при приближении к дому меня или моих домочадцев.
Например, при возвращении с работы или с прогулки достаточно просто набрать на вызывной панели номер квартиры и дверь откроется сама. Не нужно доставать ключи или телефон, помнить код или ждать пока кто-то руками откроет тебе дверь.
Работает это на основе Zone trigger, т.е. автоматизация сработает тогда, когда объект попадет в заранее определенную зону.
У меня это, опять-таки, реализовано с помощью родного приложения HA для Android. Оно по-умолчанию умеет отслеживать и передавать в HA координаты телефона.
А раз есть объект (телефон или персона) с координатами, останется создать зону вокруг подъезда (радиус зоны стоит выбрать с некоторым запасом, для компенсации неточностей в определении координат) и написать автоматизацию, срабатывающую при появлении объекта в нужной зоне.

automation:
  - alias: Domofon - Open Once at Enter to Home Zone
    trigger: 
      # Триггер по появлению (event: enter) персоны в зоне
      - platform: zone
        entity_id:
          - person.alexander
          - person.irina
        zone: zone.domofon
        event: enter
    action:
      # Включаем однократное авто-открытие
      - service: switch.turn_on
        data:
          entity_id: switch.domofon_automatically_open_once
      # и однократный mute
      - service: switch.turn_on
        data:
          entity_id: switch.domofon_mute_sound_once
      # Отправляем оповещение о том, что нужный режим включен. На всякий случай.
      - service: notify.telegram_stall
        data:
          message: "_Домофон_: включен режим однократного авто-открытия."
      # Далее ждем пока откроется дверь в квартиру
      - wait_for_trigger:
        - platform: state
          entity_id: binary_sensor.0x158d00031c790f_contact
          to: 'on'
        # таймаут ожидания - 10 мин
        timeout: "00:10:00"
      # Код ниже будет выполнен сразу же, если сработает условие из wait_for_trigger
      # или по истечении 10 минут
      - choose:
        # Если режим авто-открытия все еще включен...
        - conditions: >-
            {{ is_state('switch.domofon_automatically_open_once', 'on') }}
          sequence:
            # выключаем однократное авто-открытие
            - service: switch.turn_off
              data:
                entity_id: switch.domofon_automatically_open_once
            # выключаем mute
            - service: switch.turn_off
              data:
                entity_id: switch.domofon_mute_sound_once
            # отправляем оповещение
            - service: notify.telegram
              data:
                message: "_Домофон_: отключен режим однократного авто-открытия."

Это всего пара реализованных мною идей, в жизни применений этому устройству можно найти гораздо больше, а для вдохновения стоит почитать профильный чат в телеграме.
Со своей стороны хочу отметить, что это одно из самых полезных устройств в использовании у меня на текущий момент. =)