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

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

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

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


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



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

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

Моё оборудование:

Проекты для Arduino IDE

Wifi Контроллер на основе Wemos D1 mini



Питание от сети 230 вольт, также возможен вариант без блока питания от общей шины 5 вольт для питания Wemos'а или от оборудования которым он управляет, например привод штор. Возможна установка в монтажных и распаечных коробках достаточной глубины, например за выключателем.

Может использоваться вместо радиоуправления различными приводами штор.

Схема


Распиновка управляемых выводов:
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-интерфейс


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

Контроллер на основе Arduino Mega



Состоит из самой меги и шилда сетевой карты 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-интерфейс


Диммер на симисторе BT137-600E



Вход 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.

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


Оборудование связано через Локальную сеть, протокол для связи 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 — это секунды.

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


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 сервером мониторинга является этот же самый компьютер на котором запущен навык.

Спасибо, пока.

Комментарии (33)


  1. EgorZanuda
    05.03.2019 04:13

    Где автоматика?


    1. Sergey-S-Kovalev
      05.03.2019 09:17

      Автор так торопился рассказать, что забыл внятно пояснить в статье, нафига все это нужно.


      1. Siemargl
        05.03.2019 10:43

        Присоединяюсь к вопросам. Слегка сумбурный стиль изложения.

        Очень бы помогла структурная схема с основными компонентами и указанием — что где крутится (ака автоматика) и как эти компоненты — сервер, диммеры, контроллер, датчики, (блок симисторов тоже компонент ?) связаны.

        Пришлось погуглить, чтобы понять хоть что то. Хотя ардуинщикам наверное, все очевидно, чтобы объяснять )


        1. EgorZanuda
          05.03.2019 13:18
          +1

          Нет тут автоматики, обыкновенное управление выключателями. В утюге больше автоматики.


  1. VT100
    05.03.2019 08:07

    Wifi Контроллер на основе Wemos D1 mini.

    Схема

    Проверь, не требует-ли HLK-PM01 обязательного наличия внешнего конденсатора на выходе. Если да — то можно практически безболезненно допаять где-нибудь под платой танталовый конденсатор на 47..100 мкФ с напряжением от 10 В и выше.


    1. hjltu Автор
      05.03.2019 10:32

      Места нет, должно влазить в монтажную коробку за выключатель. Пока проблем небыло, возможно что хватает той обвязки что есть на плате вемоса.


    1. rstepanov
      05.03.2019 15:24

      внутри электролит 100 мкФ 16в


      1. VT100
        05.03.2019 17:01

        В таком случае, заявленный для HLK-PM01 MTBF ? 100000 h — враки от начала до конца.


  1. vladimirad
    05.03.2019 09:34
    +3

    Русский какой-то нерусский, простите, входА и выходА?


  1. augorelov
    05.03.2019 09:54

    Силовые выхода от симисторов BT-137S, управляемых… через оптопару MOC3063S с контролем перехода фазы через ноль. Включение и выключение нагрузки будет проходить без создания помех в сети

    Автор, ты точно понимаешь зачем ставят оптопару с контролем перехода напряжения через нуль для управления симистором?!


    1. rstepanov
      05.03.2019 15:26

      Ссылку кинете? Я понимаю, но слабо, хочу подробностей.


      1. VT100
        05.03.2019 17:36
        +1

        Нагрузки с экстратоками при включении (лампы накаливания с холодной нитью с низким сопротивлением) — лучше включать при переходе сетевого напряжения через ноль.
        Нагрузки индуктивные (трансформаторы, пускатели и т.п.), наоборот, — при максимуме напряжения.

        P.S. Можно поискать книжку «Мощные электромагнитные реле» под ред. Малиновского. СПб, 2004.


        1. rstepanov
          05.03.2019 17:41

          Спасибо!


        1. hjltu Автор
          05.03.2019 20:21

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


      1. augorelov
        05.03.2019 19:38

        Начать советую с книг по основам силовой электроники, где разбираются принципы работы тиристоров. Симистор не что иное, как встречно-параллельное соединение двух тиристоров.
        А в двух словах: В схемах применения симистора в качестве замены электромеханического реле, необходимо переключать его при переходе напряжения через нуль. В схемах регулятора тока симистор включают в моменты времени отличный от перехода напряжения через нуль в зависимости от нужного тока на потребителе.


  1. Max_Drevo
    05.03.2019 12:09

    Ну как вам сказать… в подобных системах лучше предусмотреть все что может случится. И не убирать снабберную цепь из вашей системы управления нагрузкой. А я бы, как человек который лучше бы заменил деталь за 40 копеек вместо аппаратуры за пару тысяч, поставил бы еще и предохранителей пачку, на каждый выход, ну или хотя бы 1 на вход. На сколько видно по видео, место под увеличение платы у вас есть.


    1. hjltu Автор
      06.03.2019 12:30

      В диммере предусмотрено место для установки предохранителя.


  1. Alexeyslav
    05.03.2019 12:44
    +1

    Я бы настоятельно отказался бы от диммера на симисторе. Он актуален только для ламп накаливания и каких-то обогревателей. Хотя даже для обогревателей преимущества сомнительны. ЛН уходят в небытие, на повестке дня — светодиодные лампы, которыми лучше управлять совсем другим способом(в низковольтной части прямо по месту светильника) и точно не по силовой сети грубо обрезая синусоиду.


    1. augorelov
      05.03.2019 19:48
      +1

      У кого светодиодный лампы стоят вместо ламп накаливания в низковольтную часть не залезешь. Следует разрабатывать универсальный вариант автоматики, к которой можно было подключить различный виды светодиодных ламп.


      1. hjltu Автор
        05.03.2019 20:34

        Разбирал диммеры нескольких производителей(KNX) — схемы с симисторами. С диммером постоянного тока из этой статьи светодиодные лампы работяют хуже — Начинают мигать при ниских напряжениях и диапазон диммирования уменьшен.


        1. hjltu Автор
          06.03.2019 12:31

          *низких.


      1. Alexeyslav
        06.03.2019 00:04
        +1

        Речь идет об автоматизации дома, а вы цепляетесь к лампочкам, которые вобщем-то делают ТОЛЬКО ради обратной совместимости со старыми светильниками. Они не цель прогресса, а побочный продукт, переходной. Надо при возможности от них отказываться везде где это возможно, и если уж задумана автоматизация и электронное управление то почему бы не начать это делать прямо сейчас? Дело в том что диммируемые свеодиодные если и есть то с ними много проблем — все работают по разному, в разной степени диммируются и могут начать жужжать и моргать. Такое себе удовольствие ещё подбирать нормально работающие лампочки с и так небольшого выбора. Ко всему они ещё и дороже, дороже набора драйвер+светодиодные модули. На низком напряжении диммировать светодиоды можно гораздо проще, линейным способом прямо совсем без побочных пульсаций! А главное без этих жутких помех создаваемых проводкой.


        1. augorelov
          06.03.2019 00:59

          На низком напряжении диммировать светодиоды можно гораздо проще, линейным способом прямо совсем без побочных пульсаций!

          Светодиоды лучше питать стабильным током, а не напряжением, и как следствие изменять яркость за счет изменения тока, протекающего через них.

          Хорошо рассуждать, попробуйте в квартире с ремонтом со скрытой проводкой, где при ремонте на закладывалась автоматизация, прокинуть дополнительный провода. Вот этом случае универсальность устройства как раз уместна.


          1. Alexeyslav
            06.03.2019 02:00

            О боги, конечно же, кто мешает подавать на светодиод регулируемый ток? Конечно же это самый лучший вариант, но не всегда самый экономичный. ШИМ в линейное напряжение превращается обычной RC-цепочкой, да и это не нужно — светодиод управляется драйвером, можно сразу управлять работой драйвера, сэкономив на силовом транзисторе.
            Провода, провода… а радиомодули для чего существуют? Есть ещё способы передачи по самой осветительной сети, но у них свои недостатки.
            Эти костыли в виде лампочек под E14 и E27 надо давно отбросить.


            1. augorelov
              06.03.2019 07:28

              Судя по Вашим комментариям можно сделать выводы:


              1. У Вас уровень знаний в электронике и схемотехники никакие, как у большинства ардуинщиков;
              2. Вы не занимались никогда разработкой серийных изделий и как, следствие, не понимаете с какими ограничениями сталкиваются разработчики. Все Ваши поделия на уровне ардуинщика для себя.


              1. Alexeyslav
                06.03.2019 12:28

                Ограничения надо преодолевать, а не тащить костыли в новые проекты.
                Конечно не занимался серийными изделиями, зачем оно мне? Но вот многие производители почему-то не видят ограничений и делают вполне серийные радиомодули.
                Прокачать через осветительную сеть 10...20Мбит так запросто, а управлять освещением — это невозможно…


          1. hjltu Автор
            06.03.2019 12:26

            Речь шла не о светодиодах, а о светодиодных лампах.


  1. lexxcorp
    05.03.2019 21:49
    +1

    Можно по подробнее как сделать чтобы Алиса управляла пинами ардруины?


    1. hjltu Автор
      06.03.2019 13:46

      Такие подробности показывают в последней серии сезона.


  1. augorelov
    06.03.2019 12:49

    hjltu, Вы рассматривали вариант перейти с ардуино и этажерки на собственную реализацию контроллера?


    1. hjltu Автор
      06.03.2019 13:03

      Думал, но ардуино меня вполне устраивает. Даже дешёвые китайские клоны. А что такое «этажерка» я не знаю.


      1. augorelov
        06.03.2019 13:16

        «Этажерка» — это image


        1. hjltu Автор
          06.03.2019 13:33

          Перебор конечно, но Arduino UNO именно для этого. )
          Разрабатывать свой контроллер чтобы повторить Arduino Mega + W5100? У меня нет достаточно ресурсов для этого.