Yashalta2

 
<<< Back

Node-red

Node-red для новичков от новичка!

Возможно комунибудь пригодятся начальные знания о Node-red. Начальные т.к. я всего как два дня с ним "играюсь"!
"Node-red" предназначен для объединения железа, программных интерфейсов и OnLine сервисов. В основном имеем дело с потоками данных! Если своими словами, как это понимаю я, мы при помощи сервера "Node-red" парсим потоки данных такие как MQTT, HTTP, Bluetooth, Zigbee.

Зачем мне Это надо? Для себя, я нашел ответ в списке поддреживаемых устройств по протоколу "Zigbee" который "Node-Red" предоставляет если установить плагин zigbee2mqtt. https://www.zigbee2mqtt.io/information/supported_d...
Что нужно купить, что бы прошить "USB stick" и "видеть" различные "Zigbee" устройства от разных производителей, вмето того, что бы покупать разные шлюзы для каждого производителя "Zigbee" устройств! см. здесь, в начале ролика https://www.youtube.com/watch?v=9InA6kc6r9s

Mысли вслух: Я не понимаю, почему сервер "Node-Red" не "вшит" в "MajorDomo" по умолчанию?! Правда его установить легко самому.

Итак, ближе к делу!
У меня есть "NodeMCU mini" которую я прошил прошивкой "Tasmota". Как я это делал описано здесь https://connect.smartliving.ru/profile/4623/blog48...
Которая управляется как "HTTP" запросами так и "MQTT". Давайте перехватим их, и поуправляем "NodeMCU" при помощи сервера "Node-red".
Tasmota формирует данные в Json формате и отправляет на "MQTT" сервер под различными топиками.

Если у Вас какое либо "Zigbee" устройство то, либо гуглите, либо ищете даташит устройства и смотрите какой у него топики.
В моем случае идем в консоль и находим необходимые нам данные,
tele/tasmota/SENSOR = {"Time":"2020-07-16T20:39:31","SI7021":{"Temperature":24.6,"Humidity":71.6,"DewPoint":19.1},"TempUnit":"C"}
Здесь видно, что топик который мы хотим парсить это tele/tasmota/SENSOR. в нем необходимая для меня информация о текущей температуре, влажности ну и в нагрузку "точка росы". см. скрин https://ibb.co/V9PBzbY

  1. Из списка узлов в левой стороне находим узел/Node который называется "mqtt in" он находится в рубрике "network" и перетаскиваем его на белый фон. Дважды кликаем по нему и откроется меню настроек
    В открывшемся окне настроек Вам нужно указать см. скрин https://ibb.co/yPXcyKN
    Server - указываем ip адресс где находится "MQTT" сервер в моем случае это "MajorDomo".
    Topik - пишем какой топик парсим, в моем случае это "tele/tasmota/SENSOR".
    Qos - установите, свое значение либо оставьте по дефолту "2"
    Output - оставьте как есть.
    Name - Впишите свое значение.
    дажее жмем кнопку "Done"!
    Готово! Вы научились парсить! Да, Вы не видите, что там парсится но, это сейчас мы легко поправим!
    Нам нужно подключить узел/Node который назвается "debug" он находится в разделе "common" и присоеденить его к нашему первому узелу/Node "mqtt in" далее нажать на кнопку "Deploy". см. скрин https://ibb.co/z8J2ngQ
    И если вы указали правильно все параметры, я про "IP" сервера MQTT" в перовом пункте и указали правильно "топик" то, вы увидите зеленый квадратик символизирующий, что узел "Node-red-а" под названием "mqtt in" успешно подключился к вашему "MQTT" серверу и в окне "debug" вы увидете все перехваченные топики.

Двигаемся дальше! Да, у нас есть данные "Json" формате и хотелось бы как-то работать с ними! А именно вытаскивать данные для температуры, влажности и точку росы.

У нас есть узел/Node который называется "json" и он находится в разделе "parser". Вставляем его между нашими нодами "mqtt in" и "debug" и жмем снова красную кнопку "Deploy". https://ibb.co/zhNQQzq
В результате в окне "debug" вы увидете в данные, разверните их нажав на кнопку в виде стрелочки... Что мы имеем? Данные конвертировались из "Json" формата в строковой формат!

После того как мы конвектировали Json данные в строковой формат мы, при помощи узла "function" пишем функцию которая будет “вытаскивать” только необходимую для нас информацию! Давайте начнем с температуры! см. скрин https://ibb.co/bHBnVPq
В настройках нода "function" пропишите код

var temp = msg.payload.SI7021.Temperature;
msg = { payload:temp };
return msg;

Да, кстати! Для удобства после каждого изменения нажимайте в окне "debug" значек "Мусорная корзина! Это действие будет очищать окно и Вы будете видеть обновленные данные после ваших изменений! см. скрин https://ibb.co/0Y019qw
ТАДАММ! И что мы видем? Мы парсим только значение температуры!

Повторяем шаги после json-на для "влажности" и "точки росы" только немного поправив код для каждого свое немного.
код для влажности

var hum = msg.payload.SI7021.Humidity;
msg = { payload:hum };
return msg;

код для "точки росы"

var dp = msg.payload.SI7021.DewPoint;
msg = { payload:dp };
return msg;

В результате мы имеет такой вид. https://ibb.co/yBtPMkB

Имея данные с нашего датчика хотелось бы это дело оформить! Да, покрасивее, и "Node-Red" это предоставляет!
Для этого нам нужно установить пакет. Идем в меню (три полоски) - "Manage palette". см. скрин https://ibb.co/JyHMSZQ
Откроется другое окно в котором жмем вкладку "Install" - в поисковой строке вводим "dashboard" и выбираем из списка "node-red-dashboard" и жмем кнопку "Install" см. скрин https://ibb.co/hW7HkV1
В результате установки пакета "node-red-dashboard" у Вас появиться новая рубрика под названием dashboard см. скрин https://ibb.co/BsLLBCk
Перетаскиваем узел/Node "gauge" в конец нашей схемы и прикрепляете его к выходу нашей функции указав своейства как на скрине! см. скрин https://ibb.co/NrHWK5d
Поиграйтесь с параметрами такими как "Type" и "Range" и т.п.
Результат Вы можете наблюдать по ссылке http://IP_MQTTсервера:1880/ui в моем случае это http://192.168.18.101:1880/ui
Перейдя по ссылке Вы увидете виджет примерно такой https://ibb.co/s17zjBQ
Проделав теже самые шаги для влажности и точки росы у вас в результате будет примерно так. https://ibb.co/Fzj70QJ

Если у Вас, что то не получилось не беда! Ниже код котрый автоматом загрузит все выше породеланные шаги, Вам только нужно будет поправить "IP" адрес сервера MQTT смотри первый пункт.
Просто импортируем код, либо файл https://ibb.co/6mm4NF4
и вставляем код https://ibb.co/tBcTG5T
код

[{"id":"38985cbe.d89514","type":"mqtt in","z":"8a6f0087.7f564","name":"","topic":"tele/tasmota/SENSOR","qos":"2","datatype":"auto","broker":"ad922337.edb3d","x":120,"y":160,"wires":[["445b69ee.147dd8"]]},{"id":"445b69ee.147dd8","type":"json","z":"8a6f0087.7f564","name":"","property":"payload","action":"","pretty":false,"x":310,"y":160,"wires":[["5c2d4f2.fdfccb","3728086.d2c81f8","3e5f0e72.a053a2"]]},{"id":"5c2d4f2.fdfccb","type":"function","z":"8a6f0087.7f564","name":"Temperatur","func":"var temp = msg.payload.SI7021.Temperature;\nmsg = { payload:temp };\nreturn msg;","outputs":1,"noerr":0,"x":470,"y":120,"wires":[["4293ef00.3a693","b6c70f3d.58181"]]},{"id":"3728086.d2c81f8","type":"function","z":"8a6f0087.7f564","name":"Humidity","func":"var hum = msg.payload.SI7021.Humidity;\nmsg = { payload:hum };\nreturn msg;","outputs":1,"noerr":0,"x":460,"y":160,"wires":[["45d3af2.1f6ad5","a889d66.9f81728"]]},{"id":"3e5f0e72.a053a2","type":"function","z":"8a6f0087.7f564","name":"DewPoint","func":"var dp = msg.payload.SI7021.DewPoint;\nmsg = { payload:dp };\nreturn msg;","outputs":1,"noerr":0,"x":460,"y":200,"wires":[["160c10a2.6fc37f","a7a9ea38.24a2a8"]]},{"id":"4293ef00.3a693","type":"ui_gauge","z":"8a6f0087.7f564","name":"","group":"fd5bdfd1.1b6","order":0,"width":0,"height":0,"gtype":"gage","title":"Temperature","label":"C","format":"","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":690,"y":60,"wires":[]},{"id":"45d3af2.1f6ad5","type":"ui_gauge","z":"8a6f0087.7f564","name":"","group":"fd5bdfd1.1b6","order":0,"width":0,"height":0,"gtype":"gage","title":"Humidity","label":"","format":"","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":680,"y":160,"wires":[]},{"id":"160c10a2.6fc37f","type":"ui_gauge","z":"8a6f0087.7f564","name":"","group":"fd5bdfd1.1b6","order":2,"width":0,"height":0,"gtype":"wave","title":"DewPoint","label":"","format":"","min":0,"max":"30","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":680,"y":260,"wires":[]},{"id":"b6c70f3d.58181","type":"debug","z":"8a6f0087.7f564","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":690,"y":100,"wires":[]},{"id":"a889d66.9f81728","type":"debug","z":"8a6f0087.7f564","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":690,"y":200,"wires":[]},{"id":"a7a9ea38.24a2a8","type":"debug","z":"8a6f0087.7f564","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":690,"y":300,"wires":[]},{"id":"ad922337.edb3d","type":"mqtt-broker","z":"","name":"MajorDomo","broker":"192.168.18.101","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"fd5bdfd1.1b6","type":"ui_group","z":"","name":"Default","tab":"d4bb676d.944d58","order":1,"disp":true,"width":"6","collapse":false},{"id":"d4bb676d.944d58","type":"ui_tab","z":"","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]

В инете полно готовых решений выложенных в виде файла, либо ввиде кода! Просто прогуглите по вашему девайсу...
К примеру я так нашел для совей "NodMCU" прошитой "Tasmota" этот код https://flows.nodered.org/flow/a4ddead2a9f502db14d...
немного подправив его под себя и свое количество подключеных реле, я получил это https://ibb.co/DRWmyPd
И все это интерактивное! Не нужно обновлять страницу, что бы обновились данные!!!
И думаю, что нужно объяснять как эти ссылки на виджеты легко прикрутить к "MD".

Уфф, тут писать дольше чем реализовать в "Node-red" выше сказанное!

Подводя итог, моего поверхностного изучения "Node-red" я уверен, что он пропишется у меня в "MajorDomo" на постоянку! По ресурсам он не отсвечивает! Его ставят на "Rasperry PI Zerro".
"Node-red" это не просто красивые виджиты, он реально расширяет возможности девайсов! К примеру вот ссылка на пример реализации виджета который демонстрирует уровень заряда батареек в "Zigbee" уcтройствах! https://notenoughtech.com/home-automation/zigbee-l...
Как говорит автор, на некоторых устройствах нет функции маниторинга батарейки... Но, у нас ведь "Node-red"!

Discuss (7) (6)

See also:
2021-07-03 Ngrok - получаем доступ к web странице MajorDoMo
2020-07-06 NodeMCU прошиваем Tasmota и подключаем к MD.
2020-04-08 MD на Proxmox!
2020-03-20 Нейронные цветочки (допилено "API"!)

Yashalta, Россия

На форуме: Yashalta