NEWS
Node red
-
Всё я уже голову сломал…
Запости здесь ВСЮ цепочку. Телефон и пин в личку.
Я не могу по отдельным цепочкам догадыватся, что где выводиться. Уходит ОЧЕНЬ много времени. `
[{"id":"b7d37336.482c9","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":92,"y":81,"z":"865a081c.79a5f8","wires":[["b614a670.49eb58"]]},{"id":"b614a670.49eb58","type":"function","name":"Авторизация","func":"msg.sessionid = context.global.sessionid;\n msg.headers = {\n 'Host': 'www.sistemagorod.ru',\n 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',\n 'Accept': '*/*',\n 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',\n 'Accept-Encoding': 'gzip, deflate',\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n 'X-Requested-With': 'XMLHttpRequest',\n 'Referer': 'https://www.sistemagorod.ru/lk/',\n 'Cookie': 'JSESSIONID='+ msg.sessionid,\n 'Connection': 'keep-alive',\n 'Pragma': 'no-cache',\n 'Cache-Control': 'no-cache'\n }\n \n\n var url= \"https://www.sistemagorod.ru/lk/auth?type-auth=phone&answer-captcha=&phone=xxx&pin=xxx\";\n\nmsg.url = url;\nreturn msg;","outputs":1,"valid":true,"x":128.55555725097656,"y":152.11111450195312,"z":"865a081c.79a5f8","wires":[["ef96486b.1069b8"]]},{"id":"ef96486b.1069b8","type":"http request","name":"","method":"POST","ret":"txt","url":"","x":284.7778015136719,"y":153.2222137451172,"z":"865a081c.79a5f8","wires":[["ad6096b4.529f68","62c44e09.9d3bb","a452cdcd.5bad3"]]},{"id":"62c44e09.9d3bb","type":"debug","name":"SessionId","active":true,"console":"false","complete":"payload","x":602.333366394043,"y":37.33333778381348,"z":"865a081c.79a5f8","wires":[]},{"id":"44e90f84.bb16f","type":"debug","name":"SessionId2","active":true,"console":"false","complete":"payload","x":445.5555191040039,"y":243.33333206176758,"z":"865a081c.79a5f8","wires":[]},{"id":"ad6096b4.529f68","type":"debug","name":"","active":true,"console":"false","complete":"true","x":602.5555419921875,"y":209,"z":"865a081c.79a5f8","wires":[]},{"id":"a452cdcd.5bad3","type":"function","name":"sessionid2","func":"\n//var obj = { \"topic\": \"\", \"payload\": \"\\r\\n<response>\\r\\n <state>ok</state>\\r\\n</response>\\r\\n\\r\\n\", \"_msgid\": \"c27391e4.3d8c7\", \"sessionid\": \"6E14E8C7BF3AFDE8E63FBF0EA015BFB4\", \"headers\": { \"date\": \"Sun, 24 May 2015 17:59:17 GMT\", \"server\": \"Apache/2.4.7 (Ubuntu)\", \"content-length\": \"88\", \"set-cookie\": [ \"JSESSIONID=6385A1C965987A3FAA6131DD153D2EE1; Path=/lk/; Secure; HttpOnly\" ], \"keep-alive\": \"timeout=5, max=100\", \"connection\": \"Keep-Alive\", \"content-type\": \"text/plain\" }, \"url\": \"https://www.sistemagorod.ru/lk/auth?type-auth=phone&answer-captcha=&phone=xxxx&pin=xxxx\", \"statusCode\": 200 };\nvar obj = msg.payload;\nvar cookies = obj.headers[\"set-cookie\"][0];\nvar m = cookies.match(/JSESSIONID=([\\w\\d]*)/);\nif (m) {\n msg.payload = m[1];\n return msg;\n}\n\n\n","outputs":"1","valid":true,"x":235.55560302734375,"y":284.2221984863281,"z":"865a081c.79a5f8","wires":[["44e90f84.bb16f","7a9fda5d.856024"]]},{"id":"7a9fda5d.856024","type":"debug","name":"SessionId2","active":true,"console":"false","complete":"true","x":446.66667556762695,"y":292.22221755981445,"z":"865a081c.79a5f8","wires":[]}]
-
:roll:
-
Ты запостил не ВЕСЬ flow. Авторизации не было.
[{"id":"b2457b04.4dba88","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":110,"y":142,"z":"a3d5aaa9.5c2a58","wires":[["a4b814e9.5b47e8"]]},{"id":"a4b814e9.5b47e8","type":"http request","name":"","method":"GET","ret":"txt","url":"https://www.sistemagorod.ru/lk/","x":430,"y":143,"z":"a3d5aaa9.5c2a58","wires":[["673656c9.98c9a8","892e892.f76d178"]]},{"id":"8aebf8b1.751408","type":"http request","name":"","method":"POST","ret":"txt","url":"","x":429,"y":207,"z":"a3d5aaa9.5c2a58","wires":[["f398e11c.0c672","2e09ba5d.d1f646"]]},{"id":"6d01402.f92fec","type":"http request","name":"","method":"GET","ret":"txt","url":"","x":428,"y":284,"z":"a3d5aaa9.5c2a58","wires":[["3d2f1fc5.c2d0e","7138683e.8ec798"]]},{"id":"f398e11c.0c672","type":"function","name":"Get \"indications\"","func":"if (msg.payload.indexOf('>ok<') != -1) {\n\tmsg.payload = '';\n\tvar parts = msg.headers['set-cookie'][0].split(';');\n\t\n\tmsg.headers = {\n\t 'Host': 'www.sistemagorod.ru',\n\t 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',\n\t 'Accept': '*/*',\n\t 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',\n\t 'Accept-Encoding': '',\n\t 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t 'X-Requested-With': 'XMLHttpRequest',\n\t 'Referer': 'https://www.sistemagorod.ru/lk/',\n\t 'Cookie': parts[0],\n\t 'Connection': 'keep-alive',\n\t 'Pragma': 'no-cache',\n\t 'Cache-Control': 'no-cache'\n\t};\n\t\n\t//msg.headers.Cookie = msg.headers[0]['set-cookie'],\n\tmsg.url = \"https://www.sistemagorod.ru/lk/indications\";\n\treturn msg;\n}\n","outputs":1,"x":236,"y":284,"z":"a3d5aaa9.5c2a58","wires":[["6d01402.f92fec"]]},{"id":"3d2f1fc5.c2d0e","type":"debug","name":"","active":true,"console":"false","complete":"true","x":636,"y":284,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"673656c9.98c9a8","type":"debug","name":"","active":true,"console":"false","complete":"true","x":632,"y":144,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"2e09ba5d.d1f646","type":"debug","name":"","active":true,"console":"false","complete":"true","x":633,"y":207,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"892e892.f76d178","type":"function","name":"Authenticate","func":"msg.url='https://www.sistemagorod.ru/lk/auth?type-auth=phone&answer-captcha=&phone=xxx&pin=yyyy'\nreturn msg;","outputs":1,"x":257,"y":207,"z":"a3d5aaa9.5c2a58","wires":[["8aebf8b1.751408"]]},{"id":"9d88bc37.62774","type":"debug","name":"","active":true,"console":"false","complete":"payload","x":416,"y":381,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"7138683e.8ec798","type":"function","name":"Extract values","func":"var m = msg.payload.match(/data-previos-reading=\"([\\d.]*)\"/g);\nmsg.payload = [];\nif (m) {\n\tfor (var i = 0; i < m.length; i++) {\n\t\tvar parts = m[i].split('=\"');\n\t\tif (parts.length == 2) {\n\t\t msg.payload.push(parts[1].replace('\"', ''));\n\t\t}\n\t}\n}\nreturn msg;","outputs":1,"x":241,"y":382,"z":"a3d5aaa9.5c2a58","wires":[["9d88bc37.62774"]]}]
Ещё была ошибка, что "'Accept-Encoding': 'gzip, deflate',"
И поэтому ты получал зазипованный ответ.
Я довел до ответа
[ "375", "7", "7", "1.351" ]
Дальше сам.
-
Ты запостил не ВЕСЬ flow. Авторизации не было.
[{"id":"b2457b04.4dba88","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":110,"y":142,"z":"a3d5aaa9.5c2a58","wires":[["a4b814e9.5b47e8"]]},{"id":"a4b814e9.5b47e8","type":"http request","name":"","method":"GET","ret":"txt","url":"https://www.sistemagorod.ru/lk/","x":430,"y":143,"z":"a3d5aaa9.5c2a58","wires":[["673656c9.98c9a8","892e892.f76d178"]]},{"id":"8aebf8b1.751408","type":"http request","name":"","method":"POST","ret":"txt","url":"","x":429,"y":207,"z":"a3d5aaa9.5c2a58","wires":[["f398e11c.0c672","2e09ba5d.d1f646"]]},{"id":"6d01402.f92fec","type":"http request","name":"","method":"GET","ret":"txt","url":"","x":428,"y":284,"z":"a3d5aaa9.5c2a58","wires":[["3d2f1fc5.c2d0e","7138683e.8ec798"]]},{"id":"f398e11c.0c672","type":"function","name":"Get \"indications\"","func":"if (msg.payload.indexOf('>ok<') != -1) {\n\tmsg.payload = '';\n\tvar parts = msg.headers['set-cookie'][0].split(';');\n\t\n\tmsg.headers = {\n\t 'Host': 'www.sistemagorod.ru',\n\t 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',\n\t 'Accept': '*/*',\n\t 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',\n\t 'Accept-Encoding': '',\n\t 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n\t 'X-Requested-With': 'XMLHttpRequest',\n\t 'Referer': 'https://www.sistemagorod.ru/lk/',\n\t 'Cookie': parts[0],\n\t 'Connection': 'keep-alive',\n\t 'Pragma': 'no-cache',\n\t 'Cache-Control': 'no-cache'\n\t};\n\t\n\t//msg.headers.Cookie = msg.headers[0]['set-cookie'],\n\tmsg.url = \"https://www.sistemagorod.ru/lk/indications\";\n\treturn msg;\n}\n","outputs":1,"x":236,"y":284,"z":"a3d5aaa9.5c2a58","wires":[["6d01402.f92fec"]]},{"id":"3d2f1fc5.c2d0e","type":"debug","name":"","active":true,"console":"false","complete":"true","x":636,"y":284,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"673656c9.98c9a8","type":"debug","name":"","active":true,"console":"false","complete":"true","x":632,"y":144,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"2e09ba5d.d1f646","type":"debug","name":"","active":true,"console":"false","complete":"true","x":633,"y":207,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"892e892.f76d178","type":"function","name":"Authenticate","func":"msg.url='https://www.sistemagorod.ru/lk/auth?type-auth=phone&answer-captcha=&phone=xxx&pin=yyyy'\nreturn msg;","outputs":1,"x":257,"y":207,"z":"a3d5aaa9.5c2a58","wires":[["8aebf8b1.751408"]]},{"id":"9d88bc37.62774","type":"debug","name":"","active":true,"console":"false","complete":"payload","x":416,"y":381,"z":"a3d5aaa9.5c2a58","wires":[]},{"id":"7138683e.8ec798","type":"function","name":"Extract values","func":"var m = msg.payload.match(/data-previos-reading=\"([\\d.]*)\"/g);\nmsg.payload = [];\nif (m) {\n\tfor (var i = 0; i < m.length; i++) {\n\t\tvar parts = m[i].split('=\"');\n\t\tif (parts.length == 2) {\n\t\t msg.payload.push(parts[1].replace('\"', ''));\n\t\t}\n\t}\n}\nreturn msg;","outputs":1,"x":241,"y":382,"z":"a3d5aaa9.5c2a58","wires":[["9d88bc37.62774"]]}]
Ещё была ошибка, что "'Accept-Encoding': 'gzip, deflate',"
И поэтому ты получал зазипованный ответ.
Я довел до ответа
[ "375", "7", "7", "1.351" ]
Дальше сам. `
Воу! Спасибо большое!
-
Ещё была ошибка, что "'Accept-Encoding': 'gzip, deflate',"
И поэтому ты получал зазипованный ответ.
Дальше сам. `
Я все воскресенье убил, вроде что то получатся начало но на выходе кракозябры… теперь понятно в чем ошибка.
-
Как в node red завести данные датчиков? Выбираю в input IoBroker, переменная передается только когда значение изменяется. Мне нужно получить доступ к текущим показаниям датчика, как эти данные поместить в функцию во время выполения скрипта?
- еще если переменная изменяется то она запускает скрипт который после этой переменной
-
Как в node red завести данные датчиков? Выбираю в input IoBroker, переменная передается только когда значение изменяется. Мне нужно получить доступ к текущим показаниям датчика, как эти данные поместить в функцию во время выполения скрипта?
- еще если переменная изменяется то она запускает скрипт который после этой переменной `
Никак. В этом вся проблема node-red. Он stateless и event triggered.
Можно только через хак и сохранять значения в context.global (http://nodered.org/docs/writing-functions.html)
- еще если переменная изменяется то она запускает скрипт который после этой переменной `
-
Как в node red завести данные датчиков? Выбираю в input IoBroker, переменная передается только когда значение изменяется. Мне нужно получить доступ к текущим показаниям датчика, как эти данные поместить в функцию во время выполения скрипта?
- еще если переменная изменяется то она запускает скрипт который после этой переменной `
Никак. В этом вся проблема node-red. Он stateless и event triggered.
Можно только через хак и сохранять значения в context.global (http://nodered.org/docs/writing-functions.html) `
Ок. Будем делать через глобальные.msg.Hot_curr = h.substring(0, h.length - 2); выдает ошибку TypeError: Object 722 has no method 'substring' (line 4, col 19)
Как обрезать последние два символа в значении?
PS Посоветуй литературу почитать по Node red'у
- еще если переменная изменяется то она запускает скрипт который после этой переменной `
-
Пока сделал так:
var h = context.global.Hot_curr; h = '' + h; msg.Hot_curr = h.substr(0, h.length - 2); var c = context.global.Cold_curr; c = '' + c; msg.Cold_curr = c.substr(0, c.length - 2)
-
Пока сделал так:
var h = context.global.Hot_curr; h = '' + h; msg.Hot_curr = h.substr(0, h.length - 2); var c = context.global.Cold_curr; c = '' + c; msg.Cold_curr = c.substr(0, c.length - 2)
`
Ну в принципе именно так:var h = context.global.Hot_curr.toString(); msg.Hot_curr = h.substr(0, h.length - 2);
-
Как происходит взаимодействие из нодрэда с другими драйверами?
Например как из нодреда отправить сообщение Pushover.
721_fenster_tuer.jpg
721_cultuer.jpg
721_zwischenstecker.jpg
721_direktverbindung.jpg
721_wandthermostat.jpg -
Написал условие, переменная меняет свое состояние но клиенту mqtt не уходит команда, что я делаю не так?
[{"id":"acda5939.5325a8","type":"ioBroker in","name":"myhome/Bathroom/Humidity_room","topic":"mqtt.0.myhome.Bathroom.Humidity_room","payloadType":"value","x":167,"y":131,"z":"865a081c.79a5f8","wires":[["20e9eada.df1616","207b73cb.df848c"]]},{"id":"ffc2e396.003d2","type":"ioBroker out","name":"myhome/Bathroom/Ventilator","topic":"mqtt.0.myhome.Bathroom.Ventilator","ack":"true","autoCreate":"false","x":677,"y":139,"z":"865a081c.79a5f8","wires":[]},{"id":"20e9eada.df1616","type":"debug","name":"","active":true,"console":"false","complete":"false","x":328,"y":292,"z":"865a081c.79a5f8","wires":[]},{"id":"207b73cb.df848c","type":"function","name":"","func":"if (msg.payload > 56){\n msg.payload = 1;\n}\nelse {\n msg.payload = 0;\n}\nreturn msg;","outputs":1,"valid":true,"x":431,"y":127,"z":"865a081c.79a5f8","wires":[["9fe832be.6017d","ffc2e396.003d2"]]},{"id":"9fe832be.6017d","type":"debug","name":"1111111111111111","active":true,"console":"false","complete":"payload","x":609,"y":219,"z":"865a081c.79a5f8","wires":[]}]
-
Написал условие, переменная меняет свое состояние но клиенту mqtt не уходит команда, что я делаю не так? `
Понял в чем была ошибка, нужно было в выводе поставить не value а command.Возникает следующий вопрос.
Как написать чтобы данные отсылались только один раз при срабатывание условия а не постоянно слались на клиента?
приведенный код срабатывает только раз т.к. flag постоянно устанавливается в 0. В ардуино хорошо можно при инициализации объявить переменные, а как поступить в нодред?
var flag = 0; if (msg.payload > 56 && flag === 0){ msg.payload = 1; var flag = 1; return msg; } else if (msg.payload < 56 && flag === 1){ msg.payload = 0; var flag = 0; return msg; }
-
Написал условие, переменная меняет свое состояние но клиенту mqtt не уходит команда, что я делаю не так? `
Понял в чем была ошибка, нужно было в выводе поставить не value а command.Возникает следующий вопрос.
Как написать чтобы данные отсылались только один раз при срабатывание условия а не постоянно слались на клиента?
приведенный код срабатывает только раз т.к. flag постоянно устанавливается в 0. В ардуино хорошо можно при инициализации объявить переменные, а как поступить в нодред?
var flag = 0; if (msg.payload > 56 && flag === 0){ msg.payload = 1; var flag = 1; return msg; } else if (msg.payload < 56 && flag === 1){ msg.payload = 0; var flag = 0; return msg; } ```` `
Поменяй на
if (context.global.flag === undefined) { context.global.flag = msg.payload > 56; } if (msg.payload > 56 && !context.global.flag){ msg.payload = 1; context.global.flag= true; return msg; } else if (msg.payload < 56 && context.global.flag){ msg.payload = 0; context.global.flag= false; return msg; }
-
Поменяй на
if (context.global.flag === undefined) { context.global.flag = msg.payload > 56; } if (msg.payload > 56 && !context.global.flag){ msg.payload = 1; context.global.flag= true; return msg; } else if (msg.payload < 56 && context.global.flag){ msg.payload = 0; context.global.flag= false; return msg; } ```` `
Спасибо заработало. Вчера начинал уже мудрить с глобальными переменными, думал может есть другой способ.
Как из нодреда отправить сообщение на Pushover?
-
Как происходит взаимодействие из нодрэда с другими драйверами?
Например как из нодреда отправить сообщение Pushover. `
Так и не понял как отправить сообщение. Или только через javascript? -
Ну в принципе именно так:
var h = context.global.Hot_curr.toString(); msg.Hot_curr = h.substr(0, h.length - 2); ```` `
Вроде работал код, сегодня решил проверить ругается на toString. Было обновление?
Добавлено:
Нодред не подхватывает значения счетчиков воды.
От электросчетчика подхватывает.
! ````
[{"id":"249fe99a.db6016","type":"debug","name":"","active":true,"console":"false","complete":"true","x":701,"y":802,"z":"2c2981e2.d3d67e","wires":[]},{"id":"4ad0b93e.b52f48","type":"function","name":"Текущие показания Холодной воды","func":"context.global.Cold_curr = msg.payload.val;\nreturn msg;","outputs":1,"valid":true,"x":426,"y":789,"z":"2c2981e2.d3d67e","wires":[["249fe99a.db6016"]]},{"id":"c6b46d56.394b9","type":"function","name":"Текущие показания Горячей воды","func":"context.global.Hot_curr = msg.payload.val;\nreturn msg;","outputs":1,"valid":true,"x":420,"y":846,"z":"2c2981e2.d3d67e","wires":[["249fe99a.db6016"]]},{"id":"4c6b878d.b39478","type":"ioBroker in","name":"myhome/Mother/Electro_counter","topic":"mqtt.0.myhome.Mother.Electro_counter","payloadType":"value","x":134,"y":904,"z":"2c2981e2.d3d67e","wires":[["269c6eea.d96392"]]},{"id":"269c6eea.d96392","type":"function","name":"Текущие показания Электросчетчика","func":"context.global.Electro_curr = msg.payload;\nreturn msg;","outputs":1,"valid":true,"x":436,"y":904,"z":"2c2981e2.d3d67e","wires":[[]]},{"id":"fca376ea.035c88","type":"ioBroker in","name":"myhome/Bathroom/Cold_water","topic":"mqtt.0.myhome.Bathroom.Cold_water","payloadType":"value","x":128.5,"y":789,"z":"2c2981e2.d3d67e","wires":[["4ad0b93e.b52f48"]]},{"id":"3729a205.c8d65e","type":"ioBroker in","name":"myhome/Bathroom/Hot_water","topic":"mqtt.0.myhome.Bathroom.Hot_water","payloadType":"value","x":126,"y":846,"z":"2c2981e2.d3d67e","wires":[["c6b46d56.394b9"]]}]Добавлено: Чудеса, сегодня все работает ок.
-
Как через Node red создать переменную в iobrokere?
-
Node red вообще заглючил.
Завис на http reqest.
Код не подсвечивает.
Перезапустил в логе ошибки
! node-red-0 2015-06-17 10:49:38 warn
! node-red-0 2015-06-17 10:49:38 warn 17 Jun 10:49:36 - [warn] –----------------------------------------
! node-red-0 2015-06-17 10:49:38 warn
! node-red-0 2015-06-17 10:49:38 warn 17 Jun 10:49:36 - [warn] [redisout] Error: Cannot find module 'redis'
! node-red-0 2015-06-17 10:49:38 warn
! node-red-0 2015-06-17 10:49:38 warn 17 Jun 10:49:36 - [warn] [tail] Info : Currently not supported on Windows.
! node-red-0 2015-06-17 10:49:38 warn 17 Jun 10:49:36 - [warn] [rpi-gpio] Info : Ignoring Raspberry Pi specific node.
! node-red-0 2015-06-17 10:49:38 warn 17 Jun 10:49:36 - [warn] [arduino] Error: Cannot find module 'arduino-firmata'
! node-red-0 2015-06-17 10:49:38 warn
! node-red-0 2015-06-17 10:49:38 warn 17 Jun 10:49:36 - [warn] –----------------------------------------
! node-red-0 2015-06-17 10:49:36 warn
! node-red-0 2015-06-17 10:49:36 warn js-bson: Failed to load c++ bson extension, using pure JS version
! node-red-0 2015-06-17 10:49:36 warn js-bson: Failed to load c++ bson extension, using pure JS version
! node-red-0 2015-06-17 10:49:36 warn
! node-red-0 2015-06-17 10:49:36 warn js-bson: Failed to load c++ bson extension, using pure JS version
! node-red-0 2015-06-17 10:49:34 warn
! node-red-0 2015-06-17 10:49:34 warn js-bson: Failed to load c++ bson extension, using pure JS version -
Как через Node red создать переменную в iobrokere? `
Возник тот же вопрос.В корне получается создать (пример test) , а вот чтобы добавить сразу топик нет (пример stat/test)
И вообще где можно почитать про создание переменных "для чайников" в iobroker?