Node-RED — графический конфигуриратор для интернета вещей

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

Данное решение удобно как промежуточное для связи устройств различного типа между собой и/или же с системой автоматизации или, например, СУБД или иным облаком. С использованием дополнительных пакетов Node-RED можно использовать для создания простых систем автоматизации умного дома, но решение будет относительно ограниченных ввиду неполного покрытия функциональных потребностей умного дома.

Node-RED работает на Node.JS, и был разработан для работы на относительно малопроизводительных системах, таких как:

С учётом озвученных факторов Node-RED удобно использовать на шлюзах между различными сетями устройств интернета вещей функционирующих на собственных, как правило, более простых протоколах и традиционным интернетом, построенных на TCP/IP, UDP. В этом случае он позволит более оптимально использовать свободные ресурсы шлюза, работающего, как правило, на Linux.

Основные моменты Node-RED, такие как установка, запуск, конфигурация представлены в основной документации.

Рассмотрим практическую реализацию на базе примера обработки посылки в TCP порт. После запуска сервера графический интерфейс будет доступ по http://localhost:1880/. Интерфейс предельно простой — по левому краю приведены доступные блоки, которые можно перетащить в центральное поле и связать их , справа — консоль отладки и вывода вспомогательной информации. Отмечу, что работает поиск по доступным блокам, что значительно упрощает выбор необходимого блока.

Соберём следующую схему:

Node-RED-TCP
Схема тестовой конфигурации

Здесь: input:TCP (tcp:5555) — блок обработки информации с порта, output:TCP (msg) — блок отправки посылки в порт, output:debug (msg.payload) — вывод информации в отладочную консоль. Основным обработчиков в данном случае является функция (блок function:function персикового цвета с «f»):

msg.payload = ‘My Answer: «‘ + msg.payload.toString()+ ‘»‘;
// Return the message so it can be sent on
return msg;

Полный код конфигурации:

[{«id»:»96b19916.be623″,»type»:»tcp in»,»z»:»db80b9ab.c98788″,»name»:»»,»server»:»server»,»host»:»»,»port»:»5555″,»datamode»:»stream»,»datatype»:»buffer»,»newline»:»»,»topic»:»»,»base64″:false,»x»:193,»y»:112,»wires»:[[«8e144964.bbcbd»,»b87a16bc.66dad»]]},{«id»:»8e144964.bbcbd»,»type»:»debug»,»z»:»db80b9ab.c98788″,»name»:»»,»active»:true,»console»:»false»,»complete»:»payload»,»x»:500,»y»:116,»wires»:[]},{«id»:»80a4e672.9618b»,»type»:»tcp out»,»z»:»db80b9ab.c98788″,»host»:»»,»port»:»5555″,»beserver»:»reply»,»base64″:false,»end»:true,»name»:»msg»,»x»:517,»y»:274,»wires»:[]},{«id»:»b87a16bc.66dad»,»type»:»function»,»z»:»db80b9ab.c98788″,»name»:»»,»func»:»//\nmsg.payload = ‘My Answer: \»‘ + msg.payload.toString()+ ‘\»‘;\n// Return the message so it can be sent on\n\nreturn msg;»,»outputs»:1,»noerr»:0,»x»:338,»y»:273,»wires»:[[«80a4e672.9618b»]]}]

Импортировать его можно через меню в верхнем правом. Аналогичным же образом можно получить и код из графически собранной схемы, выделив необходимую её часть (после этого пункт Export станет активным).

Node-RED burger menu

После того как будет собрана схема её необходимо развернуть для исполнения на сервере. Для этого используется соответствующая кнопка Deploy, см. рисунок выше.

Для обработки на стороне ПК (или другой внешней системы) будем использовать следующий скрипт на Python. Он открывает сокет на нужном порту, шлёт в него сообщение и принимает ответ от Node-RED.

import socket

TCP_IP = ‘127.0.0.1’
TCP_PORT = 5555
BUFFER_SIZE = 1024
MESSAGE = u»Hello, World!»

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE.encode(«utf-8»))
print(‘sended data: «‘ + MESSAGE + ‘»‘)
data = s.recv(BUFFER_SIZE)
s.close()
answer = «received data: « + data.decode(«utf-8»)
print(answer)

Если всё пойдёт правильно, то в консоли Python мы получим следующие сообщения:

sended data: «Hello, World!»
received data: My Answer: «Hello, World!»

в консоли Node-RED примерно следующее:

4 Jul 17:07:18 — [info] [debug:55ee948d.6cef6c] Hello, World!

и в отладочном окне в web-интерфейсы Node-RED:

04.07.2016, 17:07:18    55ee948d.6cef6c
msg.payload : string [13]
Hello, World!

Как было показано в данной статье Node-RED удобно использовать для настройки правил взаимодействия между устройствами IoT. Графический конфигуратор значительно упрощает разработку и повышает наглядность функционирования системы.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s