Сказ о том, как я автоматизировал квартиру с помощью Node-RED. Часть I

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

_k1whiczimlsb9xmwy5vfgvpzua.png

Что я хотел сделать


  1. Автоматизировать перекрытие воды в случае ЧП.
  2. Отключать вентиляцию в случае пожара.
  3. Оповещать о ЧП.
  4. Поддерживать оптимальную температуру и влажность (приточная вентиляция, кондиционирование, теплые полы, отопление).
  5. Управлять освещением (шторы, свет).
  6. Экономить электроэнергию.
  7. Добиться локальности системы (работа на локальных серверах, без облаков, чтобы на случай «апокалипсиса» все осталось в рабочем состоянии).


Бэкэнд и фронтэнд


Существует несколько основных систем для управления домашней автоматизацией. Есть как платные решения, так и бесплатные — все зависит от платформы. Это может быть ПЛИС (программируемая логическая интегральная схема), контроллеры в форм-факторе роутера, а также просто программное обеспечение.

Изначально я рассматривал готовый контроллер FIBARO Home Center 2 как основной хаб. Хотя интерфейс там красив и есть множество настроек, но железо оказалось слабым. Прошивка, судя по отзывам, иногда глючила. Другие типы протоколов подключить довольно сложно.

Из бесплатных вариантов я рассмотрел OpenHUB и Home Assistant. OpenHUB показался слишком нагруженным и сложно поддающимся расширению: например, сложно добавить новый Z-Wave-модуль, если его нет в конфигах OpenHUB. Home Assistant легко расширяем, но на момент интеграции, автоматизации можно было писать только на YAML, который сложно дебажить и поддерживать. Интеграция с Z-Wave в Home Assistant вызывала вопросы. Поэтому я выбрал другой бесплатный аналог, о котором расскажу дальше.

Node-RED я выбрал в качестве бэкэнд-решения, так как он предоставляет множество готовых интеграций с разными протоколами, бесплатен и дает возможность написания логики автоматизации прямо на JavaScript в браузере без перекомпиляции. С ним просто отлаживать сценарии с использованием debug и inject.

Окно редактирования сценариев Node-RED
Окно редактирования сценариев Node-RED

Node-RED использует NodeJS под капотом, поэтому вся остальная обвязка была написана тоже на нем. Node-RED — это только редактор сценариев и интегратор различных протоколов. Фронтовая часть управления — как, например, в Home Assistant — у него отсутствует. Есть несколько плагинов, добавляющих возможность управления устройствами из браузера, но они не сильно удобны в настройке и требуют писать фронтовый код также в браузере (node-red-dashboard).

Каждый Flow в моей системе автономен и все общение между разными Flow происходит через MQTT-шину. Также я могу отселить нагруженные Flow на отдельные сервера для распределенной обработки.

Протоколы общения с конечными устройствами


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

В системе используются скрытые реле управления, чтобы оставить физические кнопки из одной серии с розетками. Физические кнопки нужны как для прямого управления, так и на случай выхода из строя центрального контроллера. Я выбирал между беспроводными системами Z-Wave и ZigBee.

На момент интеграции системы наиболее полной коллекцией требуемых устройств обладала технология Z-Wave. В разных странах Z-Wave использует разную частоту работы, в России можно официально использовать частоту 869 МГц. Поскольку большую часть датчиков я покупал в России, решил использовать официальную частоту для всей системы.

В дополнение к Z-Wave в системе используется IR-модуль BroadLink и Modbus TCP.

Для интеграции Z-Wave в Node-RED я выбрал C++ библиотеку OpenZWave и node-red-contrib-openzwave.

Обработка событий Z-Wave
Обработка событий Z-Wave

Для интеграции Modbus использую node-red-contrib-modbus, для управления BroadLink — node-red-contrib-broadlink-control.

Базы данных


В качестве основной базы данных я выбрал MongoDB: туда пишутся текущие показания с датчиков и конечных устройств, в ней же хранятся IR-коды для кондиционеров и мультимедиа.

В качестве базы для хранения временных рядов используется InfluxDB. По этим данным можно посмотреть графики влажности, температуры, построить любые группировки.

Показания температуры на улице за месяц
Показания температуры на улице за месяц

Фронтэнд


Фронтовую часть я решил написать сам, чтобы достичь максимальной гибкости системы. При работе с Dashboard используются две вспомогательные системы:

  • MQTT-сервер на основе mosca;
  • авторизационный сервер.


Авторизационный сервер выдает JWT-токен по логину и паролю либо по принадлежности к локальной сети, после чего MQTT-сервер проверяет этот токен при каждой отправке или получении сообщения для фронтовой системы.

Фронтэнд написан на ReactJS, в качестве протокола связи с сервером используется MQTT over WebSockets (MQTT.JS). В качестве state используется MobX. Также используется TypeScript, и все это собирает webpack.

Приложение состоит из двух страниц:

Dashboard
Dashboard

Панель администрирования Z-Wave-устройств
Панель администрирования Z-Wave-устройств

На панели администрирования можно добавлять и удалять устройства, настраивать их параметры и ассоциации.

Настройка диммера FGD212
Настройка диммера FGD212

На странице Dashboard можно добавлять новые страницы и комбинировать виджеты устройств как угодно.

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

Оборудование


В качестве контроллера я использую Intel NUC NUC7PJYH, на котором развернут Ubuntu Server. Для связи с Z-Wave-сетью выбрал USB-стик Z-Wave.Me.

Как основной пульт для умного дома используется Android-планшет, который я заказал на Alibaba.com. Причем планшет пришел прямо с завода: с Vesa-креплением, питанием по PoE и штекером питания (не USB). Питается планшет от блока питания 12В, расположенного на DIN-рейке в электрошкафу. В планшете нет батареи, чтобы не придумывать варианты с постоянной зарядкой.

Я заказывал планшет по моим характеристикам.

Пульт управления
Пульт управления

Климатическая система


Для поддержания комфортного климата в системе используется:

  • Электрический подогрев пола в трех зонах.
  • Кондиционирование жилых помещений.
  • Центральная приточная вентиляция.
  • Увлажнители воздуха.
  • Центральное отопление.


Вентиляция


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

Черная пыль на окне, накопилась примерно за три месяца
Черная пыль на окне, накопилась примерно за три месяца

Изучая разные варианты решения проблемы вентиляции без открытия окна, я составил шорт-лист из трех вариантов:

  • Установка бризеров в каждую комнату.
  • Установка наружного блока и разводка воздуховодов по внешней стене.
  • Центральная система вентиляции.


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

Многие установщики предлагают смонтировать внешний блок вентиляции или установить приточку на балкон. Но у меня нет балкона, а внешний блок на стене выглядел бы довольно громоздко. Учитывая, что на стене и так висят два блока от кондиционеров, такая конструкция не прошла бы согласование. Поэтому я выбрал центральную систему вентиляции.

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

Ввод вентиляции
Ввод вентиляции

В наружной стене просверлили отверстие диаметром 160 мм с помощью алмазного бура и установили оцинковку с внешней решеткой. Трубу ввода утеплили теплоизоляцией K-flex. Далее труба идет вдоль стены кухни и заходит в основной блок вентиляции.

Блок вентиляции Breezart 550 lux и блок для дополнительного фильтра
Блок вентиляции Breezart 550 lux и блок для дополнительного фильтра

Вентиляционная установка была выбрана фирмы Breezart. При выборе я учитывал стоимость установки, размеры и возможность подключения в систему автоматизации. Установка имеет максимальную мощность 550 м³ в час:

Вентиляционная характеристика

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

Фильтр грубой очистки после полугода использования
Фильтр грубой очистки после полугода использования

Фильтр грубой очистки забился на 70% через год использования, но, судя по датчику CO₂, вентиляция уже не тянула на малых оборотах.

До 20 декабря — фильтр забит, после 20 декабря — новый фильтр, скорость работы та же
До 20 декабря — фильтр забит, после 20 декабря — новый фильтр, скорость работы та же

После вентиляционной установки стоит фильтр тонкой очистки F7. Использовать фильтры более тонкой очистки, такие как HEPA, для своей ситуации я посчитал нецелесообразным: они быстро забьются и установка не сможет их продавить. Также производители не рекомендуют превышать показания перепадов давления на фильтр, так как это увеличит нагрузку на вентилятор и грязь с фильтров может начать сдувать в помещения.

Структурная схема вентиляционной установки


После фильтра тонкой очистки установлены два механических регулятора потока воздуха, за ними — несколько гибких воздуховодов SONODEC до комнат. Такой тип воздуховодов был выбран для того, чтобы не ставить громоздкий глушитель и в то же время заглушить шум установки. После закрытия потолком систему вентиляции слышно только начиная с 8 скорости (440 м³ в час) и только из коридора. На выходе вентиляции стоят регулируемые в двух направлениях решетки.

Закрытая потолком система вентиляции
Закрытая потолком система вентиляции

Выход вентиляции в одну из комнат
Выход вентиляции в одну из комнат

К одному из портов Modbus подключен пульт из комплекта, ко второму — сервер Modbus TCP HF2211.

Modbus RTU — Modbus TCP converter HF2211
Modbus RTU — Modbus TCP converter HF2211

Этот сервер позволяет с одной стороны подключиться к внутренней сети по Wi-Fi или Ethernet и с другой — к Modbus RTU устройству. После чего на нем можно поднять сервер с нужными настройками и уже обращаться к вентиляционной установке по сети. Опрос установки происходит каждые 300 мс: идет проверка ошибок и контрольных сумм и только после этого разрешается записывать какие-то данные в регистры. Связь с установкой происходит посредством плагина node-red-contrib-modbus.

Схема получения и отправки параметров с вентустановки через modbus
Схема получения и отправки параметров с вентустановки через modbus

Схема получения и отправки параметров с вентустановки через modbus
Схема получения и отправки параметров с вентустановки через modbus

На сайте производителя имеется подробный справочник регистров modbus и общее описание для данной установки, но нужно сверить версию контроллера и прошивки. Вентиляционная установка управляется в автоматическом режиме по времени и по датчику CO₂ MH-Z19b.

Flow автоматизации вентиляции
Flow автоматизации вентиляции

Flow автоматизации вентиляции
Flow автоматизации вентиляции

Датчик CO₂ — портативный, собран на основе датчика MH-Z19b, двух аккумуляторов 18650, ESP32 и мосфета IRF520 (для отключения питания от датчика во время сна контроллера).

Показания CO₂ за месяц, пик до 1800 PPM — пришли гости с последующим включением вентиляции на повышенные обороты
Показания CO₂ за месяц, пик до 1800 PPM — пришли гости с последующим включением вентиляции на повышенные обороты

В зависимости от скорости установки устанавливается комфортная температура входящего воздуха, который нагревает калорифер.

На больших скоростях требуется более высокая температура — иначе будет ощущаться поток холодного воздуха. Чтобы сильно не расходовать электричество зимой, когда на улице холоднее −7 °C, установка ограничивается третьей скоростью. В ночное время установка ограничена четвертой скоростью. Если дома никого нет, то система автоматически переходит на первую скорость. По команде «Отпуск» происходит полное отключение.

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

Кондиционирование


В систему встроены несколько кондиционеров с режимами охлаждения и обогрева. Была мысль поставить центральное кондиционирование, но все системы слишком большие и не дают возможность регулировать температуру в каждой комнате. Мои кондиционеры управляются, к сожалению, только по IR. Поэтому я купил пульт управления Broadlink RM Mini3.

Broadlink RM Mini3
Broadlink RM Mini3

Если использовать нативное приложение, то данный пульт будет подключаться к китайским серверам, поэтому все команды по настройке и управлению передаются напрямую из Node-RED с помощью модуля node-red-contrib-broadlink-control.

Поскольку чистых IR-кодов для кондиционеров я не нашел, а пульт передает все состояние целиком (обороты, режим, температура) — все возможные состояния для обогрева и охлаждения были скопированы с пульта кондиционера с помощью Broadlink в базу данных. Чистых команд для включения и отключения тоже не нашлось.

Но я нашел, как использовать таймеры включения и отключения кондиционера. Я поставил их на 10 секунд и скопировал в базу. Теперь при включении сначала передается команда на включение по таймеру и после — команда установки режима вместе с температурой.

Управление кондиционерами
Управление кондиционерами

Сценарий проверяет погоду на улице и, если значения допустимы (больше −7 °C), включает кондиционер на обогрев или охлаждение — в зависимости от времени суток и температуры в помещении. Снятие показаний датчика температуры происходит раз в час.

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

Сценарий управления кондиционерами
Сценарий управления кондиционерами

Подогрев пола


В системе присутствует три контура электрического подогрева пола. Управляются они с помощью трех Z-Wave-термостатов HeatIt.

Термостат HeatIt
Термостат HeatIt

Термостат позволяет настроить разные параметры сопротивления под разные типы нагревательных элементов, имеет защиту от детей, два сохраняемых режима нагрева и прочие мелкие настройки.

В холодное время года температура полов выставляется на 1 °С больше летней. Когда дома никого нет, а также ночью полы отключаются для экономии электроэнергии и включаются либо утром, либо как только кто-то придет домой. В ванной комнате пол повышает температуру, если включен свет, закрыта дверь, было движение до закрытия двери и резко повысилась влажность. Через час пол переходит в предыдущее состояние или отключается (если наступила ночь).

Сценарий управления теплым полом
Сценарий управления теплым полом

Сценарий управления теплым полом
Сценарий управления теплым полом

Центральное отопление


Поскольку в Москве не всегда вовремя отключают или регулируют отопление в зависимости от температуры за окном, решено было поставить на каждую батарею терморегулятор Danfoss Living Connect.

Терморегулятор Danfoss Living Connect
Терморегулятор Danfoss Living Connect

Этот терморегулятор работает от двух пальчиковых батареек по протоколу Z-Wave. С момента установки прошел год, но батарейки еще не сели. Максимальная выставляемая температура — 28 °C. Поскольку датчик находится рядом с батареей и выносной не подключить, он иногда врет.

В летнее время терморегулятор всегда в положении «открыто» и делает полное закрытие раз в две недели, чтобы шток не закис. При первом подключении в течение недели датчик калибруется (что не очень обрадовало мою жену, так как периодически батареи полностью отключались), но после все заработало как надо. Перед началом отопительного сезона проверяется средняя температура на улице за две недели, и если она ниже 10 °C, терморегуляторы переходят в режим обогрева. Если температура в комнате выше установленной комфортной, терморегуляторы снижают температуру или полностью отключают батарею.

Увлажнители воздуха


Для увлажнения воздуха в квартире рассматривались центральные увлажнители. Есть два основных типа: паровой и традиционный. Паровой увлажнитель требует много электроэнергии, чтобы постоянно нагревать воду. Оба типа увлажнителя сливают много воды в дренаж, чтобы она не зацвела. Нужно провести расчеты, чтобы воздуховоды не зацвели и не потекли. Также стоит учесть, что центральные увлажнители стоят дорого и занимают много места.

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


Пример работы интерфейса

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

© Habrahabr.ru