По заявкам телезрителей, расскажу как сделать "умный" домофон на ESP, который работает с любым координатно-матричным домофоном, как с домофонной трубкой, так и без неё, интегрируется в Home Assistant или куда угодно по MQTT.
Немного теории
Несмотря на то, что сейчас всё чаще можно встретить цифровые домофоны, большинство подъездов всё-таки оснащены довольно старыми координатными. Это самые разные вариации домофонов Visit, Cyfral, Metakom, Altis и другие.
Координатный, или координатно-матричный домофон, работает очень просто. Для подъезда с лимитом в 100 квартир в распределительном щитке домофона будет две шины для подключения проводов, пронумерованных от 0 до 9. К квартире 25 пойдут провода 2 от первой шины и 5 от второй. К квартире 78, соответственно, провода 7 с первой шины и 8 со второй.
В состоянии покоя, между проводами, заведенными в квартиру, будет примерно нулевое напряжение. Динамик домофонной трубки имеет сопротивление около 50 Ом и подключен в линию. Таким образом, вызывная панель понимает, что аппарат на линии и на него можно звонить.
При звонке в линии появляется меандр около 12В, который поступает на динамик для звонка.
Если поднять трубку, сопротивление в линии увеличивается до 300-400 Ом, а напряжение примерно до 6-7 В и вызывная панель понимает, что трубка поднята.
При нажатии кнопки открытия, сопротивление измеряется килоомами. Вызывная панель воспринимает высокое сопротивление (равно как и обрыв линии) как сигнал к открытию двери.
От теории к практике
Ниже список компонентов, которые использовал я.
Вместо nodeMCU можно взять любую ESP с подходящим количеством пинов. Wemos D1 Mini например.
Вместо двухканального модуля реле можно взять два одноканальных или просто два реле, но придется сделать обвязку.
Светодиод и кнопка не обязательны, работать будет и без них. Более того, без них можно обойтись вот такой приятной платой с двумя реле на ESP-01.
Схема подключения довольно простая. Контакты линии обозначены как Line /-, контакты домофонной трубки как Intercom /-.
Если домофонную трубку подключать не собираетесь, просто замкните контакты Intercom через резистор 50 Ом.
Собирается с минимумом пайки. Припаять нужно будет только один резистор к оптопаре (дилетанты могут намерить в линии 3В и взять волшебный Nano Switch от Амперки, но я бы не рекомендовал - от высокого тока оптопара может и сгореть).
Прошивка
Не буду выкладывать весь YAML сюда. Ссылка на прошивку.
Для прошивки вам понадобится ESPHome.
Не забудьте заполнить поля в секции WiFi.
Что умеет?
Изначально проект разрабатывался под интеграцию с Home Assistant и был основан на MQTT. Позднее я переписал прошивку на ESPHome и теперь он нативно добавляется в HA через интеграции, а также без проблем работает по MQTT с любой другой системой УД.
Схема работы простая. Устройство определяет входящий звонок, светодиод загорается красным. Одинарное нажатие кнопки откроет дверь, долгое нажатие отменит вызов.
В режиме ожидания одинарное нажатие кнопки переключает режимы автоматического открытия двери (открыть один раз / открывать всегда). Долгое нажатие выключит автоматическое открытие.
В Home Assistant видится как замок и два переключателя для режимов. Открыть дверь можно и удаленно.
Также, для Home Assistant есть специальный package с автоматизациями, который отправляет уведомления и позволяет управлять домофоном через Telegram. Положите его в /config/packages/domofon.yaml и поправьте сервисы под себя.
Скоро в ESPHome появится поддержка HTTP запросов и работа с уведомлениями станет возможна прямо на ESP.
А чо так сложна?
Проекту больше года и это, пожалуй, второй по популярности вопрос, который мне задают. Первый - а можно ли из схемы что-то выкинуть.
И действительно, в соседней статье ведь написано, что нужно всего-то одно реле и всё заработает.
К сожалению, не всегда. Большинство домофонов не совсем тупые и без снятия трубки дверь не откроют, а некоторые еще и хотят, чтобы трубка была снята некоторое время, прежде чем открыть дверь.
Все эти моменты учтены в прошивке и настраиваются в специальной секции. Проект проверен на десятке разных домофонов и работает стабильно.
Проект по-прежнему развивается. Всегда актуальную версию можно найти на GitHub.