NEWS
Node-RED примеры, решения и и вопросы. Общая тема по Node-RED
-
Кто нибудь подключал датчик холла к малине с нодом для подсчета импульсов. а-ля прерывания как организовать и можно ли вообще?
-
В Node-red есть блок function, в описании этого блока, в примерах, на сайте, есть счетчик, сколько раз функция была запущена. А как уж подключить датчик к малине и увидеть его в Node-RED - незнаю.
-
Как запустить из нода что то понятно, а как сделать чтоб нод отреагировал не понимаю.
-
Как запустить из нода что то понятно, а как сделать чтоб нод отреагировал не понимаю. `
Вы имеете в виду, как увидеть сигнал с пина малинки в Node-RED? Если Вы ставили образ iobroker, то в нем есть все необходимые плагины, в панели есть, вроде, эти элементы.P.S.вот же:
-
ой…. и правда :lol:
-
Вот здесь решили проблему с записью символов в файл в win
-
Вот здесь решили проблему с записью символов в файл в win
Так не понятно, какую ноду дополнительно установили? Ссылку дадите, или полное название?
-
Привет всем! Я столнулся со схожей проблемой, что в сообщении выше.
Я тут приводил такой пример: viewtopic.php?f=48&t=11969#p152942 ,там всё работало, пока я не обновил iobroker.
Суть в чём:
Имею такую конструкцию
!
[ { "id": "58ad33b2.fabb1c", "type": "http request", "z": "f9e33a52.dacda8", "name": "", "method": "POST", "ret": "txt", "url": "http://192.168.1.2:5000/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=\"QERFWrtrg4t5\"&payload={\"text\": \"кирилица\"}", "tls": "", "x": 490, "y": 1200, "wires": [ [ "27422c15.fd50d4" ] ] }, { "id": "27422c15.fd50d4", "type": "debug", "z": "f9e33a52.dacda8", "name": "Door Sensor Status", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "x": 720, "y": 1200, "wires": [] }, { "id": "626ece3b.a16df", "type": "inject", "z": "f9e33a52.dacda8", "name": "", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 290, "y": 1200, "wires": [ [ "58ad33b2.fabb1c" ] ] } ] !
Тут на сервер отправляется сообщение методом POST. Так вот, если в сообщении содержится кириллица, то вылетает ошибка, и ничего не отправляется.log:
! ````
|node-red.0|2019-01-27 22:12:01.260|error|at processImmediate [as _immediateCallback] (timers.js:745:5)|
|---|---|---|---|
|node-red.0|2019-01-27 22:12:01.260|error|at tryOnImmediate (timers.js:768:5)|
|node-red.0|2019-01-27 22:12:01.260|error|at runCallback (timers.js:810:20)|
|node-red.0|2019-01-27 22:12:01.260|error|at Immediate. <anonymous>(/opt/iobroker/node_modules/request/request.js:578:7)|
|node-red.0|2019-01-27 22:12:01.260|error|at end (/opt/iobroker/node_modules/request/request.js:549:18)|
|node-red.0|2019-01-27 22:12:01.260|error|at Request.write (/opt/iobroker/node_modules/request/request.js:1497:10)|
|node-red.0|2019-01-27 22:12:01.260|error|at Request.start (/opt/iobroker/node_modules/request/request.js:751:32)|
|node-red.0|2019-01-27 22:12:01.260|error|at Object.request (http.js:39:10)|
|node-red.0|2019-01-27 22:12:01.260|error|at new ClientRequest (_http_client.js:137:13)|
|node-red.0|2019-01-27 22:12:01.260|error|27 Jan 22:12:01 - [error] [http request:TEST DOOR] TypeError: Request path contains unescaped characters|</anonymous>Debug messages >! ```` msg : error "TypeError: Request path contains unescaped characters" msg.payload : string[247] "TypeError: Request path contains unescaped characters : http://192.168.1.2:5000/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token="QERFWrtrg4t5"&payload={"text": "кирилица"}" >! ```` Если писать латинскими символами, то всё работает. P.S. ioBroker стоит на малине, раньше ставил образ 2017 года, на нём всё работало. Но система посыпалась, поставил новый образ, и теперь не работает с кириллицей. Мне кажется, что не хватает каких-то кодировок в системе и Node-RED тут не при чём. Подкиньте идей, пожалуйста. ****<size size="150">******************************************************</size>**** P.P.S. Нашёл решение - предварительно перекодируем сообщение функцией encodeURIComponent() ![5574_cyrillicmessage.png](/assets/uploads/files/5574_cyrillicmessage.png)
msg.CyrillicMessage = encodeURIComponent('Привет Мир');
return msg;И "Привет Мир" превращается в "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%9C%D0%B8%D1%80", а это уже прокатывает, отправка сообщений кириллицей работает. Вот полный код, url до сервера, естественно, изменён, каждый вбивает свой собственный: >! ```` [ { "id": "20b1742.e00da8c", "type": "http request", "z": "64e8a21a.233f3c", "name": "", "method": "POST", "ret": "txt", "url": "http://192.168.1.2:5000/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=%22TvDtggrtGr%22&payload={\"text\": \"{{{CyrillicMessage}}}\"}", "tls": "", "x": 830, "y": 160, "wires": [ [ "9039465f.edbf18" ] ] }, { "id": "9039465f.edbf18", "type": "debug", "z": "64e8a21a.233f3c", "name": "Door Sensor Status", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "x": 1040, "y": 160, "wires": [] }, { "id": "ae787e2c.09a418", "type": "inject", "z": "64e8a21a.233f3c", "name": "", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 450, "y": 160, "wires": [ [ "8ec1277c.0cdf2" ] ] }, { "id": "8ec1277c.0cdf2", "type": "function", "z": "64e8a21a.233f3c", "name": "Текст сообщения", "func": "msg.CyrillicMessage = encodeURIComponent('Привет Мир');\nreturn msg;", "outputs": 1, "noerr": 0, "x": 630, "y": 160, "wires": [ [ "c6325ef1.f616b", "20b1742.e00da8c" ] ] }, { "id": "c6325ef1.f616b", "type": "debug", "z": "64e8a21a.233f3c", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "CyrillicMessage", "x": 860, "y": 100, "wires": [] } ] >! ````
-
Только начал осваивать Node-Red, и сразу вопросы:
-
Можно ли в функции определить исходную команду, а не только источник?
Скажем, при получении сигнала от кубика Rotate Left нужно некий параметр уменьшить, а по Rotate Right увеличить.
Сейчас у меня после ioBroker in с событием Rotate right идет Change, в котором true меняется на 1, и анаогично Rotate left -> Change, меняющий true на -1.
Оба этих события сходятся в одну функцию, которая соответственно меняет громкость, яркость, что угодно.
Но по идее промежуточные Change не очень нужны. Можно сразу с Rotate Left и Rotate Right на эту функцию сигнал подать. Да, в обоих случаях будет true, но наверняка же в этой функции можно определить, было это вызвано поворотм влево или вправо?
Собственно аналогично отделять одинарное нажатие кнопки от двойного и т.п.... -
Нажатие кнопки у меня приводит к последовательному приходу событий от нее true и сразу false.
Я придумал 2 способа очистки. Switch, который пропускает только true. И Delay, в котором при выборе Rate Limit | All messages появляется пункт drop intermediate messages.
Результат одинаковый. Что эффективнее? Может еще получше вариант есть? -
Как использовать ioBroker get node? Расположена в группе function. Насколько я понимаю, в отличие от ioBroker in node, посылающей сообщение дальше, get позволяет узнать текущее состояние. Но как? Что подать ей на вход и что на выход?
Скажем, сейчас я In node направляю на сохранение переменной во flow (скажем, параметр dimmer), и потом его использую. Но лучше же опрашивать статус, когда понадобится, а не подписываться на него?
Ну или хотя бы в коде функции как опросить произвольный параметр... -
Можно ли из функции на Node-Red пройтись по всем датчикам (в моем случае подключены через Xiaomi Gateway 2) и, к примеру, проверить заряд их батрейки?
Ну а дальше либо вывести "аварийные" датчики, либо записать 0/1 в дополнительное поле каждого сенсора (к примеру, BatteryStatus) и указывать его в Metro плитках (они автоматически перекрашиваются в зависимости от "ID статуса"
-
-
-
если в обьектах нет, то без вариантов. Можно еще конечно лог глянуть. Только дебаг нужно включить.
1.1) возможно через usb-zigbee свиток драйвер отдает больше. -
Я думаю без разницы.
-
На JS такое видел. На Node-red по моему только руками (ну или js засунуть в кубик). js пример есть на форуме, но он тоже не идеальный - там отдает id объекта - это не человеко читаемо.
-
Нужно мне самому попробовать на выходных,
ioBroker get node - точно будет красиво попробовать засунуть в Node-red dash реле-выключатель (но визуализаций на iobroker больше пяти, так что...)
-
-
Управление broadlink кнопкой xiaomi (драйвер zigbee). Исправил flow выше. Здесь нужен таймер и switch должен быть таким:
[
{
"id": "cf416abd.c92158",
"type": "tab",
"label": "Broadlink_STATUS",
"disabled": false,
"info": ""
},
{
"id": "5dae1e2f.960c38",
"type": "ioBroker out",
"z": "cf416abd.c92158",
"name": "Sonoff_POW_2",
"topic": "sonoff.0.Sonoff_POW_2_A02EBD.POWER",
"ack": "false",
"autoCreate": "false",
"x": 1700,
"y": 880,
"wires": []
},
{
"id": "b8e33699.63a34",
"type": "ioBroker in",
"z": "cf416abd.c92158",
"name": "Tap twice",
"topic": "zigbee.0.00158d00029bbb6c.tap",
"payloadType": "value",
"onlyack": "",
"func": "all",
"gap": "",
"x": 100,
"y": 460,
"wires": [
[
"864b8892.25f1a"
]
]
},
{
"id": "80c6e025.1825e8",
"type": "switch",
"z": "cf416abd.c92158",
"name": "Broadlink включен?",
"property": "Broadlink_STATUS",
"propertyType": "flow",
"rules": [
{
"t": "eq",
"v": "false",
"vt": "str"
},
{
"t": "eq",
"v": "true",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 540,
"y": 460,
"wires": [
[
"aff64449.5b9498"
],
[
"3b2d8770.0222c8"
]
]
},
{
"id": "aff64449.5b9498",
"type": "change",
"z": "cf416abd.c92158",
"name": "Включаем Broadlink",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "true",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 860,
"y": 400,
"wires": [
[
"9ea4024f.45e7d",
"b50086c9.ce0408"
]
]
},
{
"id": "3b2d8770.0222c8",
"type": "change",
"z": "cf416abd.c92158",
"name": "Отключаем Broadlink",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "false",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 820,
"y": 520,
"wires": [
[
"a4d8b0b.c5ed45",
"58937c89.b8335c"
]
]
},
{
"id": "9ea4024f.45e7d",
"type": "SP2",
"z": "cf416abd.c92158",
"name": "Bathoom",
"device": "6a792cc8.2a6eac",
"action": "setState",
"state": "true",
"x": 1100,
"y": 440,
"wires": [
[]
]
},
{
"id": "a4d8b0b.c5ed45",
"type": "SP2",
"z": "cf416abd.c92158",
"name": "Bathoom",
"device": "6a792cc8.2a6eac",
"action": "setState",
"state": "false",
"x": 1100,
"y": 520,
"wires": [
[]
]
},
{
"id": "864b8892.25f1a",
"type": "switch",
"z": "cf416abd.c92158",
"name": "Берём только true",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "true",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 290,
"y": 460,
"wires": [
[
"80c6e025.1825e8"
]
]
},
{
"id": "58937c89.b8335c",
"type": "debug",
"z": "cf416abd.c92158",
"name": "Отключаем",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 1110,
"y": 600,
"wires": []
},
{
"id": "b50086c9.ce0408",
"type": "debug",
"z": "cf416abd.c92158",
"name": "Включаем",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 1190,
"y": 380,
"wires": []
},
{
"id": "ba2cb790.e57ee",
"type": "SP2",
"z": "cf416abd.c92158",
"name": "Bathoom",
"device": "6a792cc8.2a6eac",
"action": "getState",
"state": "true",
"x": 380,
"y": 300,
"wires": [
[
"60e40fa1.b78738"
]
]
},
{
"id": "60e40fa1.b78738",
"type": "switch",
"z": "cf416abd.c92158",
"name": "Передаём статус broadlink",
"property": "payload.state",
"propertyType": "msg",
"rules": [
{
"t": "true"
},
{
"t": "false"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 600,
"y": 300,
"wires": [
[
"1be7b90d.421cf7"
],
[
"6bb3ee18.8728d8"
]
]
},
{
"id": "1be7b90d.421cf7",
"type": "change",
"z": "cf416abd.c92158",
"name": "Broadlink ON",
"rules": [
{
"t": "set",
"p": "Broadlink_STATUS",
"pt": "flow",
"to": "true",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 890,
"y": 220,
"wires": [
[]
]
},
{
"id": "6bb3ee18.8728d8",
"type": "change",
"z": "cf416abd.c92158",
"name": "Broadlink OFF",
"rules": [
{
"t": "set",
"p": "Broadlink_STATUS",
"pt": "flow",
"to": "false",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 960,
"y": 340,
"wires": [
[]
]
},
{
"id": "12b779f5.16f1a6",
"type": "comment",
"z": "cf416abd.c92158",
"name": "Тут логика работы",
"info": "",
"x": 450,
"y": 380,
"wires": []
},
{
"id": "74adb82d.c4c64",
"type": "comment",
"z": "cf416abd.c92158",
"name": "Тут определяем состояние реле Broadlink",
"info": "",
"x": 490,
"y": 220,
"wires": []
},
{
"id": "eb30ea3d.afc17",
"type": "inject",
"z": "cf416abd.c92158",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "1",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 170,
"y": 300,
"wires": [
[
"ba2cb790.e57ee"
]
]
},
{
"id": "743f811.46788",
"type": "bigtimer",
"z": "cf416abd.c92158",
"outtopic": "",
"outpayload1": "",
"outpayload2": "",
"name": "Big Timer",
"comment": "",
"lat": "",
"lon": "",
"starttime": 5001,
"endtime": 1425,
"starttime2": 0,
"endtime2": 0,
"startoff": 0,
"endoff": 0,
"startoff2": 0,
"endoff2": 0,
"offs": 0,
"outtext1": "",
"outtext2": "",
"timeout": 1440,
"sun": true,
"mon": true,
"tue": true,
"wed": true,
"thu": true,
"fri": true,
"sat": true,
"jan": true,
"feb": true,
"mar": true,
"apr": true,
"may": true,
"jun": true,
"jul": true,
"aug": true,
"sep": true,
"oct": true,
"nov": true,
"dec": true,
"day1": 0,
"month1": 0,
"day2": 0,
"month2": 0,
"day3": 0,
"month3": 0,
"day4": 0,
"month4": 0,
"day5": 0,
"month5": 0,
"day6": 0,
"month6": 0,
"d1": 0,
"w1": 0,
"d2": 0,
"w2": 0,
"d3": 0,
"w3": 0,
"d4": 0,
"w4": 0,
"d5": 0,
"w5": 0,
"d6": 0,
"w6": 0,
"xday1": 0,
"xmonth1": 0,
"xday2": 0,
"xmonth2": 0,
"xday3": 0,
"xmonth3": 0,
"xday4": 0,
"xmonth4": 0,
"xday5": 0,
"xmonth5": 0,
"xday6": 0,
"xmonth6": 0,
"xd1": 0,
"xw1": 0,
"xd2": 0,
"xw2": 0,
"xd3": 0,
"xw3": 0,
"xd4": 0,
"xw4": 0,
"xd5": 0,
"xw5": 0,
"xd6": 0,
"xw6": 0,
"suspend": false,
"random": false,
"repeat": true,
"atstart": true,
"odd": false,
"even": false,
"x": 80,
"y": 160,
"wires": [
[],
[],
[]
]
},
{
"id": "6a792cc8.2a6eac",
"type": "sp2device",
"z": "",
"mac": "78-0F-77-17-8D-49",
"host": "192.168.1.5"
}
] -
Ребят, подскажите, кто знает, как можно решить такую проблемку.
Работают схемы, сценарии в Node-red, включены выключатели, настроены ползунки, расписание и т.д.
Но вот когда комп перезагружается, то все настройки сбиваются, и что бы вернуть все как было, нужно заново все нажимать.
Как можно это исправить? -
Было такое выше обсуждалось.
Нод-Ред не хранит значения, поэтому логика с переменными при старте может подвисать.- можно задать логику при старте. Для этого нужно поставить доп кубик. Таких есть 2 или 3.
Вот тут я добавил кубик задающий логику при старте
https://forum.iobroker.net/post/149786- можно хранить переменные этой логике где-то за пределами Нод-Ред.
Я храню в переменных IoBroker.
-
Важнач информация для всех использующих Node-red из под IoBroker.
Дополнительные паллеты (кубики и пр) нужно устанавливать из вебморды IoBroker (а не из вебморды Node-red).
Иначе возможны проблемы при обновлении. -
Wiki переведенная на русский язык
(Если не пускает используйте режим инкогнито в браузере)
http://146.185.179.211/wiki/Node-RED:Содержание -
Столкнулся с не тривиальной задачей. Нода onvif получает из IP камеры скриншот, этот скрин можно отобразить в ноде image. Мне нужно эту картинку отослать как webhook, для этого нужно картинку выгрузить в хранилище (на сервер) и потом дать http ссылку на неё. Как эту полученную в base64 картинку выгрузить на http сайт?
-
Камрады, а можете дать простой примерчик с кнопкой Xiaomi и группой ламп Yeelight на одно короткое нажатие сделать вкл/выкл.
Заранее спасибо! -
есть в теме примеры. в самом начале.
-
Подскажите, плз.
Есть датчик движения, есть датчик открытия двери.
Когда срабатывает датчик движения, нужно включать свет, но при условии, что в течении последних 3 минут открывалась дверь. -
Нужно ввести каким нибудь образом доп состояние и проверять его.