NEWS
Node-RED примеры, решения и и вопросы. Общая тема по Node-RED
-
Если поклацать переключатель на визуализации - она оживает (переменная) `
Точно сказать не могу. Но из опыта роботы с Node-RED - он сам нифига не считывает, ему надо это принудительно сделать. После того как обновили состояние переменных - он их помнит всегда, пока работает.Если на какой-либо страничке (вкладке, Flow) Вы нажали "Deploy" - вся node-red сбрасывается(перезагружается) и состояния переменных и сенсоров снова становятся неопределёнными. У меня, например перестаёт работать логика, пока вручную не по щёлкаю сенсоры.А если отладить, запустить, и потом ничего не трогать, не перезагружать систему, не выключать систему, то всё работает бесконечно долго, включая статусы переменных, пока не произойдёт какой-либо аварийный сбой.
Так что когда отладите полностью систему и запустите в постоянную работу, обновите состояние всех нужных переменных и кусков кода, и потом оно будет всегда работать, пока что-то не перезапустите сами.
-
Так что когда отладите полностью систему и запустите в постоянную работу, обновите состояние всех нужных переменных и кусков кода, и потом оно будет всегда работать, пока что-то не перезапустите сами. `
Не есть это хорошо… :(
@Sergey777:Но из опыта роботы с Node-RED - он сам нифига не считывает, ему надо это принудительно сделать `
Есть какой то способ заставить его прочитать переменную ? -
Есть управление поливом.
В адаптере Wrapper создана логическая переменная которая хранит состояния включен или нет полив оп расписанию. `
А выложите пожалуйста код для импорта.У меня как-то потери состояния при работе не было.
Была проблема некой потери состояния после перезагрузки (как писали выше). Решил добавлением таймера раз в сутки переводящего систему к некому дефолтному состоянию.
-
-
Ну я бы сделал переменную (драйвером 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 мы видим давление в мм.рт.ст.
-
Помогите, плиз. Пока изучаю Ноде с нуля.
После установки НодеРед - день поработал, поучился, все было норм. На следующий день комп с утра стал грузить проц на 100 с лишним процентов. Закрытие Нода в браузере не помогло. Проблема решилась только после полной деинсталляции программы.
Что я делаю не так?
-
Скорее всего сделали цикл где-нибудь бесконечный.
Я так один раз написал в один поток который включал-выключал лампы по кругу. Вот тогда 90% проца и выжрало. Выжрало-бы и все, но у меня УД в контейнере. В его ограничения аппетит nod-red и уперся.
-
Сломал Nod-red при попытке установить node-red-contrib-xiaomi-miio.
В драйверах горел зеленным, правила неработали, вебморду Nod-red не открывал.
Перезапуск/Удаление/установка не помогли.
Я раскатал бекап всего IoBroker.
Нужно сделать скрипт на бекапа IoBroker или разобраться с новым драйвером для бекапа.
И разобраться где flow лежат в файлах.
-
Без разницы. Фунционал по логике аналогичен.
Есть небольшие плюшки node-red можно взять нормально написанный кусок, допусти bigtimer
https://tech.scargill.net/big-timer/
и там куча проблемм за вас уже решили. Но если очень хочется, то такое можно и в блокли собрать.
Дополнительная плюшка node-red можно втянуть оборудование которое в iobroker еще нет, а в node-red уже есть. Но и там можно скриптами на js или blokly вкарачиться.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
