company_banner

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

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



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


    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-сервер на основе aedes;
    • авторизационный сервер.

    Авторизационный сервер выдает 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.


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

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

    Комментарии 40

      +1
      Что за планшет такой?
      +1
      Стоимость всей системы какова оказалась?
      И сильно ли ощущается разница с автоматической системой и без нее?
        +1
        Стоимость за все оборудование прмерно 500-600к (Z-Wave около 140к)
        В плане экономии электроэнергии с автоматизацией примерно на 1.5к в месяц дешевле зимой, чем без нее. По автоматизации климата, ощущется разница, потому что в среднем держится температура и влажность, которая нам комфортна. Вентиляцию тоже не надо бегать, скорости и температуру входящего воздуха менять. Это если сравнивать тоже оборудование с кучей пультов и автоматизацию. Если вообще без каких то заморочек типа вентиляции, то будет душно, либо придется открывать окна, а на улице слишком шумно, грязно и жарко или холодно.
          0
          А не практичнее было бы использовать приточно-вытяжной кондиционер (что-то типа такого Breezart 1000 Lux W) с функцией увлажнения?
            +1
            Тут несколько проблем. Такие вентиляции требует врезку в водопроводную магистраль, как в случае с водным нагревателем, так и с охладителем, что не очень законно. Свою функцию выполнять будут не очень хорошо. Если бы там был хотя бы фрионный охладитель, тогда можно было бы использовать вместо кондиционера. Регулировать температуру можно только для всех помещений сразу и в небольшом промежутке температур, а это не очень удобно, когда ты не один. Либо нужно делать VaV систему, но это нецелесообразно если у вас площадь небольшая. Увлажнение если и будет то тоже так себе, лучше использовать отдельный увлажнитель для приточки, он будет более производительный.
          0
          Кратко весьма недешево. Особенно учитывая использование z-wave у которого все устройства дороже чем у zigbee
          +1
          Самое «прекрасное», что ни один из скриншотов Flow не снабжен даже кусочком кода, что делает статью малополезной и ставит ее в ранг статей «как нарисовать сову».

          Статья не соответствует выбранной теме — это очередная общая статья.

          Возможно в будущих статьях это будет исправлено, но пока ничего нет.
            +2
            Согласен, статья получилась обзорной, ко второй части постараюсь выпилить все прибитое гвоздями и относящиеся к авторизации. Исходники фронта и бека положу на гитхаб.
              0
              вот было бы интересно! вообще статья правильная. я тоже дошел до упрвления климатом и написанию своего фронтенд. вообще уже реализую примочку webgl, но времени не хватает. хотелось бы флоу посмотреть по алгоритму управления климатом в доме. это возможно?
                0
                Все исходники выложу со второй статьей.
              +2

              Тут как-бы другая цель. Сам думаю написать статью о своем "Умном доме" и пока вырисовывается сказ в 2-х частях.
              Первая часть будет о том, что мой "Умный Дом" умеет — т.е. какие функции реализованы, как происходит взаимодействие с пользователями и т.д.


              А вторая часть уже о том, как это все устроено и работает изнутри.


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

                0
                Ну тогда и называйте статьи понятно и пишите в начале свои задумки.

                PS Кстати именно на вашей статье habr.com/ru/post/396985 я когда то учился.
                Отличный материал!
                –1
                Так в NodeRed примерно так и устроено. Сама логика рисуется в графическом редакторе, готовых модулей пруд-пруди, главное уметь искать и потом подружить одно с другим. Кодить там надо только совсем уж причудливые сценарии. Судя по тому, что автор брал готовые модули типа Z-WAVE и Broadlink (хотя, мог и сам что-то спаять/наардуинить), такой подход ему больше нравится.
                  0
                  Кодить там пришлось все равно, и доп модули для Node-RED, и логика сценариев почти вся в функциях, логика работы с протоколом Z-Wave и с вентиляцией. Но подумал что я выложу все сразу на github. Так удобнее будет поднять у себя и разобраться, чем по разрозненным кускам кода. К сожалению к первой статье не успел выпилить чуствительную информацию.
                    –1
                    Я знаю, изучал этот продукт несколько лет назад (он мне понравился, но ещё был сыроватым), решил тогда пока остаться на blynk (так и сижу на нём до сих пор). Я его заметил, т.к. он из коробки был интегрирован в дистрибутив Raspbian, на котором у меня живёт сервер умного дома.
                    0
                    Да в NR вся суть кроется в настройках нод и коде нод function.
                    Без этого — картинка бесполезна.
                      0

                      Специально перешел на NodeRED, чтобы не кодить. У меня вся логика в нем сделана графически, используя только стандартные блоки.
                      Считаю, что использовать графические среды, чтобы в итоге все описывать в блоках function — это нонсенс. Тогда и NodeRED не нужен.

                        0

                        Ну а настройки блоков? Просто приляпать ноды нельзя.

                          0

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

                          0

                          Кодить придется. На готовых много чего не сделать. Ну к примеру делал вкл/выкл света по двум датчикам, суть в подсчете вошедших-вышедших из комнаты. Как вы блоками реализуете ++n и --n?
                          Датчики сяоми дают давление в гпа, а мне надо в мм.рт.ст. Я нашел монстрообразный конвертер, но ведь проще умножение выполнить в одно блоке function. Блока подсчета времени тоже нет, пришлось писать.

                    0
                    Ждем второй части, мне кажется, она будет более полезной большинству читателей, потому что бОльшая часть умных домов начинает создаваться с более простых вещей, как управление светом и тд.
                    Понравилось, что автор сделал упор на роботу всего функционала при отсутствии интернета, для меня это тоже было важным.
                    Интересует, реализовано ли управление голосом. Сначала казалось это не особо нужным, а сейчас в 90% случаев управляю функционалом через голос. Да, интернет при это нужен, но голосовой ассистент может быть прикручен «сбоку», например та же Алиса через написание навыка. Хотя ряд простых фраз можно распознавать и «в оффлайне».

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

                      А их и нет. Каждое нажатие кнопки пульта либо генерит внутри пульта необходимую посылку (без отправки через IR), либо отправляет весь пакет.
                      примеры из личного опыта, ESP + библиотека irsend
                      // NEC
                      unsigned int NrawDataOn[67] = {8600,4200, 600,1550, 600,500, 600,1550, 600,500, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,1550,
                      600,500, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550,
                      600,1550, 650}; // NEC A55A38C7

                      unsigned int NrawDataOff[67] = {8600,4200, 600,1550, 600,500, 600,1550, 600,500, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,500, 600,1550, 600,1550,
                      600,500, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 600,1550, 600,500, 600,500, 600,500, 600,1550, 600,1550, 650,500, 600,500, 600,500, 600,1550, 600,1550,
                      600,1550, 600}; // NEC A55A38C7

                      // MITSUBISHI
                      unsigned int MrawDataOn[179] = {3150,1500, 450,350, 450,1100, 450,350, 450,350, 400,1150, 400,350, 450,1150, 400,350, 450,350, 400,1150, 450,1100, 450,1100, 450,350, 400,1150, 450,350, 400,1150, 400,1150, 450,1100,
                      450,350, 400,350, 450,350, 450,350, 400,1150, 400,1150, 450,350, 400,1150, 400,1150, 450,350, 400,350, 450,1100, 450,350, 450,350, 400,1150, 400,350, 450,350, 400,1150, 450,1100, 450,350, 400,1150, 450,1100, 450,1100,
                      450,1150, 400,1150, 400,1150, 450,1100, 450,1100, 450,1150, 400,1150, 400,350, 450,350, 400,350, 450,350, 450,350, 400,350, 450,350, 400,350, 450,1150, 400,1150, 400,1150, 400,1150, 450,1100, 450,1100, 450,1150, 400,
                      1150, 400,350, 450,350, 450,350, 400,350, 450,350, 400,350, 450,350, 450,350, 400,1150, 400,1150, 450,350, 400,350, 450,1100, 450,1150, 400,1150, 400,350, 450,350, 400,400, 400,1150, 400,1150, 400,400, 400,350, 450,350,
                      400,1150, 400}; // UNKNOWN 59602EFD

                      unsigned int MrawDataOff[179] = {3200,1500, 450,350, 400,1150, 450,350, 400,350, 450,1100, 450,350, 450,1100, 450,350, 400,350, 450,1150, 400,1150, 400,1150, 400,400, 400,1150, 400,350, 450,1150, 400,1150, 400,1150,
                      400,350, 450,350, 450,350, 400,350, 450,1100, 450,1150, 400,350, 450,1100, 450,1150, 400,350, 450,350, 400,1150, 400,400, 400,350, 450,1100, 450,350, 400,350, 450,1150, 400,1150, 400,350, 450,1150, 400,1150, 400,1150,
                      400,1150, 450,1100, 450,1150, 400,1150, 400,1150, 400,1150, 450,1100, 450,350, 400,350, 450,350, 450,350, 400,350, 450,350, 400,350, 450,350, 400,1150, 450,1100, 450,1150, 400,1150, 400,1150, 400,1150, 450,1100, 450,
                      1100, 450,350, 450,350, 400,350, 450,350, 400,350, 450,350, 450,350, 400,350, 450,1100, 450,1150, 400,350, 450,1100, 450,1150, 400,1150, 400,1150, 400,400, 400,350, 450,350, 400,1150, 400,350, 450,350, 450,350, 400,350,
                      450,1100, 450}; // UNKNOWN 41EA0121

                      // PANASONIC
                      unsigned int PrawDataOn [439]= {3500, 1676, 480, 400, 464, 1244, 484, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464,
                      396, 468, 1260, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 468, 1256, 472, 1244, 484, 1240, 484, 396, 468, 396, 468, 1260, 468, 396, 468, 396,
                      468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 396, 468, 396,
                      468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 396, 468, 396, 468, 396, 468, 1260, 468, 1260, 464, 400, 464, 400, 464, 400, 464, 396,
                      468, 396, 468, 9896, 3492, 1692, 468, 400, 464, 1260, 468, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 396, 468, 396, 468, 396, 468, 396, 468,
                      1244, 484, 396, 492, 372, 492, 372, 492, 368, 496, 368, 492, 372, 492, 372, 492, 1236, 492, 1232, 468, 1260, 468, 400, 464, 400, 468, 1260, 464, 400, 464, 400, 464, 396,
                      468, 396, 468, 424, 440, 396, 468, 396, 464, 400, 492, 372, 464, 400, 492, 372, 464, 400, 464, 396, 492, 1236, 492, 372, 492, 372, 492, 1236, 492, 368, 496, 368, 492, 1236,
                      468, 400, 464, 420, 444, 1264, 460, 404, 460, 400, 464, 1260, 472, 1244, 480, 400, 464, 400, 464, 396, 468, 396, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 1232,
                      468, 1264, 468, 1260, 464, 396, 468, 424, 440, 424, 440, 1260, 468, 396, 492, 1232, 496, 368, 492, 1236, 492, 396, 444, 1264, 464, 420, 440, 404, 460, 404, 460, 400, 464,
                      400, 464, 400, 464, 400, 464, 400, 464, 400, 460, 424, 444, 420, 444, 420, 444, 420, 444, 1260, 464, 1264, 492, 396, 464, 400, 440, 420, 444, 420, 444, 420, 444, 420, 440,
                      424, 440, 424, 440, 424, 440, 400, 464, 1264, 464, 1264, 464, 420, 444, 420, 444, 420, 444, 420, 444, 424, 440, 1260, 468, 396, 464, 424, 440, 424, 440, 424, 464, 400, 464,
                      400, 440, 420, 444, 420, 444, 420, 444, 420, 440, 424, 440, 1264, 464, 424, 440, 424, 440, 424, 440, 420, 444, 420, 444, 420, 444, 420, 444, 420, 440, 424, 440, 424, 440,
                      424, 440, 1288, 416, 420, 472, 1256, 468, 1244, 484, 396, 468, 1260, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 1260, 472, 1256, 472, 1256, 468, 392,
                      472, 1256, 472, 1256, 472, 1260, 464, 1260, 468};

                      unsigned int PrawDataOff [439]= {3500, 1672, 484, 396, 468, 1260, 468, 396, 468, 396, 464, 400, 464, 400, 464, 400, 464, 400, 464, 396, 468, 396, 468, 396, 468, 400, 464,
                      396, 468, 1256, 472, 396, 468, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464, 400, 464, 1244, 484, 1260, 468, 1260, 464, 400, 464, 400, 464, 1260, 468, 396, 468, 396,
                      468, 396, 472, 392, 472, 392, 468, 396, 468, 396, 468, 396, 468, 392, 472, 392, 472, 392, 472, 396, 468, 392, 472, 392, 472, 396, 468, 396, 468, 396, 464, 396, 468, 396,
                      492, 372, 468, 396, 492, 372, 492, 372, 492, 372, 492, 372, 492, 368, 492, 372, 492, 372, 492, 372, 492, 372, 492, 1236, 464, 1260, 472, 392, 472, 392, 472, 392, 472, 392,
                      472, 392, 468, 9896, 3492, 1688, 472, 392, 496, 1236, 492, 372, 492, 372, 492, 372, 492, 368, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492,
                      1232, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 372, 492, 1236, 468, 1260, 492, 1236, 492, 368, 492, 372, 492, 1236, 492, 372, 492, 372, 492, 368,
                      496, 368, 492, 372, 492, 372, 492, 372, 468, 396, 492, 372, 464, 400, 468, 400, 464, 396, 468, 396, 468, 1260, 492, 372, 492, 372, 492, 1232, 492, 372, 492, 372, 492, 1236,
                      492, 372, 492, 372, 492, 1232, 496, 368, 492, 372, 492, 1236, 492, 1236, 492, 376, 460, 404, 460, 404, 460, 400, 468, 396, 468, 396, 468, 396, 468, 396, 492, 372, 492, 1232,
                      492, 1236, 492, 1236, 492, 372, 492, 368, 496, 368, 496, 1232, 492, 376, 488, 1240, 460, 404, 464, 1260, 468, 396, 468, 1260, 492, 372, 492, 372, 492, 372, 492, 368, 496,
                      368, 492, 372, 492, 372, 468, 396, 468, 396, 468, 396, 492, 372, 492, 372, 492, 372, 492, 1232, 496, 1232, 492, 372, 492, 396, 468, 396, 468, 396, 468, 396, 464, 400, 464,
                      400, 464, 400, 440, 404, 460, 400, 460, 1268, 460, 1264, 468, 396, 468, 396, 492, 372, 492, 372, 468, 396, 492, 1236, 492, 368, 492, 372, 492, 372, 492, 396, 468, 396, 468,
                      396, 468, 396, 464, 400, 440, 424, 440, 424, 440, 420, 444, 1260, 468, 420, 444, 420, 444, 420, 440, 424, 444, 420, 444, 416, 448, 416, 448, 416, 444, 420, 444, 420, 444,
                      424, 440, 1244, 508, 396, 468, 1260, 440, 1264, 464, 420, 444, 1284, 444, 420, 444, 420, 444, 420, 444, 424, 440, 420, 444, 420, 468, 1260, 416, 1284, 444, 1284, 472, 392,
                      468, 1260, 468, 1260, 468, 1260, 468, 1256, 472};

                      // ROYAL CLIMA
                      unsigned int RrawDataOn [199]= {4491, 4402, 587, 1584, 587, 516, 582, 1585, 570, 1580, 591, 533, 557, 542, 552, 1589, 539, 594, 590, 534, 565, 1580, 591, 530, 513, 589,
                      565, 1576, 595, 1581, 591, 534, 565, 1585, 590, 530, 569, 1580, 565, 1577, 594, 1581, 569, 1602, 569, 534, 565, 1606, 561, 1585, 509, 1636, 569, 559, 591, 529, 569, 534,
                      586, 538, 561, 1589, 582, 516, 591, 533, 565, 1606, 561, 1589, 539, 1606, 591, 533, 556, 543, 565, 559, 509, 594, 565, 559, 556, 543, 590, 534, 509, 594, 539, 1627, 544,
                      1589, 582, 1606, 565, 1580, 543, 1628, 565, 5169, 4464, 4443, 549, 1615, 561, 542, 552, 1615, 539, 1610, 565, 555, 513, 590, 539, 1602, 569, 564, 561, 559, 539, 1611, 565,
                      555, 543, 560, 539, 1632, 565, 1581, 590, 534, 539, 1610, 565, 555, 544, 1606, 538, 1633, 564, 1568, 556, 1632, 539, 563, 535, 1611, 581, 1589, 539, 1633, 538, 564, 587,
                      533, 539, 564, 556, 569, 530, 1615, 556, 546, 561, 564, 535, 1610, 556, 1615, 539, 1607, 564, 564, 505, 594, 560, 560, 539, 564, 560, 564, 509, 594, 560, 560, 539, 564,
                      534, 1632, 565, 1585, 539, 1632, 535, 1614, 535, 1632, 565};

                      unsigned int RrawDataOff [199]= {4490, 4450, 513, 1636, 535, 590, 573, 1576, 617, 1550, 595, 534, 595, 503, 569, 1576, 600, 529, 591, 533, 591, 1554, 617, 486, 595, 529,
                      569, 1572, 586, 1589, 582, 517, 552, 1619, 591, 512, 586, 1580, 591, 512, 556, 1598, 590, 1572, 513, 1637, 620, 1555, 505, 1662, 569, 1576, 599, 529, 569, 1577, 620, 504,
                      508, 590, 599, 525, 574, 529, 591, 533, 595, 1550, 574, 1571, 600, 529, 595, 529, 595, 504, 590, 513, 594, 530, 582, 542, 595, 504, 591, 512, 582, 1585, 573, 1572, 560,
                      1611, 599, 1550, 556, 1593, 595, 1571, 561, 5198, 4498, 4427, 513, 1637, 534, 590, 569, 1576, 595, 1576, 621, 504, 573, 529, 569, 1576, 621, 504, 620, 504, 569, 1576, 595,
                      534, 569, 529, 595, 1550, 586, 1585, 586, 517, 552, 1619, 616, 508, 565, 1580, 591, 512, 582, 1585, 573, 1577, 556, 1593, 617, 1550, 513, 1658, 575, 1574, 595, 530, 569,
                      1581, 590, 534, 509, 590, 594, 530, 569, 529, 591, 534, 595, 1550, 513, 1636, 535, 590, 620, 504, 595, 503, 591, 538, 565, 533, 582, 543, 569, 529, 590, 513, 582, 1584,
                      574, 1576, 582, 1589, 569, 1576, 556, 1598, 590, 1577, 556};

                        0

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

                          0

                          Если питание отключается, как датчик считает корректно показания после подачи питания?

                            0
                            Он прогревается какое-то время, пока показания не нормализуются. Больших ошибок от датчика я не замечал, но мне точные показания не нужны, нужны относительные, чтобы регулировать обороты.
                            0
                            Обычно датчики Co₂ стационарные, им нужно постоянное питание. В моем случае питание я сделал от двух аккумуляторов 18650 с возможностью подзарядки. Так как MH-Z19b потребляет прилично, я его отключаю после передачи показаний вместе с контроллером. Потом контроллер просыпается через 15 минут, прогревает датчик, поднимает WiFi отправляет данные и опять засыпает.

                            На стороне вентиляции, если сценарий видит сильное увеличение или уменьшение CO₂ может поднять или скинуть несколько скоростей. Пока система не войдет в равновесие.
                            0
                            Спасибо за первую часть статьи.
                            >Во второй части статьи я расскажу…
                            С превеликим нетерпением буду ждать вторую часть.
                              0

                              OpenZwave не очень радует. Вроде работает, работает — и потом вдруг самопроизвольно "отваливается" какая-нибудь нода. Приходится пинать вручную, иногда переспаривать заново. Не говоря о том, что некоторые девайсы (вроде дверного кодового звонка) вообще не работают ни при каких настройках. В сети находятся, и даже выдают какие-то "ручки". Но они все показывают "погоду" (кроме разве что уровня заряда батареи). А на попытку открыть/закрыть вообще не реагирует.


                              есть мысль попробовать проприетарную либу от zwave.me. По крайней мере их фирменный софт на "малинке" (на том же самом контроллере, с теми же самыми устройствами) работает вообще беспроблемно.

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

                                zwave.me хороший софт, но это дополнительный сервер и дополнительные настройки и интеграции
                                0
                                Интересен момент с уровнем влажности при работающей вентиляции, колько она в %?

                                Как показывает практика, поднять влажность до приемлемых значений(хотя бы более 40%) практически неосуществимое дело в обычной квартире. Т.к. стоит открыть оконо даже на микро — уровень влажности падает до минимального. Фактически приходится закрывать все окна и двери в одной комнате и включать ультразвуокой увлажнитель — тогда более менее. Если же оконные рамы — старые, деревянные — вообще нереально.
                                То есть, как только в квартире появляется вентиляция (открыто окно, дверь) — влажность падает.
                                Итог: либо сидишь в духоте, но с хорошей влажностью, либо свежий воздух, но влажность 30?%.
                                  0
                                  В этом году в Москве холодных дней пока небыло, поэтому в среднем влажность держится в районе 30-40% при постоянно работающих двух увлажнителях. Средняя скорость притока 110-155 м³ в час.
                                    0

                                    Тогда получается увлажнители не выполняют свои функции…

                                      0
                                      Без увлажнителя 15%
                                  0

                                  У меня такой вопрос, негиковский совсем: прикидывали, насколько данная автоматизация увеличивает стоимость квартиры при продаже? Не превратится ли все это в тыкву без вашего периодического вмешательства? И будет ли готов потенциальный покупатель выбирать квартиру со всей этой "чертовщиной", которую он не понимает, доподлинно не зная дороговизны обслуживания?

                                    +2

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

                                    0
                                    Спасибо за рассказ. А кто вам систему вентиляции проектировал?
                                    Я себе тоже приточку поставил, но не очень удачно — шумновато получилось, хочу переделать
                                      0
                                      Если вас интересует конкретная фирма, могу в личку контаткты скинуть. В основном я сам изучал вопрос по вентиляции и было примерное представление как это должно выглядеть. Систему, изоляцию и SONODEC выбирал сам. Меня только подкорректировали в нескольких местах и добавили недостающие элементы.
                                      0
                                      В чем преимущество Терморегулятор Danfoss Living Connect над обычным терморегулятором на основе медного стакана?
                                      так же будет поддерживать нужную температуру. они у меня стоят уже три года по принципы — я не помню что они есть, но везде всегда +24
                                        0
                                        Если температура всегда одна, то преимуществ нет. Если требуется опустить температуру, например каждую ночь, то здесь уже появляются возможности для автоматизации. Поскольку тут встроенный градусник, он пытается регулировать температуру батареи под этот показатель. Для центрального отопления это не особо актуально. Из-за близкого расположения градусника, показания не всегда корректны. Еще одно преимущество, это отключить батареи раньше окончания отопительного сезона.

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

                                      Самое читаемое