РЕКЛАМА НА ФОРУМХАУС Я бы пошел как раз дополнительными "нодами" - функциями. Иначе теряется весь смысл NR. Идея очень простая. Сейчас в HA реализована несколькими строками. Есть датчик освещенности. Если яркость высокая по датчику высокая - не включаем. Иначе по датчику движения (примерно ниже. Время разделяется по часам) Если раннее утро - яркость 30 Если утро - 255 Если день 255 Если вечер 255 Если поздний вечер 125 Если ночь 60 Реализация датчика освещенности - цифры. Датчик движения без разницы - он цепляется и как mqtt и как родная HA нода и. т. д.
Лично я любые параметры, которые зависят от времени, записываю через Google Calendar. Т. е. создаете отдельный календарь и прописываете в нем свой график. Тогда времена можно настраивать как угодно - хоть по дням недели, хоть по отпускам. Например вам в выходные могут понадобиться другие настройки.
Согласен. Также когда и дочь например заболела, гости остались ночевать и. т. д. Сейчас для этого есть простые переключатели. Календарь - может быть, но скорее нет. Да и тут охота не решение готовое, а алгоритмы как это можно сделать для изучения системы
Вроде не очень сложные условия. Я споткнулся на том, что не знаю как в Node-Red получить значение текущего часа и минут. Вот, посмотрите, что получилось. [{"id":"d5048b7f.337738","type":"inject","z":"2b90a21d.58b756","name":"Датчик движения true","topic":"Move","payload":"true","payloadType":"bool","repeat":","crontab":","once":false,"onceDelay":0.1,"x":200,"y":200,"wires":["d92e0c7a.83e878"]},{"id":"793a7715.1102f","type":"inject","z":"2b90a21d.58b756","name":"Датчик движения false","topic":"Move","payload":"false","payloadType":"bool","repeat":","crontab":","once":false,"onceDelay":0.1,"x":200,"y":160,"wires":["d92e0c7a.83e878"]},{"id":"e4a12619.77d13","type":"inject","z":"2b90a21d.58b756","name":"Датчик освещенности false","topic":"Sun","payload":"false","payloadType":"bool","repeat":","crontab":","once":false,"onceDelay":0.1,"x":180,"y":240,"wires":["d92e0c7a.83e878"]},{"id":"f27219b5.e4da3","type":"inject","z":"2b90a21d.58b756","name":"Датчик освещенности true","topic":"Sun","payload":"true","payloadType":"bool","repeat":","crontab":","once":false,"onceDelay":0.1,"x":180,"y":280,"wires":["d92e0c7a.83e878"]},{"id":"d92e0c7a.83e878","type":"join","z":"2b90a21d.58b756","name":"join payloads","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":","joinerType":"str","accumulate":true,"timeout":","count":"2","reduceRight":false,"reduceExp":","reduceInit":","reduceInitType":","reduceFixup":","x":470,"y":220,"wires":["48e35490.5dd214"]},{"id":"48e35490.5dd214","type":"switch","z":"2b90a21d.58b756","name":"Включать свет?","property":"payload.Move=true and payload. Sun=true","propertyType":"jsonata","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":670,"y":220,"wires":["b6e86f79.642e78"]},{"id":"b3a4f931.a7847","type":"debug","z":"2b90a21d.58b756","name":","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1270,"y":420,"wires":[]},{"id":"b6e86f79.642e78","type":"change","z":"2b90a21d.58b756","name":"Текущий час","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number($substring($now(), 11, 2)+3","tot":"jsonata"}],"action":","property":","from":","to":","reg":false,"x":870,"y":220,"wires":["5d73f685.0ebc4"]},{"id":"5d73f685.0ebc4","type":"switch","z":"2b90a21d.58b756","name":"Уровень яркости","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"0","vt":"num","v2":"3","v2t":"num"},{"t":"btwn","v":"4","vt":"num","v2":"7","v2t":"num"},{"t":"btwn","v":"8","vt":"num","v2":"11","v2t":"num"},{"t":"btwn","v":"12","vt":"num","v2":"15","v2t":"num"},{"t":"btwn","v":"16","vt":"num","v2":"19","v2t":"num"},{"t":"btwn","v":"20","vt":"num","v2":"24","v2t":"num"}],"checkall":"true","repair":false,"outputs":6,"x":490,"y":440,"wires":["5f4a4629.a687a"],["5b1ca3de.7c835c"],["e535558a.7fe6d"],["5a47ae8e.9ba16"],["3c8c6a35.71699e"],["2b5f8dec.d2c9aa"]},{"id":"5f4a4629.a687a","type":"change","z":"2b90a21d.58b756","name":"раннее утро","rules":[{"t":"set","p":"payload","pt":"msg","to":"30","tot":"num"}],"action":","property":","from":","to":","reg":false,"x":890,"y":340,"wires":["b3a4f931.a7847"]},{"id":"5b1ca3de.7c835c","type":"change","z":"2b90a21d.58b756","name":"утро","rules":[{"t":"set","p":"payload","pt":"msg","to":"255","tot":"num"}],"action":","property":","from":","to":","reg":false,"x":910,"y":380,"wires":["b3a4f931.a7847"]},{"id":"e535558a.7fe6d","type":"change","z":"2b90a21d.58b756","name":"день","rules":[{"t":"set","p":"payload","pt":"msg","to":"255","tot":"num"}],"action":","property":","from":","to":","reg":false,"x":910,"y":420,"wires":["b3a4f931.a7847"]},{"id":"5a47ae8e.9ba16","type":"change","z":"2b90a21d.58b756","name":"вечер","rules":[{"t":"set","p":"payload","pt":"msg","to":"255","tot":"num"}],"action":","property":","from":","to":","reg":false,"x":910,"y":460,"wires":["b3a4f931.a7847"]},{"id":"3c8c6a35.71699e","type":"change","z":"2b90a21d.58b756","name":"поздний вечер","rules":[{"t":"set","p":"payload","pt":"msg","to":"125","tot":"num"}],"action":","property":","from":","to":","reg":false,"x":880,"y":500,"wires":["b3a4f931.a7847"]},{"id":"2b5f8dec.d2c9aa","type":"change","z":"2b90a21d.58b756","name":"ночь","rules":[{"t":"set","p":"payload","pt":"msg","to":"60","tot":"num"}],"action":","property":","from":","to":","reg":false,"x":910,"y":540,"wires":["b3a4f931.a7847"]}]
А как это посмотреть? Пробую import-clipboard вставляю код, но кнопка import серая. Это нехватка установленных нод?
@moskovskiy82, прошу прощения, тоже не смог вставить свой код. Видимо какие-то неполадки с форматированием на форуме. Или я сам криво скопировал. Попробуйте скопировать из прикрепленного файла.
Спасибо, все получилось. Логика стала чуть понятнее. Только не пойму Join Nodes. Там логическое "или"? Вроде описание, что позволяет задать любые правила, а правил не вижу
Эта нода объединяет несколько сообщений (или правильнее сказать, последовательность сообщений) в одно. Небольшой трюк. В Node-Red нет нод, которые могут иметь два входа. То есть два входа быть может, но работать они будут независимо друг от друга и не одновременно. Поэтому булевская логика в стандартных нодах недоступна. Есть дополнительные ноды с булевскими операциями, но я с ними не разбирался. Поэтому в Join Node объединяем два сообщения в одно, а условие проверяется в ноде Switch в строке Property. Пример не претендует на правильность. Я сам только начал разбираться с Ноде-Ред. Ваш вопрос мне показался интересным и возможно в будущем полезным и мне. Поэтому я попробовал его решить и получилось, то что получилось. Скорее всего, это можно сделать гораздо более изящно.
Пробую сейчас реализовать на столе простенькую схему с подобной архитектурой. Пока получается, что для реализации мне нужно в OpenHab иметь два айтема типа switch. Один отвечает за передачу команд от датчика/выключателя в НодеРед. Второй - за передачу команд из НодеРед к исполнительному устройству. Вот хочу понять не слишком ли я все усложняю? И можно ли это реализовать более просто и правильно? В моем случае с лампочкой и выключателем, наверное, можно обойтись и без OpenHab. Но мне хочется пока понять принцип на каких-то простых примерах
Теоретически mqtt сообщение от выключателя (вкл. лампочку такую-то в таком-то режиме) может сразу включить нужную лампочку, которая услышит это mqtt сообщение. После получения и обработки команды лампочка может ответить mqtt сообщением (я подтверждаю что вкл. в таком-то режиме). Выключатель при желании может обработать этот ответ (например, чтобы знать состояние управляемой лампочки) Пока обмен идёт чисто через mqtt брокер и OH или NR не задействованы. Но OH или NR могут также прослушивать эти mqtt сообщения и показывать на своих дашбордах актуальное состояние лампочки. Либо могут сами слать аналогичные mqtt команды на включение - выключение лампочки. Но если выключатель не умеет "напрямую" управлять лампочкой по mqtt то возможно потребуется дополнительная обработка/конвертация этих mqtt сообщений на OH или NR (где удобнее)
@Arcnet, да, спасибо, с этим я вроде разобрался и такую схему я запустил. Чуть раньше мне как раз помогли синхронизировать кнопочки на дашбордах. Но это, если просто включить/выключить. А вот если надо какие-то более сложные условия? Вот как в примерах выше у @moskovskiy82 диммировать в зависимости от времени суток. Тут как раз задача для полноценной связки ОпенХаб и НодеРед. И у меня пока нет чёткого понимания того как согласовать передачу данных между всеми этими устройствами и программами. Тут лампочка это просто наиболее понятный для меня пример. А мне хочется понять архитектуру в общем.
Возможная логика для диммирования в зависимости от времени суток на NR: Выключатель посылает mqtt сообщение включить лампочку. NR ловит это сообщение, в узле "функция" смотрит текущее время, в зависимости от времени суток вычисляет нужную яркость и затем формирует mqtt команду на включение лампочки уже с вычисленной ранее яркостью. Всё Тот модуль, который отвечает за рисование дашбордов, слушает эти mqtt сообщения и перемещает движки в нужное положение.
Ну да. И опять ОпенХаб тут не нужен Я, наверное, невнятно описал вопрос. Несколько ранее Lingvo описывал архитектуру своего умного дома. Я цитировал в своем комментарии: Openhab отвечает за связь с различным железом используя различные протоколы и находится на нижнем уровне. А NodeRED отвечает только за правила/сценарии и находится на уровень выше - то есть он взаимодействует с железом только через OpenHAB Вот это я и пытаюсь понять. Хорошо, пусть выключатель и лампочка не могут передавать MQTT. Пусть они подсоединяются к ОпенХаб по modbus. Тогда алгоритм такой: 1. Выключатель передает в ОпенХаб команду "включить" по modbus 2. Опенхаб через MQTT передает в НодеРед сообщение, что пришел сигнал от выключателя. 3. НодеРед обрабатывает сигнал, занимается расчетами, сравнениями и прочими функциями. 4. НодеРед через MQTT передает в ОпенХаб окончательную команду для выключателя. 5. ОпенХаб по modbus передает команду лампочке. Вот если следовать такому алгоритму, то у меня получается, что надо в ОпенХаб иметь два айтема. Для пункта 2 и 4. И я не уверен, что два айтема на каждое действие это правильный подход. Хотел узнать как это реализуется у опытных пользователей ОпенХаба.
По OH я не возьмусь советовать. Не так много я с ним работал. Но, по логике и должны получиться два item'а - один для выключателя и один для лампочки. Или нет?
И по моей логике тоже два. Но, поскольку я начинающий пользователь, то решил спросить совета у старших товарищей. Пока так и буду ориентироваться на два айтема. Если кто-то не подскажет другого решения.