Привет, хабровчане! С вами снова Дмитрий, и не будучи программистом я пробую настроить автоматизацию дома через визуальную среду Node-RED. В первой статье я настроил сценарии мастер-выключателя, включения вытяжки при превышении концентрации CO₂, и собрал приборную панель (dashboard) на основе Wiren Board 7 и Node-RED..
Сегодня я расскажу про три чуть более сложных сценария: темной комнаты, дневного/ночного освещения, термостата для теплого пола и батарей..
Сценарий 5: термостат (теплый пол и батареи)
В первой части статьи я показал, как можно снять информацию с датчика температуры, который будет отсылать ее при изменении. В тестовом чемодане есть три датчика температуры: в модуле WB-MSW v.3 и два DS18B20, подключённых к преобразователю WB-M1W2. Отмечу, что датчики DS18B20 1-Wire отлично подходят для теплых полов..
Обычно при установке умного пола на большой площади используют несколько датчиков температуры, чтобы следить за ситуацией в разных участках. Можно регулировать температуру по любому датчику, но я решил использовать среднее значение температуры по трем. Просто чтобы показать, что такая возможность тоже есть..
На фото показаны два датчика DS18B20 и преобразователь WB-M1W2. Датчики DS18B20 нужно монтировать в трубке в стяжку..
Для учета информации трех датчиков их достаточно выбрать в ноде wb-input, после чего отобразится, что она учитывает три канала..
Обратите внимание в правую часть окна на вкладку «жучка». Хорошо видно, что мы получаем информацию с трех датчиков. Для получения среднего значения я добавлю ноду change, которая меняет значения msg.payload и добавлю изменение на msg.math.avg, что соответствует среднему значению..
Теперь мы получаем среднее значение температуры с трех датчиков. Осталось запрограммировать включение теплого пола, для управления которым мы будем использовать канал K1 модуля реле WB-MR6C v.2. К этому каналу в демо-чемодане подключена лампа одной из кнопок..
Например, мы будем включать теплый пол при охлаждении помещения до 18 °C, а выключать – при нагреве до 23 °C. Не забудьте выбрать тип msg.payload – численное значение, а не строку символов (меняется слева от поля значения)..
Добавим ноду ветвления Switch. Верхнее ветвление – включение нагрева, нижнее – выключение. Для включения теплого пола мы добавляем ноду change и меняем значение msg.payload (численное!) на 1. Для выключения добавляем такую же ноду change к нижнему ветвлению со значением 0..
Мы успешно запрограммировали работу теплого пола. Теперь перейдем к батарее отопления, которая оснащена терморегулятором.
Допустим, в комнате есть терморегулятор батареи, который может получать значение от 0 (закрыт) до 100 (открыт) и пропорционально нагревать комнату. Нет ничего проще! Мы вновь берем ноду wb-input, в свойствах указываем нужный датчик температуры (в данном случае WB-MSW). Затем добавляем ноду ветвления switch и указываем три условия.
Например, при температуре ниже 20 °С – заслонка открыта на 100 %, при температуре от 20 до 23 °С – на 70 %, а выше 23 °С – на 50 %.
В каждом случае мы воспользуемся нодой change, которая отправит на терморегулятор значение 100, 70 или 50. Не забывайте выставлять поле с числом, а не строкой! В нашем случае мы подключили не терморегулятор, а лампу накаливания, которую можно диммировать. Лампа подключена к первому каналу модуля WB-MDM3.
Данный этап можно повторить для всех терморегуляторов в доме.
Ура! Мы настроили работу теплого пола и батареи! И без единой строчки кода, как я и обещал.
Сценарий 6: свет день/ночь
Здесь я рассмотрю два базовых сценария. Первый: дежурное освещение во дворе, которое буду включать ночью и выключать днем по датчику освещения или по астрономическому времени восхода и заката. Второй: освещение в помещении. Здесь я буду включать белый свет с 7 утра до 23 вечера, а в остальное время будет гореть красное дежурное освещение.
Начнем с освещения во дворе. Сначала самый простой вариант – по астрономическому времени восхода и заката. Здесь я установил дополнительную ноду Big Timer (node-red-contrib-bigtimer) через главное меню – управление палитрой – установить.
В настройках ноды важно указать широту (Latitude) и долготу (Longitude) вашего места. В верхней строчке On Time выставляется время включения ноды, в нашем случае от заката (Sunset) до восхода (Sunrise). Затем достаточно подключиться к среднему выходу ноды Big Timer, во включенном состоянии (ночью) нода будет каждую минуту отсылать 1, в выключенном (от восхода до заката) – 0.
Больше ничего в Big Timer настраивать не надо. Затем просто добавляем ноду wb-out с выключателем освещения, в нашем случае – лампочка K1 на модуле WB-MDM3.
Второй вариант – по датчику освещения. Здесь я воспользуюсь датчиком WB-MSW v.3.
У датчика нам нужен параметр освещенности Illuminance, его я буду получать через ноду wb-input. Затем я добавлю ноду ветвления Switch, при освещенности меньше 10 я буду включать свет (нода change на 1), при освещенности больше 30 – выключать свет (нода change на 0). Не забываем указывать численный тип!
Последним шагом добавляю ноды wb-out с включением света и изменение значения 0 или 1 через ноду change. В нашем случае – лампочка K1 на модуле WB-MDM3. На этом все!
Осталось настроить освещение в помещении. Здесь я вновь воспользуюсь универсальной нодой Big Timer, для которой выставлю время включения с 7:00 утра до 23:00 вечера. При выставлении времени следует учитывать часовой пояс.
Следующий шаг – нода ветвления, верхний путь будет выбран при 1 (днем), нижний – при 0 (ночью). Днем мне нужно включить ленту RGB и выставить белый свет. Ночью я включаю ленту RGB и устанавливают красный свет. Включение ленты выполняется через ноду wb-out и устройство WB-LED (WB-MRGBW-D), значение 1 соответствует включению, 0 – выключению.
Также через ноду wb-out я задаю оттенок RGB Palette. Здесь строка 255;255;255 – это белый цвет, а 255;0;0 – красный. Данные значения будут выставлять ноды change, после чего передавать его на устройство RGB Palette в ноде wb-out.
На этом все готово, мы настроили свет в помещении по расписанию.
Сценарий 7: темная комната
Темная комната – помещение без естественных источников освещения. Основная задача сценария «темная комната» заключается в автоматическом включении/выключении света в помещении на основе двух устройств: датчика движения и датчика открытия двери.
К сожалению, одним датчиком движения здесь не обойтись, поскольку если человек находится в душевой кабинке или неподвижно восседает на троне, то датчик может и не сработать.
Логика следующая.
-
Дверь открыта, движение есть (зашли в ванную помыть руки) — таймер на 2 минуты. Каждый раз, когда датчик фиксирует движение, таймер обновляется
-
Дверь закрыта, движение есть (зашли в ванную помыться) — таймер на 15 минут
-
Дверь открыта, движения нет (уходите из ванной не закрыв дверь) — таймер на 2 минуты
-
Дверь закрыта, движения нет (ушли и закрыли дверь) — таймер на 5 минут
Начнем с ноды Inject, которая будет каждую секунду опрашивать наши датчики. В качестве датчика двери я использовал тумблер QF3 тестового чемодана. Открытое состояние тумблера будет означать открытую дверь, закрытое – закрытую. В вашем случае наверняка будет использовать геркон с теми же двумя состояниями.
Я добавил ноду wb.get для опроса нашего “геркона”, роль которого выполняет тумблер QF3. Затем выполняется ветвление. Верхняя ветка означает открытую дверь, нижняя – закрытую.
Затем нам нужна информация о движении. Для этого я опрошу датчик движения модуля WB-MSW v.3 через ноду wb.get. Если он выдает больше 20, то движение есть (верхняя ветка), если меньше 20 – движения нет (верхняя ветка). Чтобы предусмотреть все четыре возможных варианта, мне понадобятся две ноды wb.get по двум веткам, следующим от датчика двери.
Самая верхняя ветка: дверь открыта, движение есть (зашли в ванную помыть руки). Здесь я добавлю ноду Trigger, которая будет отправлять 1 на лампу и ждать 2 минуты, после чего отправлять на лампу 0. При этом я поставил галочку «продлить при поступлении нового сообщения». Она позволит сбросить триггер при поступлении информации о движении, то есть увеличить время ожидания еще на две минуты.
Остается подключить к триггеру лампу, и верхняя ветка готова.
Следующая ветка: дверь открыта, движения нет (уходите из ванной не закрыв дверь). Здесь я добавляю задержку 2 минуты с помощью ноды Delay. После этого я еще раз опрошу датчик движения, и если движения не будет, то выключу лампу. Повторный опрос нужен, чтобы избежать ситуации с выключением света по верхней ветке, поскольку информация по нижней ветке будет идти с 2-минутной задержкой. То есть две минуты назад движения не было, сработает нижняя ветка, даже если прямо сейчас движение появилось.
Следующий сценарий: дверь закрыта, движение есть (зашли в ванную помыться) — таймер на 15 минут. Здесь я использовал ноду Trigger, но без продления при получении информации о движении. Все же 15 минут будет достаточно для всего. Через 15 минут свет выключается.
Если же человек выйдет раньше, то здесь поможет четвертый сценарий, выключающий свет через 5 минут после последнего определения движения. Меньше ставить не очень разумно, поскольку человек на троне или за шторкой может не генерировать движение каждую минуту, но за пять минут какое-либо шевеление будет, и здесь логика пойдет по верхней ветке с задержкой 15 минут.
Однако при тестировании была выявлена “фича”: если триггер сработал, но свет выключился по второму пути (человек вышел, потом снова зашел), то триггер может находиться в состоянии ожидания. Поэтому я просто добавил включение света по определению движения в верхние ветвления, чтобы избежать подобных ситуаций.
В результате мы получили следующую схему.
Со своей работой схема справляется, но наверняка ее можно оптимизировать или сделать иначе. Впрочем, цель данной статьи заключалась не в поиске идеала, а в том, чтобы показать возможности и побудить читателей на собственные эксперименты. И у вас наверняка получится лучше.
Заключение
Я надеюсь, что описанные сценарии термостата, дневного/ночного освещения и темной комнаты кому-нибудь пригодятся. А возможно, вдохновят самостоятельно настроить автоматизацию на Node-RED и Wiren Board или какой-то другой платформе. Если вы сами настраивали что-нибудь на Node-RED, напишите, пожалуйста, про свой опыт в комментариях – он может кому-то пригодиться.
Сам я планирую ещё поразбираться с Node-RED, а потом попробовать другие платформы автоматизации. Пишите в комментариях, какие сценарии на Node-RED вы хотели бы увидеть, и про какой ещё софт для автоматизации прочитать.