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

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

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

Сообщение Maxmen » 09 окт 2017, 12:33

Andrey_B писал(а):Имитировать нажатие кнопки внешним запросом нельзя, так как это лишено практического смысла.
Не соглашусь. Для отладки полезно.

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

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

Сообщение stilet69 » 09 окт 2017, 16:03

Огромное спасибо за наводку с скриптом - завтра попробую.
Команды от сервера получается можно нормально распознавать.
А вы пробовали давать команды?
Ну то есть нажата кнопка включения света. На вход НодеРед пришла команда - он ее отпарсил и сейчас надо дать команду Меге включить то или иное реле.

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

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

Сообщение Maxmen » 09 окт 2017, 17:14

stilet69, я сейчас как раз разбираюсь с этим. Есть сложности, т.к. "чукча не писатель", больше времени уходит на синтаксис и прочие для знактоков java простые вещи.
Теоретически думаю что это сделать легко с помощью последовательно расположенных нод template и http response, пока я у себя прописал на все запросы ответ template "d", т.е выполнение сценария по умолчанию.
Вообще удивлен что на этом форуме мало народу пользуется nodered или просто мало пишут что пользуются. Лично меня впечатлило обилие интерфейсов и простота настройки их взаимодействия.
Сам уже распробовал кое-что и рекомендую:
Телеграм-боты. Очень удобно прямо в него слать всю нужную инфу в обе стороны включая картинки, видео и прочее. Можно менюшки строить прямо в нем (модуль RedBot).
Удобно отправлять состояния геркона в телеграм ("Дверь открыта"-"Дверь закрыта"). Привязал звонок - при нажатии кнопки звонка может прислать картинку с камеры в телеграм.
Сейчас разбираюсь с импульсными счетчиками. Если совсем заморочиться, то можно показания напрямую на сайт УК слать. Пока хочу просто показания по расписанию получать в телеграм.
Есть модуль для астериска, планирую домофон сип-клиентом сделать. Есть готовые модули modbus tcp и rtu, думаю поюзать промышленные модули ввода-вывода. Также должно быть легко опрашивать электросчетчик с modbus, свой пока не подключал.

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

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

Сообщение Maxmen » 09 окт 2017, 22:42

stilet69, Все гораздо проще оказалось. Есть готовая нода httprequest, в которую достаточно прописать нужную команду (например, http://192.168.55.11/sec/?cmd=10:1).

captain
Сообщения: 18
Зарегистрирован: 29 дек 2013, 13:51

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

Сообщение captain » 11 окт 2017, 06:38

Node-red достаточно интересная вещь,использую даже на работе. Вот кстати вам мой модуль для Asterisk https://flows.nodered.org/node/node-red ... mi-manager возможно через AMI управлять полностью asterisk через node-red, если будут с ним проблемы можете писать об ошибках.

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

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

Сообщение stilet69 » 27 окт 2017, 17:47

Чтобы поддержать интерес к теме публикую схему работы триггера освещения:
2017-10-27_16-45-11.jpg
2017-10-27_16-45-11.jpg (50.31 КБ) 4336 просмотров
Вот код:

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


[{"id":"32cd4dc2.5a142a","type":"http in","z":"70449def.19625c","name":"mega2","url":"/mega2","method":"get","upload":false,"swaggerDoc":"","x":70.99998474121094,"y":203,"wires":[["d675c4dc.215e4","25d1578e.11da38"]]},{"id":"59ddd8ff.c5d038","type":"switch","z":"70449def.19625c","name":"MegaD 14-R (2)","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"30","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"6","vt":"str"},{"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":14,"x":341,"y":206.0000457763672,"wires":[["29249a3e.77fea6"],["63038f6e.aa367"],["f8fc58e5.42ca18"],[],[],[],[],[],[],[],[],[],[],[]],"outputLabels":["p0","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13"]},{"id":"d675c4dc.215e4","type":"function","z":"70449def.19625c","name":"Port","func":"msg.payload=msg.payload.pt;\nreturn msg; ","outputs":"1","noerr":0,"x":187.3333282470703,"y":183.9833221435547,"wires":[["59ddd8ff.c5d038"]]},{"id":"2a723a1c.a5c916","type":"http request","z":"70449def.19625c","name":"Выкл.","method":"GET","ret":"txt","url":"http://192.168.0.15/sec/?cmd=0:0","tls":"","x":308,"y":67.00004577636719,"wires":[[]]},{"id":"bf2289f7.8c5bc","type":"http request","z":"70449def.19625c","name":"Вкл.","method":"GET","ret":"txt","url":"http://192.168.0.15/sec/?cmd=0:1","tls":"","x":309.20001220703125,"y":20,"wires":[[]]},{"id":"ffac1fa4.51e9","type":"mqtt out","z":"70449def.19625c","name":"Публикация","topic":"","qos":"0","retain":"true","broker":"dfd99cf1.f3963","x":674.5,"y":197.80003356933594,"wires":[]},{"id":"24cef6b2.693fa2","type":"switch","z":"70449def.19625c","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"false","outputs":2,"x":200.49998474121094,"y":46.80000305175781,"wires":[["bf2289f7.8c5bc"],["2a723a1c.a5c916"]]},{"id":"4aba8060.cb0578","type":"mqtt in","z":"70449def.19625c","name":"порт P0","topic":"megad/2/p0","qos":"0","broker":"dfd99cf1.f3963","x":85.5,"y":45.399993896484375,"wires":[["24cef6b2.693fa2"]]},{"id":"63038f6e.aa367","type":"function","z":"70449def.19625c","name":"p1","func":"if (context.global.p1 === undefined )\n{\n\tcontext.global.p1 = 1;\n} else if (context.global.p1 === 1) {\n\tcontext.global.p1 = 0;\n} else if (context.global.p1 === 0) {\n\tcontext.global.p1 = 1;\n}\nmsg.payload = context.global.p1;\nmsg.topic = \"megad/2/p1\";\nreturn msg;","outputs":"1","noerr":0,"x":490.20001220703125,"y":128.1999969482422,"wires":[["ffac1fa4.51e9"]]},{"id":"f8fc58e5.42ca18","type":"function","z":"70449def.19625c","name":"p2","func":"if (context.global.p2 === undefined )\n{\n\tcontext.global.p2 = 1;\n} else if (context.global.p2 === 1) {\n\tcontext.global.p2 = 0;\n} else if (context.global.p2 === 0) {\n\tcontext.global.p2 = 1;\n}\nmsg.payload = context.global.p2;\nmsg.topic = \"megad/2/p2\";\nreturn msg;","outputs":"1","noerr":0,"x":493.20001220703125,"y":164.1999969482422,"wires":[["ffac1fa4.51e9"]]},{"id":"25d1578e.11da38","type":"function","z":"70449def.19625c","name":"Mode","func":"msg.payload=msg.payload.m;\nreturn msg; ","outputs":"1","noerr":0,"x":190.1999969482422,"y":222.1999969482422,"wires":[[]]},{"id":"a4474bee.6daaf","type":"function","z":"70449def.19625c","name":"Обход портов","func":"var msgList = [];\nvar str = \"\";\n    for (var i=0; i<14; i++) {\n      str = \"megad/2/p\"+String(i);\n      msgList.push({payload:0, topic:str});\n    }\n    return [msgList];\n","outputs":1,"noerr":0,"x":434.5,"y":458.79998779296875,"wires":[["ffac1fa4.51e9"]]},{"id":"52e5bfc5.ab9b78","type":"inject","z":"70449def.19625c","name":"Все порты в 0  MQTT","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":146.5,"y":458.99998474121094,"wires":[["a4474bee.6daaf"]]},{"id":"29249a3e.77fea6","type":"function","z":"70449def.19625c","name":"p0","func":"if (context.global.p0 === undefined )\n{\n\tcontext.global.p0 = 1;\n} else if (context.global.p0 === 1) {\n\tcontext.global.p0 = 0;\n} else if (context.global.p0 === 0) {\n\tcontext.global.p0 = 1;\n}\nmsg.payload = context.global.p0;\nmsg.topic = \"megad/2/p0\";\nreturn msg;","outputs":"1","noerr":0,"x":497.20001220703125,"y":86.19999694824219,"wires":[["ffac1fa4.51e9"]]},{"id":"dfd99cf1.f3963","type":"mqtt-broker","z":"","broker":"192.168.0.51","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

на малинке запущен москитто - сервер MQTT

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

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

Сообщение OlegJktu84 » 27 окт 2017, 22:49

очень вовремя.
Я вот тоже смотрю как кнопкой реле щелкать.
Только вот логику, включено реле или нет, хочу как-то по другому решить

У вас я так понимаю вот это:

if (context.global.p2 === undefined )
{
context.global.p2 = 1;
} else if (context.global.p2 === 1) {
context.global.p2 = 0;
} else if (context.global.p2 === 0) {
context.global.p2 = 1;
}
msg.payload = context.global.p2;
msg.topic = "megad/2/p2";
return msg;

я смотрю пример с хабра (логику хочу как с Light Threshold Selector):
[{"id":"59e887b8.a2003","type":"switch","z":"4d10ef6c.c4f428","name":"Movement detected?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"OPEN","vt":"str"}],"checkall":"false","outputs":1,"x":480,"y":200,"wires":[["d93703ab.21ee7"]]},{"id":"5ad11c8c.539be4","type":"trigger","z":"4d10ef6c.c4f428","op1":"","op2":"0","op1type":"nul","op2type":"str","duration":"8","extend":false,"units":"s","reset":"OPEN","name":"Switch off delay","x":668,"y":288,"wires":[["a4d7b747.a106b","dd344b6b.57fc2"]]},{"id":"dd053df9.6f2be8","type":"change","z":"4d10ef6c.c4f428","name":"Light Brightness Adjustment","rules":[{"t":"set","p":"payload","pt":"msg","to":"Light_brightness","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":931.9999389648438,"y":199.63330078125,"wires":[["a4d7b747.a106b","dd344b6b.57fc2"]]},{"id":"b4960014.0320c","type":"inject","z":"4d10ef6c.c4f428","name":"","topic":"","payload":"OPEN","payloadType":"str","repeat":"","crontab":"","once":false,"x":176.5,"y":323,"wires":[["59e887b8.a2003"]]},{"id":"d50aa92a.14a9b","type":"inject","z":"4d10ef6c.c4f428","name":"","topic":"","payload":"CLOSED","payloadType":"str","repeat":"","crontab":"","once":false,"x":187,"y":374,"wires":[["5ad11c8c.539be4","59e887b8.a2003"]]},{"id":"4986033a.bb8e4c","type":"mqtt in","z":"4d10ef6c.c4f428","name":"Hall Light Sensor","topic":"mihome/0/devices/sensor_motion_aq2_158d0001a33b7c/lux","qos":"2","broker":"806fe114.85f5f8","x":161,"y":61,"wires":[["be94b70a.acd0d","c5f317be.eef7a8"]]},{"id":"be94b70a.acd0d","type":"switch","z":"4d10ef6c.c4f428","name":"Light Threshold Selector","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"10","vt":"num"},{"t":"else"}],"checkall":"false","outputs":2,"x":435.33331298828125,"y":60.7166748046875,"wires":[["9db8fa63.a0664"],["6ed0e57d.deb8bc"]]},{"id":"d93703ab.21ee7","type":"switch","z":"4d10ef6c.c4f428","name":"Light Enabled?","property":"Light_enabled","propertyType":"flow","rules":[{"t":"eq","v":"Yes","vt":"str"}],"checkall":"true","outputs":1,"x":693.5,"y":200,"wires":[["dd053df9.6f2be8"]]},{"id":"9db8fa63.a0664","type":"change","z":"4d10ef6c.c4f428","name":"Enable Light","rules":[{"t":"set","p":"Light_enabled","pt":"flow","to":"Yes","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":24,"wires":[[]]},{"id":"6ed0e57d.deb8bc","type":"change","z":"4d10ef6c.c4f428","name":"Disable Light","rules":[{"t":"set","p":"Light_enabled","pt":"flow","to":"No","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":742.6666259765625,"y":92.51666259765625,"wires":[[]]},{"id":"be3a9dff.4a2c88","type":"inject","z":"4d10ef6c.c4f428","name":"","topic":"","payload":"Light_enabled","payloadType":"flow","repeat":"1","crontab":"","once":false,"x":248.5,"y":593,"wires":[["fd80770.2983908"]]},{"id":"fd80770.2983908","type":"debug","z":"4d10ef6c.c4f428","name":"Light_enabled","active":false,"console":"false","complete":"payload","x":588.5,"y":594,"wires":[]},{"id":"4f82765b.9da068","type":"inject","z":"4d10ef6c.c4f428","name":"","topic":"","payload":"5","payloadType":"num","repeat":"","crontab":"","once":false,"x":151.5,"y":127,"wires":[["be94b70a.acd0d"]]},{"id":"5cef1ba.6b65de4","type":"inject","z":"4d10ef6c.c4f428","name":"","topic":"","payload":"100","payloadType":"num","repeat":"","crontab":"","once":false,"x":153,"y":181,"wires":[["be94b70a.acd0d"]]},{"id":"87ab9f96.72b6d8","type":"mqtt in","z":"4d10ef6c.c4f428","name":"Hall Motion Sensor","topic":"/myhome/state/Hall_motion","qos":"2","broker":"b65f056.ce62f78","x":165,"y":249,"wires":[["59e887b8.a2003","5ad11c8c.539be4"]]},{"id":"a4d7b747.a106b","type":"mqtt out","z":"4d10ef6c.c4f428","name":"Hall Light Dimmer ","topic":"/myhome/command/Light_Hall/state","qos":"0","retain":"true","broker":"b65f056.ce62f78","x":1228,"y":230,"wires":[]},{"id":"d4e4e961.d1de88","type":"inject","z":"4d10ef6c.c4f428","name":"Reduce Brightness at 21:00","topic":"Night Brightness","payload":"1","payloadType":"str","repeat":"","crontab":"00 21 * * *","once":false,"x":257,"y":432,"wires":[["b5993b33.6cbc4"]]},{"id":"553cdcd3.7dfbfc","type":"inject","z":"4d10ef6c.c4f428","name":"Normal Brightness at 6:00","topic":"Night Brightness","payload":"50","payloadType":"num","repeat":"","crontab":"00 6 * * *","once":false,"x":267.6666259765625,"y":519.683349609375,"wires":[["b5993b33.6cbc4"]]},{"id":"b5993b33.6cbc4","type":"change","z":"4d10ef6c.c4f428","name":"Light Brightness Adjustment","rules":[{"t":"set","p":"Light_brightness","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":469,"wires":[[]]},{"id":"dd344b6b.57fc2","type":"debug","z":"4d10ef6c.c4f428","name":"","active":true,"console":"false","complete":"false","x":1221.5,"y":344,"wires":[]},{"id":"c5f317be.eef7a8","type":"debug","z":"4d10ef6c.c4f428","name":"","active":true,"console":"false","complete":"false","x":430,"y":20,"wires":[]},{"id":"806fe114.85f5f8","type":"mqtt-broker","z":"","broker":"192.168.89.23","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"b65f056.ce62f78","type":"mqtt-broker","z":"4d10ef6c.c4f428","broker":"localhost","port":"1883","clientid":"","usetls":false,"verifyservercert":true,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willRetain":null,"willPayload":"","birthTopic":"","birthQos":"0","birthRetain":null,"birthPayload":""}]

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

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

Сообщение Andry » 27 окт 2017, 23:46

stilet69 Можете снять видео с комментариями NODE-RED .Я пробую щас Iobroker,в сервере есть драйвер NODE-RED.Как например зделать недельный термостат используя датчик температуры и задействуя реле.Извините если чего новичка за глупые вопросы,для меня спаять проще, чем зделать на сервере скрипт.

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

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

Сообщение OlegJktu84 » 28 окт 2017, 13:07

Напомню общие ресурсы по nod-red.

статья на хабрхабр
https://geektimes.ru/post/279814/

примеры на сайте nod red
https://flows.nodered.org/
Последний раз редактировалось OlegJktu84 28 окт 2017, 21:10, всего редактировалось 1 раз.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

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

Сообщение Andry » 28 окт 2017, 13:15

Статью читал,за сайт спаибо видел ,но Английским туго.Тут как с самого начала,я всавил ваш пример nod red,но как вы создавали блоки что чего значит .В мелочах нет понимания.Как оно в роботе,почему у вас создан блок мега 14Rчто означают цыфры внутри блока.Тут для такких как я всё непонятно,хотя везде пишут ,nod red что спецом здеплан для тех кто в программировании на каком либо языке дуб.Тут тем кто снуля нужно рожовувать а те кто понимают им я думаю и так понятно.Мало Рускоязычных примеров,и то токо в картинках без коментариев,нет ни одного видео.Те кто понимает тому поле для сёмки на Ютюбе валом.

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

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

Сообщение d.v.ermakov » 28 окт 2017, 16:16

Я, конечно, не Розенталь, но глазки вянут вас читать. Извините.

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

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

Сообщение stilet69 » 28 окт 2017, 23:11

Andry писал(а):Статью читал,за сайт спаибо видел ,но Английским туго.Тут как с самого начала,я всавил ваш пример nod red,но как вы создавали блоки что чего значит .В мелочах нет понимания.Как оно в роботе,почему у вас создан блок мега 14Rчто означают цыфры внутри блока.Тут для такких как я всё непонятно,хотя везде пишут ,nod red что спецом здеплан для тех кто в программировании на каком либо языке дуб.Тут тем кто снуля нужно рожовувать а те кто понимают им я думаю и так понятно.Мало Рускоязычных примеров,и то токо в картинках без коментариев,нет ни одного видео.Те кто понимает тому поле для сёмки на Ютюбе валом.
Ок, постараюсь объяснить на пальцах. Снимать видео к сожалению для меня проблематично.
Итак начали. Первым блоком идет блок получения сигналов с Меги
Снимок экрана от 2017-10-28 21-48-50.png
Снимок экрана от 2017-10-28 21-48-50.png (93.44 КБ) 4265 просмотров
Этот блок получает запрос от меги. Если вы зайдете в Мегу, то на закладке Conf в поле Script надо указать то же значение, что и в поле URL в картинке выше. То есть этим блоком вы получаете "сырые" данные и меги. В данном случае речь идет только о нажатиях кнопок. То есть Мега сама посылает запрос в Node-Red, и блок его улавливает. Забегу вперед и скажу, что температуру по видимому надо получать по другому (в настройках меги установив клавишу loop), тогда Мега сама будет время от времени посылать сообщения с состояниями портов в Node-Red. Еще немного отвлекусь и замечу, что если сейчас включить галочку srv на Меге, то клавиши будут работать некорректно, так как Мега будет "сбивать" настройки. Я потом исправлю этот момент. Идем дальше.
Снимок экрана от 2017-10-28 22-04-38.png
Снимок экрана от 2017-10-28 22-04-38.png (56.62 КБ) 4265 просмотров
Следующий блок выделяет из сообщения (msg.payload) номер порта который шлет сообщение. Каждая кнопка подключенная к Меге имеет свой номер порта. Я в частности подключил кнопку к порту 30 Меги. Соответственно на этот блок приходит сложное сообщение от предыдущего блока в котором в дополнительных полях закодирована уйма полезной информации. Наше дело выдернуть эту информацию. Чтобы посмотреть всю информацию содержащуюся в сообщении надо подключить к выходу первого блока блок debug и выбрать "complete msg object"
Снимок экрана от 2017-10-28 22-10-56.png
Снимок экрана от 2017-10-28 22-10-56.png (7.89 КБ) 4265 просмотров

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

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

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

Я выделяю порт и информацию о продолжительности нажатия в двух разных блоках.
Далее идет коммутатор. Вы нажимаете на разные кнопки у себя дома и вам надо в блоке выделять их номера и пускать на разные выходы, которые будут управлять разными реле включающими свет.
Для этого существует большой блок. На него подаются номера кнопок (30,31,32 и так далее), а он в зависимости от номера пускает сообщение на разные выходы.
Снимок экрана от 2017-10-28 22-18-59.png
Снимок экрана от 2017-10-28 22-18-59.png (82.29 КБ) 4264 просмотра
как видите нажатие кнопки 30 пускается на выход 1, нажатие кнопки 31 пускается на выход 2 и т.д.
К выходу этого коммутатора мы подключаем специальный алгоритм на языке JavaScript. Дело в том, что при первом нажатии мы должны включить свет, а при втором выключить. При первом запуске алгоритм при получении сообщения ищет в памяти значение переменной, которую я назвал по имени порта ВЫХОДА (релейного).

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

if (context.global.p0 === undefined ) //// смотрю в памяти переменную context.global.p0 и если она имеет значение undefined (то есть программа запущена в первый раз),
{
	context.global.p0 = 1;             /////  то инициализирую его значением 1 - включаю свет.
} else if (context.global.p0 === 1) {    //// если ранее я уже включал свет
	context.global.p0 = 0;               ///// то теперь его надо выключить
} else if (context.global.p0 === 0) {   ///// если ранее он был выключен
	context.global.p0 = 1;             //// то включаю реле
}
msg.payload = context.global.p0;      //// присваиваю сообщению значение из "хранилища", чтобы пустить его дальше
msg.topic = "megad/2/p0";            //// говорю брокеру MQTT в какой топике хранить значение
return msg;                                 //// заканчиваю обработку сигнала и передаю его дальше по цепочке
context.global - это значит значение переменной p0 хранится ГЛОБАЛЬНО для всех алгоритмов и блоков Node-red. В дальнейшем я могу в любом flow выдернуть это значение.
Последний раз редактировалось stilet69 28 окт 2017, 23:46, всего редактировалось 2 раза.

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

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

Сообщение stilet69 » 28 окт 2017, 23:35

ну а дальше идет публикация сообщения в ВЫХОД MQTT. Можно рассматривать это как временное хранилище (до выключения компа) в котором будет храниться информация о состоянии реле, температуре и т.д.
Как только сообщение приходит в выход MQTT он записывает в свою веку (топик) состояние данного реле.
Сразу же срабатывает (автоматически ) самая верхняя ветка.
В ее начале идет ВХОД MQTT - он подключен к конкретному реле (за это отвечает поле Топик) - вы можете задать любое удобное название для ветки.
Далее идет снова коммутатор - если в ветке mqtt записалась единичка (включено реле), то он пускает сигнал на выход 1, если в ветке 0, то пускает на выход 2
Ну а далее идет блок, который просто дает сигнал меге включить или выключить реле.

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

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

Сообщение stilet69 » 28 окт 2017, 23:39

Я немного упростил вчерашнюю схему - на мой взгляд выглядит более компактно:

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


[{"id":"bd8cd047.ddf27","type":"switch","z":"8da30b71.88029","name":"MegaD 14-R (2)","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"30","vt":"str"},{"t":"eq","v":"31","vt":"str"},{"t":"eq","v":"32","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"6","vt":"str"},{"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":14,"x":398,"y":245.0000457763672,"wires":[["1b42080.d97f1f8"],["45949eb1.d69028"],["12a51bc1.f2b804"],[],[],[],[],[],[],[],[],[],[],[]],"outputLabels":["p0","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13"]},{"id":"fe837ee4.7f0d7","type":"function","z":"8da30b71.88029","name":"Port","func":"msg.payload=msg.payload;\nreturn msg; ","outputs":"1","noerr":0,"x":212,"y":227,"wires":[["bd8cd047.ddf27"]]},{"id":"6c52ce4c.f5de1","type":"http request","z":"8da30b71.88029","name":"Вкл. -выкл.","method":"GET","ret":"txt","url":"http://192.168.0.15/sec/?cmd={{port}}:{{post}}","tls":"","x":770,"y":80,"wires":[[]]},{"id":"b6da2b96.63b47","type":"mqtt out","z":"8da30b71.88029","name":"Публикация","topic":"","qos":"0","retain":"true","broker":"db7423.241873e","x":770,"y":140,"wires":[]},{"id":"45949eb1.d69028","type":"function","z":"8da30b71.88029","name":"p1","func":"if (context.global.p1 === undefined )\n{\n\tcontext.global.p1 = 1;\n\n} else if (context.global.p1 === 1) {\n\tcontext.global.p1 = 0;\n\n} else if (context.global.p1 === 0) {\n\tcontext.global.p1 = 1;\n\n}\nmsg.post = context.global.p1\nmsg.port = msg.payload;\nmsg.payload = context.global.p1;\nmsg.topic = \"megad/2/p1\";\nreturn msg;","outputs":"1","noerr":0,"x":554,"y":128,"wires":[["6c52ce4c.f5de1","b6da2b96.63b47"]]},{"id":"12a51bc1.f2b804","type":"function","z":"8da30b71.88029","name":"p2","func":"if (context.global.p2 === undefined )\n{\n\tcontext.global.p2 = 1;\n} else if (context.global.p2 === 1) {\n\tcontext.global.p2 = 0;\n} else if (context.global.p2 === 0) {\n\tcontext.global.p2 = 1;\n}\nmsg.post = context.global.p2\nmsg.port = msg.payload;\nmsg.payload = context.global.p2;\nmsg.topic = \"megad/2/p2\";\nreturn msg;","outputs":"1","noerr":0,"x":558,"y":178,"wires":[["6c52ce4c.f5de1","b6da2b96.63b47"]]},{"id":"43a784a9.3d5d3c","type":"function","z":"8da30b71.88029","name":"Обход портов","func":"var msgList = [];\nvar str = \"\";\n    for (var i=0; i<14; i++) {\n      str = \"megad/2/p\"+String(i);\n      msgList.push({payload:0, topic:str});\n    }\n    return [msgList];\n","outputs":1,"noerr":0,"x":400,"y":460,"wires":[["b6da2b96.63b47"]]},{"id":"79eab27a.dc059c","type":"inject","z":"8da30b71.88029","name":"Нач. установка в 0  MQTT","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":130,"y":460,"wires":[["43a784a9.3d5d3c"]]},{"id":"1b42080.d97f1f8","type":"function","z":"8da30b71.88029","name":"p0","func":"if (context.global.p0 === undefined )\n{\n\tcontext.global.p0 = 1;\n} else if (context.global.p0 === 1) {\n\tcontext.global.p0 = 0;\n} else if (context.global.p0 === 0) {\n\tcontext.global.p0 = 1;\n}\nmsg.post = context.global.p0\nmsg.port = msg.payload;\nmsg.payload = context.global.p0;\nmsg.topic = \"megad/2/p0\";\nreturn msg;","outputs":"1","noerr":0,"x":550,"y":80,"wires":[["6c52ce4c.f5de1","b6da2b96.63b47"]]},{"id":"903ae1b.d7d74a","type":"http in","z":"8da30b71.88029","name":"mega2","url":"/mega2","method":"get","upload":false,"swaggerDoc":"","x":79,"y":262,"wires":[["eee5647a.d606c8","fe837ee4.7f0d7"]]},{"id":"eee5647a.d606c8","type":"function","z":"8da30b71.88029","name":"Mode","func":"msg.payload=msg.payload.m;\nreturn msg; ","outputs":"1","noerr":0,"x":213.20001220703125,"y":288.20001220703125,"wires":[["bd8cd047.ddf27"]]},{"id":"db7423.241873e","type":"mqtt-broker","z":"","broker":"172.17.0.1","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

Снимок экрана от 2017-10-28 22-39-04.png
Снимок экрана от 2017-10-28 22-39-04.png (53.08 КБ) 4264 просмотра

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

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

Сообщение stilet69 » 28 окт 2017, 23:42

Я немного подумал над получением температуры. Галочку srv включать не надо. Надо просто с помощью периодического опроса самому дергать информацию

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

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

Сообщение stilet69 » 28 окт 2017, 23:57

Andry писал(а):stilet69 Можете снять видео с комментариями NODE-RED .Я пробую щас Iobroker,в сервере есть драйвер NODE-RED.Как например зделать недельный термостат используя датчик температуры и задействуя реле.Извините если чего новичка за глупые вопросы,для меня спаять проще, чем зделать на сервере скрипт.
БЛЛИН! написал примерный алгоритм с термостатом, но вместо кнопки ответить, нажал кнопку пожаловаться и отправил сообщение админу форума ))) Ну что попросим его текст жалобы вставить сюда. )

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

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

Сообщение stilet69 » 29 окт 2017, 00:02

OlegJktu84 писал(а):очень вовремя.
Я вот тоже смотрю как кнопкой реле щелкать.
Только вот логику, включено реле или нет, хочу как-то по другому решить
У вас я так понимаю вот это:
if (context.global.p2 === undefined )
{
context.global.p2 = 1;
} else if (context.global.p2 === 1) {
context.global.p2 = 0;
} else if (context.global.p2 === 0) {
context.global.p2 = 1;
}
msg.payload = context.global.p2;
msg.topic = "megad/2/p2";
return msg;
Я не смог сделать так как в примере. Непонятно как логику триггера блоками реализовать.

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

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

Сообщение stilet69 » 29 окт 2017, 00:33

Все таки я перфекционист )) Еще больше упрощаем механизм:
Снимок экрана от 2017-10-28 23-31-19.png
Снимок экрана от 2017-10-28 23-31-19.png (47.61 КБ) 4262 просмотра

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

[{"id":"bd8cd047.ddf27","type":"switch","z":"8da30b71.88029","name":"MegaD 14-R (2)","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"30","vt":"str"},{"t":"eq","v":"31","vt":"str"},{"t":"eq","v":"32","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"5","vt":"str"},{"t":"eq","v":"6","vt":"str"},{"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":14,"x":398,"y":245.0000457763672,"wires":[["1b42080.d97f1f8"],["1b42080.d97f1f8"],["1b42080.d97f1f8"],[],[],[],[],[],[],[],[],[],[],[]],"outputLabels":["p0","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13"]},{"id":"fe837ee4.7f0d7","type":"function","z":"8da30b71.88029","name":"Port","func":"msg.payload=msg.payload;\nreturn msg; ","outputs":"1","noerr":0,"x":212,"y":227,"wires":[["bd8cd047.ddf27"]]},{"id":"6c52ce4c.f5de1","type":"http request","z":"8da30b71.88029","name":"Вкл. -выкл.","method":"GET","ret":"txt","url":"http://192.168.0.15/sec/?cmd={{port}}:{{post}}","tls":"","x":808,"y":197,"wires":[[]]},{"id":"b6da2b96.63b47","type":"mqtt out","z":"8da30b71.88029","name":"Публикация","topic":"","qos":"0","retain":"true","broker":"db7423.241873e","x":806,"y":250,"wires":[]},{"id":"43a784a9.3d5d3c","type":"function","z":"8da30b71.88029","name":"Обход портов","func":"var msgList = [];\nvar str = \"\";\n    for (var i=0; i<14; i++) {\n      str = \"megad/2/p\"+String(i);\n      msgList.push({payload:0, topic:str});\n    }\n    return [msgList];\n","outputs":1,"noerr":0,"x":400,"y":460,"wires":[["b6da2b96.63b47"]]},{"id":"79eab27a.dc059c","type":"inject","z":"8da30b71.88029","name":"Нач. установка в 0  MQTT","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":130,"y":460,"wires":[["43a784a9.3d5d3c"]]},{"id":"1b42080.d97f1f8","type":"function","z":"8da30b71.88029","name":"Выбор порта","func":"if (msg.payload === 30)\n{\n    if (context.global.p0 === undefined )\n{\n\tcontext.global.p0 = 1;\n} else if (context.global.p0 === 1) {\n\tcontext.global.p0 = 0;\n} else if (context.global.p0 === 0) {\n\tcontext.global.p0 = 1;\n}    \nmsg.post = context.global.p0\nmsg.port = msg.payload;\nmsg.payload = context.global.p0;\nmsg.topic = \"megad/2/p0\";\nreturn msg;   \n} else if (msg.payload === 31)\n{\n if (context.global.p1 === undefined )\n{\n\tcontext.global.p1 = 1;\n} else if (context.global.p1 === 1) {\n\tcontext.global.p1 = 0;\n} else if (context.global.p1 === 0) {\n\tcontext.global.p1 = 1;\n}    \nmsg.post = context.global.p1\nmsg.port = msg.payload;\nmsg.payload = context.global.p1;\nmsg.topic = \"megad/2/p1\";\nreturn msg;   \n} else if (msg.payload === 32)\n{\nif (context.global.p2 === undefined )\n{\n\tcontext.global.p2 = 1;\n} else if (context.global.p2 === 1) {\n\tcontext.global.p2 = 0;\n} else if (context.global.p2 === 0) {\n\tcontext.global.p2 = 1;\n}    \nmsg.post = context.global.p2\nmsg.port = msg.payload;\nmsg.payload = context.global.p2;\nmsg.topic = \"megad/2/p2\";\nreturn msg;\n    \n}\n\n","outputs":"1","noerr":0,"x":612,"y":215,"wires":[["6c52ce4c.f5de1","b6da2b96.63b47"]]},{"id":"903ae1b.d7d74a","type":"http in","z":"8da30b71.88029","name":"mega2","url":"/mega2","method":"get","upload":false,"swaggerDoc":"","x":79,"y":262,"wires":[["eee5647a.d606c8","fe837ee4.7f0d7"]]},{"id":"eee5647a.d606c8","type":"function","z":"8da30b71.88029","name":"Mode","func":"msg.payload=msg.payload.m;\nreturn msg; ","outputs":"1","noerr":0,"x":213.20001220703125,"y":288.20001220703125,"wires":[["bd8cd047.ddf27"]]},{"id":"c9571ce8.6f6478","type":"mosca in","z":"8da30b71.88029","mqtt_port":1883,"mqtt_ws_port":8080,"name":"","username":"","password":"","dburl":"","x":124,"y":88,"wires":[[]]},{"id":"db7423.241873e","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","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 » 30 окт 2017, 13:44

По поводу триггера (Если только говорим об одном и том же).
Сделал пример с переключателем, ручной и абстрактный, но зато рабочий.
Этот кусок должен проверять включен свет или нет, и от этого менять логику. Нужен, что бы с однократного нажатия кнопки включать/выключать свет.
[img]
Screenshot_20171030_114215.png
Screenshot_20171030_114215.png (36.26 КБ) 4238 просмотров
[/img]

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

[{"id":"8e89468b.a8c73","type":"switch","z":"33864788.4b6ae","name":"Light is on? status Selector","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"true","vt":"str"},{"t":"cont","v":"false","vt":"str"}],"checkall":"false","outputs":2,"x":425.33331298828125,"y":100.7166748046875,"wires":[["dc536308.ed71b"],["7e93e73a.e54d6"]]},{"id":"dc536308.ed71b","type":"change","z":"33864788.4b6ae","name":" Light on","rules":[{"t":"set","p":"Light_is_on","pt":"flow","to":"true","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":40,"wires":[[]]},{"id":"7e93e73a.e54d6","type":"change","z":"33864788.4b6ae","name":" Light off","rules":[{"t":"set","p":"Light_is_on","pt":"flow","to":"false","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":702.6666259765625,"y":108.51666259765625,"wires":[[]]},{"id":"20920e5b.54d9aa","type":"inject","z":"33864788.4b6ae","name":"","topic":"","payload":"Light_is_on","payloadType":"flow","repeat":"1","crontab":"","once":false,"x":170,"y":320,"wires":[["43142703.bc299"]]},{"id":"43142703.bc299","type":"debug","z":"33864788.4b6ae","name":"Light is on? debag","active":false,"console":"false","complete":"payload","x":710,"y":320,"wires":[]},{"id":"f02af9f6.82d29","type":"inject","z":"33864788.4b6ae","name":"","topic":"","payload":"true","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":40,"wires":[["8e89468b.a8c73"]]},{"id":"2a9274d2.0e77c4","type":"inject","z":"33864788.4b6ae","name":"","topic":"","payload":"false","payloadType":"str","repeat":"","crontab":"","once":false,"x":130,"y":100,"wires":[["8e89468b.a8c73"]]},{"id":"aefc69b5.1015d","type":"switch","z":"33864788.4b6ae","name":"Light is on?","property":"Light_is_on","propertyType":"flow","rules":[{"t":"eq","v":"true","vt":"str"},{"t":"eq","v":"false","vt":"str"}],"checkall":"true","outputs":2,"x":390,"y":240,"wires":[["f4eac14e.95ecf"],["a5b51aa2.35a77"]]},{"id":"f4eac14e.95ecf","type":"debug","z":"33864788.4b6ae","name":"light on debag","active":true,"console":"false","complete":"payload","x":700,"y":200,"wires":[]},{"id":"a5b51aa2.35a77","type":"debug","z":"33864788.4b6ae","name":"light off debag","active":true,"console":"false","complete":"payload","x":700,"y":240,"wires":[]},{"id":"e2e03fa0.70316","type":"inject","z":"33864788.4b6ae","name":"","topic":"","payload":"hellow world","payloadType":"str","repeat":"","crontab":"","once":false,"x":150,"y":240,"wires":[["aefc69b5.1015d"]]}]

Ответить