Ещё одна автоматизация сталинки
Основное окно Home Assistant
Очередная статья c теорией и практикой на тему домашней автоматизации.
Предисловие
Являюсь давним читателем хабра, но только сейчас созрел написать статью.
В ней будет отображено как текущее состояние дел, так и немного истории. Конкретного финиша нет: совершенствовать можно почти до бесконечности.
Рассчитываю как поделиться идеями и опытом, так и набраться критики и предложений.
Статья написана с точки зрения программиста, электроника — это для меня хобби. Здесь не будет схем подключения блока питания к контроллеру, а больше логические моменты. В конце статьи будут ссылки на Github со всякими велосипедами.
Возможно, что по итогу нужно будет сделать еще одну статью с забытыми/опущенными подробностями и ответами на вопросы.
Просьба сильно не пинать за хаос в щитах, все очень часто переделывается и быстрее выходит кинуть соплями. Потихоньку привожу все в порядок.
Исходные данные
Квартира, 3 комнаты, раздельный санузел, 2 балкона, примерно 82 м2.
Советский ремонт с элементами хайтека (хай-така), дает возможность проводить эксперименты не сильно переживая за внешний вид.
Желание изучить что-то новое и сделать что-то необычное.
Собирать как можно больше данных, а потом уже разбираться, что с ними делать.
С чего все начиналось
Все началось в 2011 году с датчика температуры DS18B20, висящего за окном и подключённого через самодельный адаптер в COM-порт домашнего сервера (тогда ещё на Windows 2003).
Далее были опыты с реле через DS2413 (да и в целом с шиной 1W) через Owfs под FreeBSD.
На тот момент сказывались отсутсвие опыта и финансов, так что эксперименты далеко не зашли.
Конкретного ТЗ я не ставил, однако хотелось делать все без батарейного питания и на проводах, чему отсутсвие современного ремонта очень поспособствовало.
Первый опыт с диодными лентами
Версия 1
Однажды я наткнулся на интересный проект от @ClusterM Clunet. Подкупила полная независимость от мастера: все устройства могут общаться напрямую через шину, а сервер остаётся для сбора статистки и шлюза в интернет.
Я не пошёл по пути универсальности и под каждую точку разрабатывал отдельную плату. Все делалось дома методом лазерного утюга.
0 USB шлюз — использовался для проброса шины на домашний сервер.
2 контроллер настенного выключателя в комнате — обычный, двухклавишный. Был скрипт на ВКЛ/ВЫКЛ, так и на двойные нажатия.
3 контроллер люстры в комнате — 5 лампочек, на каждую по реле. Ручное управление.
4 контроллер света в углу коридора — датчик движения, диодная лента. Автоматическое и ручное управление.
5 контроллер света возле двери — датчик открытия двери, датчик движения, диодная лента. Автоматическое и ручное управление.
6 контроллер лент в комнате — ручное управление. Дополнительно еще блок из 4-х управляемых розеток в коробке из-под мороженного.
7 контроллер света в коридоре — датчик движения, диодная лента. Автоматическое и ручное управление.
8 контроллер света в туалете — датчик движения, диодная лента. Автоматическое и ручное управление.
9 контроллер света в ванной — так и не дошел до установки.
10 контроллер клавиатуры — 10 цифровых кнопок, использовался для тестов.
12 контроллер аквариума — управление мощными 3W сборками светодиодов (белый, желтый, синий, красный), управление/контроль температуры, циклы закат/рассвет, платформа для игр с I2C датчиками (BMP280, BH1750, SHT31, DS3231).
Собиралось на Atmega88. Начинал с Atmega8, но захотелось больше аппаратных ШИМ.Вся система была сделана одной шиной (проводом 3×2.5 и 3×1.5), т.к. основой был ATX блок питания на 600W.
Раньше сервером был ящик, собранный из остатков после апгрейда стационарного пк, но тут был собран мини-сервер на базе ASRock J3710-ITX. В качестве ОС я выбрал Debian, т.к. много сталкиваюсь с ним на работе. Дополнительно была проложена шина 1Wire с кучей датчиков температуры: комнаты, улица и стояки отопления (которых у меня в квартире аж целых три). Подключал через самодельный адаптер на DS2480 и FT232.
В целом, устройства жили сами по себе, но хотелось плюшек с «телефонным» управлением. Была написана система управления и мониторинга, хотя это было больше похоже на набор плохо связанных между собой скриптов.
Функции:
Журнал всех сообщений на шине (удобно для отладки)
Сбор и вывод всех датчиков (температура , влажность и т.д)
Обновление прошивки устройств
Управление светом/розетками
Формулы для просчета автояркости
Homebridge для яблок
Бонусом ещё сделал приложение под Android/iOS с частичным функционалом.
Т.к. Было желание передвинуть сервер, шлюз переехал вначале на роутер с OpenWRT (Linksys WRT1200AC, отличнейший аппарат), а потом уже на RaspberryPi.
Временами я ловил потери пакетов, зависания. Ситуацию немного улучшил переход на витую пару для данных, но на 100% я победить не смог.
Эта система у меня просуществовала с 2015 по 2020 г, но в итоге я решил отказаться. Причина достаточно проста: когда все делаешь сам, то все ошибки нужно исправлять самому. А отсутсвие времени/знаний растягивает этот процесс на месяцы.
Немного фото/скриншотов
Версия 2 — текущая
Я долго изучал варианты готовых систем, но все никак не мог на чем-то остановиться. Уже даже начал задумываться о zigbee/z-wave, но отказался из-за их заточенности под готовые устройства. Интересным вариантом показался CAN, т.к. помехозащищенность и есть готовые трансиверы. Даже написал тестовый P2P протокол по аналогии с Clunet (назвал… Clucan), но необходимость делать остальную часть платы никуда не делась.
И тут мне попался российский контроллер MegaD (https://ab-log.ru). Я так понял, что проект начинался с самоделки на ATmega328, , а потом перерос в готовый продукт. По соотношению цена/функционал он был очень интересным вариантом для теста. Из минусов: отсутствие нормального p2p, нет возможности сделать расширенную логику (функционал при пропадании сервера, есть только базовые команды). Минусы закрывались тем, что разводка теперь шла звездой и я в любой момент мог поменять контроллер на любой другой.
Раз уж менять железо, то можно и поменять мозги. Самому писать всю панель времени не хватало, решил попробовать взять готовое решение: из всех мне понравился HomeAssistant. Бонусом шло мобильное приложение. Первое время, пока у меня было старое и новое железо, clunet работал через временный MQTT шлюз, а потом я отказался от него полностью.
Основной экран системыЕще пару фото интерфейса
В данный момент у меня 3 слаботочных щита, в каждом собраны модули в зависимости от задач (задачи выбирались по принципу удаленности от контроллера). В целом, подкупила возможность делать очень многие вещи простой коммутацией проводов и настройкой скриптов автоматизации.
Да, сейчас я получил несколько точек отказа, после отказа любой из них вся квартира превращается в тыкву, но: у контроллера есть встроенные сценарии, которые позволяют выполнить команды в оффлайн режиме. Достаточно примитивные, но для базовых вещей этого хватит. Этот аспект я пока не затрагивал, т.к. еще очень часто перекоммутирую порты и нет смысла делать резервные сценарии.
Сервер тоже обновился. Хранить кучу разных сервисов на одной системе не очень удобно, да и не очень безопасно. От знакомых наслушался про вируталки и решил попробовать: выбор был из ESXi (бесплатная версия) и Proxmox. Для дома особой разницы я не нашел, в итоге выбрал ESXi за красивую панель управления и хорошую базу знаний. Очень доволен, можно проводить различные тесты, делать разные окружения.
Далее, будут подробности обо всех частях системы.
Щит 1 (снизу) и щит 3 (сверху)Щит 2Цифровизация советского выключателя
Свет
Комната (пока только одна): диодные ленты, люстра. По освещённости: включаются только 1 раз в сутки. По приходу: при сработке входной двери в ближайшие 5 мин и отсутсвие людей в комнате. Люстра управляется вручную или через HomePod.
Коридор: диодные ленты. По датчику движения, при открытии входной двери.
Туалет: диодные ленты, лампочка. При открытой двери свет горит, при закрытой по датчику движения. Лампочка используется только вручную.
Ванна: диодные ленты, лампочка. При открытой двери, свет включается по движению на 45с. При закрытой двери — сразу на 10 м. Лампочка используется только вручную.
Шкафы/антресоли: диодные ленты. Да-да, данных много не бывает и у меня стоит автоматика в некоторых из них.
Кухня: диодные ленты, лампочки. Диодные ленты расположены над рабочим столом, там же стоит и датчик движения для них.Включаются по движению на одну минуту. Лампочки управляются вручную или через HomePod.Весь свет отключается, если нет движения более 5 минут.
Для всех диодных лент я ограничил максимальную яркость в районе 80% (значение ШИМ 3008 из 4095) для продления их срока службы.
Датчик и подсветка рабочей поверхности на кухне. С помощью изоленты подбираю оптимальный радиус сработкиПодсветка кухонного шкафа. Белый кружок — врезной герконАпгрейд кладовки
Мультимедиа
В основной комнате стоит Yamaha RX-V685. Удобен тем, что в нем есть API позволяющее управлять из-вне (yamaha-nodejs https://www.npmjs.com/package/yamaha-nodejs или интеграция в Home Assistant). Есть интеграция в Spotify, позволяющая управлять через Spotify API (ранее был самописный скрипт, теперь через home assistant). Так же, использовал в качестве TTS в связке с raspberry (через google), но raspberry понадобилась для других задач и доработки отложились. Пробовал включать интернет-радио через Yamaha (API), но как-то не прижилось.
Недавно поставил две Apple HomePod (обычный и mini) — практика английского и управление устройствами через HomeKit. В планах сделать на ней TTS (daapd или что-то подобное).
Подключен телевизор LG, через Home Assistant на него дублируются уведомления.
Комбо сенсоры
Для всех датчиков нужны красивые коробки, а готовых конструкций сразу на много датчиков не нашел.
У проекта MegaD есть интересный вариант — combo sensor. Сразу получаем температуру, влажность, освещенность (подробнее чуть ниже), ик передатчик (не использую), со2 (опция, ибо дорогой. Ставил только в комнатах и на кухне), датчик шума (опция, не использовал).
На квартиру получилось 9 датчиков.
Осталась старая шина 1W, из нее используются: 3 датчика на стояках отопления, 1 в трубе тиона, 1 на балконе.
На улице висят 2 «Outdoor sensor» от MegaD (температура, влажность, освещенность).
Для расчета уличной температуры беру данные с 4 датчиков (2 уличных комбо, 1W улица, 1W тион) и выбираю наименьше, так же и с освещенностью. Для влажности считаю среднее по датчикам.
Специализированное крепление датчика сделанное из куска межкомнатной двериВариант установки. Серверная сторонаДатчик над входной дверью. Не закреплен, т.к. подбираю оптимальный угол установкиДатчик в комнате. Тут же висит тестовый HM3301
Датчики освещенности
По всей квартире (и на балконах) стоят датчики освещённости. В планах сделать динамическое управление освещением всей квартиры, но пока используется только один датчик. Алгоритм достаточно простой: берем датчик в темном участке квартиры, проверяем все ближайшие лампы, если выключены, то используем полученное значение освещенности. Использую для корректировки диодных лент в коридоре, туалете, ванной. Так же, при достаточной освещенности автоматически не включится свет в комнате.
Вытяжки
На всю квартиру стоят 3 вытяжки:
Ванна: S&P SILENT-200 CZ DESIGN. Включается по влажности (минимум на 30 мин) или движении при закрытой двери (минимум на 10 мин).
Туалет: S&P SILENT-200 CZ. Включается по движению при закрытой двери, минимум на 10 минут.
Кухня: S&P SILENT-300 CZ PLUS DESIGN. Включается под датчику co2 или влажности, минимум на 10 минут.
Во всех есть возможность принудительного включения на 1 час через HomeKit/HomeAssistant.
Для управления всеми вытяжками я начал пробовать использовать таймеры (сущность timer в home assistant). Это позволяет поставить таймер сразу на продолжительное время и не переживать, что вытяжка выключится автоматикой. Например, я ставлю вытяжку в ванной на 10 часов , когда вешаю сушиться постиранную одежду.
Также, недавно поставил на все вытяжки регулятор оборотов, т.к. брал с запасом и на полной мощности они шумноваты. Получился интересный алгоритм: если в помещении кто-то находится , то скидываем обороты в район 20–40%. после ухода — возвращаем обратно на 100%.
Если планы запускать их по общему уровню со2 в квартире, но еще не придумал алгоритм. Сейчас стоит только на кухне при превышении 1400ppm.
Климат (поправить название моделей)
Основа у меня Tion 3S. Начитался статей на хабре и взял — доволен.
Была модель О2, взял 3-ю из-за рекуперации и блютуза. Штатный пульт не о чем, да и хотелось автоматики. Написал шлюз (висит на RPi Zero W), пробрасывающий управление с BT на MQTT. Пробовал делать разные сценарии, но в итоге пришел к тому, что он всегда включён на первой скорости. Разовые скачки CO2 не так заметны, да и нивелируются общим объёмом воздуха в квартире (плюс вытяжки).
Возможно, дойду до того, чтобы поставить тион в каждую комнату, но смущают габариты и необходимость сверлить стену (к месту установки придется подходить очень ответственно).
Увлажнитель Redmond RHF-3310S. Работает, но редко зависает (показывает 95% влажности и отказывается работать). Управляется через общий с тион-ом BT шлюз. Воду лью из осмоса.
Главная проблема, что с приточной вентиляцией нужно очень много воды, а заливать ее лень. А ещё, его иногда чистить нужно…
Кондиционер MHI SRK20ZSX-W
Хороший аппарат с очень высокой энергоэффективностью. Управление с ДУ пульта, WiFi только докупным блоком.
Нашёл проект MHI-AC-Ctrl (https://github.com/absalom-muc/MHI-AC-Ctrl), использую уже достаточно давно — проблем нет. Из минусов — не все функции поддерживется, но это особенность протокола самого кондиционера: штатные проводные пульты имеют те же ограничения. Например, отсутствие 3D обдува или управление горизонтальным потоком воздуха.
Недавно нашел идею «форсуночного увлажнения» (или «увлажнение водяным туманом»). Информации мало и в основном только от продающих (т.е. Заинтересованных) магазинов. Думаю, что это связано с ценой: базовые комплектации (без установки) начинаются от 100 000 RUB, а дорогие запросто могут быть от 1 000 000 RUB. Заказал себе на тест комплект у наших китайских друзей, с доставкой DHL вышло в районе 25 000 RUB (еще будет растаможка, т.к. очень вероятно, что посылка может не пройти по лимитам).
Безопасность
По всей квартире стоят датчики движения (PIR) в составе комбо-сенсоров и датчики на открытие дверей (включая межкомнатные и некоторые шкафы). Подключено это все к компоненту Alarm Panel, на данный момент управляется только с телефона.
Сделал режим «In-home security»: на любое изменение состояния любых датчиков дверей приходит оповещение на телефон. Полезно, когда дома строители и нет времени за ними детально следить.
Видеонаблюдение от Ubiquiti: G4 Dome + G4 Doorbell, запись на Cloud Key Gen2 Plus (5TB HDD). Подключено в home assistant через модуль Unifi Protect (https://github.com/briis/unifiprotect)
Недавно решился на самопальный СКУД: электронный замок ATIS Lock Ch и распознавание лиц с G4 Doorbell через deepstack (https://deepstack.cc). Работает отлично, но хочется добавить второй фактор, что бы нельзя было открыть замок фотографией на экране смартфона. Алгоритм:
Нажатие на кнопку звонка в doorbell.
Фотка с камеры отправляется в telegram и deepstack.
Результат распознавания уходит в telegram.
При успешном совпадении (более 80%), открывается дверь и выводится имя на экран doorbell.
Иначе (или, при 2 секундном таймауте на случай подвисания deepstack), срабатывает дверной звонок (обычный советский, через реле).
Пример уведомлений от системыНакладной электромеханический замок. Не дошли руки спрятать проводку от негоG4 Doorbell со стандартным приветствием
Водоснабжение
Датчики протечки Neptun SW005. Пока только уведомление на смартфон, в дальнейшем буду ставить Neptun PROFI 12В (уже куплены) для автоматического перекрытия подачи воды.
Накопительный бойлер 50л на 2кВт. Используется только на время ежегодного отключения горячей воды. Подключен через контактор, включается только при дешевом тарифе на электроэнергию. В планах сделать полностью автоматическое управление: если температура ГВС опустилась ниже определенного порога и длится это больше определенного времени, то включаем подогрев и коммутируем подачу воды.
Счетчики стоят обычные (от ЖКХ), уже куплены БелЦЕННЕР ETК-м Ду 15 с импульсным выходом. Можно добавить алгоритм на подобии: если вода течет без остановки более N минут/часов, то это может означать утечку. На старых счетчиках пробовал делать распознавание через мини-камеры (что-то вроде «для обследования труб»), но не очень удобно позиционировать и часто ловили блики. Понравился проект AI-on-the-edge-device (https://github.com/jomjol/AI-on-the-edge-device), который делает распознавание прямо на ESP32-CAM. Работает неплохо, но начался ремонт стояков водоснабжения и пришлось разобрать конструкцию.
Фото устройств из интернета
Обратный осмос. Пока без автоматики (стоит только повышающий насос), в планах добавить отдельный счетчик (для более точного подсчета литров для замены фильтров) и клапан для автоматической промывки системы (что бы не застаивалась вода).
Поставил два электронных манометра (китайский ноу-нейм). Удобно, что подключаются по i2c и отдают значения сразу в Бар-ах. Планирую использовать для контроля наличия воды в магистрали и состояния вводных фильтров (их еще нет, но обязательно будут).
Установленный манометр
Хочется сделать аварийный запас воды (управление через приводы на краны и включение по датчикам давления), но пока идей нет. Подобия расширительного бачка не нравятся тем, что там будет заставиться вода и часть полезного объема занята воздухом.
Датчик температуры на трубе отопления
Электроэнергия
Учет количества и мониторинг параметров сделал через китайский счетчик DDS238 (подключен по импульсному выходу и RS485 к Megad).
Стоят два ИБП: APC Smart-UPS 1500 (только на сервера и сетевое оборудование, АКБ 4×60а/ч) и APC Smart-UPS 3000 (на всю квартиру, кроме мощных потребителей: ПММ, стиральная машина и т.д. Штатные АКБ). Оба с Network Management Card, данные уходят по MQTT в home assistant через самописный шлюз.
Каждая MegaD стоит на небольшом слаботочном щите. Для каждой выделен MeanWell DRC-100A (не всегда хватает 100W, планирую попробовать перейти на PSC-160A-C) с батареей на 26а/ч. С каждого БП снимается выход «A/C OK», который используется для определения наличия питания 200V: при пропадании сети диодные ленты переходят в аварийный режим и светятся максимум на 40%.
В планах поставить IoTaWatt для мониторинга потребления отдельных линий питания, но пока смущает цена.
Есть идеи копить дешевую электроэнергию и тратить ее во время дорогих тарифов (через подобие Grid Tie инвертора), но рассматриваю это больше как игрушку, т.к. не уверен в экономической выгоде от этого.
Выносные АКБ для APC 1500Вводной щит. УЗО есть, оно находится на лестничной клетке
Сеть и мозги системы
Ядро — Home Assistant (конфиг будет в конце статьи). Устройства подключаются через Mosquitto (MQTT). Данные хранятся в MySQL. Крутится это на виртуалке c Debian на ESXi.
Сеть построена на Mikrotik CCR1009–7G-1C-1S+ / CRS328–24P-4S+ и Cisco SG350–20. Wifi на Ubiquiti UniFi AC HD (2 шт) + Cloud Key Gen2 Plus.
Интернет Ethernet (основной провайдер) + GPON (резерв, коробка Huawei HG8245Hv5). GPON коробка перенастроена так, что все VLANы уходят транком в мою сеть: IPTV, PPPoE, VoIP. IPTV я не использую, PPPoE и VoIP подняты на микротике.
Телефонию поднял на бесплатной версии 3CX (да, asterisk я не осилил). Туда подключен транк от GPON (городской телефон, безлимит по городу), Zadarma и друга (такой же Кулибин с 3CX и GPON, подымали транк между квартирами ради интереса). В качестве клиентов использую софтфоны на iOS/Android (у 3cx они очень удобные, в т.ч. Звонок приходит через PUSH, не нужно держать подключение к серверу) и трубку Gigaset CL660HX (выбирал по внешнему виду) с IP-базой от Gigaset C530A-IP (в магазине была возможность взять только базу без трубки. Запитал через активыный POE сплиттер). Удобно, что можно пользоваться городским телефоном, когда находишься где-то в городе или даже за границей.
DMR HotSpot — собран на RPi ZeroW. Малоизвестная штука, используется для проброса цифровой (DMR и не только) радиосвязи в интернет. Управляется виртуалкой с HBLink. Чуть больше подробностей: http://blog.marxy.org/2019/02/pi-star-hotspot-getting-started.html https://www.pistar.uk
В Home Assistant добавлены датчики ping«a на основные сетевые устройства. При сбое отправляется уведомление на телефон (нужен будет резерв, т.к. при отказе роутера уведомление просто не дойдет).
Самосборный сервер с ESXiСкрытая установка узла связи среди банок с закатками. Стоечные уши отлично развернулись на 90 градусов и стали настенным креплениемСерверная на шкафу. До выбора стойки еще не дошел, так что собрана она из досок от упаковки ПММ
Прочее
Print-server на базе Kyocera FS-1040 и RPi ZeroW. Шаринг сделал через CUPS (удобно, что смартфоны подцепили его без настройки), а для экономии электричества сделал авто-отключение принтера через модуль tea4cups (управляет реле).
Висит датчик пыли HM3301. Пока так и не придумал, как его использовать…
«Умное» зеркало Welt-Wasser MIRA 5070–1 (на всех фото из интернета видна эмблема, но на самом деле ее нет). Понравилось тем, что легко разбирается и внутри все собрано модульно. Подогрев вывел на свое реле, включается при нахождении в ванной более 20 секунд (при закрытой двери). Подсветка синхронизирована с освещением ванной. Сенсорная кнопка сбоку зеркала переключает подсветку на 100% яркости.
Установленная и подключенная основа зеркала. Черный провод — заводской, оставил его чтобы не потерять на случай гарантииПотроха зеркала после разбора. Достаточно открутить по одному винту с каждой стороны зеркала и отсоединить разъёмы.
Идеи-планы
Роллеры или другие варианты закрытия окна. Живу на 5 этаже, штор в некоторых комнатах вообще нет. Иногда нужно сделать полную темноту, чтобы выспаться, посмотреть кино и т.д.
Весь штатный свет (выключатели и лампы/люстры) подключить к автоматике. Добавит возможность «выключить весь дом» и использование в сценариях.
Датчики занятости помещения. На данный момент, все алгоритмы сводятся к «датчик движения + таймаут», что не совсем правильно. Хочется сделать более продвинутое решение, которое будет учитывать больше датчиков. Как минимум, если в закрытой комнате кто-то двигался, то не стоит убирать флаг присутствия по таймауту.
Датчик Гейгера (например, на СБМ-20) или «датчик третьей мировой». Практической пользы минимум, разве что отправлять на narodmon. Больше для развлечения.
Домофон. Еще не решил, что с ним можно сделать, но чешутся руки добавить ему мозгов.
Робот-пылесос iclebo omega. На борту linux, даже есть доступ в консоль через UART. Хочу добавить хотя бы возможность удаленного запуска (ESP модуль, например).
Экран waveshare 7», куплен и лежит. Сделать сенсорный терминал для управления на основе RPi или аналогов.
Автосмыв туалета — жду сервоприводы.
Была обновлена подводка отопления, появились терморегуляторы. Надо бы и до них добраться…
Экран Waveshare, монитор на 15», OrangePi. Тестовая среда для домашнего терминала
Бонусом, фото кошки, пьющей из высокотехнологичной системы увлажнения воздуха:
Ссылки:
Конфиг HASS
Бридж для MegaD
Бридж для BT
Бридж для APC