Моя система домашней автоматики

Привет, Хабр!

Цель этой статьи (цикла) хабраэффект вводный рассказ о моей системе домашней автоматики, конечно я не придумал и создал всё с нуля, а только лишь собрал технологии и проекты которые посчитал наиболее подходящими для этой цели и добавил немного от себя. Уровень любительский, но в результате всё работает, люди пользуются и за мной с дубиной не бегают. Делал всё сам. Конструктивная критика приветствуется, будет интересно узнать любое мнение.

Система включает в себя оборудование, и набор программ: непосредственно система автоматики для связи оборудования и визуализации, связь и телеметрия для удаленного мониторинга и обновления, голосовой ассистент от Яндекса. Всё (почти всё) открыто и выложено на Github.

Уровень оборудования.

Главная и необходимая часть — это сервер на базе Raspberry Pi, но без проблем может работать на PC с Debian или Ubuntu. Операционная система Raspbian. Система должна работать 24/7/365 поэтому нужен качественный блок питания, например отлично подойдёт бп для iPad.
_v-jfkopnckaqd6d2url7bbyso4.jpeg

Для Удаленного управления, я также навыка для голосового ассистента яндекс нужен сервер с «белым» IP и домен. На сервере запущен MQTT сервер, для безопасности используется SSL/TLS.

Поддержка KNX через шлюз BAOS 771–774. BAOS это интерфейс между шиной KNX и LAN. Позволяет обращаться к адресам в шине через веб-службу в формате JSON.

Моё оборудование:
Проекты для Arduino IDE

Wifi Контроллер на основе Wemos D1 mini.
rgtk85up8tdsr6xayaj8ocg47-w.jpeg
Питание от сети 230 вольт, также возможен вариант без блока питания от общей шины 5 вольт для питания Wemos’а или от оборудования которым он управляет, например привод штор. Возможна установка в монтажных и распаечных коробках достаточной глубины, например за выключателем. Может использоваться вместо радиоуправления различными приводами штор.

Схема
oyxk4wsdxrvbw4dpkhtzajo6kt0.png


Распиновка управляемых выводов:
L1, L2 — Силовые выхода от симисторов BT-137S, управляемых выходами wemos’а D0, D5 через оптопару MOC 3063S с контролем перехода фазы через ноль. Включение и выключение нагрузки будет проходить без создания помех в сети.
p1, p2 — pwm выхода для диммеров или моторизированных приводов штор или дополнительные кнопки, зависит от настроек. соответствуют выводам wemos’а D6, D7.
A0 аналоговый вход для подключения различных датчиков, например освещённости или дополнительная кнопка.
ds — Подключение датчика температуры DS18B20 соответствует выводу D1.
DHT — Подключение латчика температуры DHT22соответствует выводу D2.
b1, b2 — Кнопки, короткое и долгое нажатие, с функцией счетчика нажатий, можно подключать к импульсным выходам счетчиков электроэнергии, воды и т.д.

Демонстрация работы


Программа контроллера создана в Arduino IDE. Подходит для всех плат на основе ESP-8266. Настройка сети, управление и работа контроллера осуществляется по MQTT. Для удобного просмотра настроек есть Web-интерфейс, ранее была возможность управления по http, но потом я её посчитал лишней и убрал.

Web-интерфейс
xsruid9tfryat8x2raxfmv7dggu.png


Web-интерфейс можно отключить. Для удобства первичной настройки предусмотрен скрипт winit.sh и инструкция. Чтобы сбросить контроллер на настройки по умолчанию нужно либо ввести команду «default 1» либо нажать одновременно кнопки b1, b2 на 20 секунд. Также есть упрощенная версия программы для управляемых розеток Sonoff.

Контроллер на основе Arduino Mega.
ld_ecy2suip8ef20lc4nmpqi53k.jpeg
Состоит из самой меги и шилда сетевой карты W5100, на плате разведены выхода для диммеров и входа для датчиков и кнопок, выходы реле нужно подключать отдельно с помощю шлейфа к 2-х рядному разъему расположенному на плате меги с противоположной стороны от портов питания и USB. Контроллер расчитан для корпуса D6MG.
Распиновка:
D2–9, D11–13 — PWM выходы для диммеров, частота PWM увеличена от штатной.
D14–21 — датчики температуры DS18B20 и DHT22.
D22–49 — выходы на реле, выходы D22–29 можно настроить для приводов жалюзи, ворот, штор.
D10,50–53 — использует сетевая карта W5100.
A0–16 — входа для кнопок, короткое и длительное нажатие. A0-A6 можно настроить для аналоговых датчиков.
Сетевые настройки для меги задаются в программе перед прошивкой. IP адрес фиксированный.

Web-интерфейс
tv9gppypwll3i_iyaqbpnjfzhbq.png

Диммер на симисторе BT137–600E.
ssuyahexjpkmq75dsydnyyefyie.jpeg
Вход 220 вольт, управление PWM 0–5/3.3 вольт, задается установкой перемычки. 0–5 вольт для работы с Arduino Mega или 0–3.3 вольта в случае wemos’а. Сигнал PWM подаётся на аналоговый вход A0 Arduino Pro где преобразуется в задержку для открытия симистора, предусмотрен разъем для перепрошивки ардуины по месту. Предусмотрено место для радиатора. Со стороны ардуино расположен разъем управления и питания ардуины (PWM,-,+), со стороны смимстора 4-х пиновый силовой разъем — питание и выход на нагрузку, при необходимости на нем также можно установить варистор или снаббер. Плата диммера расчитана на корпус D2MG.
Проект диммера: PCB from PCBWay

Демонстрация работы


Еще есть блок симисторов на 28 каналов в корпусе D9MG.

Извиняюсь за качество снимка
osiyriitdnczwrpxqcxttd3saaq.jpeg

Оборудование связано через Локальную сеть, протокол для связи MQTT. Я использую MQTT сервер Mosquitto.

Программная часть.

Для удобства, сначало нужно подготовить образ операционной системы со всеми необходимыми программами, я использую Raspbian Stretch Lite. Понадобится установить nodejs, python-pip, python3-pip, supervisor, mosquitto, mosquitto-clients, sqlite3. И pip пакеты: paho-mqtt и psutil. Еще можно установить Node-red, отлично подойдет для всякого рода экспериментов.
После выхода Apple Homekit в 2016 году оказалось что все производители и разработчики за всё время существования систем «Умный дом» не смогли сделать ничего близкого по удобству и функционалу по сравнению с хомкитом, это похоже на ситуацию с выходом первого iPhone, когда выяснилось что весь зоопарк телефонов, смартфонов, комуникаторов превратился в кучу ненужного хлама. В любом случае всегда приятно пользоваться качественным и готовым продуктом.
Я выбрал проект homekit2mqtt в качестве основной системы визуализации. Конечно можно использовать OpenHUB или Homeassistant, эти системы также работают с MQTT.

hjmqtt
Homekit2mqtt создаёт Homekit Bridge, его можно найти в программе «Дом» на устройставх от Apple. Аксессуары (освещение, датчики, терморегуляторы и т.д.) нужно прописывать в специальном файле в формате JSON. За создание этого файла отвечаеют скрипы filegen.sh и install.sh. В filegen.sh нужно прописать аксессуары, install.sh добавляет homekit2mqtt в автозагрузку и запускает. В файле hjmqtt.py происходит главное — связь аксессуаров с оборудованием, в файле также в ручную, надо прописать аксессуары и параметры оборудования, адреса для KNX. Функционал для аксессуаров прописан в файлах accessory.py и accessoryknx.py. Статусы устройств хранятся в базе sqlite, для операций с базой данных служит библиотека statdb.py.

hjconnect
Следующий проект нужен для удаленной телеметрии. Это использование памяти, дисков, нагрузка и температура, для этого и используется пакет psutil. Сейчас в открытый доступ выложена версия hjconnect только для мониторинга и без шифрования и отдельным проектом программа для сопирования файлов таже по MQTT file-transfer-via-mqtt. Настройки находятся прямо в основном файле hjconnect.py. Если его запустить с параметром »-l» то можно протестировать на локальном MQTT сервере, настройки для удаленного сервера находятся на строке 160

rclient.connect("test.mosquitto.org", 1883, 60)


сервер test.mosquitto.org можно заменить на свой домен или IP. Для идентификации Raspberry Pi в топик включен серийный номер процессора, если программу запустить на другом компьютере вместо серийного номера будет строка «SN». Интервал сообщений задаётся в строке 96

th = threading.Timer(9, my_stat) # interval


где 9 — это секунды.

Пример как выглядит мониторинг
xadktutaa2aiieil1rcwxzhz7zs.png

sima
Сейчас единственная колонка говорящая на русском есть только у Яндекса. Создать навык для Алисы достаточно легко. В отличии от Siri предоставлена полная свобода действий. И доступ на любых устройствах. Только, к сожалению, пока нет вменяемого способа запуска навыка, постоянно запускать навык неудобно.

Демо



Это работающий пример навыка. Для начала работы навыка понадобится SSL сертификат, его можно сгенерировать с помощю openssl. В файле sima.py в строке 14 есть пример генерации сертификата

openssl req -new -keyout crt.pem -out crt.pem -x509 -days 365 -nodes -subj '/CN=site.com/O=user/C=RU'


site.com и user нужно заменить на свои данные.
Когда навык запускается на новом устройстве, записывается его идентификатор. Для того чтобы связать идентификатор и систему автоматики сначала нужно создать новый csv файл в директории clients по образцу файла my.csv. В файле по шаблону прописывается серийный номер, это тот же серийный номер из программы hjconnect, и прописываются объекты управления: название, тип, топик. Топик это значимая часть MQTT топика аксессуара из JSON файла для homekit2mqtt. Затем с помощю sn.py нужно серийный номер преобразовать в пароль и назвать этот пароль на устройстве с которого вы будете управлять. Связь обеспечивает программа hjconnect, а MQTT сервером мониторинга является этот же самый компьютер на котором запущен навык.
Спасибо, пока.

© Habrahabr.ru