Использование NODE-RED в качестве сервера для MegaD

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 30 окт 2017, 23:43

OlegJktu84 писал(а):По поводу триггера (Если только говорим об одном и том же).
Сделал пример с переключателем, ручной и абстрактный, но зато рабочий.
Этот кусок должен проверять включен свет или нет, и от этого менять логику. Нужен, что бы с однократного нажатия кнопки включать/выключать свет.
А как этот код связать с реальной Мегой?
То что в зависимости от true и false можно переключать контекст это ясно. Но мега выдает номер порта (например 30) - и все.
на самом деле можно кардинально упростить алгоритм и использовать всего 3 блока.
При поступлении сигнала просто выполнять http запрос с номером порта и цифрой 2 -

Код: Выделить всё

 http://192.168.0.15/sec/?cmd={{port}}:2
Тогда мега переключит состояние на противоположное.
Но тогда мы теряем информацию о том в каком состоянии находится реле в настоящий момент.
А эта информация позволяет формировать всякие разные алгоритмы умного дома.

blwind
Сообщения: 52
Зарегистрирован: 28 окт 2011, 18:10

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение blwind » 16 ноя 2017, 21:11

Для того, что бы не было непонятных и не предвиденных ситуаций перед формированием команды для МЕГИ необходимо сделать запрос и получить состояние интересующего порта, а затем отталкиваясь от этого состояния формировать свою команду и отправлять ее.
И немного о Node-Red. Это классная штука, но только для того, что бы поиграться. Как только начинаются более или менее серьезные вещи и мало-мальски усложненные алгоритмы, по мне проще написать пару сотен строк кода, чем разбираться чего ты там настроил из "кубиков".
Я отказался от использования Node-Red.
В качестве сервера использую связку из Node.js и RethinkDB. RethinkDB - движок база данных умеющий формировать события и потоки данных в ответ на происходящие изменения у нее внутри. Т. е. нажатие, например, кнопки на МЕГЕ влечет за собой запись события в БД, а за тем генерацию всех последующих событий описанных в системе. Такой подход дает массу преимуществ, как в плане организации сетевого трафика, так и общей безопасности системы в целом.

blwind
Сообщения: 52
Зарегистрирован: 28 окт 2011, 18:10

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение blwind » 16 ноя 2017, 23:16

Кстати, есть похожая штука: https://www.totaljs.com/flow/, а к ней еще такая: https://www.totaljs.com/flowboard/

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 04 дек 2017, 23:39

Немного оживлю тему.
1. Освещение. Добавил управление со смартфона. На сервере поднял MQTT сервер москито. Он у меня хранить информацию о состоянии всех топиков.
Освещение.png
Освещение.png (113.88 КБ) 3331 просмотр
Код:

Код: Выделить всё

[{"id":"70449def.19625c","type":"tab","label":"Освещение 1й этаж","disabled":false,"info":"Взаимодействие с Megad"},{"id":"2b3639f5.1923ee","type":"switch","z":"70449def.19625c","name":"MegaD 14-SD IN","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"15","vt":"str"},{"t":"eq","v":"16","vt":"str"},{"t":"eq","v":"17","vt":"str"},{"t":"eq","v":"18","vt":"str"},{"t":"eq","v":"19","vt":"str"},{"t":"eq","v":"20","vt":"str"},{"t":"eq","v":"21","vt":"str"}],"checkall":"true","outputs":7,"x":486,"y":168.99998474121094,"wires":[["82555089.35d57"],["82555089.35d57"],["82555089.35d57"],["82555089.35d57"],["82555089.35d57"],["82555089.35d57"],["82555089.35d57"]],"outputLabels":["p0","p1","p2","p3","p4","p5","p6"]},{"id":"49c222ee.1baf84","type":"function","z":"70449def.19625c","name":"Port","func":"msg.payload=msg.payload.pt;\nreturn msg; ","outputs":"1","noerr":0,"x":308,"y":168.99998474121094,"wires":[["2b3639f5.1923ee"]]},{"id":"82555089.35d57","type":"function","z":"70449def.19625c","name":"Выбор порта","func":"if (msg.payload === \"15\")\n{\nlet p22 = flow.get('p22')||0;\nif (p22 === 0) {\n flow.p22 = 1;\n} else {\n flow.p22 = 0;\n}\nmsg.payload = flow.p22;\nmsg.topic = \"megad/1/14/22\";\nreturn msg;\n\n} else if (msg.payload === \"16\")\n//********* спальня *************\n{\n let p23 = flow.get('p23')||0;\nif (p23 === 0) {\n flow.p23 = 1;\n} else {\n flow.p23 = 0;\n}   \nmsg.payload = flow.p23;\nmsg.topic = \"megad/1/14/23\";\nreturn msg;   \n} else if (msg.payload === \"17\")\n// ********* сан. узел *************\n{\nlet p24 = flow.get('p24')||0;\nif (p24 === 0) {\n flow.p24 = 1;\n} else {\n flow.p24 = 0;\n}   \nmsg.payload = flow.p24;\nmsg.topic = \"megad/1/14/24\";\nreturn msg;   \n}else if (msg.payload === \"18\")\n// ****** лампа холл около кухни ********\n{\n let p25 = flow.get('p25')||0;\nif (p25 === 0) {\n flow.p25 = 1;\n} else {\n flow.p25 = 0;\n}    \nmsg.payload = flow.p25;\nmsg.topic = \"megad/1/14/25\";\nreturn msg;   \n} else if (msg.payload === \"19\")\n// ***** техническое помещение *******\n{\n let p26 = flow.get('p26')||0;\nif (p26 === 0) {\n flow.p26 = 1;\n} else {\n flow.p26 = 0;\n}   \nmsg.payload = flow.p26;\nmsg.topic = \"megad/1/14/26\";\nreturn msg;   \n} else if (msg.payload === \"20\")\n// ***** прихожая *************\n{\n let p27 = flow.get('p27')||0;\nif (p27 === 0) {\n flow.p27 = 1;\n} else {\n flow.p27 = 0;\n}     \nmsg.payload = flow.p27;\nmsg.topic = \"megad/1/14/27\";\nreturn msg;   \n} else if (msg.payload === \"21\")\n{\nlet p28 = flow.get('p28')||0;\nif (p28 === 0) {\n flow.p28 = 1;\n} else {\n flow.p28 = 0;\n}   \nmsg.payload = flow.p28;\nmsg.topic = \"megad/1/14/28\";\nreturn msg;   \n} ","outputs":"1","noerr":0,"x":740,"y":162.99998474121094,"wires":[["7cb734c.3ed9ecc","da73c20b.67224"]]},{"id":"a0e16569.15fe78","type":"http in","z":"70449def.19625c","name":"mega2","url":"/mega2","method":"get","upload":false,"swaggerDoc":"","x":67,"y":257.99993896484375,"wires":[["7be4b40.628424c","a0bb6a5f.bcc288"]]},{"id":"7be4b40.628424c","type":"function","z":"70449def.19625c","name":"All OR Pt","func":"\nif (\"pt\" in msg.payload) {\n  return [ msg, null ];\n} else {\n    return [null, msg];\n //var msg1={};\n //var arr = msg.payload.all.split(';');\n //arr.forEach(function(item, i, arr) {\n //    var arr2 = item.split('/');\n //    if (arr2.length ===1) {\n         // в символах нет скобки\n //        msg1 = item;\n //    } else {\n         // смотрим перые символы\n  //       if (arr2[0]==='ON') {\n //           msg1 = arr2[0]; \n //        } else if (arr2[0]==='OFF') {\n //           msg1 = arr2[0]; \n //        }\n //    }\n//}\n//);\n}\n\n\n","outputs":"2","noerr":0,"x":204.99998474121094,"y":214.99998474121094,"wires":[["49c222ee.1baf84"],["48dca30d.8f5edc"]]},{"id":"7cb734c.3ed9ecc","type":"mqtt out","z":"70449def.19625c","name":"","topic":"","qos":"","retain":"","broker":"487bc286.093f14","x":917.5,"y":162.7999725341797,"wires":[]},{"id":"a98fb3f.fee61d","type":"mqtt in","z":"70449def.19625c","name":"Реле в с/у","topic":"megad/1/14/24","qos":"2","broker":"487bc286.093f14","x":484.20001220703125,"y":257.1999816894531,"wires":[["294353c3.ec0264"]]},{"id":"b99114bb.e52448","type":"http request","z":"70449def.19625c","name":"Свет в сан. узле","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=24:{{payload}}","tls":"","x":992.9000854492188,"y":251,"wires":[[]]},{"id":"e14514cc.a612e","type":"mqtt in","z":"70449def.19625c","name":"Реле фиг его знает","topic":"megad/1/14/22","qos":"2","broker":"487bc286.093f14","x":517.2000122070312,"y":307.20001220703125,"wires":[["90cf51a7.f65378"]]},{"id":"90cf51a7.f65378","type":"http request","z":"70449def.19625c","name":"Свет фиг его знает","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=22:{{payload}}","tls":"","x":983.9000244140625,"y":302,"wires":[[]]},{"id":"4963f82f.7d24e","type":"mqtt in","z":"70449def.19625c","name":"Реле в спальне","topic":"megad/1/14/23","qos":"2","broker":"487bc286.093f14","x":506.20001220703125,"y":366.20001220703125,"wires":[["64777221.e4fa74"]]},{"id":"96c24450.7fa3d","type":"http request","z":"70449def.19625c","name":"Свет в спальне","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=23:{{payload}}","tls":"","x":1008.9000244140625,"y":367,"wires":[[]]},{"id":"57c8675a.0677b8","type":"mqtt in","z":"70449def.19625c","name":"Реле в холл","topic":"megad/1/14/25","qos":"2","broker":"487bc286.093f14","x":497.20001220703125,"y":420.20001220703125,"wires":[["181f1d89.30ff3a"]]},{"id":"181f1d89.30ff3a","type":"http request","z":"70449def.19625c","name":"Свет в холл?","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=25:{{payload}}","tls":"","x":1007.9000244140625,"y":413,"wires":[[]]},{"id":"1614d212.00410e","type":"mqtt in","z":"70449def.19625c","name":"Реле в тех. помещ.","topic":"megad/1/14/26","qos":"2","broker":"487bc286.093f14","x":515.2000122070312,"y":488.20001220703125,"wires":[["2c867ef5.3220ba"]]},{"id":"6b060909.b3a04","type":"http request","z":"70449def.19625c","name":"Свет в тех. пом.","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=26:{{payload}}","tls":"","x":999.9000244140625,"y":484,"wires":[[]]},{"id":"220b8cba.620dec","type":"mqtt in","z":"70449def.19625c","name":"Реле в прихожей","topic":"megad/1/14/27","qos":"2","broker":"487bc286.093f14","x":516.2000122070312,"y":544.2000122070312,"wires":[["d16460f3.4f8ca"]]},{"id":"4e0d9d44.411234","type":"http request","z":"70449def.19625c","name":"Свет в прихожей","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=27:{{payload}}","tls":"","x":1011.9000244140625,"y":547,"wires":[[]]},{"id":"2078c9ac.28c946","type":"mqtt in","z":"70449def.19625c","name":"Реле в фиг. его знает","topic":"megad/1/14/28","qos":"2","broker":"487bc286.093f14","x":532.2000122070312,"y":604.2000122070312,"wires":[["d4732f54.b6228"]]},{"id":"d4732f54.b6228","type":"http request","z":"70449def.19625c","name":"Свет в фиг его","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?cmd=28:{{payload}}","tls":"","x":1018.9000244140625,"y":600,"wires":[[]]},{"id":"da73c20b.67224","type":"debug","z":"70449def.19625c","name":"","active":false,"console":"false","complete":"true","x":904.5000457763672,"y":95.80000305175781,"wires":[]},{"id":"48dca30d.8f5edc","type":"debug","z":"70449def.19625c","name":"","active":false,"console":"false","complete":"true","x":285.49998474121094,"y":269.8000030517578,"wires":[]},{"id":"7eef377f.dbe7f","type":"ui_switch","z":"70449def.19625c","name":"Свет в с/у","label":"Свет в с/у","group":"3f5dd050.cd46b8","order":0,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"1","onvalueType":"str","onicon":"","oncolor":"","offvalue":"0","offvalueType":"str","officon":"","offcolor":"","x":802.5,"y":250.5999755859375,"wires":[["b99114bb.e52448"]]},{"id":"294353c3.ec0264","type":"function","z":"70449def.19625c","name":"","func":"if (msg.payload === \"1\")\n{\n    flow.p24 = \"1\";\n      } else {\n\tflow.p24 = \"0\";\n}    \nreturn msg;","outputs":1,"noerr":0,"x":659.5,"y":251.5999755859375,"wires":[["7eef377f.dbe7f"]]},{"id":"a0bb6a5f.bcc288","type":"debug","z":"70449def.19625c","name":"","active":false,"console":"false","complete":"true","x":147,"y":101,"wires":[]},{"id":"cdfd4466.19fc6","type":"ui_switch","z":"70449def.19625c","name":"Свет в спальне","label":"Свет в спальне","group":"ff1c3539.36b728","order":0,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"1","onvalueType":"str","onicon":"","oncolor":"","offvalue":"0","offvalueType":"str","officon":"","offcolor":"","x":820,"y":367,"wires":[["96c24450.7fa3d"]]},{"id":"64777221.e4fa74","type":"function","z":"70449def.19625c","name":"","func":"if (msg.payload === \"1\")\n{\n    flow.p23 = \"1\";\n      } else {\n\tflow.p23 = \"0\";\n}    \nreturn msg;","outputs":1,"noerr":0,"x":669,"y":367,"wires":[["cdfd4466.19fc6"]]},{"id":"2c867ef5.3220ba","type":"function","z":"70449def.19625c","name":"","func":"if (msg.payload === \"1\")\n{\n    flow.p26 = \"1\";\n      } else {\n\tflow.p26 = \"0\";\n}    \nreturn msg;","outputs":1,"noerr":0,"x":682,"y":488,"wires":[["414c7301.ef815c"]]},{"id":"414c7301.ef815c","type":"ui_switch","z":"70449def.19625c","name":"Тех. помещ.","label":"Свет в тех. помещении","group":"ff1c3539.36b728","order":0,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"1","onvalueType":"str","onicon":"","oncolor":"","offvalue":"0","offvalueType":"str","officon":"","offcolor":"","x":821,"y":487,"wires":[["6b060909.b3a04"]]},{"id":"d16460f3.4f8ca","type":"function","z":"70449def.19625c","name":"","func":"if (msg.payload === \"1\")\n{\n    flow.p27 = \"1\";\n      } else {\n\tflow.p27 = \"0\";\n}    \nreturn msg;","outputs":1,"noerr":0,"x":678,"y":547,"wires":[["3d5bab4e.2c4e5c"]]},{"id":"3d5bab4e.2c4e5c","type":"ui_switch","z":"70449def.19625c","name":"Прихож.","label":"Свет в прихожей","group":"ff1c3539.36b728","order":0,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"1","onvalueType":"str","onicon":"","oncolor":"","offvalue":"0","offvalueType":"str","officon":"","offcolor":"","x":829,"y":545,"wires":[["4e0d9d44.411234"]]},{"id":"93d1b29f.b44a3","type":"ui_switch","z":"70449def.19625c","name":"Выключить свет на первом этаже","label":"Выключить свет на первом этаже","group":"9c30dfa0.6949a","order":0,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"true","onvalueType":"str","onicon":"","oncolor":"","offvalue":"false","offvalueType":"str","officon":"","offcolor":"","x":568,"y":690,"wires":[["eb070bab.75571"]]},{"id":"eb070bab.75571","type":"function","z":"70449def.19625c","name":"","func":"var msgList = [];\nvar str = \"\";\n    for (var i=22; i<29; i++) {\n      str = \"megad/1/14/\"+String(i);\n      msgList.push({payload:0, topic:str});\n      str2 = 'p'+String(i);\n      flow.set(str2,0);\n    }\n\nreturn [msgList];","outputs":1,"noerr":0,"x":799,"y":689,"wires":[["19ec6648.ef68aa"]]},{"id":"19ec6648.ef68aa","type":"mqtt out","z":"70449def.19625c","name":"","topic":"","qos":"","retain":"","broker":"487bc286.093f14","x":976,"y":689,"wires":[]},{"id":"487bc286.093f14","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"Home Leo","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"3f5dd050.cd46b8","type":"ui_group","z":"","name":"Свет","tab":"a08e306e.8de848","order":1,"disp":true,"width":"6"},{"id":"ff1c3539.36b728","type":"ui_group","z":"","name":"Свет","tab":"5f48951c.d3c624","order":2,"disp":true,"width":"6"},{"id":"9c30dfa0.6949a","type":"ui_group","z":"","name":"Управление","tab":"2d614932.c19556","order":1,"disp":true,"width":"6"},{"id":"a08e306e.8de848","type":"ui_tab","z":"","name":"Санузел","icon":"dashboard","order":4},{"id":"5f48951c.d3c624","type":"ui_tab","z":"","name":"Спальня","icon":"dashboard","order":3},{"id":"2d614932.c19556","type":"ui_tab","z":"","name":"Дом","icon":"dashboard","order":1}]

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 04 дек 2017, 23:41

Текущие недоработки:
Хотел бы сохранять при поступлении от Меги команды "all" с состоянием портов их статус в MQTT. Но надо парсить в функции и сохранять. Думаю, потом добавлю.

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 04 дек 2017, 23:43

2. Получение температуры:
Температура.png
Температура.png (17.02 КБ) 3331 просмотр

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 04 дек 2017, 23:44

ну и управление жаллюзи
Жаллюзи.png
Жаллюзи.png (47.74 КБ) 3331 просмотр

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 04 дек 2017, 23:45

Жаллюзи думаю переделаю на switch

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение stilet69 » 15 янв 2018, 15:36

В общем перешел на Home Assistent как платформу для автоматизации по ряду причин. Однако показания по http у меня парсятся и переводятся в mqtt именно Node red так как не удалось добится устойчивой работы Меги в mqtt режиме.
По просьбе в личке выкладываю парсинг температуры в node red

Код: Выделить всё

[{"id":"87ff2f26.29d8c8","type":"inject","z":"5e430a7f.292a5c","name":"","topic":"","payload":"29","payloadType":"str","repeat":"600","crontab":"","once":false,"x":112,"y":100,"wires":[["b445365c.28361"]]},{"id":"b445365c.28361","type":"http request","z":"5e430a7f.292a5c","name":"Получение температуры","method":"GET","ret":"txt","url":"http://192.168.0.14/sec/?pt=29&cmd=get","tls":"","x":311,"y":98,"wires":[["92211e4e.86e57"]]},{"id":"52314d56.b24a6c","type":"mqtt out","z":"5e430a7f.292a5c","name":"","topic":"megad/14/29","qos":"0","retain":"true","broker":"487bc286.093f14","x":721.5,"y":97,"wires":[]},{"id":"af84fdbd.3b8a4","type":"inject","z":"5e430a7f.292a5c","name":"","topic":"","payload":"7","payloadType":"str","repeat":"600","crontab":"","once":false,"x":106,"y":261,"wires":[["e40191b2.1cee4"]]},{"id":"e40191b2.1cee4","type":"http request","z":"5e430a7f.292a5c","name":"Наружная температура","method":"GET","ret":"txt","url":"http://192.168.0.15/sec/?pt=7&cmd=get","tls":"","x":315,"y":263,"wires":[["6b5d287a.56e348"]]},{"id":"95c3fed2.00aea","type":"mqtt out","z":"5e430a7f.292a5c","name":"","topic":"megad/15/7","qos":"0","retain":"true","broker":"487bc286.093f14","x":678.5,"y":260,"wires":[]},{"id":"6b5d287a.56e348","type":"function","z":"5e430a7f.292a5c","name":"","func":"s = msg.payload;\narray = s.split(\":\");\nmsg.payload = array[1];\nreturn msg;","outputs":1,"noerr":0,"x":527.5,"y":261.5,"wires":[["95c3fed2.00aea","decc2a0.35885d8"]]},{"id":"decc2a0.35885d8","type":"debug","z":"5e430a7f.292a5c","name":"","active":false,"console":"false","complete":"true","x":651.5,"y":331,"wires":[]},{"id":"1f0c7a52.41b52e","type":"comment","z":"5e430a7f.292a5c","name":"Наружная температура DS18B20","info":"","x":174.5,"y":202.5,"wires":[]},{"id":"52813639.ce826","type":"comment","z":"5e430a7f.292a5c","name":"Температура в тех помещении DHT22","info":"","x":200,"y":46,"wires":[]},{"id":"92211e4e.86e57","type":"function","z":"5e430a7f.292a5c","name":"parse","func":"var arr = msg.payload.split('/');\nvar temp = arr[0].split(':');\nvar hum = arr[1].split(':');\nhum[1] = hum[1].replace('}\"','');\nstr = \"{\\\"temp\\\":\"+temp[1]+\",\"+ \"\\\"hum\\\":\"+ hum[1] +\"}\";\nstr = str.replace(/^\"+|\"+$/g, '');\nmsg.payload = JSON.parse(str);\nreturn msg;","outputs":1,"noerr":0,"x":519.5,"y":97.5,"wires":[["52314d56.b24a6c"]]},{"id":"c19934f7.a65028","type":"inject","z":"5e430a7f.292a5c","name":"","topic":"","payload":"8","payloadType":"str","repeat":"600","crontab":"","once":false,"x":108,"y":428,"wires":[["b0aeb8da.b9257"]]},{"id":"b0aeb8da.b9257","type":"http request","z":"5e430a7f.292a5c","name":"Температура спальня","method":"GET","ret":"txt","url":"http://192.168.0.15/sec/?pt=8&cmd=get","tls":"","x":317,"y":430,"wires":[["315248a2.ea36e"]]},{"id":"710f33b6.ad385c","type":"mqtt out","z":"5e430a7f.292a5c","name":"","topic":"megad/15/8","qos":"0","retain":"true","broker":"487bc286.093f14","x":680.5,"y":427,"wires":[]},{"id":"315248a2.ea36e","type":"function","z":"5e430a7f.292a5c","name":"","func":"s = msg.payload;\narray = s.split(\":\");\nmsg.payload = array[1];\nreturn msg;","outputs":1,"noerr":0,"x":529.5,"y":428.5,"wires":[["710f33b6.ad385c","24dd38c0.845008"]]},{"id":"24dd38c0.845008","type":"debug","z":"5e430a7f.292a5c","name":"","active":false,"console":"false","complete":"true","x":653.5,"y":498,"wires":[]},{"id":"487bc286.093f14","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"Home Leo","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]
Изображение

OlegJktu84
Сообщения: 651
Зарегистрирован: 16 фев 2016, 19:52

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение OlegJktu84 » 16 янв 2018, 15:15

Выкладывайте, очень интересно. Кусочками ваши примеры использую.
Форма для экспорта-импорта у nod-red удобная

bravo.123
Сообщения: 5
Зарегистрирован: 15 окт 2018, 16:09

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение bravo.123 » 02 дек 2018, 18:23

Немного оживлю топик
stilet69 писал(а):
15 янв 2018, 15:36

По просьбе в личке выкладываю парсинг температуры в node red
Этот парсинг

Код: Выделить всё

s = msg.payload;
array = s.split(":");
msg.payload = array[1];
return msg;
, не учитывает ошибок , например если потерялась связь между сервером и мегой, то на входе вы получите
что-то типа msg.payload="Error: connect EHOSTUNREACH 192.168.66.111:80", и соответственно на выходе получите не температуру, а "connect EHOSTUNREACH 192.168.66.111"
Я сделал так (коряво конечно, но худо-бедно ошибки обрабатывает):

Код: Выделить всё

// Парсим пайлоад c обработкой ошибки
// верный ответ меги "temp:24.12"
// Ошибка связи "Error: connect EHOSTUNREACH 192.168.66.111:80"
// Если ошибка возвращаем 0
var newMsg1 = { 
 payload: msg.payload.match( /(?:[:]-?[0-9]+)\.(?:[0-9]{2})/g )
};
if (newMsg1.payload === null){
   newMsg1.payload = ["0"];
}
else {
    newMsg1 = {
        payload: msg.payload.match( /(?:[0-9]+)\.(?:[0-9]{2})/g )
    }
}

newMsg1.topic = 'Port_30';
return newMsg1;
Может кто-то всё-же использует node-red, было бы интересно посмотреть на ваши решения или это совсем тупиковая ветвь развития?

OlegJktu84
Сообщения: 651
Зарегистрирован: 16 фев 2016, 19:52

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение OlegJktu84 » 03 дек 2018, 12:03

Используют node-red. Просто часто только для правил и в составе какой нибудь системы.
Вот пример с IoBroker https://forum.iobroker.net/viewtopic.ph ... 69#p146339
Там на форум можно выкладывать любые примеры и вопросы с Node-red , не только на IoBroker.

Народ промышленную автоматизацию делает на Node-red. Вопросы-ответы в телеграмм https://t.me/node_red
Но русскоязычного форума по Node-red не вызрело.

d.v.ermakov
Администратор
Сообщения: 2187
Зарегистрирован: 29 май 2015, 21:23
Откуда: Екатеринбург, Нижний Тагил

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение d.v.ermakov » 07 дек 2018, 17:34

Я использую Node-RED. Но, только для правил и только через OpenHAB. Парсить в самом Node-RED, ИМХО, извращение. Чтобы полноценно работать с Мегой, нужен http-сервер, с mqtt полноценной работы не получится (Мега имеет отличающуюся от mqtt идеодогию, я об этом уже пару раз писал).

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение empenoso » 22 мар 2019, 15:42

Может ли Node-RED получать информаци с меги о том, что нажимаются физические кнопки, которые подключены к ней (НЕ по mqtt) - то есть может ли быть реализована схема, когда мега сама рулит входами/выходами, а Node-RED просто считывает актуальную информацию и используется как панель?

Bonefolder
Сообщения: 617
Зарегистрирован: 30 мар 2017, 11:15
Откуда: г.Севастополь

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение Bonefolder » 22 мар 2019, 16:13

Может. Выше человек приводил примеры взаимодействия node-red и Меги по MQTT. Так же, node-red умеет слушать Http

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Использование NODE-RED в качестве сервера для MegaD

Сообщение martiniman » 24 апр 2021, 19:09

Попробовал на работе сделать управление вывесками на Node-RED с Мегой, мне понравилось.
Всё наглядно.
Node-RED можно указать в качестве сервера и получать события от кнопок, проверял, работает.

Код: Выделить всё

[{"id":"f6ddf78.d75f808","type":"subflow","name":"to MegaD","info":"","category":"","in":[{"x":60,"y":80,"wires":[{"id":"a0b02e0b.2e82b"}]}],"out":[{"x":340,"y":80,"wires":[{"id":"a0b02e0b.2e82b","port":0}]}],"env":[],"meta":{},"color":"#FFCC66","inputLabels":["MegaD command"],"outputLabels":["MegaD answer"],"icon":"node-red/split.svg"},{"id":"a0b02e0b.2e82b","type":"http request","z":"f6ddf78.d75f808","name":"to MegaD","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://192.168.53.7/sec/?{{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","x":200,"y":80,"wires":[[]]},{"id":"d60b715c.ed5428","type":"subflow:f6ddf78.d75f808","z":"9664dfc.8c522a","x":110,"y":80,"wires":[["8839d18e.aab46","6e52dd8f.56de24","75899193.06517"]]},{"id":"6744523c.4b7cfc","type":"inject","z":"9664dfc.8c522a","name":"Освещенность","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"pt=30&scl=31&i2c_dev=max44009","payloadType":"str","x":120,"y":160,"wires":[["d60b715c.ed5428"]]},{"id":"8839d18e.aab46","type":"ui_text","z":"9664dfc.8c522a","group":"30291b02.7cde6c","order":1,"width":0,"height":0,"name":"","label":"Освещенность","format":"{{msg.payload}}","layout":"row-spread","x":400,"y":120,"wires":[]},{"id":"6e52dd8f.56de24","type":"ui_chart","z":"9664dfc.8c522a","name":"","group":"33e1de6a.ec5d3a","order":1,"width":8,"height":3,"label":"Освещенность","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"x":400,"y":160,"wires":[[]]},{"id":"75899193.06517","type":"switch","z":"9664dfc.8c522a","name":"is autoMode ON?","property":"autoMode","propertyType":"flow","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":80,"wires":[["2639a2d8.7afbf6"]]},{"id":"2639a2d8.7afbf6","type":"time-range-switch","z":"9664dfc.8c522a","name":"","lat":"","lon":"","startTime":"07:30","endTime":"20:00","startOffset":0,"endOffset":0,"x":630,"y":80,"wires":[["17caf8d2.a9ac97"],[]]},{"id":"17caf8d2.a9ac97","type":"function","z":"9664dfc.8c522a","name":"String, Number > Float","func":"msg.payload = parseFloat(msg.payload);\nif (!isNaN(msg.payload)) return msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":80,"wires":[["39d258a6.072918"]],"outputLabels":["ON, OFF"]},{"id":"39d258a6.072918","type":"switch","z":"9664dfc.8c522a","name":"< 300=ON, >400=OFF","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"300","vt":"str"},{"t":"gt","v":"400","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1070,"y":80,"wires":[["173b512d.000e9f"],["adcdb397.684398"]]},{"id":"173b512d.000e9f","type":"switch","z":"9664dfc.8c522a","name":"is p9 ON?","property":"p9","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":1260,"y":60,"wires":[[],["65a08456.cbe474"]]},{"id":"adcdb397.684398","type":"switch","z":"9664dfc.8c522a","name":"is p9 ON?","property":"p9","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":1260,"y":100,"wires":[["17d2c2b7.8bd5c5"],[]]},{"id":"65a08456.cbe474","type":"change","z":"9664dfc.8c522a","name":"ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":60,"wires":[["d7c46cd5.dead38"]]},{"id":"8d34d661.f80e","type":"time-range-switch","z":"9664dfc.8c522a","name":"","lat":"","lon":"","startTime":"07:30","endTime":"20:00","startOffset":0,"endOffset":0,"x":900,"y":220,"wires":[["1d730b24.e52795","44c2844a.a17584"],["91b6dd86.a6c9d8","61550473.c17824","adcdb397.684398"]]},{"id":"17d2c2b7.8bd5c5","type":"change","z":"9664dfc.8c522a","name":"OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":100,"wires":[["d7c46cd5.dead38"]]},{"id":"d7c46cd5.dead38","type":"change","z":"9664dfc.8c522a","name":"ON or OFF > p9","rules":[{"t":"change","p":"payload","pt":"msg","from":"true","fromt":"bool","to":"cmd=9:1","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"false","fromt":"bool","to":"cmd=9:0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1600,"y":140,"wires":[["c90657f9.3fdee8","9aa9f6eb.e8178"]]},{"id":"c5aad41a.44d96","type":"switch","z":"9664dfc.8c522a","name":"is autoMode ON?","property":"autoMode","propertyType":"flow","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":650,"y":220,"wires":[["8d34d661.f80e"]]},{"id":"1d730b24.e52795","type":"switch","z":"9664dfc.8c522a","name":"is p7 ON?","property":"p7","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":1260,"y":200,"wires":[[],["c91ebdae.75b8c"]]},{"id":"44c2844a.a17584","type":"switch","z":"9664dfc.8c522a","name":"is p8 ON?","property":"p8","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":1260,"y":340,"wires":[[],["8a38ecea.f128c"]]},{"id":"91b6dd86.a6c9d8","type":"switch","z":"9664dfc.8c522a","name":"is p7 ON?","property":"p7","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":1260,"y":240,"wires":[["8bd13879.5b626"],[]]},{"id":"61550473.c17824","type":"switch","z":"9664dfc.8c522a","name":"is p8 ON?","property":"p8","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":1260,"y":380,"wires":[["c74dbe5c.f08ad"],[]]},{"id":"27e9b6f9.3dde02","type":"ui_switch","z":"9664dfc.8c522a","name":"","label":"Реклама крыша","tooltip":"","group":"3d4a7b4e.58a2f4","order":4,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"x":1280,"y":140,"wires":[["d7c46cd5.dead38"]]},{"id":"c90657f9.3fdee8","type":"debug","z":"9664dfc.8c522a","name":"===9","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1810,"y":140,"wires":[]},{"id":"9aa9f6eb.e8178","type":"subflow:f6ddf78.d75f808","z":"9664dfc.8c522a","x":1820,"y":280,"wires":[[]]},{"id":"e76ba614.960db","type":"function","z":"9664dfc.8c522a","name":"All ports > flow, payload","func":"var s = msg.payload.split(\";\")\n\nvar result = {};\nfor (i = 0; i < 38; i++) {\n    var t = (s[i] == \"ON\") ? true : false;\n    result[\"p\"+i] = t;\n    flow.set(\"p\"+i, t);\n}\nmsg.payload  = result;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":280,"wires":[["51418b6d.8f51f4","f1139a30.8bd328","25241dfa.8c91d2","82e0795.0435388","c5aad41a.44d96"]],"outputLabels":["array p[x] = true or false"]},{"id":"c91ebdae.75b8c","type":"change","z":"9664dfc.8c522a","name":"ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":200,"wires":[["69c47ea8.b8f648"]]},{"id":"8a38ecea.f128c","type":"change","z":"9664dfc.8c522a","name":"ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":340,"wires":[["d9a33095.0c7fb"]]},{"id":"8bd13879.5b626","type":"change","z":"9664dfc.8c522a","name":"OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":240,"wires":[["69c47ea8.b8f648"]]},{"id":"c74dbe5c.f08ad","type":"change","z":"9664dfc.8c522a","name":"OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1400,"y":380,"wires":[["d9a33095.0c7fb"]]},{"id":"51418b6d.8f51f4","type":"change","z":"9664dfc.8c522a","name":"p9 state","rules":[{"t":"move","p":"payload.p9","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":140,"wires":[["27e9b6f9.3dde02"]],"outputLabels":["true or false"]},{"id":"649f369d.7e1c58","type":"change","z":"9664dfc.8c522a","name":"Disable controls","rules":[{"t":"set","p":"enabled","pt":"msg","to":"false","tot":"bool"},{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":330,"wires":[["4b8a6fc.26f121","610c7aba.f9c28c","27e9b6f9.3dde02"]]},{"id":"f6363dab.6b85","type":"change","z":"9664dfc.8c522a","name":"Enable controls","rules":[{"t":"set","p":"enabled","pt":"msg","to":"true","tot":"bool"},{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":370,"wires":[["4b8a6fc.26f121","610c7aba.f9c28c","27e9b6f9.3dde02"]]},{"id":"d9a33095.0c7fb","type":"change","z":"9664dfc.8c522a","name":"ON or OFF > p8","rules":[{"t":"change","p":"payload","pt":"msg","from":"true","fromt":"bool","to":"cmd=8:1","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"false","fromt":"bool","to":"cmd=8:0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1610,"y":420,"wires":[["557df5e7.a97724","9aa9f6eb.e8178"]]},{"id":"69c47ea8.b8f648","type":"change","z":"9664dfc.8c522a","name":"ON or OFF > p7","rules":[{"t":"change","p":"payload","pt":"msg","from":"true","fromt":"bool","to":"cmd=7:1","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"false","fromt":"bool","to":"cmd=7:0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1610,"y":280,"wires":[["50510a09.493044","9aa9f6eb.e8178"]]},{"id":"d5594f87.75ec5","type":"subflow:f6ddf78.d75f808","z":"9664dfc.8c522a","x":110,"y":280,"wires":[["e76ba614.960db"]]},{"id":"f1139a30.8bd328","type":"change","z":"9664dfc.8c522a","name":"p7 state","rules":[{"t":"move","p":"payload.p7","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":280,"wires":[["610c7aba.f9c28c"]],"outputLabels":["true or false"]},{"id":"25241dfa.8c91d2","type":"change","z":"9664dfc.8c522a","name":"p8 state","rules":[{"t":"move","p":"payload.p8","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":420,"wires":[["4b8a6fc.26f121"]],"outputLabels":["true or false"]},{"id":"82e0795.0435388","type":"debug","z":"9664dfc.8c522a","name":"===1","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":410,"y":220,"wires":[]},{"id":"e85477c7.d9b37","type":"switch","z":"9664dfc.8c522a","name":"Is autoMode ON?","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":650,"y":350,"wires":[["649f369d.7e1c58"],["f6363dab.6b85"]]},{"id":"4b8a6fc.26f121","type":"ui_switch","z":"9664dfc.8c522a","name":"","label":"Реклама красная","tooltip":"","group":"3d4a7b4e.58a2f4","order":2,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"x":1290,"y":420,"wires":[["d9a33095.0c7fb"]]},{"id":"610c7aba.f9c28c","type":"ui_switch","z":"9664dfc.8c522a","name":"","label":"Реклама дверь","tooltip":"","group":"3d4a7b4e.58a2f4","order":3,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"x":1280,"y":280,"wires":[["69c47ea8.b8f648"]]},{"id":"557df5e7.a97724","type":"debug","z":"9664dfc.8c522a","name":"===8","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1810,"y":420,"wires":[]},{"id":"50510a09.493044","type":"debug","z":"9664dfc.8c522a","name":"===7","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1810,"y":320,"wires":[]},{"id":"85df0425.9e085","type":"inject","z":"9664dfc.8c522a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"cmd=all","payloadType":"str","x":90,"y":350,"wires":[["d5594f87.75ec5","ba53b33e.4f074"]]},{"id":"7bdf3dcb.289e94","type":"change","z":"9664dfc.8c522a","name":"Set autoMode","rules":[{"t":"set","p":"autoMode","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":350,"wires":[["e85477c7.d9b37"]],"outputLabels":["true or false"]},{"id":"ba53b33e.4f074","type":"function","z":"9664dfc.8c522a","name":"Get autoMode","func":"var f = flow.get(\"autoMode\")\nif (f === undefined) {\n    flow.set(\"autoMode\", true)\n    msg.payload = true\n        \n} \nmsg.payload = f\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":130,"y":420,"wires":[["be951efe.e7f618"]],"outputLabels":["true or false"]},{"id":"be951efe.e7f618","type":"ui_switch","z":"9664dfc.8c522a","name":"","label":"Автовключение рекламы","tooltip":"","group":"3d4a7b4e.58a2f4","order":1,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"x":360,"y":420,"wires":[["7bdf3dcb.289e94"]]},{"id":"30291b02.7cde6c","type":"ui_group","name":"Датчики на улице","tab":"f62126fb.a6cd98","order":2,"disp":true,"width":"6","collapse":false},{"id":"33e1de6a.ec5d3a","type":"ui_group","name":"Графики","tab":"f62126fb.a6cd98","order":3,"disp":true,"width":8,"collapse":false},{"id":"3d4a7b4e.58a2f4","type":"ui_group","name":"Управление","tab":"f62126fb.a6cd98","order":1,"disp":true,"width":6,"collapse":false},{"id":"f62126fb.a6cd98","type":"ui_tab","name":"Фото-мир","icon":"dashboard","disabled":false,"hidden":false}]
Вложения
ui.PNG
ui.PNG (93.21 КБ) 1347 просмотров
flow.PNG
flow.PNG (137.97 КБ) 1348 просмотров

Ответить