NEWS
Node-RED примеры, решения и и вопросы. Общая тема по Node-RED
-
Нашел пример управления xiaomi пылесосом с уборкой по комнатам
https://flows.nodered.org/flow/6d284006 … 78568f179c
Решил сюда положить, что бы не потерять. Давно хочу сделать кнопки - вызов пылесоса для уборки в комнату.
-
пока хватает визуализаций завязанных на iobroker `
А можно поинтересоваться какие на IoBrokere есть? Я там вижу именно Dashboard -
-
ну я думал что выше мы обсуждали nod-red dashboard. Его в драйверах (адаптерах) ioBroker не видно (он целиком на Node-red завязан).
-
vis https://github.com/iobroker/iobroker.vi … /README.md (он кстати в читый nod-red портирован)
-
материал https://github.com/ioBroker/ioBroker.ma ... /README.md
-
мобайл https://github.com/ioBroker/ioBroker.mo ... /README.md
-
мой любимый хаб панель https://github.com/ioBroker/ioBroker.ha ... /README.md
Немного особняком стоят:
-
приложение для андроид iogo https://github.com/nisiode/ioBroker.iog ... /README.md
-
возможность создавать бота с кнопками, графиками и пр. в мессенджере телеграмм
Я на хабпанели и телеграмм, немного тыкаюсь в material
-
-
Ребят, подскажите пожалуйста.
Поставил брокер на Windows 7, и не вижу драйверов кроме
!
Как мне их подгрузить или что еще сделать? -
такое лучше всего на канале в телеграмм спрашивать
https://web.telegram.org/#/im?p=@iobroker
PS лучше конечно было виртуалку поднимать win хост, linux гость. Настроить что бы дестопная win не ломала софт УД местами очень тяжело. Одни перезагрузки чего стоят.
-
Спасибо, ссылка ведет на пустую страницу, к сожалению.
-
-
Пришлось разобраться с неработоспособностью некоторых flow после перезагрузки сервера.
Как и подозревал, проблема была в том что при старте (перезагрузке) Nod-red состояния некоторых Flow были не определенными - в итоге сообщение дальше них и не шло.
Разыскал и установил вот такой кубик
https://flows.nodered.org/node/node-red-contrib-config
Собственно при запуске Nod-red устанавливает flow в определенное значение.
!
Собственно можно было и как нибудь через переменную хранящуюся в базе данных переписать. Но так вроде сущностей меньше.
upd вот это правило и поправил viewtopic.php?f=48&t=11969&p=146339#p146339
-
Всем привет, поставил IOB, добавил и настроил устройства NETATMO. Это погодные станции, получаю с них через адаптер данные по СО2. Для этого использую Input ioBrоker topic = "netatmo.0.Netatmo.Спальня.CO2.CO2", Payload = value.
Логика работает, все считывается. Но вчера, как назло, облачный сервис NEtatmo в коем веке, был недоступен :evil: В итоге логика схемы NODE Red вообще перестала работать, т.е. у меня она начинается с того, что взять значения с netatmo, а раз значений не было, то все висело.
Можно ли как-то в NODE типа ввода данных с IOB прописать значение по умолчанию и таймаут, сколько времени ждать отклика с адаптера?
-
Можно ли как-то в NODE типа ввода данных с IOB прописать значение по умолчанию и таймаут, сколько времени ждать отклика с адаптера? `
сделать цикл с таймером? И увеличивать его каждый раз если данные с облака прилетели?И ветку про ручную активацию вы спрашивали в телеге? Там тоже можно сделать развилку логики.
Я вот в этом примере с таймерами делал, и "ручной режим" там тоже есть.
viewtopic.php?f=48&t=11969#p125169
(через пару минкт пример перезалью с ручным режимом)
-
Ребят, а в RED есть какие нибудь библиотеки выполнения по условию, еще что то типа триггеров, сравнение данных?
-
Ребят, а в RED есть какие нибудь библиотеки выполнения по условию, еще что то типа триггеров, сравнение данных? `
Конешно. Содержимое msg можно <>= и кучу другой математики.Вот в этой статье разбирается с яркостью https://habr.com/post/396985/
-
Можно ли как-то в NODE типа ввода данных с IOB прописать значение по умолчанию и таймаут, сколько времени ждать отклика с адаптера? `
сделать цикл с таймером? И увеличивать его каждый раз если данные с облака прилетели?И ветку про ручную активацию вы спрашивали в телеге? Там тоже можно сделать развилку логики.
Я вот в этом примере с таймерами делал, и "ручной режим" там тоже есть.
viewtopic.php?f=48&t=11969#p125169
(через пару минкт пример перезалью с ручным режимом) `
Да, в телеге я спрашивал, как сделать еще так, чтобы вручную можно было установить, это тоже вопрос, но второй )Попробую разобраться с таймером, на примере. Тут плохо, что в логе ничего не видно, что значений нет или подвисло что-то. Логично было бы сразу в NODE предусмотреть, что запрос на адаптер не отработает…
-
Попробую разобраться с таймером, на примере. Тут плохо, что в логе ничего не видно, что значений нет или подвисло что-то. Логично было бы сразу в NODE предусмотреть, что запрос на адаптер не отработает… `
если речь про nod-red то там можно как раз на таймер и повесить и лог и сразу в телегу слать если что-то не так.А в драйвере ioBroker нет объекта проверяющего что облако живо?
Может на ping повесить?
-
Попробую разобраться с таймером, на примере. Тут плохо, что в логе ничего не видно, что значений нет или подвисло что-то. Логично было бы сразу в NODE предусмотреть, что запрос на адаптер не отработает… `
если речь про nod-red то там можно как раз на таймер и повесить и лог и сразу в телегу слать если что-то не так.А в драйвере ioBroker нет объекта проверяющего что облако живо?
Может на ping повесить? `
Ну надо лезть в исходники адаптера для NETATMO, я даже не уверен что можно симитировать вчерашнюю ситуацию.По поводу таймера, я сделал вход инжектом, повесил на таймер раз в 10 сек, да он выдает, например 0, как дефолт. Но как сделать, чтобы он выдавал тогда, когда отклика от устройства не дождался?
-
Конешно. Содержимое msg можно <>= и кучу другой математики.
Вот в этой статье разбирается с яркостью https://habr.com/post/396985/ `
Спасибо![](</s><URL url=)http://www.remserv-bt.ru/images/smilies/icon_81.gif" /> -
Но как сделать, чтобы он выдавал тогда, когда отклика от устройства не дождался? `
это что-то типа мерелки температуру с получением данных из облака?Нужно сделать провод от данных в таймер, и там есть настройка запускать таймер снова если что-то прилетело.
интервалы нужно посмотреть, наверно раз в три минуты что-то ходит?
Если выложите код/рисунок может кто еще что посоветует.
Народ в телеге на канале нод-ред ответить по логике, если спросить как сделать, и что хочешь получить. Конечно желательно попытку показать и пояснения дать.
-
По итогам продолжительных поисков пользовательского интерфейса для управления умным домом с тв (Android TV) - остановился на связке wallpanel https://github.com/WallPanel-Project/wallpanel-android
и node-red-dashboard https://flows.nodered.org/node/node-red-dashboard
В настройках dashboard есть галка разрешающая перемещаться по webgui стрелками от пульта от ТВ бокса.
Плюс можно сразу через dashboard и звуки выводить (sayit).
!
! вывод звука драйвер sayit
[ { "id": "48979e09.8263d8", "type": "ui_audio", "z": "d369ede2.680eb", "name": "", "group": "a77d8246.98ece8", "voice": "", "always": true, "x": 960, "y": 780, "wires": [] }, { "id": "3f9406c2.830122", "type": "ioBroker in", "z": "d369ede2.680eb", "name": "Is now speaking", "topic": "sayit.0.tts.playing", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "x": 480, "y": 780, "wires": [ [ "f1a9c85f.deca08", "50c5f06c.07cd88" ] ] }, { "id": "f1a9c85f.deca08", "type": "ioBroker get", "z": "d369ede2.680eb", "name": "Binary mp3 file", "topic": "sayit.0.tts.mp3", "attrname": "payload", "payloadType": "object", "x": 740, "y": 780, "wires": [ [ "48979e09.8263d8", "b0945816.a139e8" ] ] }, { "id": "50c5f06c.07cd88", "type": "debug", "z": "d369ede2.680eb", "name": "говорит?", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 560, "y": 720, "wires": [] }, { "id": "b0945816.a139e8", "type": "debug", "z": "d369ede2.680eb", "name": "какой файл", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "x": 760, "y": 720, "wires": [] }, { "id": "cf4e0f18.3d51f8", "type": "inject", "z": "d369ede2.680eb", "name": "", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 350, "y": 720, "wires": [ [ "f1a9c85f.deca08", "50c5f06c.07cd88" ] ] }, { "id": "a1a729b8.0f83c8", "type": "ui_button", "z": "d369ede2.680eb", "name": "скажи", "group": "a77d8246.98ece8", "order": 4, "width": 0, "height": 0, "passthru": false, "label": "button", "color": "", "bgcolor": "", "icon": "", "payload": "true", "payloadType": "str", "topic": "", "x": 470, "y": 900, "wires": [ [ "f1a9c85f.deca08" ] ] }, { "id": "94cf28dc.33e72", "type": "comment", "z": "d369ede2.680eb", "name": "кнопка дашборд для удобства отладки", "info": "", "x": 570, "y": 860, "wires": [] }, { "id": "a77d8246.98ece8", "type": "ui_group", "z": "", "name": "СВЕТ ЗАЛ", "tab": "e2d5e6c4.2778", "order": 1, "disp": true, "width": "6", "collapse": false }, { "id": "e2d5e6c4.2778", "type": "ui_tab", "z": "", "name": "Дом", "icon": "dashboard", "order": 2 } ] >! ````
-
Всем привет, поставил IOB, добавил и настроил устройства NETATMO. Это погодные станции, получаю с них через адаптер данные по СО2. Для этого использую Input ioBrоker topic = "netatmo.0.Netatmo.Спальня.CO2.CO2", Payload = value.
Логика работает, все считывается. Но вчера, как назло, облачный сервис NEtatmo в коем веке, был недоступен :evil: В итоге логика схемы NODE Red вообще перестала работать, т.е. у меня она начинается с того, что взять значения с netatmo, а раз значений не было, то все висело.
Можно ли как-то в NODE типа ввода данных с IOB прописать значение по умолчанию и таймаут, сколько времени ждать отклика с адаптера? `
Вот что в итоге получилось. Реализовал определение ручного режима (если скорость вентилятора приточки >=5, то значит кто-то вручную включил). Определяется СО2 >900, >1000, <900. И управляется от этих значений приточка.
! [{"id":"4484ad27.bff564","type":"ioBroker in","z":"99a1edcb.6bb1","name":"CO2_BedRoom","topic":"netatmo.0.Netatmo.Спальня.CO2.CO2","payloadType":"value","onlyack":"","func":"all","gap":"","x":140,"y":380,"wires":[["157afaf7.c32cd5"]]},{"id":"e303fee7.27fd9","type":"ioBroker out","z":"99a1edcb.6bb1","name":"RotationSpeed","topic":"breezart.0.RotationSpeed","ack":"false","autoCreate":"false","x":1477,"y":420,"wires":[]},{"id":"4f08171a.f18ae8","type":"switch","z":"99a1edcb.6bb1","name":"CheckCO2","property":"$max(payload)","propertyType":"jsonata","rules":[{"t":"gt","v":"1000","vt":"jsonata"},{"t":"gt","v":"900","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":3,"x":767,"y":440,"wires":[["e83b0ac3.7d7548","34e17a0f.81bf56"],["50ba9a58.a17ef4","8f15e8f6.fb5fc8"],["21c3d88.efd6e28"]]},{"id":"e83b0ac3.7d7548","type":"change","z":"99a1edcb.6bb1","name":"SetSpeed_High","rules":[{"t":"set","p":"payload","pt":"msg","to":"4","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":977,"y":380,"wires":[["6703ae3d.7cb51","8e0268e2.01da78"]]},{"id":"21c3d88.efd6e28","type":"change","z":"99a1edcb.6bb1","name":"SetSpeed_Low","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":520,"wires":[["8e0268e2.01da78","fb89fdb4.42a12"]]},{"id":"66798763.03f088","type":"ioBroker in","z":"99a1edcb.6bb1","name":"CO2_Nika","topic":"netatmo.0.Netatmo.Детская.CO2.CO2","payloadType":"value","onlyack":"","func":"all","gap":"","x":160,"y":440,"wires":[["157afaf7.c32cd5"]]},{"id":"3546dba5.074ed4","type":"ioBroker in","z":"99a1edcb.6bb1","name":"CO2_Hall","topic":"netatmo.0.Netatmo.Гостинная.CO2.CO2","payloadType":"value","onlyack":"","func":"all","gap":"","x":160,"y":500,"wires":[["157afaf7.c32cd5"]]},{"id":"34e17a0f.81bf56","type":"debug","z":"99a1edcb.6bb1","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":400,"wires":[]},{"id":"50ba9a58.a17ef4","type":"debug","z":"99a1edcb.6bb1","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":770,"y":480,"wires":[]},{"id":"ca2a615d.e7a42","type":"join","z":"99a1edcb.6bb1","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\n","joinerType":"str","accumulate":false,"timeout":"10","count":"3","reduceRight":false,"reduceExp":"$max(array)\t","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":587,"y":440,"wires":[["8f37c5b7.dda928","4f08171a.f18ae8","a7dfa8af.7e7e48"]]},{"id":"8f37c5b7.dda928","type":"debug","z":"99a1edcb.6bb1","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":587,"y":400,"wires":[]},{"id":"6703ae3d.7cb51","type":"debug","z":"99a1edcb.6bb1","name":"Побольше","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":970,"y":340,"wires":[]},{"id":"fb89fdb4.42a12","type":"debug","z":"99a1edcb.6bb1","name":"На минимум","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":970,"y":560,"wires":[]},{"id":"157afaf7.c32cd5","type":"function","z":"99a1edcb.6bb1","name":"parseInt-2","func":"msg.payload=parseInt(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":381,"y":440,"wires":[["ca2a615d.e7a42"]]},{"id":"ef3b5e52.1036f","type":"ioBroker in","z":"99a1edcb.6bb1","name":"RotationSpeed","topic":"breezart.0.RotationSpeed","payloadType":"value","onlyack":"","func":"all","gap":"","x":160,"y":180,"wires":[["ba5b1121.d1064"]]},{"id":"a7dfa8af.7e7e48","type":"trigger","z":"99a1edcb.6bb1","op1":"","op2":"1","op1type":"nul","op2type":"num","duration":"5","extend":true,"units":"min","reset":"","bytopic":"all","name":"Если нет данных","x":887,"y":620,"wires":[["176d08b4.2219d7","8e0268e2.01da78"]]},{"id":"176d08b4.2219d7","type":"debug","z":"99a1edcb.6bb1","name":"#НД","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":867,"y":660,"wires":[]},{"id":"415e51ac.9c042","type":"inject","z":"99a1edcb.6bb1","name":"Для запуска триггера","topic":"","payload":"1","payloadType":"num","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":657,"y":620,"wires":[["a7dfa8af.7e7e48"]]},{"id":"ba5b1121.d1064","type":"switch","z":"99a1edcb.6bb1","name":"Ручной?","property":"payload","propertyType":"msg","rules":[{"t":"gt","v":"4","vt":"str"},{"t":"lte","v":"4","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":400,"y":220,"wires":[["a04c7d5.28e2f8"],[]]},{"id":"a04c7d5.28e2f8","type":"change","z":"99a1edcb.6bb1","name":"ДА","rules":[{"t":"set","p":"manual","pt":"flow","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":220,"wires":[["2c968846.ab1c68","42f60e42.6093c"]]},{"id":"2c968846.ab1c68","type":"debug","z":"99a1edcb.6bb1","name":"РУЧНОЙ РЕЖИМ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":570,"y":180,"wires":[]},{"id":"42f60e42.6093c","type":"delay","z":"99a1edcb.6bb1","name":"Сброс руч. режима","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":740,"y":220,"wires":[["cf3bf784.5430c8"]]},{"id":"cf3bf784.5430c8","type":"change","z":"99a1edcb.6bb1","name":"ДА","rules":[{"t":"set","p":"manual","pt":"flow","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":930,"y":220,"wires":[["eb7f78c0.27d548"]]},{"id":"eb7f78c0.27d548","type":"debug","z":"99a1edcb.6bb1","name":"СБРОС РЕЖИМА","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":970,"y":180,"wires":[]},{"id":"8e0268e2.01da78","type":"switch","z":"99a1edcb.6bb1","name":"РУЧНОЙ?","property":"manual","propertyType":"flow","rules":[{"t":"true"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":1230,"y":420,"wires":[["4361f73b.11eef8"],["c352c46.dc73e38","e303fee7.27fd9"]]},{"id":"4361f73b.11eef8","type":"debug","z":"99a1edcb.6bb1","name":"Ручной","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1457,"y":380,"wires":[]},{"id":"8b5aef57.797ab","type":"inject","z":"99a1edcb.6bb1","name":"ПРОБА","topic":"","payload":"5","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":240,"wires":[["ba5b1121.d1064"]]},{"id":"c352c46.dc73e38","type":"debug","z":"99a1edcb.6bb1","name":"Устанавливаем","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1477,"y":460,"wires":[]},{"id":"e7d2a9ce.a39818","type":"inject","z":"99a1edcb.6bb1","name":"","topic":"","payload":"1000","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":320,"wires":[["157afaf7.c32cd5"]]},{"id":"8f15e8f6.fb5fc8","type":"change","z":"99a1edcb.6bb1","name":"SetSpeed_Mid","rules":[{"t":"set","p":"payload","pt":"msg","to":"3","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":440,"wires":[["dbbb1086.d886c","8e0268e2.01da78"]]},{"id":"dbbb1086.d886c","type":"debug","z":"99a1edcb.6bb1","name":"Средняя","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":960,"y":480,"wires":[]}]
-
Вот пример как определить расстояние от дома. Ставим адаптер Find my iphone, пишем такой скрипт в NR:
! [{"id":"1c09c50c.74d60b","type":"function","z":"99a1edcb.6bb1","name":"GetLocation","func":"\nvar home_long = 11.11111;\nvar home_alt = 22.22222;\n\n//var values = flow.get(["latitude", "longitude"]);\n \nvar long_target = 0; \nvar alt_target = 0;\n\nlong_target = parseFloat(flow.get('LO'));// values[1];\nalt_target = parseFloat(flow.get('LA'));\n//node.log(long_target);\n//node.log(alt_target);\n\n\nmsg.payload = 63711000Math.acos(Math.sin(Math.PIhome_alt/180)Math.sin(Math.PIalt_target/180)+Math.cos(Math.PIhome_alt/180)Math.cos(Math.PIalt_target/180)Math.cos(Math.PI(home_long-long_target)/180));\n// вывод в лог расстояния в метрах\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":260,"wires":[["6b23990b.f116c8"]]},{"id":"6b23990b.f116c8","type":"debug","z":"99a1edcb.6bb1","name":"Расстояние","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":870,"y":260,"wires":[]},{"id":"282f31cf.40579e","type":"change","z":"99a1edcb.6bb1","name":"Set LA.","rules":[{"t":"set","p":"LA","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":240,"wires":[["1c09c50c.74d60b","642dcb16.a76cb4"]]},{"id":"eed8108f.ea0d9","type":"change","z":"99a1edcb.6bb1","name":"SET LO","rules":[{"t":"set","p":"LO","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":280,"wires":[["1c09c50c.74d60b","c013725a.bbb22"]]},{"id":"642dcb16.a76cb4","type":"debug","z":"99a1edcb.6bb1","name":"LA","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":510,"y":200,"wires":[]},{"id":"c013725a.bbb22","type":"debug","z":"99a1edcb.6bb1","name":"LO","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":510,"y":320,"wires":[]},{"id":"e7628b0a.cbcc18","type":"ioBroker get","z":"99a1edcb.6bb1","name":"latitude","topic":"find-my-iphone.0.iPhone_(TELE).latitude","attrname":"payload","payloadType":"value","x":340,"y":240,"wires":[["282f31cf.40579e"]]},{"id":"452ba365.3c988c","type":"ioBroker get","z":"99a1edcb.6bb1","name":"longitude","topic":"find-my-iphone.0.iPhone_(TELE).longitude","attrname":"payload","payloadType":"value","x":340,"y":280,"wires":[["eed8108f.ea0d9"]]},{"id":"5e3ac9eb.238b68","type":"trigger","z":"99a1edcb.6bb1","op1":"60","op2":"1","op1type":"num","op2type":"str","duration":"-1","extend":false,"units":"min","reset":"","bytopic":"all","name":"","x":170,"y":240,"wires":[["e7628b0a.cbcc18","452ba365.3c988c"]]},{"id":"1bc2b34.ef3094d","type":"inject","z":"99a1edcb.6bb1","name":"","topic":"","payload":"1","payloadType":"num","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":150,"y":200,"wires":[["5e3ac9eb.238b68"]]}]
P.S. Спасибо telegram @cahek2202 за код расчета расстояния по координатам.