Самодельный «умный дом»: от идеи до реализации
Времена, когда словосочетание «умный дом» заставляло обывателя падать в обморок от благоговения, постепенно проходят. Если раньше технологии с этим условным названием были малодоступны широкому потребителю и чрезмерно дороги, сейчас ситуация меняется. Рынок буквально завален различными «умными» розетками, лампочками и утюгами, причём местами даже по вполне демократичным ценам. Однако общеизвестную истину «Хочешь сделать хорошо – сделай сам» никто не отменял.
Опять же, для среднего обывателя «умность» дома ассоциируется с модными, но на самом деле не особо нужными фишечками и рюшечками – такими как «облачные сервисы», мобильные приложения и прочие навороты типа всяких там Алис и миелофонов. Поэтому самостоятельная постройка умного дома кажется ему чем-то совершенно несбыточным: ну как же, разве в одиночку можно тягаться с многолетними трудами целой корпорации Гуголь Яндыкс и прочих? А ведь по факту, без большей части этих самых трудов легко можно было бы обойтись.
Как ни парадоксально, самой главной частью умного дома является не Алиса и не миелофон, а так называемая «последняя миля» – исполнительные устройства, осуществляющие непосредственное управление электрическими нагрузками. Если проанализировать стоимость масштабируемой системы, то окажется, что основной вклад в неё вносят именно эти модули, число которых прямо пропорционально размеру системы. Не зря в этой области иногда применяется понятие «цена за порт», пришедшее в практику из телекоммуникационных систем. В то время как вся красивая программная шелуха (с блекджеком и Алисами в придачу) часто вообще идёт как бесплатный бонус.
Таким образом, главной задачей для себя я ставил именно разработку и изготовление сети периферийных исполнительных устройств, а уж как ими управлять – разобраться будет несложно. Если люстра понимает только нажатие пальца на выключатель, никакая Алиса тут не поможет. А если она включена через умный модуль, то уж его-то можно научить слушаться хоть Алису, хоть миелофон, хоть самого хоспода боха.
О своих планах и изысканиях в данной области я немного писал ранее на форуме, но тема в итоге как-то заглохла и не получила продолжения. В отличие от самой разрабатываемой системы, которая на данный момент уже более 2 лет находится у меня в ежедневной эксплуатации. Попробую рассказать о ней максимально коротко, в формате отчёта о проделанной работе
Предыстория
В 2009 году был построен первый прототип периферийного исполнительного модуля, содержавший 7 бистабильных реле и 3 канала управления диммируемыми ЭПРА по аналоговому стандарту 1-10В:
Данный модуль, построенный на микроконтроллере ATMega8515, не с первой попытки, но всё же удалось запустить и «довести до ума». Некоторое время он даже находился в опытной эксплуатации и использовался по прямому назначению – управлял у меня освещением части гостиной. Проблемы начались позже: когда объём, занимаемый прошивкой модуля, «упёрся в потолок» 8 килобайт flash-памяти, причём одновременно выяснилось, что совместимые контроллеры с бОльшим объёмом памяти стоят ну совершенно невменяемых денег.
Особая история получилась и с микроконтроллерами ATTiny2313, на которые возлагались большие надежды в части построения компактных периферийных устройств. По до сих пор не ясной для меня причине у них обнаружились серьёзные проблемы при работе с эмулируемым последовательным портом (например, простые тестовые программы, отлаженные на контроллере ATMega, категорически отказывались работать на ATTiny).В связи с этим на данном контроллере было построено только одно устройство – мультистандартный трансмиттер ИК сигналов. Справедливости ради нужно отметить, что в работе он получился практически без нареканий.
Значительным успехом стала разработка и изготовление в 2015 году нового периферийного модуля на микроконтроллере ATMega32A:
Этот модуль, построенный на базе предыдущего с учётом всех его выявленных недочётов и ошибок, на данный момент находится в круглосуточной эксплуатации около 7 лет. При этом он отлично зарекомендовал себя в плане как надёжности, так и функциональности, и поэтому послужил прототипом для основной массы типовых периферийных устройств, в дальнейшем изготовленных мелкой серией. При этом все устройства при необходимости также поддерживают будущий «апгрейд» до контроллера ATMega644 (либо наоборот, даунгрейд до ATMega16A), если в этом возникнет такая необходимость.
Отдельно нужно обязательно упомянуть о главном инфраструктурном элементе системы – информационной шине. В ходе множества натурных экспериментов рассматривались самые разные варианты – от доморощенных подобий шин 1-Wire или DALI до такой экзотики, как передача команд при помощи двухтональных сигналов DTMF. Результатом явилась безоговорочная победа стандарта RS-485, удачно сочетающего сравнительно высокие скорости передачи данных с хорошей помехозащищённостью и дальностью передачи, на котором и было решено остановиться. Таким образом, все проводные устройства системы подключаются к линии по топологии «шина» стандартной витой парой, в которой 2 жилы используются для подачи питания (+12В), а остальные 2 – для сигнала RS-485. Пользуясь наличием в кабеле витой пары 2 дополнительных пар жил, они были задействованы для отдельной подачи питания на систему видеонаблюдения, для передачи сигналов ИК-приёмопередатчиков и для вывода аудиосигнала на громкоговоритель вызывной панели домофона у входной двери.
Мелкосерийное производство
В своей предыдущей практике я собирал все свои устройства исключительно на макетных платах, и для этого было сразу несколько причин. В первую очередь, разработка топологии печатной платы представлялась мне весьма хлопотным делом, сопоставимым по трудоёмкости с монтажом одной макетной платы, что делало это занятие совершенно нецелесообразным. Вдобавок главным преимуществом печатной платы является её лёгкая тиражируемость, что мне было не нужно, так как все устройства в основном изготавливались в единственном экземпляре. Наконец, мои опыты по самостоятельному травлению печатных плат никак не хотели увенчиваться успехом – на выходе получались бракованные дорожки, впустую израсходованные материалы и сплошное разочарование. И это ещё дело даже не доходило до сверления!
Прямо противоположная ситуация сложилась с «умным домом»: после отладки макета мне понадобилось в сжатые сроки изготовить целый тираж типовых периферийных модулей, отличающихся друг от друга лишь незначительными деталями. И вот здесь, наконец, мне пригодилась вся мощь технологии печатного монтажа, которую (надеюсь) удалось использовать на все 100%. Некоторое время потребовалось на освоение программы разводки плат и набивание в ней очередных «шишек», после чего родился проект «рабочей лошадки» системы – платы типового периферийного модуля. Что касается её изготовления, то к счастью, в нашем веке уже нет необходимости заниматься этим «на коленке», и эту работу для меня за чисто символическую сумму выполнили коллеги из Китая. Монтаж и наладку этих плат (кстати, с использованием современных SMD-компонентов) я делал своими силами, тем не менее конечный результат превзошёл все ожидания! Получился ничуть не уступающий заводскому продукт!
Дальше было больше. Устанавливать такую красоту в какие попало корпуса (как изначально предполагалось) стало уже как-то неприлично. Поэтому для типовых периферийных модулей было решено использовать стандартные несгораемые корпуса заводского производства, изначально предназначенные для установки автоматов защиты:
Детали, необходимые для их доработки под новые требования (в том числе передние панели), были вновь спроектированы и изготовлены с помощью 3D печати:
А для устройств, предназначенных для скрытой установки, были также разработаны и напечатаны специально предназначенные корпуса типа «распаечная коробка» с крышкой:
Типовые периферийные модули были изготовлены в 2019-2020 гг. в количестве 8 экземпляров и установлены для работы в различных частях квартиры. Каждый модуль обслуживает 6 или 7 электрических нагрузок, питающихся от сети 230В, а также собирает данные с подключённых датчиков и выполняет другие функции. Любопытно, что когда в моём распоряжении оказалась система команд известного стандарта DALI, я увидел в ней много родственного по отношению к своей системе (хотя вот честно, совсем туда не подглядывал за неимением литературы ). Впрочем, гордиться тут особенно нечем, так как эти идеи в целом тривиальны и лежат на поверхности.
За счёт внедрения системы удалось взять под полный контроль примерно 80% электронагрузок квартиры (остальные 20% в основном используются от случая к случаю и в подключении к умному дому особенно не нуждаются). При возникновении необходимости предусмотрена досборка и установка дополнительных модулей. В 2021 году я заказал в Китае дополнительный тираж печатных плат (с некоторыми исправлениями и корректировками по сравнению с первым вариантом), так что эти новые блоки имеют все шансы стать ещё более надёжными и беспроблемными.
Возможности системы
Ядром (центральным контроллером) системы является микрокомпьютер типа Raspberry PI 3B, работающий под управлением ОС Linux (Raspbian) и таким образом открывающий практически неограниченные возможности по интеграции управления с известными протоколами и службами. Фактически данный контроллер полностью избавляет систему от необходимости иметь где-то в доме дополнительный включённый компьютер/сервер с доступом в интернет – эту функцию с успехом выполняет сама Raspberry. Система обладает следующими основными сервисными возможностями:
1. Удобное местное управление освещением и другими нагрузками
Если раньше для включения, скажем, определённого набора светильников (для создания так называемой световой сцены) было нужно как следует побегать между розетками и выключателями, теперь эта операция осуществляется одним касанием кнопки на пульте дистанционного управления. Сама кнопка при этом может находиться на пульте от любой домашней аппаратуры, достаточно просто выбрать одну из не использующихся по основному назначению и записать её в память периферийного модуля системы.
2. Групповое и централизованное управление
Система команд всех устройств содержит групповые и широковещательные инструкции, благодаря которым можно синхронно управлять любым количеством нагрузок, вне зависимости от помещений, в которых они находятся, и розеток, в которые они подключены. В первую очередь данная возможность удобна для организации так называемых «мастер-кнопок», например для отключения всего «забытого света» при выходе из дома или одновременной активации всех камер видеонаблюдения.
3. Удалённое управление
Интеграция управляющего сервера с LAN и интернет открывает практически неограниченные возможности доступа к системе из любой точки мира. Отправка запросов на сервер возможна как через его собственный веб-интерфейс:
так и при помощи специальных URL. Второй вариант позволяет подключить систему ко многим сторонним устройствам и программным приложениям. Например, с его помощью IP-камеры видеонаблюдения получили возможность включать свет в помещениях при обнаружении движения в кадре, а также отправлять об этом звуковые уведомления.
4. Управление по телефону
Данная возможность, вначале появившаяся как «приятный бонус» от интеграции с системой IP-АТС Asterisk, изначально предназначалась исключительно для внешнего доступа к системе по телефонным сетям. Однако практика показала, что трубки домашнего DECT-телефона, подключённого к собственной АТС, оказались даже удобнее в качестве пультов управления освещением и прочими устройствами, чем традиционные инфракрасные пульты. Для включения и регулировки мощности нагрузок нужно набирать специальные короткие номера – на первый взгляд это может показаться не очень удобным, однако эти номера можно внести в записную книжку трубки под понятными именами, например «Люстра 50% яркости» и т.д. Опробовалась также возможность голосового управления (условное название «Катерина»): для этого нужно было набрать на трубке номер 40-00 и голосом произнести команду, например «выключи весь свет». Данная функция работала вполне успешно (через внешний сервер распознавания речи), однако показалась скорее «забавной игрушкой» и в конечном итоге не прижилась.
5. Приёмопередача сигналов ИК дистанционного управления
Ряд модулей системы оснащён приёмниками либо передатчиками сигналов ИК ДУ, совместимыми с известными стандартами (RC-5, NEC, Sony). Это позволяет организовать своего рода маршрутизацию ИК сигналов по квартире, например управлять медиаплеером, находящимся в гостиной, из кухни либо вообще удалённо (по командам из сети интернет). Кроме этого, любой кнопке любого пульта ДУ может быть назначена своя функция в рамках умного дома, например нажатие кнопки «1» на пульте от проектора в спальне может управлять люстрой, а кнопка «0» на телевизионном пульте в кухне может запускать медиаплеер или трансляцию онлайн-радио из другой комнаты.
6. Мониторинг помещений и электроприборов
Взаимодействие управляющего сервера с клиентами и системой организовано через «прослойку» базы данных MySQL, работающей на самом сервере. Подобный принцип позволяет исключить нежелательные «асинхронные» вмешательства в работу системы, а также предотвратить конфликты при многопользовательском доступе. Специальная таблица базы данных, актуальность которой поддерживается сервером, содержит информацию о состоянии всех подключённых устройств и датчиков системы, а также об их исправности. Эта информация доступна через веб-интерфейс системы, а также через телефонную систему – в виде голосовой информации, например о температуре в комнатах, текущей потребляемой мощности и т.д. В случае возникновения нештатных ситуаций (например, появления сигнала с датчиков дыма или газа) система также может подавать звуковые сигналы и выполнять экстренные телефонные звонки.
7. Автоматизация рутинных операций
Пожалуй, этот набор функций в полной мере оправдывает «интеллектуальность» системы. Для совершения повторяющихся и подчиняющихся определённой логике действий был разработан специальный программный движок, реализованный в качестве части ПО управляющего сервера, написанного на языке Python. Доступ к нему также возможен через общий веб-интерфейс:
Данный движок фактически представляет собой простой логический конструктор, который оперирует следующими входящими данными:
- текущим реальным временем и датой;
- значениями, полученными с управляющих устройств (датчиков);
- значениями системных переменных
и может преобразовывать их в исходящие действия:
- команды, отправляемые на исполнительные устройства (модули управления нагрузкой);
- телефонные звонки и отправку информационных сообщений;
- установку системных переменных.
При этом входящие данные могут комбинироваться при помощи простых логических операций сравнения, а для получения более сложных сценариев их можно практически неограниченно каскадировать с использованием системных переменных. Например, для ежедневного управления досветкой рассады на подоконнике можно составить следующий сценарий:
1) Если ВРЕМЯ > 16:00, установить переменную ПОРА_СВЕТИТЬ = 1
2) Если ФОТОДАТЧИК < 100 (люкс), установить переменную ЛЮКСЫ = 0
3) Если переменные ПОРА_СВЕТИТЬ = 1 и ЛЮКСЫ = 0, включить группу светильников №3
4) Если ВРЕМЯ > 22:00, установить переменную ПОРА_СВЕТИТЬ = 0 и выключить группу светильников №3
5) Если ФОТОДАТЧИК > 150 (люкс), установить переменную ЛЮКСЫ = 1 и выключить группу светильников №3.
Аналогичным образом можно запрограммировать и другие сценарии, например «выстраивания световых маршрутов» при обнаружении движения в разных частях жилища. Отдельно необходимо отметить, что при возможном отказе центрального контроллера или линии связи с ним работоспособность периферийных модулей во многом сохраняется в автономном режиме.