Прокачиваем домофон протоколом MQTT для управления с телефона
Всем привет. Расскажу немного про свою последнюю междуделку — доработку домофона WiFi-модулем NodeMCU. Заранее прошу прощения за выбор модуля — всех уже, наверное, достала эта ESP«шка…
Конечно, работу ClusterM с его автоответчиком никому не переплюнуть, но такой функционал я считаю излишним. Мне, с рождением дочки, лишь понадобилось бесшумно открывать домофон гостям, чтобы не стоять у трубки и не ждать входящего звонка, который наверняка разбудит малую. Да и себе иногда легче открыть дверь с телефона, нежели лезть за ключами и прикладывать таблетку туда-сюда, чтобы она сработала (у меня очень сильно тупит панель в подъезде). Проект получился небольшой, так что в статье тоже не так много букв, зато есть фотографии.
Железо
В наличии у меня было несколько модулей NodeMCU, так что, прикинув его к трубке домофона, решил, что влезет он туда без проблем, надо лишь сделать плату расширения. Развожу я всегда в EagleCad, платы заказываю либо у китайцев, либо в американском OSH Park. На OSH Park выходит дешевле, если площадь платы маленькая, но вы получаете только 3 платы вместо 10 китайских, но для штучного проекта это не важно. На плату отлично встали релюшки PE014005, прям аккурат между выводов NodeMCU.
Не самый дешевый вариант, но у меня они были в наличии. А так можно поставить самые дешевые китайские, HUI KE например (это не ругательство, это фирма такая — у них есть серия релюшек HK4100F). Еще использовал две оптопары 4N35S, одну на вход — отлавливать входящий звонок, вторую на замыкание кнопки открытия домофона.
Получившиеся схема и топология платы вот (всё есть в репозитории, ссылка в конце статьи):
Платы с производства.
Несколько фотографий
Описание работы трубки
Сначала немного по принципу работы самой трубки — у меня Цифрал КЛ-2. Вот схема с официального сайта.
На схеме: 1,2 — контакты подключения линии домофона (имеет полярность, если кто не знал); SW2 — переключатель звука трубки (внизу — звук выключен, вверху — звук включен); SW1 — рычаг разговорной трубки (внизу — трубка висит, вверху — трубку сняли для разговора); SB1 — кнопка открытия двери; BA1 — динамик трубки; BM1 — микрофон трубки, HL1 — светодиод.
Когда подъездная панель дает вызов, в линию поступает меандр амплитудой 12В. Сопротивление в линии должно быть 50 Ом, в любом другом случае на панели высветится ошибка. Если переключатель SW2 находится в нижнем положении (звук на трубке выключен), то в линию подключен резистор 50 Ом — светодиод поморгает, но звука мы не услышим. Если переключатель SW2 в верхнем положении (звук включен), а переключатель SW1 в нижнем (трубка висит), то в линии будет сопротивление динамика BA1 всё те же 50 Ом, как раз на него попадает меандр и мы слышим звук. После снятия трубки, SW1 переходит в верхнее положение и один вывод динамика отрывается от земли, теперь там будет аналоговый сигнал разговора и приемлемая для уха громкость, а не звонок на сотню децибел. Если вы решаете открыть гостю дверь, то нажимаете на кнопку SB1, которая запирает транзистор и сопротивление в линии резко возрастает — так панель понимает, что надо открывать дверь.
Теперь о доработках
Relay1 — берем управление звуком на себя (считаем, что родной переключатель трубки SW2 в верхнем положении, иначе будет каша); Input — оптопара, дергается во время звонка (подключена перед Relay1, чтобы видеть звонок в бесшумном режиме); Relay2 — имитирует снятие трубки; Open — замыкает кнопку открытия двери. Обращаю ваше внимание на то, что релюшки подпаяны нормально замкнутыми контактами в разрыв. Это означает, что в любой момент можно отключить домофон от сети (а вдруг свет вырубился или интернет пропал) и он сохранит свою работоспособность, это важно.
Прошивка
Прошивку писал в PlatformIO (плагин для редактора Atom) на ардуиновских библиотеках. Ссылка на репозиторий в конце статьи. Эта, с вашего позволения, IDE будет поудобнее родной ардуиновской — кто не пробовал, обязательно попробуйте. В качестве MQTT клиента на телефон использовал IoTmanager (далее — просто клиент). По программе много рассказывать не буду (желающие посмотрят код), лишь опишу, что она умеет:
- подключаться к MQTT брокеру
- публиковать топики с настройками для клиента
- подписываться на топики для реакциина переключения в клиенте
- отправлять push уведомление на телефон при входящем звонке
- публиковать измененные настройки при звонке (чтобы видеть статус в клиенте)
- отключать звук на домофоне по команде клиента
- открывать дверь разово,
- открывать бесконечное число раз
- просто сбрасывать трубку
Экранные формы приложения (кликабельно)
Фишка программы IoTmanager в том, что все настройки хранятся в топиках, а она лишь отображает то, что опубликовано. Немного теряется смысл легковесного протокола MQTT, но мне такая реализация нравится. При желании можно переделать под другой MQTT клиент.
Конечно всё это (да еще с двумя электромеханическими реле) требует внешнего питания и я бы задумался над целесообразностью поделки, если бы мне понадобилось заводить питание 5В от розетки… Но у меня счетчик находится внутри квартиры, а домофон висит совсем рядом. Я просто заказал на Ali модуль 220AC/5VDC на din-рейку и запитал домофон от него. На фото он перевернут для удобства внутреннего монтажа.
Всем спасибо за внимание. Приглашаю в комментарии.
Полезные ссылки:
1. Репозиторий этого проекта на GitHub — там есть схема, разводка, исходный код.
2. Создание умного домофона с автоответчиком и Интернет-соединением — статья товарища ClusterM, упомянутая в начале.
3. Как я домофон Vizit к mqtt подключал — домофон с Arduino и Ethernet shield.
4. Esp8266 управление через интернет по протоколу MQTT — статья про MQTT и ESP8266.
5. Дистанционное управление домофоном — еще одна статья по теме.