NEWS
Node-RED примеры, решения и и вопросы. Общая тема по Node-RED
-
Только начал осваивать 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 минут открывалась дверь. -
Нужно ввести каким нибудь образом доп состояние и проверять его.