Привет, хабровчане! С вами снова Дмитрий, и не будучи программистом я пробую настроить автоматизацию дома через визуальную среду Node-RED. В первой статье я настроил сценарии мастер-выключателя, включения вытяжки при превышении концентрации CO₂, и собрал приборную панель (dashboard) на основе Wiren Board 7 и Node-RED.
![](https://habrastorage.org/getpro/habr/upload_files/a7b/8af/585/a7b8af585d62674065fae2adbef4f128.jpeg)
Сегодня я расскажу про три чуть более сложных сценария: темной комнаты, дневного/ночного освещения, термостата для теплого пола и батарей.
Сценарий 5: термостат (теплый пол и батареи)
В первой части статьи я показал, как можно снять информацию с датчика температуры, который будет отсылать ее при изменении. В тестовом чемодане есть три датчика температуры: в модуле WB-MSW v.3 и два DS18B20, подключённых к преобразователю WB-M1W2. Отмечу, что датчики DS18B20 1-Wire отлично подходят для теплых полов.
Обычно при установке умного пола на большой площади используют несколько датчиков температуры, чтобы следить за ситуацией в разных участках. Можно регулировать температуру по любому датчику, но я решил использовать среднее значение температуры по трем. Просто чтобы показать, что такая возможность тоже есть.
![](https://habrastorage.org/getpro/habr/upload_files/7fa/971/4ac/7fa9714acb3ff2347925da4075a0da8c.jpeg)
На фото показаны два датчика DS18B20 и преобразователь WB-M1W2. Датчики DS18B20 нужно монтировать в трубке в стяжку.
Для учета информации трех датчиков их достаточно выбрать в ноде wb-input, после чего отобразится, что она учитывает три канала.
![](https://habrastorage.org/getpro/habr/upload_files/f09/d08/76e/f09d0876ecc78d0f33eae4fcdbadc60f.png)
Обратите внимание в правую часть окна на вкладку «жучка». Хорошо видно, что мы получаем информацию с трех датчиков. Для получения среднего значения я добавлю ноду change, которая меняет значения msg.payload и добавлю изменение на msg.math.avg, что соответствует среднему значению.
![](https://habrastorage.org/getpro/habr/upload_files/ddb/0cf/771/ddb0cf771c7b737dc3c6a7d648fce12a.png)
Теперь мы получаем среднее значение температуры с трех датчиков. Осталось запрограммировать включение теплого пола, для управления которым мы будем использовать канал K1 модуля реле WB-MR6C v.2. К этому каналу в демо-чемодане подключена лампа одной из кнопок.
Например, мы будем включать теплый пол при охлаждении помещения до 18 °C, а выключать – при нагреве до 23 °C. Не забудьте выбрать тип msg.payload – численное значение, а не строку символов (меняется слева от поля значения).
![](https://habrastorage.org/getpro/habr/upload_files/edb/53f/978/edb53f978af3dfb87422a25ffcd68f27.png)
Добавим ноду ветвления Switch. Верхнее ветвление – включение нагрева, нижнее – выключение. Для включения теплого пола мы добавляем ноду change и меняем значение msg.payload (численное!) на 1. Для выключения добавляем такую же ноду change к нижнему ветвлению со значением 0.
![](https://habrastorage.org/getpro/habr/upload_files/f3b/f3d/a30/f3bf3da3053e7e2229577aeab879d078.png)
![](https://habrastorage.org/getpro/habr/upload_files/9d8/fc2/f32/9d8fc2f32b3c3ec1e626fa8d289ad21f.png)
Мы успешно запрограммировали работу теплого пола. Теперь перейдем к батарее отопления, которая оснащена терморегулятором.
Допустим, в комнате есть терморегулятор батареи, который может получать значение от 0 (закрыт) до 100 (открыт) и пропорционально нагревать комнату. Нет ничего проще! Мы вновь берем ноду wb-input, в свойствах указываем нужный датчик температуры (в данном случае WB-MSW). Затем добавляем ноду ветвления switch и указываем три условия.
Например, при температуре ниже 20 °С – заслонка открыта на 100 %, при температуре от 20 до 23 °С – на 70 %, а выше 23 °С – на 50 %.
![](https://habrastorage.org/getpro/habr/upload_files/310/688/0f7/3106880f75aa9e6566402af7e8d211fd.png)
В каждом случае мы воспользуемся нодой change, которая отправит на терморегулятор значение 100, 70 или 50. Не забывайте выставлять поле с числом, а не строкой! В нашем случае мы подключили не терморегулятор, а лампу накаливания, которую можно диммировать. Лампа подключена к первому каналу модуля WB-MDM3.
![](https://habrastorage.org/getpro/habr/upload_files/a82/f97/842/a82f978421927b8353797c99d94ce3fa.png)
Данный этап можно повторить для всех терморегуляторов в доме.
Ура! Мы настроили работу теплого пола и батареи! И без единой строчки кода, как я и обещал.
Сценарий 6: свет день/ночь
Здесь я рассмотрю два базовых сценария. Первый: дежурное освещение во дворе, которое буду включать ночью и выключать днем по датчику освещения или по астрономическому времени восхода и заката. Второй: освещение в помещении. Здесь я буду включать белый свет с 7 утра до 23 вечера, а в остальное время будет гореть красное дежурное освещение.
![](https://habrastorage.org/getpro/habr/upload_files/d84/8de/703/d848de703a02adb2f75457f0b7ac1093.jpeg)
Начнем с освещения во дворе. Сначала самый простой вариант – по астрономическому времени восхода и заката. Здесь я установил дополнительную ноду Big Timer (node-red-contrib-bigtimer) через главное меню – управление палитрой – установить.
![](https://habrastorage.org/getpro/habr/upload_files/604/e2f/1bc/604e2f1bcee184748aca87382e7931b3.png)
В настройках ноды важно указать широту (Latitude) и долготу (Longitude) вашего места. В верхней строчке On Time выставляется время включения ноды, в нашем случае от заката (Sunset) до восхода (Sunrise). Затем достаточно подключиться к среднему выходу ноды Big Timer, во включенном состоянии (ночью) нода будет каждую минуту отсылать 1, в выключенном (от восхода до заката) – 0.
![](https://habrastorage.org/getpro/habr/upload_files/782/770/fcf/782770fcf206c4a6bc7bdca617e6811e.png)
Больше ничего в Big Timer настраивать не надо. Затем просто добавляем ноду wb-out с выключателем освещения, в нашем случае – лампочка K1 на модуле WB-MDM3.
![](https://habrastorage.org/getpro/habr/upload_files/747/92a/3c7/74792a3c72bbea029ad49b91ef3d06cb.png)
Второй вариант – по датчику освещения. Здесь я воспользуюсь датчиком WB-MSW v.3.
![](https://habrastorage.org/getpro/habr/upload_files/667/5e7/f82/6675e7f827de267bdbd73dab6321c0bd.png)
У датчика нам нужен параметр освещенности Illuminance, его я буду получать через ноду wb-input. Затем я добавлю ноду ветвления Switch, при освещенности меньше 10 я буду включать свет (нода change на 1), при освещенности больше 30 – выключать свет (нода change на 0). Не забываем указывать численный тип!
![](https://habrastorage.org/getpro/habr/upload_files/d74/c19/615/d74c1961572f1144eacca1f1605bb190.png)
Последним шагом добавляю ноды wb-out с включением света и изменение значения 0 или 1 через ноду change. В нашем случае – лампочка K1 на модуле WB-MDM3. На этом все!
![](https://habrastorage.org/getpro/habr/upload_files/2eb/5d3/fd4/2eb5d3fd428701a1e96a94f24f835662.png)
Осталось настроить освещение в помещении. Здесь я вновь воспользуюсь универсальной нодой Big Timer, для которой выставлю время включения с 7:00 утра до 23:00 вечера. При выставлении времени следует учитывать часовой пояс.
![](https://habrastorage.org/getpro/habr/upload_files/4d5/a9e/faa/4d5a9efaa090442d6bcf229050ba92c3.png)
![](https://habrastorage.org/getpro/habr/upload_files/e67/5b1/719/e675b1719d19d8372bb883ff8fafcb7a.png)
Следующий шаг – нода ветвления, верхний путь будет выбран при 1 (днем), нижний – при 0 (ночью). Днем мне нужно включить ленту RGB и выставить белый свет. Ночью я включаю ленту RGB и устанавливают красный свет. Включение ленты выполняется через ноду wb-out и устройство WB-LED (WB-MRGBW-D), значение 1 соответствует включению, 0 – выключению.
![](https://habrastorage.org/getpro/habr/upload_files/8ea/c2f/a11/8eac2fa119c2ac60333b189af937eee0.png)
![](https://habrastorage.org/getpro/habr/upload_files/691/c1a/eb3/691c1aeb30b8ab7bf66c27dd83febcf7.png)
Также через ноду wb-out я задаю оттенок RGB Palette. Здесь строка 255;255;255 – это белый цвет, а 255;0;0 – красный. Данные значения будут выставлять ноды change, после чего передавать его на устройство RGB Palette в ноде wb-out.
![](https://habrastorage.org/getpro/habr/upload_files/ca2/934/1b1/ca29341b1ab8ef77ef05577c33a44da5.png)
На этом все готово, мы настроили свет в помещении по расписанию.
Сценарий 7: темная комната
Темная комната – помещение без естественных источников освещения. Основная задача сценария «темная комната» заключается в автоматическом включении/выключении света в помещении на основе двух устройств: датчика движения и датчика открытия двери.
К сожалению, одним датчиком движения здесь не обойтись, поскольку если человек находится в душевой кабинке или неподвижно восседает на троне, то датчик может и не сработать.
![](https://habrastorage.org/getpro/habr/upload_files/ef6/b96/29e/ef6b9629eeb8955a7ddd7543c15d4a06.jpeg)
Логика следующая.
Дверь открыта, движение есть (зашли в ванную помыть руки) - таймер на 2 минуты. Каждый раз, когда датчик фиксирует движение, таймер обновляется
Дверь закрыта, движение есть (зашли в ванную помыться) - таймер на 15 минут
Дверь открыта, движения нет (уходите из ванной не закрыв дверь) - таймер на 2 минуты
Дверь закрыта, движения нет (ушли и закрыли дверь) - таймер на 5 минут
Начнем с ноды Inject, которая будет каждую секунду опрашивать наши датчики. В качестве датчика двери я использовал тумблер QF3 тестового чемодана. Открытое состояние тумблера будет означать открытую дверь, закрытое – закрытую. В вашем случае наверняка будет использовать геркон с теми же двумя состояниями.
Я добавил ноду wb.get для опроса нашего “геркона”, роль которого выполняет тумблер QF3. Затем выполняется ветвление. Верхняя ветка означает открытую дверь, нижняя – закрытую.
![](https://habrastorage.org/getpro/habr/upload_files/d26/abb/5c0/d26abb5c0e706bc9b6cd1e095615a2d8.png)
Затем нам нужна информация о движении. Для этого я опрошу датчик движения модуля WB-MSW v.3 через ноду wb.get. Если он выдает больше 20, то движение есть (верхняя ветка), если меньше 20 – движения нет (верхняя ветка). Чтобы предусмотреть все четыре возможных варианта, мне понадобятся две ноды wb.get по двум веткам, следующим от датчика двери.
![](https://habrastorage.org/getpro/habr/upload_files/912/9fc/765/9129fc765b0a2b664ff0351d82fea2a1.png)
Самая верхняя ветка: дверь открыта, движение есть (зашли в ванную помыть руки). Здесь я добавлю ноду Trigger, которая будет отправлять 1 на лампу и ждать 2 минуты, после чего отправлять на лампу 0. При этом я поставил галочку «продлить при поступлении нового сообщения». Она позволит сбросить триггер при поступлении информации о движении, то есть увеличить время ожидания еще на две минуты.
![](https://habrastorage.org/getpro/habr/upload_files/e44/93c/d61/e4493cd6100ad0252475c52dc801b9a2.png)
Остается подключить к триггеру лампу, и верхняя ветка готова.
Следующая ветка: дверь открыта, движения нет (уходите из ванной не закрыв дверь). Здесь я добавляю задержку 2 минуты с помощью ноды Delay. После этого я еще раз опрошу датчик движения, и если движения не будет, то выключу лампу. Повторный опрос нужен, чтобы избежать ситуации с выключением света по верхней ветке, поскольку информация по нижней ветке будет идти с 2-минутной задержкой. То есть две минуты назад движения не было, сработает нижняя ветка, даже если прямо сейчас движение появилось.
![](https://habrastorage.org/getpro/habr/upload_files/aa4/624/c14/aa4624c14368f3f6faa3d9cf77dfc6df.png)
Следующий сценарий: дверь закрыта, движение есть (зашли в ванную помыться) - таймер на 15 минут. Здесь я использовал ноду Trigger, но без продления при получении информации о движении. Все же 15 минут будет достаточно для всего. Через 15 минут свет выключается.
![](https://habrastorage.org/getpro/habr/upload_files/437/f1e/eac/437f1eeacc8cd82df296f55a243676c8.png)
Если же человек выйдет раньше, то здесь поможет четвертый сценарий, выключающий свет через 5 минут после последнего определения движения. Меньше ставить не очень разумно, поскольку человек на троне или за шторкой может не генерировать движение каждую минуту, но за пять минут какое-либо шевеление будет, и здесь логика пойдет по верхней ветке с задержкой 15 минут.
![](https://habrastorage.org/getpro/habr/upload_files/72d/73b/cb3/72d73bcb3751247c510a64209c9d6d45.png)
Однако при тестировании была выявлена “фича”: если триггер сработал, но свет выключился по второму пути (человек вышел, потом снова зашел), то триггер может находиться в состоянии ожидания. Поэтому я просто добавил включение света по определению движения в верхние ветвления, чтобы избежать подобных ситуаций.
![](https://habrastorage.org/getpro/habr/upload_files/c05/45e/f3c/c0545ef3ceb3d0cb4d23bf994fdbbf4b.png)
В результате мы получили следующую схему.
![](https://habrastorage.org/getpro/habr/upload_files/3fa/bfc/66f/3fabfc66f143e5557a219c7aeefd1e94.png)
Со своей работой схема справляется, но наверняка ее можно оптимизировать или сделать иначе. Впрочем, цель данной статьи заключалась не в поиске идеала, а в том, чтобы показать возможности и побудить читателей на собственные эксперименты. И у вас наверняка получится лучше.
Заключение
Я надеюсь, что описанные сценарии термостата, дневного/ночного освещения и темной комнаты кому-нибудь пригодятся. А возможно, вдохновят самостоятельно настроить автоматизацию на Node-RED и Wiren Board или какой-то другой платформе. Если вы сами настраивали что-нибудь на Node-RED, напишите, пожалуйста, про свой опыт в комментариях – он может кому-то пригодиться.
Сам я планирую ещё поразбираться с Node-RED, а потом попробовать другие платформы автоматизации. Пишите в комментариях, какие сценарии на Node-RED вы хотели бы увидеть, и про какой ещё софт для автоматизации прочитать.
beeptec
Все аналогичное, но в разы проще и элегантней можно строить и на базе этой платформы: