Node-Red — это инструмент для потокового программирования с малым количеством кода, основанный на Node.js и первоначально разработанный IBM (в настоящее время OpenJS Foundation) в начале 2013 года.
Многие устройства IoT поставляются с предварительно установленным Node-Red или просто поддерживают Node-Red. Также почти все облачные сервисы содержат Node-Red.
1. Скачать
Прежде чем мы перейдем к Node-Red, нам нужно скачать Node.js. После этого запустите эту команду из своего терминала:
sudo npm install -g --unsafe-perm node-red
Для докера выполните эту команду:
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
2. Привет, мир
Если вы изучаете новый язык программирования или новый фреймворк, то неизбежно напишете «Hello World» в первый раз. Итак, давайте начнем.
Если вы загрузили Node-Red с помощью npm, напишите «node-red» в терминал. После инициализации Node-Red откройте свой любимый браузер и перейдите на «localhost:1880».
Это экран, когда вы вводите адрес. На зеленой части, конечно, ничего не будет. С левой стороны это узлы, которые вы можете использовать. В средней области находятся ваши узлы, просто перетащите их с левой стороны в поток. С правой стороны вы можете увидеть результаты отладчика, информацию об узлах и справку о выбранном узле. Перетащите узел ввода, узел отладки и узел функции на часть потока.
Подключите узлы, щелкнув и удерживая мышь между выходным портом инъекции и входным портом функции. Сделайте то же самое для функции и узла отладки. Дважды щелкните узел инъекции и увидите окно, открытое с правой стороны.
Вот как в основном работает Node-Red: он отправляет объект msg через узлы, а узел внедрения запускает эти действия. Как видите, он добавляет ключи и значения «полезная нагрузка» и «тема» по умолчанию, но вы можете добавить столько, сколько хотите. Дважды щелкните узел функции, и справа откроется новое окно, подобное приведенному выше. Добавьте строку ниже, прямо перед строкой «return msg;» и нажмите кнопку Развернуть в правом углу.
msg.payload = “Hello World!”;
После этого нажмите триггерную кнопку узла ввода и увидите справа в разделе отладчика ваш «Hello World!». Если вы хотите увидеть значение другого ключа объекта msg, дважды щелкните узел отладки и измените ключ. Если вы ничего не возвращаете из функции, она все равно запускает все узлы до конца соответственно.
Поскольку вы пишете Javascript на Node-Red, вы можете использовать все типы данных JavaScript. В дополнение к этому Node-Red предоставляет потоковые и глобальные объекты для хранения данных. Вот как вы устанавливаете и читаете поток и глобальные данные в Node-Red.
//You can access values within the same flow. flow.set('flowVar','hello from flow'); let myFlowVar = flow.get('flowVar'); //You can access values across all of the flows. global.set('globalVar','hello from global'); let myGlobalVar = global.get('globalVar');
3. Простой проект
Если вы хотите стать лучше в языке программирования, фреймворке или библиотеке, просто разработайте проект с их помощью. Так что мы собираемся сделать то же самое.
Представьте, что у вас есть сервер, на котором выполняются ваши приложения, и вы хотите проверить, все ли в порядке с сервером. Что мы собираемся сделать, так это создать панель инструментов, которая показывает нам использование оперативной памяти и использование процессора и сохраняет значения в базе данных.
Прежде всего, давайте получим пакеты, которые нам нужны. Щелкните значок меню-гамбургера рядом с кнопкой Развернуть, в раскрывающемся меню выберите параметр Управление палитрой. Нажмите кнопку Установить и найдите node-red-contrib-os и node-red-contrib-cpu, эти узлы предоставляют нам информацию о процессоре. и память. После этого найдите node-red-dashboard, эти узлы помогут нам создать панель управления. Этот пакет панели мониторинга также создает для нас страницу по умолчанию. Перейдите по ссылке «localhost:1880/ui/» в браузере.
Это начальный экран, если вы не добавляете какие-либо компоненты пользовательского интерфейса в поток. Прежде чем мы приступим к созданию информационной панели, нам нужно иметь возможность читать использование процессора и памяти.
Перетащите узел ввода и узел отладки в общий раздел, узел памяти в раздел операционной системы и узел ЦП в раздел производительности. Дважды щелкните узел памяти и выберите масштабирование до гигабайта. Дважды щелкните узел использования ЦП и выберите параметр «Только общее использование». Не забудьте нажать кнопку Развернуть. Каждый раз, когда вы вносите изменения и хотите увидеть их результаты, нажимайте кнопку Развернуть.
Поскольку мы получили значения, давайте создадим панель инструментов. С левой стороны, где находятся ваши узлы, прокрутите раздел панели инструментов и перетащите датчики и узлы диаграммы. Дважды щелкните один из них и увидите раздел «Группа» в верхней части открывающегося окна. Щелкните значок карандаша и выполните настройки, как я.
Для узла диаграммы, поскольку вы уже создали группу, просто выберите параметр «[Home] CPU» в раскрывающемся списке.
После этого давайте подключим узлы для использования процессора. Поскольку узел использования процессора дает нам значение непосредственно из msg.payload, нам не нужно ничего делать с объектом msg. Но вам нужно изменить конфигурацию узла инъекции на интервал каждые пять секунд. Не забудьте нажать кнопку Развернуть после внесения этих изменений.
Для памяти снова перетащите датчики и узлы диаграммы. Дважды щелкните, чтобы измерить, но для свойства группы выберите «Добавить новую группу ui_group» и щелкните значок карандаша.
И это конфигурации для использования памяти.
После этого нам нужно связать узлы. Имейте в виду, что узел памяти дает нам объект с несколькими ключами и значениями. Поэтому нам нужно извлечь данные об использовании памяти из этого объекта и установить для него значение msg.payload. Перетащите узел функции и дважды щелкните его. Добавьте следующую строку и после этого нажмите кнопку Развернуть.
msg.payload = msg.payload.memusage;
Это должна быть окончательная форма вашего потока.
И это приборная панель, которую вы должны увидеть.
После того, как мы закончили создание дашборда, давайте сохраним данные в базе данных, для этого мы будем использовать MongoDB, скачать MongoDB можно здесь. Давайте загрузим пакет, который может подключить базу данных MongoDB. Нажмите Управление палитрой и найдите пакет node-red-node-mongodb в разделе Установка. Давайте создадим новый поток для выполнения операций с базой данных. Дважды щелкните пустое место на вкладке потока, и он автоматически создаст новый поток. Нам нужно получить значения использования памяти и использования процессора из другого потока. Чтобы получить значения, нам нужно связать потоки. Под общим разделом находятся узлы ссылка в и ссылка на выходе. Выберите первый поток и перетащите узел link out. Свяжите его с узлом Cpu Usage и назовите выходной узел как Cpu Usage. Щелкните другой поток, перетащите ссылку в узел. Дважды щелкните этот узел и выберите в списке пункт Использование ЦП.
Когда мы загружаем пакет MongoDB, мы получаем два узла из этого пакета. Прокрутите список узлов и перетащите узел mongodb из раздела хранилища. Вам необходимо настроить подключение к локальной базе данных MongoDB. Перед этим откройте MongoDB Compass и подключите свой локальный экземпляр. В разделе локальной базы данных создайте коллекцию с именем «PerformanceResults» или с любым другим именем. Вернитесь к Node-Red и настройте узел следующим образом.
Давайте создадим объект для хранения базы данных. Перетащите узел функции и свяжите его с узлом связи использования ЦП и добавьте следующую строку в узел функции. После этого подключите узел функции к выходному узлу mongodb.
msg.payload = { name:'Cpu Usage', value: msg.payload, measureDate: new Date().toISOString() };
Сделайте ту же ссылку и часть узла ссылки для использования памяти. Скопируйте и вставьте узел функции, который мы создали выше. И изменить только значение имени. Не забудьте нажать кнопку Deploy.
msg.payload = { name:'Memory Usage', value: msg.payload, measureDate: new Date().toISOString() };
Ваш поток должен выглядеть так. Идите вперед и проверьте значения коллекции из MongoDB Compass. Если все прошло гладко, вы должны увидеть значения в своей коллекции.
Давайте создадим конечную точку, чтобы получить последнее значение, и посмотрим, как легко ее создать. Создайте новый поток, щелкнув пустое место на вкладке потока. Перетащите узлы http in, http response, mongodb in и function в новый поток. Подключите http в узле к функциональному узлу, функциональному узлу к mongodb в узле и mongodb в узле к узлу ответа http. Настройте узлы следующим образом и нажмите кнопку «Развернуть».
После этого откройте Почтальон и сделайте запрос на конечную точку. Это мой результат.
Верните Node-Red, щелкните значок гамбургера рядом с кнопкой «Развернуть». В меню см. параметры импорта и экспорта. Нажмите кнопку Экспорт и выберите все потоки. Нажмите кнопку «Загрузить» и увидите, что вы получили файл flows.json. Вы можете импортировать этот файл из другого Node-Red и немедленно запустить проект, если у вас установлены пакеты.
4. Вывод
В результате Node-Red является простым в освоении и разработке инструментом программирования. Но все же его стоит использовать для небольших проектов или если вам нужно сделать демо чего-то. Если проект слишком сложен, я не думаю, что Node-Red — лучший вариант, который у вас есть. Но все равно делай, что хочешь. Если вы хотите импортировать мой проект, вот репозиторий Github.