NEWS
Node-RED примеры, решения и и вопросы. Общая тема по Node-RED
-
Если поклацать переключатель на визуализации - она оживает (переменная) `
Точно сказать не могу. Но из опыта роботы с Node-RED - он сам нифига не считывает, ему надо это принудительно сделать. После того как обновили состояние переменных - он их помнит всегда, пока работает.Если на какой-либо страничке (вкладке, Flow) Вы нажали "Deploy" - вся node-red сбрасывается(перезагружается) и состояния переменных и сенсоров снова становятся неопределёнными. У меня, например перестаёт работать логика, пока вручную не по щёлкаю сенсоры.А если отладить, запустить, и потом ничего не трогать, не перезагружать систему, не выключать систему, то всё работает бесконечно долго, включая статусы переменных, пока не произойдёт какой-либо аварийный сбой.
Так что когда отладите полностью систему и запустите в постоянную работу, обновите состояние всех нужных переменных и кусков кода, и потом оно будет всегда работать, пока что-то не перезапустите сами.
-
Так что когда отладите полностью систему и запустите в постоянную работу, обновите состояние всех нужных переменных и кусков кода, и потом оно будет всегда работать, пока что-то не перезапустите сами. `
Не есть это хорошо…
@Sergey777:Но из опыта роботы с Node-RED - он сам нифига не считывает, ему надо это принудительно сделать `
Есть какой то способ заставить его прочитать переменную ? -
В принципе костыль нашелся…. Но как то это не есть хорошо
-
Есть управление поливом.
В адаптере Wrapper создана логическая переменная которая хранит состояния включен или нет полив оп расписанию. `
А выложите пожалуйста код для импорта.У меня как-то потери состояния при работе не было.
Была проблема некой потери состояния после перезагрузки (как писали выше). Решил добавлением таймера раз в сутки переводящего систему к некому дефолтному состоянию.
-
-
Я выполнил в node-red некие действия, например перевёл давление из "Pa" в "мм.рт.ст.". Как теперь это передать в визуализацию?
-
Ну я бы сделал переменную (драйвером wrapper), засунул туда эти данные и вывел эту переменную в визуализации.
Только я vis (если мы говорим о нем?) давно не трогал, так-что подробностей и не знаю.
-
Ну я бы сделал переменную (драйвером wrapper), засунул туда эти данные и вывел эту переменную в визуализации.
Только я vis (если мы говорим о нем?) давно не трогал, так-что подробностей и не знаю. `
Как переменную сделать допёр. Теперь не могу разобраться как тупо умножить. Получаю с датчика значение 998.7 Паскаль, и чтоб оно стало в мм.рт.ст его надо умножить на 0.0075. Ни одного арифметического блока в дефолтом node-red не нашел. Плохо искал? Или надо кодом писать в function блоке? Что делать? Не ожидал даже, что в таком "могучем" инструменте даже тупо арифметических операций не будет.
-
Управление группой света
1)выключить
-
включить режим луна
-
включить режим солнце
Задействовано оборудование круглая кнопка xiaomi
Светильники Yeelight потолочный Yeelight LED Ceiling Light YLXD01YL
Используется драйвер https://github.com/instalator/ioBroker. … /README.md
[ { "id": "5440070e.a98c88", "type": "ioBroker in", "z": "7fff3d8b.bd9ff4", "name": "Simple click", "topic": "mihome.0.devices.switch_158d0001872244.click", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "x": 130, "y": 380, "wires": [ [ "d6c773a0.7738b" ] ] }, { "id": "e72bf068.cafd2", "type": "ioBroker in", "z": "7fff3d8b.bd9ff4", "name": "Double click", "topic": "mihome.0.devices.switch_158d0001872244.double", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "x": 130, "y": 468, "wires": [ [ "1baa02bf.0d4315" ] ] }, { "id": "85dc2b3b.251138", "type": "ioBroker in", "z": "7fff3d8b.bd9ff4", "name": "Long click", "topic": "mihome.0.devices.switch_158d0001872244.long", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "x": 120, "y": 567, "wires": [ [ "73c35d8a.8efe5c" ] ] }, { "id": "b52f85be.c962f", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "круглая кнопка xiaomi", "info": "", "x": 160, "y": 320, "wires": [] }, { "id": "d781ec34.3ae4c", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "Управление группой света 1)выключить 2) включить режим луна 3) включить режим солнце", "info": "\n", "x": 380, "y": 40, "wires": [] }, { "id": "894d81d.adbdb", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "power", "topic": "yeelight.1.ceiling1_0x0000000004a0a609.power", "ack": "false", "autoCreate": "false", "x": 1060, "y": 320, "wires": [] }, { "id": "e22a733.39dac1", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "power", "topic": "yeelight.1.ceiling1_0x00000000049f0661.power", "ack": "false", "autoCreate": "false", "x": 1060, "y": 400, "wires": [] }, { "id": "544c33de.862234", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "power", "topic": "yeelight.1.ceiling1_0x00000000049f02fe.power", "ack": "false", "autoCreate": "false", "x": 1060, "y": 480, "wires": [] }, { "id": "d3986cde.c6773", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "power", "topic": "yeelight.1.ceiling1_0x00000000049e05e5.power", "ack": "false", "autoCreate": "false", "x": 1060, "y": 560, "wires": [] }, { "id": "f8b857a1.158108", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "Current flow parameters", "topic": "yeelight.1.ceiling1_0x0000000004a0a609.flow_params", "ack": "false", "autoCreate": "false", "x": 1350, "y": 320, "wires": [] }, { "id": "dbbd1e59.4e6c8", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "Current flow parameters", "topic": "yeelight.1.ceiling1_0x00000000049e05e5.flow_params", "ack": "false", "autoCreate": "false", "x": 1350, "y": 560, "wires": [] }, { "id": "b0e46ba0.37bf6", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "Current flow parameters", "topic": "yeelight.1.ceiling1_0x00000000049f02fe.flow_params", "ack": "false", "autoCreate": "false", "x": 1350, "y": 480, "wires": [] }, { "id": "119ba07a.50523", "type": "ioBroker out", "z": "7fff3d8b.bd9ff4", "name": "Current flow parameters", "topic": "yeelight.1.ceiling1_0x00000000049f0661.flow_params", "ack": "false", "autoCreate": "false", "x": 1350, "y": 400, "wires": [] }, { "id": "d6c773a0.7738b", "type": "switch", "z": "7fff3d8b.bd9ff4", "name": "only true can go ", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 360, "y": 380, "wires": [ [ "d6b53238.48d288", "fc9633c8.308d2" ] ] }, { "id": "1baa02bf.0d4315", "type": "switch", "z": "7fff3d8b.bd9ff4", "name": "only true can go ", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 360, "y": 468, "wires": [ [ "e7b86f9f.7b3728", "aa727b2c.3939e" ] ] }, { "id": "73c35d8a.8efe5c", "type": "switch", "z": "7fff3d8b.bd9ff4", "name": "only true can go ", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 360, "y": 567, "wires": [ [ "31f38560.a65d12", "ea64a0fd.0f9f98" ] ] }, { "id": "d6b53238.48d288", "type": "debug", "z": "7fff3d8b.bd9ff4", "name": "Simple click", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 353, "y": 340, "wires": [] }, { "id": "e7b86f9f.7b3728", "type": "debug", "z": "7fff3d8b.bd9ff4", "name": "Double click", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 350, "y": 420, "wires": [] }, { "id": "31f38560.a65d12", "type": "debug", "z": "7fff3d8b.bd9ff4", "name": "Long click", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 340, "y": 520, "wires": [] }, { "id": "fc9633c8.308d2", "type": "change", "z": "7fff3d8b.bd9ff4", "name": "turn light off", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 590, "y": 380, "wires": [ [ "894d81d.adbdb", "e22a733.39dac1", "544c33de.862234", "d3986cde.c6773" ] ] }, { "id": "439afe3c.5352e", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "превращаем true в bolean false", "info": "", "x": 650, "y": 340, "wires": [] }, { "id": "aa727b2c.3939e", "type": "change", "z": "7fff3d8b.bd9ff4", "name": "turn light to moon", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "0,0,50,2,3700,80", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 610, "y": 460, "wires": [ [ "f8b857a1.158108", "119ba07a.50523", "b0e46ba0.37bf6", "dbbd1e59.4e6c8" ] ] }, { "id": "ea64a0fd.0f9f98", "type": "change", "z": "7fff3d8b.bd9ff4", "name": "turn light to sun", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "0,0,50,2,5000,100", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 600, "y": 560, "wires": [ [ "f8b857a1.158108", "119ba07a.50523", "b0e46ba0.37bf6", "dbbd1e59.4e6c8" ] ] }, { "id": "98426a9a.a712c", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "включаем режим луна", "info": "", "x": 620, "y": 420, "wires": [] }, { "id": "c0960107.f2008", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "включаем режим полдень", "info": "", "x": 630, "y": 520, "wires": [] }, { "id": "9a76c0d3.c7a1e8", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "Задействовано оборудование круглая кнопка xiaomi Светильники Yeelight потолочный Yeelight LED Ceiling Light YLXD01YL ", "info": "", "x": 480, "y": 100, "wires": [] }, { "id": "b973accd.4af44", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "Используется драйвер https://github.com/instalator/ioBroker.yeelight/blob/master/README.md", "info": "", "x": 380, "y": 160, "wires": [] }, { "id": "76b49a5.f473de4", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "подсказка внутри", "info": "Управление группой света \n1)выключить \n2) включить режим луна \n3) включить режим солнце\nЗадействовано оборудование круглая кнопка xiaomi\nСветильники Yeelight потолочный Yeelight LED Ceiling Light YLXD01YL\nИспользуется драйвер https://github.com/instalator/ioBroker.yeelight/blob/master/README.md", "x": 1110, "y": 60, "wires": [] }, { "id": "7e61c1e5.5ebcc", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "светильник 1", "info": "", "x": 1170, "y": 280, "wires": [] }, { "id": "5fcccd6b.2d7fdc", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "светильник 2", "info": "", "x": 1170, "y": 360, "wires": [] }, { "id": "3315c98c.83773e", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "светильник 3", "info": "", "x": 1170, "y": 440, "wires": [] }, { "id": "df869751.9b2b4", "type": "comment", "z": "7fff3d8b.bd9ff4", "name": "светильник 4", "info": "", "x": 1170, "y": 520, "wires": [] } ]
-
-
Ну я бы сделал переменную (драйвером wrapper), засунул туда эти данные и вывел эту переменную в визуализации.
Только я vis (если мы говорим о нем?) давно не трогал, так-что подробностей и не знаю. `
Как переменную сделать допёр. Теперь не могу разобраться как тупо умножить. Получаю с датчика значение 998.7 Паскаль, и чтоб оно стало в мм.рт.ст его надо умножить на 0.0075. Ни одного арифметического блока в дефолтом node-red не нашел. Плохо искал? Или надо кодом писать в function блоке? Что делать? Не ожидал даже, что в таком "могучем" инструменте даже тупо арифметических операций не будет. `
Да, писать кодом в блоке. Можно и умножить, и поделить, и отнять…
-
Математика вроде и в кубиках была, но найти я ее не смог…
-
Математика вроде и в кубиках была, но найти я ее не смог… `
Они есть, но как дополнения. Можно поиском найти, прочесть описание, установить функциональный "кубик". Но… Это не наш метод. Привык делать по максимуму из стоковых средств. Как? Напишу чуть позже.
-
Арифметические операции в NODE-RED, сложение, умножение, вычитание, деление,.. Округление, и т.д.
Есть у меня сенсоры под таким длинным названием "XIAOMI AQARA SMART HOME TEMPERATURE HUMIDITY PRESSURE SENSOR ZIGBEE". Это беспроводной датчик, работающий по протоколу ZigBee
Он отправляет следующие данные в систему iobroker:1. Влажность, %
2. Температура, °C
****3. Давление, гПа *****
4. Заряд батареи, %
5. Напряжение батареи, V
6. Также на этом сенсоре есть кнопка, и её состояние отображается как false или true, при не нажатом и нажатом состоянии соответственно.
********* Гектопаскаль. Вся неудобность в том, что у нас, в России, принято измерять давление в миллиметрах ртутного столба ( мм.рт.ст.) А датчик даёт в Гектопаскалях.
! Гектопаскаль (гПа) — единица измерения давления, механического напряжения и модуля Юнга (модуля упругости) в Международной системе единиц (СИ), кратная паскалю. Паскаль равен давлению (механическому напряжению), вызываемому силой, равной одному ньютону, равномерно распределённой по перпендикулярной к ней поверхности площадью один квадратный метр.
Значит нужно конвертировать одно значение в другое. Для этого сначала создадим переменную, в которой будет храниться значение в мм.рт.ст. Я решил создать её в той же папке датчика, где другие его переменные. Для этого идём в меню "Объекты", выбираем mihome.0, далее devices и выбираем папку weather_v1_158d0002271cea. В верхней панели жмём плюс - "добавить объект к выделенному элементу"Имя вводим "Pressure_mm_rt_st", далее "состояние" далее "логическая переменная".
Если заглянуть в настройки, то у меня выглядит так:
!
И наконец-то мы готовы идти в Node-RED.Тут вся наша конвертация сводится к двум операциям, умножению и округлению, которые выполняются в блоке function
Код такой:
msg.payload = Number((msg.payload * 0.750062).toFixed(1)); return msg;
1. Number - указываем функцию "force-number", для работы с числами.
Подробнее: https://www.npmjs.com/package/force-number
2. Число полученное из msg.payload умножаем на константу 0.750062,
тем самым преобразовав величину давления "гПа" в "мм.рт.ст"
3. К результату умножения применяем округление до 1 знака
в дробной части - функция .toFixed(1) , Для округления до целых - .toFixed()
Сам не знал как, подсказали ссылки
1. https://community.openenergymonitor.org … -help/2939
2. https://stackoverflow.com/questions/398 … tion-block
Ну и код:
!
[ { "id": "c03c9ab1.dac5c8", "type": "debug", "z": "5c8c6088.754b2", "name": "Давление гПа (1cea)", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 380, "y": 60, "wires": [] }, { "id": "72319ea.5b38e6", "type": "ioBroker in", "z": "5c8c6088.754b2", "name": "Pressure Pa (1cea)", "topic": "mihome.0.devices.weather_v1_158d0002271cea.pressure", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "x": 110, "y": 120, "wires": [ [ "55984769.8246b8", "c03c9ab1.dac5c8" ] ] }, { "id": "391cd606.2d382a", "type": "ioBroker out", "z": "5c8c6088.754b2", "name": "Pressure_mm_rt_st", "topic": "mihome.0.devices.weather_v1_158d0002271cea.Pressure_mm_rt_st", "ack": "true", "autoCreate": "false", "x": 670, "y": 120, "wires": [] }, { "id": "55984769.8246b8", "type": "function", "z": "5c8c6088.754b2", "name": "х 0.750062", "func": "msg.payload = Number((msg.payload * 0.750062).toFixed(1));\nreturn msg;\n\n/*\n1.\nNumber - указываем функцию \"force-number\", для работы с числами.\nПодробнее: https://www.npmjs.com/package/force-number\n\n2.\nЧисло полученное из msg.payload умножаем на константу 0.750062,\nтем самым преобразовав величину давления \"гПа\" в \"мм.рт.ст\"\n\n3.\nК результату умножения применяем округление до 1 знака\nв дробной части - функция .toFixed(1)\nДля округления до целых - .toFixed()\n*/\n", "outputs": 1, "noerr": 0, "x": 350, "y": 120, "wires": [ [ "391cd606.2d382a", "8b093ee8.87f8" ] ] }, { "id": "8b093ee8.87f8", "type": "debug", "z": "5c8c6088.754b2", "name": "Давление мм.рт.ст (1cea)", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 700, "y": 60, "wires": [] } ] !
Вот и всё, теперь в переменой mihome.0.devices.weather_v1_158d0002271cea.Pressure_mm_rt_st мы видим давление в мм.рт.ст.
-
-
Sergey777 За математику спасибо. Как всегда оформлено все на 5+ .
-
я добавил новые "интересные материалы по nod-red" в первый пост этой темы. Если кто еще что интересное знает пишите - добавлю. Что бы всем было легче осваивать Nod-red.
-
-
Помогите, плиз. Пока изучаю Ноде с нуля.
После установки НодеРед - день поработал, поучился, все было норм. На следующий день комп с утра стал грузить проц на 100 с лишним процентов. Закрытие Нода в браузере не помогло. Проблема решилась только после полной деинсталляции программы.
Что я делаю не так?
-
Скорее всего сделали цикл где-нибудь бесконечный.
Я так один раз написал в один поток который включал-выключал лампы по кругу. Вот тогда 90% проца и выжрало. Выжрало-бы и все, но у меня УД в контейнере. В его ограничения аппетит nod-red и уперся.
-
Сломал Nod-red при попытке установить node-red-contrib-xiaomi-miio.
В драйверах горел зеленным, правила неработали, вебморду Nod-red не открывал.
Перезапуск/Удаление/установка не помогли.
Я раскатал бекап всего IoBroker.
Нужно сделать скрипт на бекапа IoBroker или разобраться с новым драйвером для бекапа.
И разобраться где flow лежат в файлах.
-
Что лучше для тех кто не пишет скрипты: Нод Ред или Блокли?
Sent from my SM-N920V using Tapatalk
-
Без разницы. Фунционал по логике аналогичен.
Есть небольшие плюшки node-red можно взять нормально написанный кусок, допусти bigtimer
https://tech.scargill.net/big-timer/
и там куча проблемм за вас уже решили. Но если очень хочется, то такое можно и в блокли собрать.
Дополнительная плюшка node-red можно втянуть оборудование которое в iobroker еще нет, а в node-red уже есть. Но и там можно скриптами на js или blokly вкарачиться.
-
Спасибо. А по надёжности работы в среде IOB они одинаковы?
Sent from my SM-N920V using Tapatalk