Привет, читатели! Этот пост — продолжение предыдущей статьи об опыте создания умного домофона (тык), но теперь за написанными буквами прячусь не я один. Со мной этот материал пишет глубокоуважаемый мной Человек (именно с большой буквы), автор аппаратной платформы Ge1mer, он же Ильмир Гайнутдинов. С материалами этой статьи мы выступали на недавней конференции "Стачка" в Санкт-Петербурге. Ниже, для интересующихся оставлю и ссылку на выступление. А пока, наливайте себе чайку с имбирем и лимонником, а мы начинаем...
Проблема, которую решает проект
Представьте, Вы сидите и работаете – перед Вами коллеги на созвоне, Вы рассказываете что-то интересно или обсуждаете результаты спринта. И тут, внезапно, звонит курьер в домофон. Вы вынуждены прерваться. Ещё и не один раз. Кому такое знакомо?

Именно проблему многократных подходов к двери мы и решаем. Решаем за счёт автоматизации открытия, заводя события звонка в домофон на Алису через навык умного дома (есть ещё и простой навык для навигатора) либо через бота выводим кнопки управления в телеграм пользователю.
Суть идеи вот в чём: Во многих многоквартирных домах установлены аналоговые домофоны, их ещё называют координатными. При этом даже если это современный домофон, то зачастую он такой же координатный, потому что комплексная переделка всей сети дорогая. Производители современных запирающих устройств позаботились об обратной совместимости – не меняют проводку до абонентских устройства, а заменяют коммутатор, вызывную панель и обвязку. Согласитесь, напрашивается возможность управлять открытием двери удаленно, с помощью системы умного дома.
Ильмир Гайнутдинов на "Стачке" рассказывал об истории создания первого устройства: "Недолго думая разработал адаптер к трубке, заказал производство плат. Когда они пришли, порадовало качество – хорошее лужение, приятная маска – всё «как с картинки». Кинул клич в сообществах, что есть такая штука - как ни странно попал в точку! Спрос оказался достаточным, чтобы создать свою группу и уже в ней набирать аудиторию из клиентов, которые даже не подозревали что ждет их впереди! И как говорится понеслось. Признаюсь честно, я думал, что продастся максимум 50-100 штук и на этом проект потеряет актуальность, но интерес к продукту есть до сих пор."
Немного технических деталей для «радиолюбителей»
Давайте поговорим об устройстве. Это небольшая коробочка размером в 2 спичечных коробка (если ещё помните, что это такое). На плате устройства расположены – модуль ESP8622 (1), оптроны «исполнительного механизма» (2), кнопки и индикация (3). Мелкую обвязку обсуждать не будем.

Оптроны – группа подключается к пинам GPIO, и каждая выполняет свою функцию. Один отвечает за подключение штатного абонентского устройства, второй имитирует снятие трубки. Следующий «кладёт» трубку (это для беззвучного режима). И замыкает оптрон определения входящего вызова. Так же в устройстве есть полноцветный светодиод индикации режимов. За счет кристаллов синего, зеленого и красного цвета в одном корпусе, мы можем показывать разные режимы одним индикатором.
Почему оптроны? Это Важно! Линия домофонной сети имеет своё питание, свои наводки и свой "Микроклимат". Нарушать эту идиллию не стоит, иначе можно нарваться на недовольных соседей в шумом при разговоре, которые позвонят домофонщикам, а те в свою очередь придут и настучать по голове, если не отключат квартиру вовсе. Всё дело во внешнем питании, снабжающим плату - использование адаптеров разного качества. К нам приходили клиенты, собравшие устройства по схемам из интернета с уточнениями, не будет ли у нас такого. И мы отвечаем: "Не беспокойтесь, наш продукт полностью разделяет 2 контура - Умный и схему ответа. Влияния на линию устройство НЕ ОКАЗЫВАЕТ!". Всё благодаря оптронной обвязке.
Модуль ESP8266 – выбран не случайно. Он производится давно и установлен в огромном количестве техники - в умных розетках, лампочках, выключателях и прочих элементах Интернета вещей. Его взяли за основу, к тому же, для него есть среда формирования прошивок ESPHome. На которой ранее было построено всё устройство. Это удобная среда, для построения простых прошивок, на стандартных библиотеках ограниченного функционала. Но несмотря на её универсальность, с развитием проекта, возможностей среды перестало хватать. И тут начинается самое интересное!

Программное обеспечение «чипа»
Прошивка под модуль была переписана с нуля на «сях». В ней реализован свой WEB интерфейс, им управляется всё устройство через передачу параметров в API. Да-да, на устройстве реализовано API с возможностью прикручивать свою автоматизацию, хоть на Python. JavaScript библиотеки интерфейса пришлось тоже таскать с собой – они находится на внутреннем разделе файловой системы и хранятся в gzip формате, благодаря чему весит не +200 кб, а умещается в 80 кб. Этого не удалось бы достичь, если бы не повсеместное распространение gzip`ования в браузерах. ESP не тратит мощности для распаковки, а отправляет архив «как есть», устанавливая соответствующий заголовок «Content-Encoding». Построенный интерфейс в браузере после полной загрузки делает вызов к устройству для получения актуальных настроек. Принимается json и из него уже заполняется интерфейс. Сохранение настроек раньше было тоже полным объектом в json формате – то есть брались все поля и отправлялись. Но из-за растущего объема устройство перестало справляться с парсингом, потому перешли на отправку каждого изменённого параметра отдельно.

Немного мешает, что в модуле всего 1 ядро. Вместе с остальными функциями оно существенно загружено, а это значит, что о всеми любимом delay в прошивке можно забыть. Да и не нужен он. Но признаюсь честно, есть один баг, а сказать вернее «не баг, а фитча» - индикация устройства иногда поглюкивает, моргая светодиодом неравномерно. Это возникает тогда, когда отправляется статус по MQTT и при установке HTTPS соединения.
Домашняя автоматизация, которой увлекается 70% наших клиентов часто основана на устройствах, использующих MQTT, поэтому мы встроили поддержку этого протокола, правда пока только с версией 3.1.1. Пришлось выключить LWT, отправляющий в топик «status» сообщения «offline» при отключении питания из-за ошибок на стороне брокеров. Некоторые отключали устройство при передаче LWT.
Функции, работающие в облаке
Для всех устройств, произведенных после сентября 2022 года общение с серверами происходит обязательно через HTTPS. Боль. Большая боль на ESP8266, выполняющим ещё какие-то задачи. В своих проектах Вы можете спокойно использовать защищенное соединение, но в нашем мы столкнулись с гигантской проблемой нехватки памяти. При организации HTTPS канала, старт TLS сессии определяет размер фрагмента зашифрованных данных. Чтобы хватало памяти мы выбираем его не более 512, но не все WEB сервера могут такое себе позволить. Например, при построении сервиса, о котором поговорим чуть позже, мы хотели использовать Traefik, как ingress. Но оказалось он не умеет менять размер пакета данных в сессии. Даже issue открыт с 2020 года. За то такое умеет Nginx, его мы и используем.

Но у нас не простой nginx. Для работы с несколькими устройствами одновременно у нас пересобран пакет с модулем NChan. Это прекрасное решение, имеющее возможность работы в кластере через синхронизацию данных в Redis, гибкими правилами внутри nginx, хорошей производительностью и многими другими плюсами. Каждое устройство, с активированной функцией «Облачных уведомлений» подключается к серверам. Nchan создаёт отдельный «канал» и авторизует устройство – данные передаются на backend. Далее остаётся просто реализовать логику, которая направит информацию в этот канал, а Nchan направит их устройству. Магия, не так ли?
Управление через колонку Алиса реализовано тоже на наших серверах. Навык умного дома в Яндекс Диалогах позволяет интегрировать устройство и настроить различные сценарии. Это может быть выключение звука домофона по расписанию, включение режима автоматического открытия в утренние часы, когда Вы отводите ребенка в школу. Также можно настроить фразы "Алиса, я жду курьера" и колонка включит режим открытия первого звонка. Отдельно можно настроить уведомления о звонке, например, Алиса может сказать "Кажется звонит домофон".
Простой навык позволит включить его на навигаторе, с помощью активационной фразы "Включи навык управление домофоном".

Работает личный кабинет, доступный отовсюду. Именно с него начинается подключение всех интеграций. Там же есть функция пригласительных ссылок для Ваших гостей. Они сами смогут управлять открытием, а Вы получите уведомление в телеграм, когда Гость отметит свой скорый приход.
Для управления устройством через Telegram используется бот, но не совсем простой. В 2021 году управление было построено на основе сообщения в боте и штатных команд, начинающихся со слеша. Но к моменту анонса управления на наше комьюнити мы всё переделали. Для этого используется WebApp – очень удобный вариант управления. Это сейчас Humster Combat вошел в моду и все узнали о MiniApps, а в 2022 году они только-только появились. Классная штука, попробуйте применить в своих проектах.
Мы честно пытались разработать интеграцию с колонками Маруся и Салют, но в поддержке навыков VK нам отказали в модерации после месячного ожидания, а аудиторию Салюта мы не смогли посчитать. Но если у нас появятся запросы мы обязательно запланируем работу с этими платформами.

Нужно отдельно сказать о базе знаний по настройкам и использованию продукта. Её создание шло постепенно, с 2022 года. Сейчас в ней насчитывается более 30 страниц, объясняющих настройку сложных моментов и простые ответы на вопросы со снимками экрана. Например, важная для понимания ручной корректировки таймингов диаграмма обработки входящего звонка. Около 3 месяцев назад мы начали переработку wiki для использования её с нейросетью для вопросов и ответов пользователей. Опытная эксплуатация показала минусы реализации – нейросеть галлюцинирует при некоторых вопросах, выдавай странные ответы, путающие пользователя. Поэтому мы отложили вывод функции на попозже. Что касается выбора технологий, то это WikiJS – удобная и быстрая разработка на NodeJS, в качестве нейросети для вопросов-ответов, конечно, использовали ChatGPT 4o.

Про бизнес
Бизнес модель изначально была построена на производстве устройств, но видя, какой монструозный сервис получился вокруг продукта мы подумали предоставлять дополнительные функции управления через Алису и Телеграм на основе платной подписки, но, спустя почти год подготовки отказались от этого – теперь облачное управление БЕСПЛАТНО!
На сегодняшний день, количество пользователей приближается к 1000 человек. Появилась необходимость в технической поддержке, нашлись единомышленники, с которыми мы объединились и стали работать в комплексе. Создан онлайн магазин, система учета обращений – всё для удобства клиента. Стали появляться запросы на интеграции в другие системы умного дома.
Если Вы думаете, что на координатных домофонах мы оставились – то нет! В линейке продуктов имеются качественные решения для цифровых переговорных устройств, адаптеры под сеть на базе modbus. Планируем внедрить новые протоколы, вывести на рынок адаптер для commax-совместимых домофонов и предоставлять услуги для владельцев квартир посуточной аренды жилья.
Но фишкой нашего продукта является собственный облачный сервис с управлением через Яндекс Алису и Telegram. Интеграция с Home assistant, SprutHub, Wirenboard. На завершающем этапе разработка нативной интеграции с Homekit.
Заключение
Мы стараемся найти ниши с пользовательскими потребностями, поэтому открыты к идеям для нетипичных устройств автоматизации дома. У нас есть адрес, куда Вы можете их отправить. Мы прорабатываем такие запросы и стараемся пропустить их сквозь «продуктовую» призму – оцениваем потребность рынка и массовость. Особенно обращаем внимание на социальную значимость. В общем, пишите, мы обязательно дадим обратную связь. Возможно именно Ваша идея ляжет в основу нового продукта – Вы получите его бесплатно, а мы расширим линейку производимых средств автоматизации.
Написать нам про Вашу идею: help@espdomofon.ru
Посмотреть линейку наших устройств: smartintercom.ru
Последить за нами в Телеграм: smartintercomru
Запись выступления: на YouTube
Автор: GrayHoax