Fork me on GitHub

Node-RED - графический конструктор «Умного Дома»

Node-RED — это инструмент с открытым исходным кодом, который позволяет создавать приложения полностью в графическом редакторе без написания какого-либо кода, просто соединяя готовые компоненты. Компоненты это предварительно прописанные части кода, выполняющие желаемое действие, например взаимодействие с внешними устройствами, онлайн-службы и т.д. Для связи компонентов друг с другом используются графические линии связи, по которым пересылаются данные между узлами. Связывать различные блоки можно просто мышкой и при этом не иметь каких-либо особых навыков в программировании. Когда есть идея, но лень писать код, то в первую очередь стоит вспомнить о Node-RED и подобных инструментах. Ну а если идея взлетит, то при желании код всегда можно дописать потом.

Разработка в Node-RED ведется через обыкновенный браузер, само приложение можно запустить на различных платформах – PC, Raspberry Pi, в облаке и т.д.

ДЕМО

На рисунке ниже Node-RED читает сообщения Твиттера на тему футбола, пропускает только сообщения в кодировке ASCII и с длиной более 99 символов, анализирует тональность текста и периодически выводит всё это дело на устройство с поддержкой протокола MQTT, разработанное в предыдущем материале. Красные лампочки указывают на грустные сообщения Твиттера, синие на радостные.

Каждое приложение Node-RED можно импортировать и экспортировать в формате JSON. Собственно по такому случаю прилагается файл football.sentiment.mqtt.json для быстрого импорта проекта как на картинке. После импорта нужно авторизовать Node-RED через Ваш твиттер аккаунт — двойной щелчок по узлу «twitter» и т.п. Для активации сценария нажать «Deploy» и в окне отладки Node-RED справа начнут появляться интересующие сообщения с Твиттера. Магия да и только !

screenshot

Слева в редакторе Node-RED находится список возможных компонентов. На рисунке узел «twitter» является источником данных, а в конечном счёте модифицированные и отфильтрованные данные отсылаются в MQTT топик proiot3/cmd/ledisp. Зелёный компонент справа нужен только для удобной отладки приложения, его можно спокойно отключить или добавить других таких же в другие узлы.

Данные Node-RED передается от узла к узлу в виде JavaScript объекта под названием msg (совсем уж без программирования всё же не обойтись). У этого объекта есть обязательный атрибут msg.payload (полезная нагрузка), он хранит основное значение, которое необходимо передать, в нашем случае это текст сообщения с твиттера. Значение может быть любого типа, который поддерживается в JavaScript, т.е. время, число, строка, json, другой JavaScript объект и т.д. Помимо msg.payload атрибута к msg компоненты могут добавлять другие атрибуты, например узел «sentiment» добавляет атрибут msg.sentiment.score – число, характеризующее тональность текста. Исходя из значения этого числа узел «switch» осуществляет ветвление.

Пару слов про регулярные выражения. Нас интересует только текст ASCII с длиной 99 и более символов. С этой задачей справляется регулярное выражение вида ^[\x20-\x7e]{99,}$ в узле с именем «ascii 99+».

Для случаев, когда без программирования всё же не обойтись, предусмотрен компонент «Function» – функция на языке JavaScript, которая получает msg объект как параметр и должна вернуть уже свой msg.

Ещё в Node-RED предусмотрена возможность создавать свои библиотеки сценариев. Для этого создается Subflow, где есть возможность задать входные и выходные точки и прописать желаемый сценарий. Subflow можно использовать в других сценариях как отдельный компонент. Большое количество уже готовых к использованию библиотек, поддерживаемых сообществом, можно найти и установить с официального сайта flows.nodered.org.

Comments !

links

social