company_banner

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

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



    Освещение


    Для управления освещением используется несколько компонентов:

    • моторизированные шторы;
    • диммируемое освещение.

    Свет


    Свет в комнатах разделен на две зоны. Я использую икеевские светодиодные диммируемые лампы. Для управления применяю три модуля:
    Встраиваемый диммер FIBARO Dimmer 2
    Встраиваемый диммер FIBARO Dimmer 2

    Встраиваемое двойное реле FIBARO Double Switch 2x1.5kW
    Встраиваемое двойное реле FIBARO Double Switch 2x1.5kW

    Встраиваемое реле FIBARO Single Switch 2,5kW
    Встраиваемое реле FIBARO Single Switch 2,5kW

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

    Схема подключения диммера с трехпроводной системой
    Схема подключения диммера с трехпроводной системой

    Вот как это работает:

    • Если дома кто-то есть и опущены шторы, освещение переходит полностью на ручное управление (кроме ванной комнаты и дежурной подсветки).
    • Если дома никого не было и кто-то зашел во входную дверь, но при этом на улице темно или опущены шторы — включается свет в прихожей. В ночное время автоматически включается и отключается дежурный свет. Но если включен свет на кухне, то он переходит на ручное управление.
    • В ванной свет включается по датчику движения, и не отключается, пока дверь закрыта. После открытия двери и если нет движения — свет автоматом отключается.
    • В комнатах свет включается, если было движение и на улице темнее определенного порога. Если движения долго нет, свет переходит на 1% яркость.
    • После автоматического опускания штор свет включается там, где за последние 15 минут было движение.
    • Если из дома все ушли, свет полностью отключается.

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

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

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

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

    Шторы


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

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

    Из двигателей на 220 В выбор был невелик: это либо французские Somfy либо китайские Dooya. Somfy более тихие, но и более дорогие, поэтому выбор пал на двигатели Dooya DM35S. Я заказал их вместе с креплениями на «Алиэкспрессе». У двигателя два концевика, которые регулируют максимальное и минимальное положение.

    Двигатель с креплениями
    Двигатель с креплениями

    Следующей проблемой стали трубы для намотки штор. По правилам почтового сообщения, можно отправить посылку не длиннее 180 см, а одно из окон у меня больше 2 метров. На ближайшем строительном рынке я нашел алюминиевую трубу нужного диаметра — 50 мм. После монтажа двигателей в трубы осталось найти блэкаут-шторы. Ткань я заказал по моим размерам с «Алиэкспресса» после договоренности с продавцом, что он отправит мне только ткань, без механизмов.

    Закрепленная собранная штора
    Закрепленная собранная штора

    Шторы управляются с помощью Z-Wave-модуля управления жалюзи FIBARO Roller Shutter 2

    Модуль управления жалюзи
    Модуль управления жалюзи

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

    Собранный выключатель
    Собранный выключатель

    Шторы установлены в каждой комнате и на кухне. Управлять шторами можно как выключателями, расположенными рядом с ними, так и с помощью интерфейса или сценария.

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

    Рабочие и выходные дни рассчитываются по скачанному производственному календарю. Можно перенастроить время на следующий день для каждой комнаты с помощью telegram-команды. Перед сворачиванием шторы по «будильнику» приходит telegram-сообщение с возможностью подтвердить, отменить и перенести на 30 минут. Если действие не последовало, шторы автоматически сворачиваются. В яркие дни шторы автоматически выставляют свое положение в зависимости от освещения в комнате и времени суток, а также проверяют, включен свет или нет. При получении команды «Отпуск» все шторы во всех комнатах опускаются.

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

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


    Пример работы

    Мультимедиа-система


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

    На просторах интернета я нашел отдельные IR-коды для включения и отключения усилителя, телевизора и HDMI-сплиттера. С помощью Python-скрипта pronto_broadlink они были транскодированы в base64, а затем преобразованы в массив байтов и записаны в базу IR-кодов. Поэтому теперь необязательно знать, в каком состоянии сейчас устройство: можно просто послать сигнал еще раз.

    Так как усилитель у меня довольно старый и не умеет по HDMI обрабатывать картинку 4K, я купил HDMI-сплиттер. Он позволяет разделить видео и аудиосигнал на два отдельных HDMI: один из них подключен к усилителю, второй — к телевизору.

    Усилитель и прочие устройства
    Усилитель и прочие устройства

    На данный момент у меня два источника звукового и видеосигнала: стационарный компьютер и сервер. Из интерфейса можно одной кнопкой включить все устройства для воспроизведения, только в одном случае прием сигнала будет настроен на сплиттере с сервера, а во втором — с компьютера. В будущем планируется к сплиттеру подключить игровые консоли.

    Если из дома все ушли, все мультимедиа-устройства отключаются.

    Сцена управления мультимедиа
    Сцена управления мультимедиа

    Система присутствия работает на 6 датчиках движения и датчике открытия входной двери. Если после открытия и закрытия двери не сработал ни один датчик присутствия, через определенный промежуток отправляется сообщение в Telegram с подтверждением. Если действий не последовало в течении двух минут или нажата кнопка «Ok», система переходит в режим «Вне дома». Если в это время появилось движение, команда отменяется и сообщение удаляется.

    Я пробовал использовать BLE, но в моем случае оно работало не слишком стабильно и сильно зависело от передатчика телефона.

    Автоматическое определение присутствия
    Автоматическое определение присутствия

    Датчики безопасности


    На водопроводных трубах стоят запорные устройства «Gidrolock». При замыкании провода управления на фазу привод закрывает кран, при отсоединении — открывает. Оба привода подключены к встраиваемому реле Philio с сухими контактами.

    Привод Gidrolock
    Привод Gidrolock

    Реле управляется Z-Wave-датчиками NEO Coolcam, расположенными в местах вероятных протечек. Все датчики напрямую находятся в ассоциации с реле, чтобы вода перекрывалась без участия контроллера. Чтобы кран не закис, каждые две недели ночью он автоматически открывается и закрывается.

    Схема автоматизации приводов
    Схема автоматизации приводов

    При срабатывании датчика дыма Philio выключается приточная вентиляция, чтобы не раздувать огонь. При этом отправляется сообщение в telegram-чат, и датчик противно пищит.

    Прочие датчики и устройства



    Authorize-сервер


    Этот модуль представляет собой простую реализацию авторизационного сервиса.
    Есть два http-метода: один проверят, пришел ли запрос из внутренней сети и если да, то авторизует пользователя, выдавая ему JWT-токен. JWT-токен шифруется с помощью RSA 256, приватный ключ надо прописать в лежащий рядом файл. Если запрос не из внутренней сети, то пользователя перекинет на страницу логина, где он должен ввести логин и пароль и авторизоваться. Поскольку разделение на пользователей не предполагается, в настроечном файле рядом лежат логин и пароль в зашифрованном виде (SHA 512).

    MQTT-сервер


    MQTT-сервер реализуется с помощью компоненты aedes.

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

    Кастомные ноды Node-RED


    При написании автоматизаций потребовалось реализовать одну дополнительную ноду и две доработать.

    Пришлось доработать node-red-contrib-openzwave, так как мой pull request приняли только через 7 месяцев, но теперь можно использовать библиотеку из npm. Доработка заключалась в прокидывании события удаления ноды.



    MQTT-нода тоже была доработана. По сути, основная доработка в ней — это вытягивание id подключенного клиента и запись его обратно при отправке в очередь. Тут можно обойтись функционалом subflow. Еще предполагалось передавать какие-либо данные на вход в MQTT-ноду, но это так и не пригодилось.



    Для управления шторами и водопроводными кранами потребовалась нода с расписанием. Имеющиеся на тот момент в библиотеке были слишком навороченными и не поддерживали простую реализацию с использованием CRON. Моя реализация довольно проста: расписание может приниматься либо на вход ноды, либо задано внутри. Есть возможность отменить расписание. Под капотом используется node-schedule.



    Фронт


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

    Интерфейс
    export interface INode {
        id: string;
        type: NodeTypes;
        name: string;
        addWidget: ComponentClass<AddProps> | StatelessComponent<AddProps>;
        model: INodeModelConstructor;
        service?: INodeServiceConstructor;
        smallComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
        bigComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
        dialogEditComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
        dialogViewComponent: ComponentClass<WidgetProps<any>> | StatelessComponent<WidgetProps<any>>;
    }
    


    Пример реализации
    class Widget extends BaseWidget implements INode {
        model: INodeModelConstructor = Model;
        manufacturerid: string = '0x0086';
        producttype: string = '0x1a02';
        productid: string = '0x0064';
        addWidget: StatelessComponent<AddProps> = AddWidget;
        service: INodeServiceConstructor = Service;
        smallComponent: StatelessComponent<WidgetProps<Model>> = SmallComponent;
        bigComponent: StatelessComponent<WidgetProps<Model>> = BigComponent;
        dialogEditComponent: ComponentClass<WidgetProps<Model>> = DialogEditComponent;
        dialogViewComponent: ComponentClass<WidgetProps<Model>> = DialogViewComponent;
    }
    export default Widget;


    Для статичных модулей — например, кондиционеров — нужно реализовывать хранилище данных на фронте. Такая реализация неудобна, по-хорошему ее надо изменить на одно хранилище

    Для Z-Wave-модулей я организовал общее хранилище и отслеживание всех изменений по нему.

    Модуль реализует отображение в двух видах:

    • для «больших» экранов (планшет, компьютер);
    • для телефонов.

    В зависимости от типа устройства будет выбрано управление touch или с помощью мыши.

    Сборка приложения происходит с помощью webpack + babel: по текущим настройкам собирается для двух последних версий Firefox, Chrome, Chrome Android.

    Особенности исходников


    Исходники

    Все Flow отключены, чтобы не сыпать ошибками в лог. Конфигурационная нода для Z-Wave удалена: она глючит, если не находит Z-Wave-контроллер, и роняет весь Node-RED. Выглядеть должно примерно так:


    Для работы загрузчика производственного календаря нужно зарегистрироваться на data.gov.ru, получить там токен и вписать его после access_token:


    Прогноз погоды скачивается с darksky.net раз в 15 минут. Для него тоже нужен токен, надо зарегистрироваться и вписать токен после forecast, до координат:


    Для рассылки telegram-уведомлений нужно завести своего бота, вписать его в конфигурационную ноду Telegram и прописать id чата, где это необходимо. В случае моего Flow это subflow:



    Исходники разделены на front и back. В части back лежит:

    • Authorize-сервер.
    • MQTT-сервер.
    • Кастомные модули Node-RED.
    • Экспортированные Flow одним файлом, который можно как загрузить к себе, так и поднять отдельный инстанс для тестов.
    • Проект для Node-RED, в котором надо проинсталлировать модули и после только подгрузить экспортированные Flow (модули уже лежат в проекте).
    • Бэкап Mongo-базы.

    Более подробную информацию по установке вы сможете найти в файле readme в репозитории github.

    Планы


    В планах — использовать микрофон смартфона или настенного планшета для голосового управления. Планирую развернуть свою open-source-систему на сервере на базе CMU Sphinx.

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

    Стоит также подумать об использовании накопленной статистики по разным параметрам, чтобы оптимизировать автоматизации.

    Вывод


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

    Конечно, остались еще баги в алгоритмах, но я их когда-нибудь отловлю, по крайней мере двигаюсь в этом направлении. Система работает стабильно, тормозов не наблюдаю, несмотря на очень низкую скорость в протоколе Z-Wave.

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

    Климатическую систему руками я регулирую тоже редко, но иногда требуется включить или выключить кондиционер или подкорректировать температуру на батарее. В целом получившейся системой я доволен: она позволяет меньше времени тратить на всякие регулировки. В случае выхода из строя контроллера вся функциональность останется на месте (отвалится только автоматизация). Функциональность перекрытия воды тоже сохранится. Если решу продать квартиру, то всю автоматизацию легко уберу. Или оставлю на месте, но продам дороже.
    Tinkoff.ru
    IT’s Tinkoff.ru — просто о сложном

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

      0
      За счет некоторых автоматизаций удалось снизить потребление электричества (примерно на 1500 ₽ в зимний период по сравнению с той же техникой без автоматизации)


      Простите, но сколько Вы платили за электричество до этого? По 2 т.р. в месяц? Сколько комнат в квартире и жильцов? У вас там традиционные лампы накаливания? Электрические батареи или проточный водонагреватель, электро-сушилка в ванной? Откуда такие затраты электричества?
      Например у меня 3-ка, нас 4-ро. Всякая техника и прочее (проточки и электро-сушилки конечно нет) — затраты на электричество 300 р. в месяц.
        +2
        Приточка в холодную зиму может много потреблять на обогрев например с -20 до +15 хотя бы, этой зимой такого конечно небыло. Подогрев пола тоже прилично потребляет. Этой зимой иногда включались кондиционеры на обогрев. По всей остальной технике не считаю, так как она в любом случае будет работать. Без отключения нагревателей выходит примерно 2300р.
          –1
          Жуть. Комфорт нынче дорого стоит.
          +1
          затраты на электричество 300 р. в месяц.

          Хотелось бы такой счет :)
          МСК, двушка, без кондиционеров\подогрева полов\приточек и прочих изысков, электроплита (индукция), только СДЛ освещение, 3 человека — 800-1200 руб\мес.
          Это без учета проточного нагревателя, когда отключают горячую воду, там счет совсем некрасивый получается.
          +1
          А почему вы остановились на Z-Wave? Dimmer Fibaro + Икеевская диммируемая лампа должны стоить около 4000 руб, а zigbee диммируемая лампа от той же Икеи — 500-700 руб. Это даже без учета затрат времени на коммутацию реле и т.п.

            0
            В первой части написано. Под Z-wave было больше доступных девайсов. Я недавно спрашивал товарища про это же. Он сказал что далеко не все устройства есть под zigbee и стоимость из может быть или такая же или выше. Как пример приводил управляемый термостат теплого пола.
              +1
              На момент создания системы, trådfri еще не продавался у нас. В случае использования ламп со встроенным диммером все управление завязано на лампы, а у меня идет управление блоком ламп. Точно не знаю как это реализовано у Икеи, но если у меня помрет сервер, выключатели продолжат диммировать и включать/выключать лампы. Отвалится только автоматизация.
                +3
                В zigbee тоже так можно. Direct binding называется, но вообще управлять целиком точкой освещения логичнее, чем раздельными лампочками в нем.
              +1

              Как и в первой части вы не показываете, что под капотом. Например, что за доработанная нода mqtt? Как (в подробностях) реализован календарь и синхронизация с производственным календарем.


              Вы в первой части ответили, что подробности будут во второй части. Но и вторая часть — из серии «как пар совать сову».


              Понимаете — у вас очень интересный автоматизированный дом. Но без подробностей/кода это только дразнит, ничему не уча.

                +2
                Так есть же ссылка не репо, там все можно посмотреть. Если описывать каждую ноду, это будет очень большая статья. Там же есть и экспортированный флоу. Его можно поднять и в подробностях рассмотреть каждую ноду.
                  0

                  Спасибо. Извините — не заметил в тексте.

                0

                У Вас ведь практически везде беспроводные решения — которые можно снять и перести в другое место?


                А вот мой полностью проводной вариант в новостройке: https://habr.com/ru/post/489610/


                image
                  +2
                  Да, практически все можно снять и унести с собой в новую квартиру. Кроме стационарной техники типа вентиляции и пола.
                  0

                  Ой. А можно прям подробнее про шторы? Не могу понять на что опираться: у разных моторизированных штор народное количество проводов.


                  Или, например на балконе 4 створки окна. При ремонте к каждому заранее вывел проводку. Понятно что нужно 4 двигателя и уже не бюджетно получается. Но получится ли ими синхронно управлять с одного фибаро модуля или их тоже на 4 умножить?
                  В инфраструктуре сейчас и z-wave и zigbee.

                    0
                    В документашке к фибаро написано, что только одним двигателем может управлять, они же там по концевикам положение определяют + нагрузка может выйти большая. Про провода, могу сказать только про Dooya 220. Там 4 провода (ноль, вверх, вниз, земля). Но сразу предупреждаю что они шумноваты. Есть еще xiaomi рулонные, про них к сожалению ничего сказать не могу.

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

                    Вот так выглядит:
                    Фурнитура

                      0

                      Спасибо. Я где-то читал что Doya это и есть сяоми. Сейчас аналоговые рулонные шторы висят прям на створках (чтобы иметь возможность открывать створки) и еще все это не по прямой линии.
                      В целом математика понятна ) 4 мотора, 4 модуля или кастом на esp8266, что удешевит проект тысяч на 15.

                      +1
                      Но получится ли ими синхронно управлять с одного фибаро модуля или их тоже на 4 умножить?


                      С приводами для штор/роллставен надо быть осторожным. Если это привода на 220В (т.е. земля, нейтраль и 2 провода на фазу — вверх/вниз), то там стоят трехфазные моторы с конденсатором и концевыми выключателями. Их нельзя подключать к питанию параллельно, а нужно обязательно использовать промежуточные реле на каждый мотор и тогда можно управлять одним модулем, но в следствии разных скоростей они могут останавливаться в разных позициях.
                      0
                      Вы писали, что смысла в VaV системе нет для квартиры. Почему? Разве не будет еще экономичнее, если подавать (и подогревать) воздух только в те помещения, где он нужен по датчику CO2?
                        0
                        Смысл есть для квартир и домов где много помещений и часть из них пустая, например гостиная ночью. Тогда экономия может быть приличная. Для маленьких квартир смысла нет, потому что стоимость всей системы будет долго окупаться. Так же как и рекуператор.
                        0
                        По стоимости — да. На 4 помещения получается минимум плюс 50-70 тыс на клапаны, приводы и контроллеры. Если даже по 2 тысячи в месяц экономить, то окупаться будет 25 зимних месяцев, т.е. 5 лет.

                        Еще несколько вопросов возникло:

                        Средний объем притока у вас получился 110-155 м³ — это на сколько человек в квартире? Я так понимаю, что Вы смотрите на датчики CO2 в каждой комнате и если где-то CO2 повышается, то увеличиваете приток для всех комнат?

                        Вы в комнаты развели по нормативу, по 60 кубов на человека?

                        Какой уровень шума в комнатах получается при максимальном потоке приточки?

                        Вытяжка у Вас идет в общедомовую вентиляцию? Хватает ли ее пропускной способности для отвода всего воздуха, что приточка нагнетает? Особенно на повышенных оборотах (когда гости и т.п.).
                          0
                          По шуму, к сожалению в цифрах не скажу, но по субъективным ощущением, он слышен только в коридоре начиная с 8 скорости (440 м³). Если закрыть дверь, то шума не слышно. Разводка 70/30% так как в одной комнате всегда больше народу находится (комнаты 2). Средний объем притока 110-220 м³ в зависимости от кол-во человек, работы газовой плиты и прочее. В среднем на 3х человек. По датчикам CO2 все так. Вытяжка общедомовая, работает хорошо.

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

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