SlideShare uma empresa Scribd logo
1 de 170
Baixar para ler offline
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ХАРЧОВИХ ТЕХНОЛОГІЙ
ЗАТВЕРДЖУЮ
ректор НУХТ,
професор_________ О.Ю.Шевченко
(Підпис)
«____»______________2021 р.
О.М. ПУПЕНА
ДОВІДНИК З РОЗРОБЛЕННЯ ЗАСТОСУНКІВ В СЕРЕДОВИЩІ NODE-
RED
ЕЛЕКТРОННИЙ ДОВІДНИК
Всі цитати, цифровий та фактичний матеріал,
бібліографічні відомості перевірені. Написання
одиниць відповідає стандартам
Підпис(и) автора(ів)________________
«14» грудня 2020 р.
Реєстраційний номер
електронного довідника
у НМУ
100.115-15.03.2021
КИЇВ НУХТ 2021
2
УДК 004.5:004.6 Рекомендовано Вченою радою Національного
університету харчових технологій як електронний
довідник для здобувачів закладів вищої освіти
(протокол №6 від 24 грудня 2020 року )
Рецензенти:
В. А. Волощук, д.т.н., проф., в.о. завідувача кафедри автоматизації
теплоенергетичних процесів Національний технічний університет України
"Київський політехнічний інститут імені Ігоря Сікорського"
Н. А. Заєць, д.т.н., професор кафедри автоматики та робототехнічних систем
ім. академіка І.І. Мартиненка Національного університету біоресурсів та
природокористування
В. М. Сідлецький, к.т.н, доц., доцент кафедри автоматизації та
компютерних технологій систем управління Національного університету
харчових технологій
Пупена О.М. Довідник з розроблення застосунків в середовищі NODE-RED
[Електронний ресурс]: електронний довідник. / О.М.Пупена – К.: НУХТ, 2021. –
170 с.
У електронному довіднику даються принципи використання та наводяться
приклади роботи з Node-RED – середовищем розроблення застосунків для рішень
промислового Інтернету речей.
Автор: О. М. Пупена, канд. техн. наук
Подається в авторській редакції.
© О.М. Пупена, 2021
© НУХТ, 2021
3
Зміст
Вступ ........................................................................................................................................................7
1. Загальні основи користування Node-RED та основні компоненти................................................8
1.1. Про NODE-RED ...........................................................................................................................8
1.2. Встановлення та перший запуск Node-RED..............................................................................9
1.3. Знайомство з Node-RED............................................................................................................10
1.4. Редактор NODE-RED.................................................................................................................13
Робоча область ..............................................................................................................................13
Палітра (Palette).............................................................................................................................23
Бічна панель (Sidebar)...................................................................................................................24
1.5. Проекти (Projects).......................................................................................................................28
Представлення про проекти.........................................................................................................28
Створення першого проекту ........................................................................................................28
Робота з проектами .......................................................................................................................29
1.6. Робота з повідомленнями..........................................................................................................32
Розбір структури повідомлень.....................................................................................................32
Об'єкти та JSON ............................................................................................................................34
Зміна властивостей повідомлення...............................................................................................35
1.7. Робота з контекстом...................................................................................................................36
1.8. Основні вузли .............................................................................................................................38
Група Common...............................................................................................................................38
Група function ................................................................................................................................43
Група Sequence (послідовності повідомлень) ............................................................................54
1.9. Робота з вузлом Function...........................................................................................................62
Створення функцій .......................................................................................................................62
Відправка повідомлень на декілька виходів ..............................................................................63
Відправка послідовності повідомлень ........................................................................................64
Асинхронна відправка повідомлень............................................................................................64
Виконання коду при старті та зупинці Node-RED.....................................................................65
Ведення журналу подій ................................................................................................................66
Обробка помилок ..........................................................................................................................66
Зберігання даних в контекстних сховищах ................................................................................66
Додавання статусу ........................................................................................................................68
Завантаження додаткових модулів..............................................................................................68
Довідник API .................................................................................................................................68
2. Конфігурування та розширення Node-RED ...................................................................................69
2.1. Конфігурування середовища ....................................................................................................70
Конфігурація середовища виконання .........................................................................................70
Конфігурація середовища розробки (редактора).......................................................................71
Конфігурація Dashboard ...............................................................................................................71
Конфігурація вузла .......................................................................................................................71
2.2. Конфігурування безпеки ...........................................................................................................72
Активація доступу HTTPS ...........................................................................................................72
API редактору та адміністратору.................................................................................................73
4
Безпека вузлів HTTP.....................................................................................................................75
Користувацьке проміжне ПЗ при автентифікації ......................................................................75
2.3. Змінні середовища .....................................................................................................................76
2.4. Розширення застосунків з використанням Node-RED ...........................................................77
3. Розробка людино-машинного інтерфейсу з node-red-dashboard. .................................................78
3.1. Інсталяція та налаштування ......................................................................................................79
3.2. Компонування та налаштування...............................................................................................80
3.3. Налаштування віджетів (Widgets) ............................................................................................83
3.4. Button (Кнопка) ..........................................................................................................................84
3.5. Dropdown (Спадне меню)..........................................................................................................85
3.6. Switch (Перемикач)....................................................................................................................86
3.7. Slider (Повзунок)........................................................................................................................87
3.8. Numeric (Числове поле).............................................................................................................87
3.9. Text input (Текстове поле для вводу) .......................................................................................88
3.10. Date picker(Вибір дати)............................................................................................................88
3.11. Colour picker (Вибір кольору) .................................................................................................89
3.12. Form (Форма)............................................................................................................................90
3.13. Text (Виведення тексту) ..........................................................................................................91
3.14. Gauge (Індикатор) ....................................................................................................................91
3.15. Audio out (Виведення аудіо)....................................................................................................92
3.16. Chart (Діаграма)........................................................................................................................93
3.17. Show notification (Повідомлення)...........................................................................................96
3.18. Ui control (Керування UI) ........................................................................................................97
3.19. Використання AngularJS в Node-RED dashboard ..................................................................98
3.20. Template (Шаблон).................................................................................................................101
4. Вузли для роботи з файлами..........................................................................................................102
4.1. File in (читання з файлу)..........................................................................................................102
4.2. File out (запис в файл)..............................................................................................................103
4.3. Watch (пошук змін у файловій системі) ................................................................................104
4.4. Tail (контроль змін у файлі)....................................................................................................105
4.5. Опис бібліотеки fs-ops.............................................................................................................105
4.6. Dir (перегляд директорії).........................................................................................................106
4.7. Move (переміщення/перейменування файлів).......................................................................106
5. Вузли для роботи з TCP/UDP ........................................................................................................107
5.1. TCP Request (TCP-запит).........................................................................................................107
5.2. TCP in (вхід TCP) .....................................................................................................................108
5.3. TCP out (вихід TCP).................................................................................................................109
5.4. UDP in........................................................................................................................................110
5.5. UDP out......................................................................................................................................111
6. Вузли для роботи з MODBUS........................................................................................................112
5
6.1. Modbus-tcp Server (Конфігурування серверу) .......................................................................113
6.2. Modbus-tcp Read (читання об’єктів).......................................................................................113
6.3. Modbus-tcp Write (запис об’єктів) ..........................................................................................114
7. Вузли для роботи з MQTT..............................................................................................................115
7.1. Mqtt in (вхідні повідомлення з MQTT) ..................................................................................115
7.2. Mqtt out (вихідні повідомлення до MQTT)............................................................................116
7.3. Mqtt-broker (конфігурування) .................................................................................................116
8. Вузли для роботи з HTTP...............................................................................................................118
8.1. HTTP requests (робота з клієнтськими запитами).................................................................118
8.2. Http in (вхідне повідомлення HTTP-серверу)........................................................................120
8.3. Http response (вихідне повідомлення HTTP-серверу)...........................................................122
9. Вузли для роботи з WebSocket ......................................................................................................123
9.1. Налаштування клієнтських і серверних з’єднань .................................................................123
9.2. WebSocket in.............................................................................................................................124
9.3. WebSocket out...........................................................................................................................125
10. Бібліотека PARSING.....................................................................................................................125
10.1. HTML ......................................................................................................................................126
10.2. CSV..........................................................................................................................................127
10.3. JSON........................................................................................................................................129
10.4. XML.........................................................................................................................................130
11. Робота з JSONata...........................................................................................................................132
11.1. Приклад використання в застосунках Node-RED...............................................................132
11.2. Прості запити..........................................................................................................................133
Прості приклади навігації об'єктами JSON..............................................................................133
Пусті послідовності та послідовності з одним елементом .....................................................134
11.3. Предикативні запити (Predicate Queries)..............................................................................135
Предикати ....................................................................................................................................135
Одноелементний масив і еквівалентність значень ..................................................................135
Шаблони заміни ..........................................................................................................................136
11.4. Функції та вирази...................................................................................................................137
Вирази з рядками ........................................................................................................................137
Числові вирази.............................................................................................................................137
Вирази порівняння......................................................................................................................138
Булеві вирази...............................................................................................................................138
11.5. Структурування результату ..................................................................................................139
Конструктор масиву....................................................................................................................139
Конструктор об’єкту...................................................................................................................140
Літерали JSON.............................................................................................................................141
11.6. Запити композиції (Query composition)................................................................................141
11.7. Сортування, групування і агрегація.....................................................................................141
Сортування ..................................................................................................................................141
Групування ..................................................................................................................................142
Агрегація......................................................................................................................................143
12. Бібліотека Storage Cloudant..........................................................................................................144
6
12.1. Створення облікових даних для доступу до сервісу Cloudant...........................................144
12.2. Сloudant config (конфігурація підлкючення).......................................................................145
12.3. Сloudant in (отримати документ з IBM Cloudant) ...............................................................145
12.4. Сloudant out (зберегти в документ IBM Cloudant) ..............................................................147
13. Бібліотека Storage COS (node-red-contrib-cos)............................................................................147
13.1. cos config (конфігурування сховища IBM COS) .................................................................147
13.2. cos get (отримати об’єкт з IBM COS)...................................................................................148
13.3. cos put (зберегти об’єкт в IBM COS)....................................................................................149
13.4. cos del (видалення об’єкту з COS)........................................................................................150
13.5. cos qry (запит на отримання списку об’єктів COS) ............................................................150
14. Робота з Watson IoT Device/Gateway (node-red-contrib-ibm-watson-iot) ..................................151
14.1. wiotp credentionals (конфігураційний вузол означення повноважень доступу)...............151
14.2. wiotp in (вхід команди для IoT).............................................................................................152
14.3. wiotp out (вихід повідомлення від IoT) ................................................................................153
15. Бібліотека IBM IoT APP (node-red-contrib-scx-ibmiotapp) ........................................................154
15.1. ibmiot config (точка доступу до API)....................................................................................154
15.2. ibmiot in (отримання подій від Watson IoT Platform)..........................................................155
15.3. ibmiot out (надислання команд на Watson IoT Platform) ....................................................159
16. Бібліотека OPC UA (node-red-contrib-opcua)..............................................................................160
16.1. OpcUa-Endpoint ......................................................................................................................161
16.2. OpcUa-Client ...........................................................................................................................161
16.3. OpcUa-Item..............................................................................................................................165
16.4. OpcUa-Event............................................................................................................................166
16.5. OpcUa-Server...........................................................................................................................167
Список рекомендованої літератури...................................................................................................170
7
Вступ
Node-RED - це інструмент для візуального програмування потоком даних, розроблений
працівниками компанії IBM для поєднання різноманітних пристроїв, API та онлайн-сервісів як
складових частин Інтернету речей. Node-RED дає можливість програмувати об’єднані в єдину
систему апаратні пристрої, застосунки та сервіси через API навіть без використання
програмування. Редактор Node-RED виконується як ВЕБ-застосунок, середовище розробки та
виконання функціонує на базі Node.js що дає можливість використовувати його на
різноманітних платформах та розширювати необхідним функціоналом, що дуже актуально для
Інтернету речей, де використовуються різноманітні пристрої. Палітра Node-RED включає
різноманітні вузли, які доповнюються бібліотеками, створеними відкритою спільнотою
розробників.
Node-RED постійно розвивається. З кожним місяцем з'являються нові можливості, а
бібліотека вузлів наповнюється новими елементами за рахунок роботи спільноти. Довідник
створений з метою спрощення вивчення Node-RED студентам та спеціалістам з автоматизації та
комп’ютерно-інтегрованих технологій. Зокрема даний довідник призначений для використання
в лабораторних роботах в курсах "Технології індустрії 4.0" та "Програмна інженерія в системах
управління" а також для інших дисциплін, де використовується дане середовище. Враховуючи
постійну зміну інструментарію деякі вікна та функції можуть мати інший вигляд, ніж в цьому
довіднику. Онлайн-версія посібника, яка постійно відображає зміни доступна на GitHub за
посиланням https://github.com/pupenasan/NodeREDGuidUKR, його веб-версія також доступна на
сторінках GitHub Pages https://pupenasan.github.io/NodeREDGuidUKR.
8
1. Загальні основи користування Node-RED та основні компоненти
1.1. Про NODE-RED
Node-RED - це інструмент для візуального програмування, що базується на керуванні
потоком даних з використанням графічних вузлів. Вся програма складається з об'єднаних вузлів
в потоки, де дані передаються від вхідних вузлів (наприклад опитування датчиків) на вихідні
(наприклад виведення повідомлення) через проміжні вузли, які обробляють ці повідомлення
(рис.1.1). Графічний редактор базується на WEB, він дає можливість розробляти застосунки
через розміщення і з'єднання вузлів та їх налаштування. Хоч Node-RED надає можливість
використовувати написання програм через кодування (для цього є вузол Function для запуску
JavaScript-функцій), застосунки можна розробляти взагалі без написання коду.
рис.1.1. Вікно з програмою Node-RED
Node-RED розроблений працівниками компанії IBM для поєднання різноманітних
пристроїв, API та онлайн-сервісів як складових частин Інтернету речей. За ініціативою IBM у
2016 році Node-RED став відкритим програмним забезпеченням (open-source) як частина
проекту JS Foundation. Сьогодні Node-RED може запускатися на різноманітних засобах у тому
числі комп'ютерах та гаджетах під керуванням різних операційних систем, та в хмарних
застосунках (рис.1.2).
рис.1.2. Можливе розміщення середовища виконання.
9
У Node-RED є як базові вузли, якими одразу забезпечений Node-RED після
встановлення, так і додаткові, які можна встановлювати з відкритого репозиторію спільноти.
Можна створювати свої власні вузли з унікальним функціоналом. Програми або ж їхні частини,
розроблені за допомогою Node-RED, можуть бути збережені та поширені для вільного
використання.
Саме середовище побудовано на основі Node.js, який реалізовує виконання програм
JavaScript як серверного застосунку.
рис.1.3. Node-RED на Node.js
Потоки, створені за допомогою Node-RED, зберігаються у вигляді JSON. Таким чином
вони мають текстовий вигляд, який можна імпортувати та експортувати а також
використовувати при розробці інструменти керування версіями Git.
1.2. Встановлення та перший запуск Node-RED
Встановити Node-RED можна під платформи, які підтримують Node.js. Для ПК це може
бути Windows 7/8/10, Linux, MacOS та інші ОС.
Спочатку встановлюється Node.js https://nodejs.org та менеджер пакунків npm (Node
Package Manager). Для середовища виконання Node.js npm є менеджером пакунків за
замовчуванням. Включає в себе клієнт командного рядка, який також називається npm, а також
онлайн-базу даних публічних та приватних пакунків, яка називається реєстром npm. Реєстр
доступний через клієнт, а доступні пакунки можна переглядати та шукати через веб-сайт npm.
Інсталювання Node-RED проводиться з використанням npm з командою install.
npm install -g --unsafe-perm node-red
Node-RED запускається з командного рядка
node-red
Після запуску можуть бути показані повідомлення про пропозицію розблокування
брандмауером, з якими треба погодитись. У командному рядку виведуться різноманітні
системні повідомлення про запуск та роботу Node-RED, на кшталт того, що показано на рис.1.4.
10
рис.1.4. Запуск Node-RED
У прикладному процесі з консоллю де запускається Node-RED виконується серверна
частина. Сам редактор функціонує у цьому процесі як ВЕБ-застосунок, тому розробник
взаємодіє з ним через браузер. Браузер за замовченням доступається до порту 80, але Node-RED
за замовченням надає доступ до своїх ресурсів через tcp-порт 1880. Тому якщо Node-RED
запущений на вашому ПК, для редагування необхідно відкрити ВЕБ-браузер і ввести в ньому:
http://127.0.0.1:1880/
127.0.0.1 – це адреса того ж ПК, на якому запускається браузер, так званий loopback
address або Localhost. Хоч так само можна доступитися до Node-RED запущеного на іншому
вузлі, вказавши його IP-адресу.
Для того, щоб Node-RED виконувався, вікно з командним рядком не можна закривати.
1.3. Знайомство з Node-RED
Програма створена на Node-RED складається з потоків (Flow), які виконуються як умовно
незалежні програми. Потоки – це зв’язані між собою інформаційними дротами (wires) вузли
(Node), що виконують певну функцію. Таким чином, ідеологія програмування Node-RED дещо
схоже на побудову програм на мові FBD, що є стандартною для програмування ПЛК (IEC
61131-3). Тим не менше, між цими мовами є значні відмінності. Так в FBD з МЕК 61131-3 усі
функціональні елементи (функціональні блоки та функції) виконуються кожного разу, як
виконується програмний блок, тоді як вузли в Node-RED виконуються тільки тоді, коли на їх
вхід приходить повідомлення. Виключенням є вхідні вузли та функції, які можуть викликатися
через зворотній виклик.
Редактор Node-RED має вигляд як на рис рис.1.5.
11
рис.1.5. Вигляд редактору Node-RED
З палітри вузлів вибирається необхідний вузол і переноситься на робочу область, після
чого вузли з'єднуються між собою. Налаштування вузлів відбувається через подвійний клік.
Найпростіша програма на Node-RED може мати вигляд як на рис.1.6.
рис.1.6. Приклад простої програми з двома вузлами
Для її побудови вибираються з палітри і розміщуються на робочій області два вузли
 з палітри Common вузол inject, позначення за замовченням "timestamp"
 з палітри Common вузол Debug, позначення за замовченням "msg.payload"
Блакитні кружечки на рис.1.6 значать, що зміна в вузлах ще не відобразилася в
середовищі виконання, так як змінена програма не була в ньому розгорнута. Для внесення змін
в середовище виконання робиться розгортання. У головному меню вибирається пункт Deploy
->Modified Nodes (див.рис.1.7), після чого натискається Deploy (Розгортання).
рис.1.7. Меню розгортання.
При вдалому розгортанні з’явиться відповідне повідомлення. А в робочому просторі вузли
вже будуть без блакитних кружечків.
Для перевірки роботи програми часто використовують вузли Debug, який використаний
на рис.1.6. Їх завдання – виводити повідомлення, що приходить на вхід вузла на бічну панель
або в командний рядок. Для перевірки наведеної на рис.1.6 програми на бічній панелі треба
12
відобразити вікно Debug messages (налагоджувальні повідомлення) шляхом натиснення
кнопки з «жуком» (рис.1.8).
рис.1.8. Кнопка меню налагодження.
Ліворуч вузла типу Inject з назвою «timestamp» є кнопка, яка приводить до ініціювання
розрахунку ланцюжка вузлів, що починаються з нього. Якщо натиснути на цю кнопку з’явиться
повідомлення про успішне вприскування (Inject) а на панелі повідомлень з’явиться
повідомлення (рис.1.9).
рис.1.9. Результат виконання програми
Повідомлення – це така структурна змінна (об'єкт JavaScript), яка передається від вузла до
вузла в потоці. Ця змінна має принаймні одне поле. У програмі з рис.1.9 повідомлення включає
властивість payload, що відображає корисне навантаження повідомлення. За замовчуванням,
вузол debug виводить саме його. Щоб вивести все повідомлення, необхідно зайти через
подвійний клік в налаштування вузлу з іменем msg.payload і вибрати complete msg
object, після чого натиснути кнопку Done (рис.1.10)
рис.1.10. Налаштування виведення змісту повідомлення
Після таких змін і повторного розгортання проекту, після впорскування вузлом inject
повідомлення відобразиться повністю.
13
рис.1.11. Виведення всього повідомлення.
На цьому прикладі розглянемо, як виконується програма. У більшості випадків
перерахунок вузлів починається тоді, коли на його вхід подається повідомлення (message).
Тобто в даній програмі після перерахунку вузла з іменем timestamp буде сформовано об’єкт-
повідомлення (msg), який буде переданий по інформаційному дроту іншому вузлу, а саме типу
debug.
На вхід вузла з іменем timestamp повідомлення не надходять, бо цей вузол є ініціатором
розрахунку. Всі вузли палітри що входять в групу вхідних є ініціаторами розрахунку. Ініціація
вузлів типу Inject відбувається шляхом ручного запуску по кнопці, або через певні інтервали
часу, що вказується у налаштуваннях вузлу. Ініціювання повідомлення - це формування полів
для msg та відправка його іншим вузлам по інформаційним дротам.
Повідомлення, надіслане вузлом Inject, має властивості payload (корисне
навантаження) та topic (тема). Ці два поля притаманні більшості змінних повідомлення msg.
Кожен вузол в полі корисного навантаження вказує певне значення, яке у свою чергу може
також бути об'єктом (структурою). Поле теми вказує на назву повідомлення. Така структура
повідомлення притаманна протоколу MQTT, що робить Node-RED дуже зручним для
використання в застосунках Інтернету речей. Вузли, як правило, модифікують вхідні
повідомлення і відправляють їх на свої виходи. Тому можна сказати, що повідомлення
ініціюється вхідними вузлами, і модифікуються у процесі проходження через вузли поки не
надійдуть до вихідного вузла.
За замовченням вузол Inject записує у властивість topic відмітку часу (timestamp –
кількість мілісекунд, що пройшла з 1980 року). А вузол типу Debug використовується для
відображення повідомлень на бічній панелі Debug. Таким чином, після отримання
повідомлення, цей вузол надсилає його зміст на бічну панель, якщо можна так виразитися.
Потік (Flow) в NodeRED має двояке значення. З одного боку – це з'єднані між собою
вузли, як це говорилося до цього. Кілька таких потоків можуть бути присутніми та редагуються
на одній вкладці, яка також називається потоком. Таким чином кілька потоків розміщаються на
одній вкладці-потоку. Вкладка потік має свою область видимості, яка дає можливість
локалізувати "потокові змінні", які називаються контекстом потоку.
1.4. Редактор NODE-RED
Як вже зазначалося редактор Node-RED складається з таких 4 компонентів (рис.1.5):
 у верхній частині міститься заголовок, що містить кнопку розгортання, головне меню, і
якщо користувач пройшов автентифікацію, меню користувача.
 ліворуч знаходиться палітра (palette), яка містить вузли доступні для використання
 посередині знаходиться основна робоча область(workspace), в якій створюються
потоки
 праворуч знаходиться бічна панель (sidebar)
Розглянемо їх детальніше.
Робоча область
Основна робоча область (workspace) - це місце, де розробляються потоки (flow) шляхом
перетягування з палітри і з’єднання між собою вузлів (nodes). Робоча область має ряд вкладок
14
вздовж заголовку – по одній для кожного потоку і будь-яких підпотоків, що були відкриті
(рис.1.12).
рис.1.12. Робоча область в редакторі Node-RED
Інструменти перегляду
Нижній колонтитул містить кнопки для збільшення/зменшення та відновлення
стандартного рівня масштабування. Він також містить кнопку перемикання для навігатора
перегляду (рис.1.13).
Рис.1.13. Нижній колонтитул робочої області з активним навігатором перегляду.
Навігатор перегляду забезпечує зменшений вигляд всієї робочої області, виділяючи ту
зону, яку необхідно відобразити. Цю зону можна перетягнути всередині навігатора, щоб
швидко перейти до інших частин робочої області. Це також корисно для пошуку вузлів, які
були "втрачені" на інших краях робочого середовища.
Налаштування вигляду
Вигляд робочої області можна налаштувати за допомогою вкладки " View’ в діалоговому
вікні " User Settings" (рис.1.14)
15
Рис.1.14. вкладка «User Settings»
Потоки (Flows)
Як вже зазначалося, уся програма складається з об’єднання вузлів – потоків. Для
кожного потоку є своя вкладка з назвою потоку (рис.1.15). Потоки можуть називатися
однаково, хоч це вносить плутанину.
Рис.1.15. Вкладки потоку
Щоб додати новий потік натисніть що знаходиться на верхній панелі (рис.1.15)
Щоб змінити властивості потоку двічі натисніть на його вкладці у верхній
панелі. Відкриється діалогове вікно Flow Properties (рис.1.16).
Рис.1.16. Редагування властивостей потоку
У діалоговому вікні може бути встановлена назва (name) та опис (description) потоку.
Для форматування опису може використовувати синтаксис Markdown. Опис з'явиться у бічній
16
панелі. Для відключення або включення потоків можна використовувати властивість
Status(Enables/Disabled). Якщо потік відключено він існує, але не виконується.
Щоб видалити потік, натисніть кнопку Delete у діалоговому вікні Flow Properties.
Вузли (Nodes)
Вузли можуть бути додані до робочої області такими шляхами:
 Перетягуванням їх з палітри
 Використовуючи діалогове вікно швидкого додавання (CTRL+Click)
 Імпортуючи з бібліотеки чи буферу обміну
Вузли з’єднуються один з одним за допомогою з’єднань через їхні порти. Вузол може
мати не більше одного вхідного порту, але багато вихідних. Порт може мати мітку (label), що
буде показуватися при наведенні курсору (рис.1.17). У вузлі можуть бути вказані спеціальні
мітки, наприклад, вузол Switch (перемикач) показує правило що відповідає даному порту.
Мітки можна налаштувати в діалоговому вікні редагування вузла.
рис.1.17. Мітки порту вузла
Деякі вузли відображають статусне повідомлення або піктограми біля вузла. Це
використовується для позначення стану вузла в режимі виконання. Наприклад, вузли можуть
вказувати на те, чи підключені вони в даний час (статус connected на рис.1.18).
Рис.1.18. Елементи вузлів
Якщо вузол має які-небудь зміни, що не були розгорнуті в режимі виконання, це буде
відображено синім кружком над ним. Якщо є помилки у конфігурації, то буде відображатися
червоний трикутник (рис.1.18).
Деякі вузли містять кнопку з лівого або правого боку. Вони служать для взаємодії з
вузлом в редакторі. Вузли Inject і Debug є єдиними основними вузлами, які мають такі кнопки
(див. рис.1.18)
Діалог швидкого додавання
Діалогове вікно швидкого додавання - це простий спосіб додати вузол до робочої
області, без необхідності перетягувати її з палітри. Діалогове вікно відкривається шляхом
утримування Ctrl або Command разом з натисканням (лівий клік миші) в робочі області
(рис.1.19).
Рис.1.19. Діалогове вікно швидкого додавання
17
У діалоговому вікні міститься повний список всіх вузлів, доступних для додавання. У
верхній частині списку показуються п'ять основних вузлів, наступні – всі нещодавно додані та,
нарешті, повний алфавітний список решти вузлів. Як і в основній палітрі, у діалоговому вікні
можна швидко знаходити вузол або відфільтрувати список.
Редагування конфігурації вузла
Конфігурація вузла може бути відредагована подвійним кліком по вузлу чи натисканням
клавіші Enter коли вузол в робочій області має фокус. Якщо вибрано декілька вузлів,
редагуватися почне перший з них.
Діалогове вікно редагування вузла має два окремих розділи: властивості (properties)
та налаштувань (settings). У розділі властивостей відображається форма редагування
(рис.1.20 ліворуч), специфічна для конкретного типу вузла. У розділі налаштувань
відображаються загальні параметри, які можна встановити на всіх вузлах. Включаючи мітки
спеціального порту, а також іконку для вузла.
рис.1.20 Діалог редагування вузла - розділи властивостей (ліворуч) та налаштувань (праворуч)
При натисканні на піктограму можна побачити засіб вибору значків вузла, який можна
використовувати для вибору іконки вузла зі списку всіх доступних іконок.
рис.1.21 Набір іконок для вузла
18
Конфігураційні вузли
Конфігураційні вузли (config Node) - це спеціальний тип вузла, що містить
конфігурацію багаторазової доступності, що може бути розподілена між звичайними вузлами
потоку.
Наприклад, вузли MQTT In і MQTT Out використовують конфігураційний вузол MQTT
Broker для представлення спільного підключення до брокера MQTT. Конфігураційні вузли
додаються через діалогове вікно редагування вузла, що вимагає вузол конфігурації (рис.1.22). У
ньому буде поле для вибору з наявних вузлів конфігурації потрібного типу або додати новий
екземпляр.
рис.1.22.Додавання вузла конфігурації
Натиснувши кнопку поруч із полем вибору, відкриється діалогове вікно редагування для
вибраного вузла або додано новий екземпляр (рис.1.23).
.
рис.1.23.Вікно редагування вузла конфігурації
У діалоговому вікні редагування конфігураційного вузла є лише розділ властивостей
вузла, оскільки вузол конфігурації не має піктограм або портів для встановлення міток. У
нижній частині діалогового вікна вказується, скільки вузлів використовує цей конфігураційний
вузол. Вона також містить поле вибору для визначення області використання конфігураційного
вузла. Бічна панель конфігурації вузлів може використовуватись для керування всіма
конфігураційними вузлами.
З’єднання (Wires)
Вузли з’єднують разом, шляхом натискання на ліву кнопку миші по порту вузла,
перетягуючи так званий дріт до кінцевого вузла та відпускаючи кнопку миші (рис.1.24).
19
рис.1.24. Формування з’єднання між вузлами.
Альтернативно можна створити з’єднання шляхом утримання клавіші Ctrl/Command і
натискання/відпускання лівою кнопкою миші на порт вузла, а потім натиснув на пункт
призначення. Якщо Ctrl/Command залишається утримуваним, а безпосередньо провідний
вузол призначення має вихідний порт, тоді з цього порту запускається новий дріт. Це дозволяє
швидко з’єднуватися багатьом вузлам разом. Це також можна поєднати з діалогом швидкого
додавання, яке спрацьовує Ctrl/Command-Click на робочій області, для швидкої вставки
нових вузлів і вони вже будуть підключені до попередніх вузлів потоку.
Якщо вузол із вхідним та вихідним портом перетягнений в середину дроту, дріт прийме
вигляд штрихової лінії. При відпусканні він автоматично вставляється в потік в цій точці
(рис.1.25).
рис.1.25. Перемістіть вузол на з’єднання(дріт), щоб вставити його до потоку.
Щоб від'єднати дріт від порту, виберіть дріт, натисніть на нього і потримайте клавішу
Shift. Після цього дріт відключається від порту і може бути перекинутий на інший порт. Якщо
відпустити кнопку над робочою областю, дріт буде видалено. Якщо до порту приєднано
декілька дротів, і жоден з них не буде виділений, коли натискається Shiftt всі дроти почнуть
рухатися.
Щоб видалити дріт, спочатку виберіть його, натиснувши на нього, а потім натисніть
кнопку delete
Під-потоки (Subflows)
Під-потоки – це сукупність вузлів, які згортаються в єдиний вузол у робочій області.
Вони можуть бути використані для зменшення певної візуальної складності потоку або для
об’єднання групи вузлів, що використовується в різних місцях. Після створення, під-потік
додається до палітри доступних вузлів. Потім окремі екземпляри під-потоку можна додати до
робочої області, як і будь-який інший вузол. Під-потік не може існувати сам собою без жодних
вузлів, він повинен містити їх прямо або опосередковано.
Створення та видалення під-потоків
Під-потік можна створити, вибравши в меню пункт Subflow -> Create subflow Це
створить порожній під-потік і відкриває його у робочій області. Також можна перетворити
поточний вибір вузлів на підрівень, вибравши в меню пункт Subflow -> Selection to
Subflow. Ці вузли будуть переміщені в новий під-потік і замінені на його екземпляр у потоці
(рис.1.26).
20
рис.1.26.Створення під-потоку
Це можливо тільки в тому випадку, якщо вхідні з’єднання підключені до одного вузла, -
тому що результуючий під-потік вузла сам може мати не більше одного входу (рис.1.27).
рис.1.27. Недійсний вибір для під-потоку
Для видалення під-потоку та всіх його екземплярів може бути використана кнопка
delete subflow на панелі інструментів під-потоку.
Редагування під-потоку
Існує два способи відкрити під-потік для редагування його вмісту: двічі клацнути на
вузол у палітрі або натиснути кнопку Edit flow template у діалоговому вікні редагування
вузла (рис. 1.28)
Рис
.1.28. Редагування під-потоку
Під-потік відкривається в робочій області як нова вкладка. На відміну від звичайних
вкладок потоку, вкладки під-потоків можуть бути закриті, щоб приховати їх.
Входи & Виходи та властивості
21
Входи та виходи під-потоку представлені сірими квадратними вузлами, які можуть бути
підключені до потоку. Панель інструментів надає можливість додавання та видалення цих
вузлів. Як і в звичайних вузлів у підпотоках може бути не більше одного вводу та багато
виходів, за необхідності.
Кнопка edit properties відкриває вікно властивостей під-потоку (рис.1.29). Як і у
діалоговому вікні властивостей потоку, тут можна вказати назву та опис під-потоку. Можна
також встановити категорію під-потоку, або шляхом вибору з однієї з існуючих категорій або
додати нову.
рис.1.29. Вікно редагування властивостей під-потоку
Вибір вузла та з'єднання
Вузол вибирається при натисканні на ньому, при цьому буде оновлюватися інформація
про нього на бічній панелі: властивості вузла та текст довідки для його типу. За допомогою
Ctrl його буде додано до поточного вибору (або видалено з вибору при повторному
натисканні). Якщо при натисканні на вузол утримується Shift, він вибере цей вузол та всі інші
вузли, до якого той підключений.
Дріт (з’єднання) вибирається при натисканні на ньому. На відміну від вузлів, можна
вибрати лише одне з’єднання за один раз.
Для вибору кількох вузлів може використовуватися інструмент «ласо» (рис.1.30). Він
активується за допомогою перетягування одночасно з натисканням в робочій області. Його не
можна використовувати для вибору з’єднання.
рис. 1.30.Вибір декількох вузлів за допомогою lasso
Щоб вибрати всі вузли потоку переконайтеся що робоча область має фокус, а потім
натисніть Ctrl/Command-a.
Всі вузли та з’єднання, що попали в виділення підтримують
копіювання/вирізання/вставку. Зверніть увагу, що дії використовують внутрішній буфер
обміну, а не системний, тому перенос в інші редактори Node-RED не працюють.
Імпорт та експорт потоків
Потоки можна імпортувати та експортувати з редактора, використовуючи формат JSON,
що дозволяє дуже легко обмінюватися потоками з іншими редакторами.
Щоб імпортувати потік, відкрийте діалогове вікно Import-> Clipboard, вставте текст
експортованого потоку у форматі json та натисніть Import to Current flow. Кнопка Import
активна лише тоді, коли у діалогове вікно вставлений правильний JSON. У діалоговому вікні
22
також є можливість імпортувати вузли в поточний потік або створити для них новий потік
(рис.1.31)
рис. 1.31.Діалог імпорту потоків
Для копіювання потоку або його частини з редактора в форматі JSON може бути
використано вікно експорту. Можна експортувати виділені вузли, поточний потік (включаючи
його вузли) або повну конфігурацію потоку (рис.1.32).
рис.1.32. Діалог Export Flows
У діалоговому вікні експорту є можливість вибрати експорт в компактний або
відформатований JSON. Опція compact означує створення єдиного рядку JSON без пробілів.
Опція formatted робить JSON форматованим по декільком рядкам з повним відступом, що є
зручним для читання.
Пошук потоків
Для пошуку вузлів усередині робочої області, включаючи конфігураційні вузли, може
використовуватися діалогове вікно пошуку. Редактор індексує всі властивості вузлів, тому його
можна використовувати для пошуку вузла за його ідентифікатором, типом, ім'ям або будь-якою
іншою властивістю. Вибір вузла у списку результатів покаже той вузол у редакторі (рис.1.34).
23
рис.1.34 Діалог пошуку
Палітра (Palette)
Палітра містить всі вузли, які встановлені та доступні для використання. Вони
організовані в декілька категорій (рис.1.35). Якщо є під-потоки, вони з'являються у категорії у
верхній частині палітри. Категорії можна розширити або згорнути, натиснувши заголовок. Для
згортання або розширення всіх категорій можуть бути використані кнопки та , які
знаходяться в нижній частині палітри.
Над палітрою є поле для введення, яке можна використовувати для фільтрації списку
вузлів.
рис.1.35. Основні вузли палітри
Для встановлення нових вузлів до палітри може використовуватися менеджер палітри
(Palette Manager). Доступ до нього можна отримати за вкладкою Palette tab в User
Settings dialog (рис.1.36).
24
рис.1.36. Palette Manager - Nodes tab
Менеджер палітри має дві вкладки:
 список Nodes (рис.1.36) - список вузлів, які вже встановлені у середовищі виконання
 список Install (рис.1.37) - список вузлів доступних до встановлювання
Кожен запис у списку Nodes list відображає назву та версію модуля, а також список окремих
типів вузлів, які надає модуль. Параметри надаються для видалення, відключення або
оновлення кожного модуля. Якщо вузол в даний час використовується в потоці, модуль
неможливо видалити чи деактивувати в палітрі. Вкладка Install може використовуватись для
пошуку доступних модулів та їх встановлення.
рис. 1.37. Palette Manager – вкладка Install
Щоб знайти модуль, введіть його ім'я на панелі пошуку. Результати пошуку показують
деталі модулів, в тому числі, коли востаннє було оновлено, і посилання на його
документацію. Його можна встановити, натиснувши кнопку install.
рис.1.38. Palette Manager – деталі інсталювання модулю
Бічна панель (Sidebar)
25
Конкретна закладка бічної панелі відкриється при натисканні на значок в заголовку
бічної панелі або вибравши їх з випадаючого списку(рис.1.39). Деякі вузли додають власні
панелі бічної панелі, наприклад node-red-dashboard
рис.1.39. Бічна панель редактору
Можна змінити розмір бічної панелі, перетягнувши її край з робочою областю. Якщо
край перетягнути близько до правого кінця вікна, бічна панель буде прихована. Її можна
показати знову, вибравши опцію Show sidebar в меню View menu, чи через
комбінацію Ctrl-Пробіл.
Бічна панель: Інформація (Information)
На бічній панелі Information відображається детальна інформація про поточний вибраний
вузол, зокрема:
 Перелік його властивостей
 Текст довідки для вузла
Якщо нічого не вибрано, панель відображає опис поточного потоку, який можна редагувати
в Flow Properties.
рис.1.40. Бічна панель інформації
Бічна панель: Debug messages
На бічній панелі Debug (рис.1.41) відображаються повідомлення, передані в потоці
вузлам Debug, а також певні повідомлення з журналу середовища виконання (runtime).
26
рис.1.41.Вікно повідомлень.
За замовчуванням бічна панель Debug відображає всі передані йому
повідомлення. Повідомлення можна фільтрувати в панелі параметрів фільтрів, що
відкривається відповідною кнопкою (рис.1.42).
рис.1.42. Параметри фільтра налагоджування
Панель містить 3 опції:
 all nodes - відображає всі повідомлення
 selected nodes - виберіть певні вузли відлагодження зі списку всіх доступних вузлів
 current flow - відображає лише повідомлення з вузлів поточного потоку у робочій області
Бічна панель Debug може відображати лише 100 останніх повідомлень. Якщо бічна панель
наразі показує фільтрований список повідомлень, приховані повідомлення входять до 100
обмежених. Бічна панель може бути очищена натисненням на кнопку з зображенням корзини.
Якщо потік має вузли Debug, які створюють багато повідомлень (флуд), і не фільтруються з
бічної панелі, то краще їх відключити, натиснувши їх вихідну кнопку в робочій області.
Кнопка в нижньому колонтитулі бічної панелі можна використовувати для відкриття
окремого вікна веб-переглядача, що містить бічну панель Debug.
Бічна панель: Конфігураційні вузли (Configuration nodes)
Бічна панель конфігураційних вузлів (Configuration nodes) надає список всіх
конфігураційних вузлів в одному екрані. Кожен вузол показує його тип і мітку, а також
підрахунок того, скільки вузлів поточного потоку використовує цей вузол конфігурації
(рис.1.43).
Якщо конфігураційний вузол не використовується, він відображається пунктиром. Щоб
показати лише невикористані вузли переглядач також можна фільтрувати, вибравши у
заголовку фільтр unused. У діалоговому вікні редагування подвійним кліком миші можна
відкрити конфігураційний вузол.
27
рис. 1.43. Конфігураційні вузли бічної панелі
Бічна панель: Контекстні дані (Context data)
Бічна панель контексту відображає вміст сховища контекстних даних (рис.1.44). Щоб
отримати додаткові відомості про використання контексту, прочитайте відповідний розділ
довідника.
рис.1.44. Бічна панель контекстних даних
Панель розділена на три частини, по одному для кожного типу контексту (рис.1.44).
Розділ Node показує контекст поточного виділеного вузла. Він не відображає вміст
автоматично, а вимагає, щоб користувач натиснув кнопку оновлення, щоб завантажити його.
Розділ Flow показує контекст поточного потоку. Він автоматично оновлюється кожного разу,
коли потік змінюється в основній робочій області. У розділі Global відображається глобальний
контекст і завантажується кожного разу, коли завантажується редактор.
Для оновлення виведення кожного типу контексту, використовується відповідна кнопка.
Наведіть курсор на значення контекстного ресурсу для відображення кнопки, яка може
скопіювати його вміст у системний буфер обміну. Значення буде перетворено в JSON, тому не
всі значення можуть бути скопійовані.
28
1.5. Проекти (Projects)
Представлення про проекти
За замовчуванням при завантаженні Node-RED завантажуються потоки вказані в
конфігураційному параметрі flowFile. Це зручно для систем, де розгортається конкретний
застосунок в режимі виконання. Але на робочій станції розробника як правило розробляються
застосунки для кількох станцій виконання, тому зручнішим механізмом є використання
проектів. Замість того, щоб представляти потоки як просту пару файлів, проекти організують
все необхідне для створення застосунку Node-RED, який може бути розповсюджений.
Проекти підтримуються репозиторієм Git. Таким чином забезпечується керування
версіями, як це робиться для програмних проектів. Щоб увімкнути функцію проектів, у файлі
settings.js додається наступна опція в блок module.exports
editorTheme: {
projects: {
enabled: true
}
}
Після цього необхідно перезапустити Node-RED. Ця функція залежить від наявності
утиліт командного рядку git та ssh-keygen, тому спочатку необхідно встановити їх, зокрема
звідси.
Створення першого проекту
При першому відкритті редактору запропонується створити свій перший проект за
допомогою ваших існуючих файлів потоку.
рис.1.45. Вікно помічника створення проектів
Це допоможе виконати наступні кроки.
1. Налаштувати клієнта керування версіями
Node-RED використовує інструмент з відкритим кодом Git для керування версіями. Він
відстежує зміни файлів проекту і дозволяє користуватися ними на дистанційних сховищах -
репозиторіях (наприклад GitHub). Коли ви здійснюєте певні зміни, Git записує хто вніс зміни з
іменем користувача та електронною адресою. Ім'я користувача може бути будь-яке.
29
2. Створити свій проект
3. Створити файли проекту
Node-RED автоматично перенесе ваші файли потоків у ваш проект. Ви можете
перейменувати їх тут, якщо хочете.
4. Налаштувати шифрування файлу облікових даних
Так, як ви можете поділитися своїм проектом на публічних сайтах, таких як GitHub, в
такому випадку рекомендується шифрувати файл облікових даних (паролі, маркери і т.п). Щоб
його зашифрувати, потрібно вибрати ключ, який буде використовуватися для захисту
файлу. Цей ключ не зберігається в межах проекту а тільки на робочій станції розробника. Якщо
хтось клонує ваш проект, вам потрібно буде надати їм ключ для розшифровки файлу облікових
даних. Інакше їм доведеться відредагувати потоки, щоб надавати власні облікові дані.
Потім проект створюється у каталозі: ~/.node-red/projects/<project-name>.
Робота з проектами
Створивши свій проект, робота з редактором проводиться у звичному режимі. Є кілька
нових частин редактора, які були додані для роботи з проектом.
Доступ до налаштувань проекту
Бічна панель інформації у верхній частині сторінки показує, з яким проектом ви
працюєте. Біля назви проекту є кнопка, яка відкриває діалогове вікно Параметри проекту -
Project Settings (рис.1.46)
рис.1.46. Параметри проекту
Ви також можете отримати доступ до нього через опцію в головному меню Projects -
> Project Settings
Діалогове вікно має три вкладки:
 Project - дозволяє редагувати файл README.md проекту..
 Dependencies - керувати списком модулів вузлів, від яких залежить ваш проект
 Settings - керувати налаштуваннями проекту, включаючи GIT керування
Кожен проект має свій власний файл package.json, який містить список модулів вузлів,
від яких залежить проект. Редактор Node-RED відстежує, які вузли ви використовуєте в потоці,
і допомагає вам підтримувати цей список залежностей (рис.1.47).
30
рис.1.47. Налаштування залежностей
На рис.1.47 поточний проект має три модулі, перераховані в його файлі package., кожен в
різному стані:
 node-red-node-mysql - наразі не встановлено в системі
 node-red-node-random - використовується поточним потоком
 node-red-node-rbe - є в списку встановлених, але не використовується поточним
потоком
 node-red-node-smooth - забезпечує вузол, який використовується поточним потоком,
але цей модуль не вказаний як залежний.
Необхідно оновлювати список залежностей, якщо ви хочете поділитися проектом з іншими -
так як це допоможе користувачам встановити необхідні модулі.
Вкладка параметрів проекту (project settings) дозволяє вам керувати файлами потоку,
конфігурацією шифрування ваших облікових даних та налаштовувати локальні Git-гілки та
віддалені репозитарії.
Керування версіями
До бічної панелі була додана нова вкладка history. Тут ви керуєте версією вашого проекту
(рис.1.48). Вкладка має два розділи:
 Local Changes - показує файли проекту, які змінилися, дозволяючи виставити і
впорядковувати їх.
 Commit History - список всіх коммітів у репозитарії, з інструментами для push
коммітів до віддалених репозитаріїв.
31
рис.1.48. Вікно керування версіями.
Кожного разу, коли ви змінюєте файл проекту, наприклад, розгорнувши нову
конфігурацію потоку, він буде перелічений в розділі Local files. Ви можете натиснути на
назву файлу, щоб побачити, як відрізняється змінені файли від попередніх. Якщо навести
курсор миші на файл, можна побачите кнопку «+» - натиснувши на яку він переміститься до
списку Changes to commit.
Коли ви встановите файли, з якими хочете працювати, натисніть кнопку commit введіть
повідомлення та підтвердьте.
У розділі Commit History перелічено всі комміти у поточній гілці сховища (рис.1.49). Під
час створення проекту Node-RED автоматично створює початковий набір файлів за
замовчуванням для проекту.
рис.1.49. Вкладка Commit history
У верхній частині списку знаходиться кнопка Branch, що дозволяє вам
перевірити/створити гілки в сховищі. Якщо у вашому репозитарії є налаштований дистанційний
репозитарій, то є також кнопка, яка показує скільки новіших коммітів у вашому локальному
репозитарію, порівняно з дистанційним. Це дозволяє вибрати дистанційне/відгалужене
відстеження і натискання/перетягування змін до дистанційного сховища. Це одна з областей, в
якій редактор Node-RED намагається спростити дію користувачу, але не надає весь набор
опцій, що надає git. Тому можна і надалі користуватися безпсередньо інструментами git.
Створення, відкривання, клонування проектів
32
Створення нового проекту відбувається через меню Projects -> New, відкривається
діалогове вікно Projects. Є три доступних опції:
 відкрити існуючий проект
 створити новий проект
 клонування репозитарію проекту
Node-RED може виконувати лише один проект в один момент часу. Відкриваючи інший
проект, ви змінюєте запущені потоки. Переглядач open project також дозволяє видаляти
проекти: наведіть курсор на проект у списку та натисніть кнопку видалення. Ви не можете
видалити активний проект.
Можна клонувати існуючий віддалений репозиторій. Можна використовувати url
http(s) або git/ssh для вказівки сховища. Якщо репозитарій вимагає автентифікації, ви
повинні пройти його тут
Для http url-адреси, не включають ім’я користувача і його пароль. Ви маєте надати їх
окремо, коли з’явиться запит. Для git/ssh, Node-RED запропонує список доступних SSH
відкритих ключів. Цей список генерується скануванням ~/.ssh для файлів з розширенням
.pub що мають відповідні файли приватних ключів. Це також дозволяє генерувати нові пари
публічних/приватних ключів через вкладку Git config вікна основних налаштувань. Ці файли
зберігаються в ~/.node-red/projects/.sshkeys/. Якщо в вас увімкнений
adminAuth файли визначаються для поточного входу в систему, тому їм не потрібно
передавати облікові дані для дистанційного репозитарію.
1.6. Робота з повідомленнями
Потік Node-RED працює, передаючи повідомлення між вузлами, які обробляють
їх. Повідомлення є простими об'єктами JavaScript, які можуть мати будь-який набір
властивостей. Повідомлення, як правило, мають властивість payload, це властивість за
умовчанням, з яким працюватиме більшість вузлів Node-RED також додає властивість, що
називається _msgid - це ідентифікатор для повідомлення, яке може використовуватися для
відстеження його проходження потоком
{
"_msgid": "12345",
"payload": "..."
}
Окрім цих двох властивостей, як правило використовують властивість topic. Це
властивість, якою іменують повідомлення (тема), щоб його можна було обробляти за певними
правилами. Використання payload як носія значення повідомлення, а topic як його назви не є
обов'язковим. Але програма в Node-RED очевидно буде більш зрозумілою іншим, якщо
дотримуватися такого підходу.
Значенням властивості може бути будь-який дійсний тип JavaScript, наприклад
 Boolean - true, false
 Number – наприклад 0, 123.4
 String - "hello"
 Array - [1,2,3,4]
 Object - { "a": 1, "b": 2}
 Null
Докладніше про типи JavaScript можна дізнатися за посиланням.
Розбір структури повідомлень
Найпростіший спосіб зрозуміти структуру повідомлення - передати його в вузол Debug і
переглянути його на бічній панелі Debug. За замовчуванням на вузлі Debug відображатиметься
властивість msg.payload , але може бути налаштована для відображення будь-яка інша
33
властивість або все повідомлення цілком. При відображенні масиву або об'єкту бічна панель
забезпечує структурований вигляд, який може використовуватися для вивчення повідомлення.
рис.1.50. Перегляд структури повідомлення на бічній панелі Debug
 в самому верху він показує ім'я властивості, яке було передано. Тут за замовчуванням
використано msg.payload
 поруч із назвою є назва типу властивості - Object, String, Array ін.
 потім він показує вміст властивості. Для масивів і об'єктів властивість розкладається на
рядки. Клацаючи по ньому, властивість розгорнеться, щоб показати більш детальну
інформацію.
Коли ви наводите курсор миші на будь-який елемент, праворуч з'являється набір кнопок
(див.рис.1.51):
 : копіює шлях до обраного елемента у буфер обміну. У цьому прикладі він буде
копіювати payload.Phone[2].type. Це дозволяє швидко визначити, як отримати
доступ до властивості на вузлі Change або Function.
 : копіює значення елемента у буфер обміну як рядок JSON. Зауважте, що бічна
панель обробляє масиви та буфери певної довжини. Копіюючи значення такої
властивості, буде скопійована урізана версія.
 : вибирає елемент таким чином, що він завжди відображається. Коли одне
повідомлення одержується з того ж вузла відлагодження, його автоматично
розширюють, щоб показати всі закріплені елементи.
рис.1.51. Перегляд структури масивів та об’єктів в повідомленні
34
Об'єкти та JSON
Якщо спростити принципи функціонування Node-RED, то застосунок по суті
розробляється через графічне представлення інтерпретації зв'язку функцій JavaScript через
змінні msg. Кожен вузол є реалізацією функцій JS, тому усі типи даних з яким вони працюють є
типами даних JS.
Тип object - у JavaScript це колекція властивостей і методів. Властивість – це значення
або набір значень (у вигляді масиву або об'єкта), який є частиною об'єкта і може містити будь
який тип даних. До властивості можна доступатися через крапку. Оскільки msg є об'єктом, до
його властивості payload можна доступатися через крапку як до msg.payload.
рис.1.52. Виведення властивості payload об'єкту msg
У той же час payload, як і інші властивості msg можуть бути у свою чергу об'єктами. У
JS значення типу об'єкт задається з використанням спеціального синтаксису, у якому воно
вказується у фігурних дужках {} . Враховуючи що об'єкти мають властивості, їх перелічують
через кому в форматі назва_властивості : значення_властивості. Для написання коду
JS в Node-RED використовується вузол типу function, який використаємо для прикладу
демонстрації. Якщо наведений на рис.1.52 код модифікувати як на рис.1.53, а вузол Debug
налаштувати на виведення всього повідомлення, то результат виведення буде як зображено
праворуч на рис.1.53.
рис.1.53. Добавлення об'єктної властивості в JS
Методом називається властивість-функція об'єкта. Як властивість, метод містить JS-код
функції. Але якщо до методу звернутися з вказівкою дужок, цей код буде запускатися. Якщо
код функції з рис.1.53 змінити на наступний
msg.ob = {
hello: "Привіт!",
who: "Світ!",
met: function (a) {
return (msg.payload + a)
}
};
35
msg.ret = msg.ob.met(" Це я!")
return msg;
то результат вийде
рис.1.54. Добавлення методу в JS
Якщо об'єкт треба передати у вигляді тексту, для його кодування використовується
схожий синтаксис як в коді JS, але з певними додатковими правилами. Цей синтаксис отримав
назву JSON (JavaScript Object Notation) і він часто використовується у веб-API, MQTT та інших
протоколах для кодування даних.
Якщо властивість повідомлення містить рядок JSON, то перед тим, як отримувати
доступ до його властивостей, його слід перетворити до еквівалентного об'єкта JavaScript. Щоб
визначити, чи властивість вміщує String чи Object, може бути використаний вузол Debug.
Для здійснення цього перетворення Node-RED забезпечує вузол JSON , який розглянуто нижче.
Властивості об'єкту записуються у форматі ключ : значення наступним чином:
{"key1" : 23 , "key2" : "24", "key5" : {"key5_1": 37, "key5_2": [123,
124]} }
Ключі обов'язково беруться в подвійні лапки. Масиви записуються з використанням
квадратних дужок, в яких перераховуються елементи масиву:
[10, "20", 30]
У якості елементів можна використовувати різні типи даних: Number, String,
Object, Array, true/false, null. Таким чином масиви та об'єкти можуть включати у
свою чергу також масиви та об'єкти.
Так наприклад можна задавати властивість типу JSON у вузлі Inject . Аналогічний до
рис.1.53 приклад з Inject може мати вигляд як на рис.1.55.
рис.1.55. Створення властивості у форматі JSON у вузлі Inject
Зміна властивостей повідомлення
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник
Node-RED довідник

Mais conteúdo relacionado

Mais de Пупена Александр

Розроблення підсистеми трендів
Розроблення підсистеми трендівРозроблення підсистеми трендів
Розроблення підсистеми трендівПупена Александр
 
9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon
9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon
9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenonПупена Александр
 
8 Розробка підсистеми тривожної сигналізації
8 Розробка підсистеми тривожної сигналізації8 Розробка підсистеми тривожної сигналізації
8 Розробка підсистеми тривожної сигналізаціїПупена Александр
 
Анімовані компоненти та навігація
Анімовані компоненти та навігаціяАнімовані компоненти та навігація
Анімовані компоненти та навігаціяПупена Александр
 
Розроблення дисплеїв та анімованих елементів
Розроблення дисплеїв та анімованих елементівРозроблення дисплеїв та анімованих елементів
Розроблення дисплеїв та анімованих елементівПупена Александр
 
5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPC5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPCПупена Александр
 
Підсистема введення/виведення SCADA/HMI. Modbus
Підсистема введення/виведення SCADA/HMI. ModbusПідсистема введення/виведення SCADA/HMI. Modbus
Підсистема введення/виведення SCADA/HMI. ModbusПупена Александр
 
Підсистема керування збором та обробкою даних в реальному часі
Підсистема керування збором та обробкою даних в реальному часіПідсистема керування збором та обробкою даних в реальному часі
Підсистема керування збором та обробкою даних в реальному часіПупена Александр
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIЗагальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIПупена Александр
 
2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ
2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ
2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІПупена Александр
 
2.1. Функції графічного людино-машинного інтерфейсу
2.1. Функції графічного людино-машинного інтерфейсу2.1. Функції графічного людино-машинного інтерфейсу
2.1. Функції графічного людино-машинного інтерфейсуПупена Александр
 
Мастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-RED
Мастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-REDМастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-RED
Мастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-REDПупена Александр
 
Про курс «Технологии Индустрии 4.0»
Про курс «Технологии Индустрии 4.0» Про курс «Технологии Индустрии 4.0»
Про курс «Технологии Индустрии 4.0» Пупена Александр
 
Git и GitHub для создания учебного контента
Git и GitHub для создания учебного контентаGit и GitHub для создания учебного контента
Git и GitHub для создания учебного контентаПупена Александр
 
Короткий опис лабораторного практикуму по MOM
Короткий опис лабораторного практикуму по MOMКороткий опис лабораторного практикуму по MOM
Короткий опис лабораторного практикуму по MOMПупена Александр
 

Mais de Пупена Александр (20)

Інші підсистеми
Інші підсистемиІнші підсистеми
Інші підсистеми
 
11 Підсистеми захисту
11 Підсистеми захисту11 Підсистеми захисту
11 Підсистеми захисту
 
Розроблення підсистеми трендів
Розроблення підсистеми трендівРозроблення підсистеми трендів
Розроблення підсистеми трендів
 
9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon
9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon
9 Приклади підсистеми тривожної сигналізації в SCADA Citect і SCADA zenon
 
8 Розробка підсистеми тривожної сигналізації
8 Розробка підсистеми тривожної сигналізації8 Розробка підсистеми тривожної сигналізації
8 Розробка підсистеми тривожної сигналізації
 
Анімовані компоненти та навігація
Анімовані компоненти та навігаціяАнімовані компоненти та навігація
Анімовані компоненти та навігація
 
Розроблення дисплеїв та анімованих елементів
Розроблення дисплеїв та анімованих елементівРозроблення дисплеїв та анімованих елементів
Розроблення дисплеїв та анімованих елементів
 
5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPC5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPC
 
Підсистема введення/виведення SCADA/HMI. Modbus
Підсистема введення/виведення SCADA/HMI. ModbusПідсистема введення/виведення SCADA/HMI. Modbus
Підсистема введення/виведення SCADA/HMI. Modbus
 
Підсистема керування збором та обробкою даних в реальному часі
Підсистема керування збором та обробкою даних в реальному часіПідсистема керування збором та обробкою даних в реальному часі
Підсистема керування збором та обробкою даних в реальному часі
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIЗагальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
 
2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ
2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ
2_3 Функції графічного людино-машинного інтерфейсу: високоефективний ЛМІ
 
2 2 Інші функції SCADA/HMI
2 2 Інші функції SCADA/HMI2 2 Інші функції SCADA/HMI
2 2 Інші функції SCADA/HMI
 
2.1. Функції графічного людино-машинного інтерфейсу
2.1. Функції графічного людино-машинного інтерфейсу2.1. Функції графічного людино-машинного інтерфейсу
2.1. Функції графічного людино-машинного інтерфейсу
 
Мастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-RED
Мастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-REDМастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-RED
Мастер-класс: отправка данных с ПЛК в Google Sheet с использованием Node-RED
 
Про курс «Технологии Индустрии 4.0»
Про курс «Технологии Индустрии 4.0» Про курс «Технологии Индустрии 4.0»
Про курс «Технологии Индустрии 4.0»
 
Git и GitHub для создания учебного контента
Git и GitHub для создания учебного контентаGit и GitHub для создания учебного контента
Git и GitHub для создания учебного контента
 
Короткий опис лабораторного практикуму по MOM
Короткий опис лабораторного практикуму по MOMКороткий опис лабораторного практикуму по MOM
Короткий опис лабораторного практикуму по MOM
 
Git4 all
Git4 allGit4 all
Git4 all
 
Presentation 111019 1
Presentation 111019 1Presentation 111019 1
Presentation 111019 1
 

Node-RED довідник

  • 1. МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ХАРЧОВИХ ТЕХНОЛОГІЙ ЗАТВЕРДЖУЮ ректор НУХТ, професор_________ О.Ю.Шевченко (Підпис) «____»______________2021 р. О.М. ПУПЕНА ДОВІДНИК З РОЗРОБЛЕННЯ ЗАСТОСУНКІВ В СЕРЕДОВИЩІ NODE- RED ЕЛЕКТРОННИЙ ДОВІДНИК Всі цитати, цифровий та фактичний матеріал, бібліографічні відомості перевірені. Написання одиниць відповідає стандартам Підпис(и) автора(ів)________________ «14» грудня 2020 р. Реєстраційний номер електронного довідника у НМУ 100.115-15.03.2021 КИЇВ НУХТ 2021
  • 2. 2 УДК 004.5:004.6 Рекомендовано Вченою радою Національного університету харчових технологій як електронний довідник для здобувачів закладів вищої освіти (протокол №6 від 24 грудня 2020 року ) Рецензенти: В. А. Волощук, д.т.н., проф., в.о. завідувача кафедри автоматизації теплоенергетичних процесів Національний технічний університет України "Київський політехнічний інститут імені Ігоря Сікорського" Н. А. Заєць, д.т.н., професор кафедри автоматики та робототехнічних систем ім. академіка І.І. Мартиненка Національного університету біоресурсів та природокористування В. М. Сідлецький, к.т.н, доц., доцент кафедри автоматизації та компютерних технологій систем управління Національного університету харчових технологій Пупена О.М. Довідник з розроблення застосунків в середовищі NODE-RED [Електронний ресурс]: електронний довідник. / О.М.Пупена – К.: НУХТ, 2021. – 170 с. У електронному довіднику даються принципи використання та наводяться приклади роботи з Node-RED – середовищем розроблення застосунків для рішень промислового Інтернету речей. Автор: О. М. Пупена, канд. техн. наук Подається в авторській редакції. © О.М. Пупена, 2021 © НУХТ, 2021
  • 3. 3 Зміст Вступ ........................................................................................................................................................7 1. Загальні основи користування Node-RED та основні компоненти................................................8 1.1. Про NODE-RED ...........................................................................................................................8 1.2. Встановлення та перший запуск Node-RED..............................................................................9 1.3. Знайомство з Node-RED............................................................................................................10 1.4. Редактор NODE-RED.................................................................................................................13 Робоча область ..............................................................................................................................13 Палітра (Palette).............................................................................................................................23 Бічна панель (Sidebar)...................................................................................................................24 1.5. Проекти (Projects).......................................................................................................................28 Представлення про проекти.........................................................................................................28 Створення першого проекту ........................................................................................................28 Робота з проектами .......................................................................................................................29 1.6. Робота з повідомленнями..........................................................................................................32 Розбір структури повідомлень.....................................................................................................32 Об'єкти та JSON ............................................................................................................................34 Зміна властивостей повідомлення...............................................................................................35 1.7. Робота з контекстом...................................................................................................................36 1.8. Основні вузли .............................................................................................................................38 Група Common...............................................................................................................................38 Група function ................................................................................................................................43 Група Sequence (послідовності повідомлень) ............................................................................54 1.9. Робота з вузлом Function...........................................................................................................62 Створення функцій .......................................................................................................................62 Відправка повідомлень на декілька виходів ..............................................................................63 Відправка послідовності повідомлень ........................................................................................64 Асинхронна відправка повідомлень............................................................................................64 Виконання коду при старті та зупинці Node-RED.....................................................................65 Ведення журналу подій ................................................................................................................66 Обробка помилок ..........................................................................................................................66 Зберігання даних в контекстних сховищах ................................................................................66 Додавання статусу ........................................................................................................................68 Завантаження додаткових модулів..............................................................................................68 Довідник API .................................................................................................................................68 2. Конфігурування та розширення Node-RED ...................................................................................69 2.1. Конфігурування середовища ....................................................................................................70 Конфігурація середовища виконання .........................................................................................70 Конфігурація середовища розробки (редактора).......................................................................71 Конфігурація Dashboard ...............................................................................................................71 Конфігурація вузла .......................................................................................................................71 2.2. Конфігурування безпеки ...........................................................................................................72 Активація доступу HTTPS ...........................................................................................................72 API редактору та адміністратору.................................................................................................73
  • 4. 4 Безпека вузлів HTTP.....................................................................................................................75 Користувацьке проміжне ПЗ при автентифікації ......................................................................75 2.3. Змінні середовища .....................................................................................................................76 2.4. Розширення застосунків з використанням Node-RED ...........................................................77 3. Розробка людино-машинного інтерфейсу з node-red-dashboard. .................................................78 3.1. Інсталяція та налаштування ......................................................................................................79 3.2. Компонування та налаштування...............................................................................................80 3.3. Налаштування віджетів (Widgets) ............................................................................................83 3.4. Button (Кнопка) ..........................................................................................................................84 3.5. Dropdown (Спадне меню)..........................................................................................................85 3.6. Switch (Перемикач)....................................................................................................................86 3.7. Slider (Повзунок)........................................................................................................................87 3.8. Numeric (Числове поле).............................................................................................................87 3.9. Text input (Текстове поле для вводу) .......................................................................................88 3.10. Date picker(Вибір дати)............................................................................................................88 3.11. Colour picker (Вибір кольору) .................................................................................................89 3.12. Form (Форма)............................................................................................................................90 3.13. Text (Виведення тексту) ..........................................................................................................91 3.14. Gauge (Індикатор) ....................................................................................................................91 3.15. Audio out (Виведення аудіо)....................................................................................................92 3.16. Chart (Діаграма)........................................................................................................................93 3.17. Show notification (Повідомлення)...........................................................................................96 3.18. Ui control (Керування UI) ........................................................................................................97 3.19. Використання AngularJS в Node-RED dashboard ..................................................................98 3.20. Template (Шаблон).................................................................................................................101 4. Вузли для роботи з файлами..........................................................................................................102 4.1. File in (читання з файлу)..........................................................................................................102 4.2. File out (запис в файл)..............................................................................................................103 4.3. Watch (пошук змін у файловій системі) ................................................................................104 4.4. Tail (контроль змін у файлі)....................................................................................................105 4.5. Опис бібліотеки fs-ops.............................................................................................................105 4.6. Dir (перегляд директорії).........................................................................................................106 4.7. Move (переміщення/перейменування файлів).......................................................................106 5. Вузли для роботи з TCP/UDP ........................................................................................................107 5.1. TCP Request (TCP-запит).........................................................................................................107 5.2. TCP in (вхід TCP) .....................................................................................................................108 5.3. TCP out (вихід TCP).................................................................................................................109 5.4. UDP in........................................................................................................................................110 5.5. UDP out......................................................................................................................................111 6. Вузли для роботи з MODBUS........................................................................................................112
  • 5. 5 6.1. Modbus-tcp Server (Конфігурування серверу) .......................................................................113 6.2. Modbus-tcp Read (читання об’єктів).......................................................................................113 6.3. Modbus-tcp Write (запис об’єктів) ..........................................................................................114 7. Вузли для роботи з MQTT..............................................................................................................115 7.1. Mqtt in (вхідні повідомлення з MQTT) ..................................................................................115 7.2. Mqtt out (вихідні повідомлення до MQTT)............................................................................116 7.3. Mqtt-broker (конфігурування) .................................................................................................116 8. Вузли для роботи з HTTP...............................................................................................................118 8.1. HTTP requests (робота з клієнтськими запитами).................................................................118 8.2. Http in (вхідне повідомлення HTTP-серверу)........................................................................120 8.3. Http response (вихідне повідомлення HTTP-серверу)...........................................................122 9. Вузли для роботи з WebSocket ......................................................................................................123 9.1. Налаштування клієнтських і серверних з’єднань .................................................................123 9.2. WebSocket in.............................................................................................................................124 9.3. WebSocket out...........................................................................................................................125 10. Бібліотека PARSING.....................................................................................................................125 10.1. HTML ......................................................................................................................................126 10.2. CSV..........................................................................................................................................127 10.3. JSON........................................................................................................................................129 10.4. XML.........................................................................................................................................130 11. Робота з JSONata...........................................................................................................................132 11.1. Приклад використання в застосунках Node-RED...............................................................132 11.2. Прості запити..........................................................................................................................133 Прості приклади навігації об'єктами JSON..............................................................................133 Пусті послідовності та послідовності з одним елементом .....................................................134 11.3. Предикативні запити (Predicate Queries)..............................................................................135 Предикати ....................................................................................................................................135 Одноелементний масив і еквівалентність значень ..................................................................135 Шаблони заміни ..........................................................................................................................136 11.4. Функції та вирази...................................................................................................................137 Вирази з рядками ........................................................................................................................137 Числові вирази.............................................................................................................................137 Вирази порівняння......................................................................................................................138 Булеві вирази...............................................................................................................................138 11.5. Структурування результату ..................................................................................................139 Конструктор масиву....................................................................................................................139 Конструктор об’єкту...................................................................................................................140 Літерали JSON.............................................................................................................................141 11.6. Запити композиції (Query composition)................................................................................141 11.7. Сортування, групування і агрегація.....................................................................................141 Сортування ..................................................................................................................................141 Групування ..................................................................................................................................142 Агрегація......................................................................................................................................143 12. Бібліотека Storage Cloudant..........................................................................................................144
  • 6. 6 12.1. Створення облікових даних для доступу до сервісу Cloudant...........................................144 12.2. Сloudant config (конфігурація підлкючення).......................................................................145 12.3. Сloudant in (отримати документ з IBM Cloudant) ...............................................................145 12.4. Сloudant out (зберегти в документ IBM Cloudant) ..............................................................147 13. Бібліотека Storage COS (node-red-contrib-cos)............................................................................147 13.1. cos config (конфігурування сховища IBM COS) .................................................................147 13.2. cos get (отримати об’єкт з IBM COS)...................................................................................148 13.3. cos put (зберегти об’єкт в IBM COS)....................................................................................149 13.4. cos del (видалення об’єкту з COS)........................................................................................150 13.5. cos qry (запит на отримання списку об’єктів COS) ............................................................150 14. Робота з Watson IoT Device/Gateway (node-red-contrib-ibm-watson-iot) ..................................151 14.1. wiotp credentionals (конфігураційний вузол означення повноважень доступу)...............151 14.2. wiotp in (вхід команди для IoT).............................................................................................152 14.3. wiotp out (вихід повідомлення від IoT) ................................................................................153 15. Бібліотека IBM IoT APP (node-red-contrib-scx-ibmiotapp) ........................................................154 15.1. ibmiot config (точка доступу до API)....................................................................................154 15.2. ibmiot in (отримання подій від Watson IoT Platform)..........................................................155 15.3. ibmiot out (надислання команд на Watson IoT Platform) ....................................................159 16. Бібліотека OPC UA (node-red-contrib-opcua)..............................................................................160 16.1. OpcUa-Endpoint ......................................................................................................................161 16.2. OpcUa-Client ...........................................................................................................................161 16.3. OpcUa-Item..............................................................................................................................165 16.4. OpcUa-Event............................................................................................................................166 16.5. OpcUa-Server...........................................................................................................................167 Список рекомендованої літератури...................................................................................................170
  • 7. 7 Вступ Node-RED - це інструмент для візуального програмування потоком даних, розроблений працівниками компанії IBM для поєднання різноманітних пристроїв, API та онлайн-сервісів як складових частин Інтернету речей. Node-RED дає можливість програмувати об’єднані в єдину систему апаратні пристрої, застосунки та сервіси через API навіть без використання програмування. Редактор Node-RED виконується як ВЕБ-застосунок, середовище розробки та виконання функціонує на базі Node.js що дає можливість використовувати його на різноманітних платформах та розширювати необхідним функціоналом, що дуже актуально для Інтернету речей, де використовуються різноманітні пристрої. Палітра Node-RED включає різноманітні вузли, які доповнюються бібліотеками, створеними відкритою спільнотою розробників. Node-RED постійно розвивається. З кожним місяцем з'являються нові можливості, а бібліотека вузлів наповнюється новими елементами за рахунок роботи спільноти. Довідник створений з метою спрощення вивчення Node-RED студентам та спеціалістам з автоматизації та комп’ютерно-інтегрованих технологій. Зокрема даний довідник призначений для використання в лабораторних роботах в курсах "Технології індустрії 4.0" та "Програмна інженерія в системах управління" а також для інших дисциплін, де використовується дане середовище. Враховуючи постійну зміну інструментарію деякі вікна та функції можуть мати інший вигляд, ніж в цьому довіднику. Онлайн-версія посібника, яка постійно відображає зміни доступна на GitHub за посиланням https://github.com/pupenasan/NodeREDGuidUKR, його веб-версія також доступна на сторінках GitHub Pages https://pupenasan.github.io/NodeREDGuidUKR.
  • 8. 8 1. Загальні основи користування Node-RED та основні компоненти 1.1. Про NODE-RED Node-RED - це інструмент для візуального програмування, що базується на керуванні потоком даних з використанням графічних вузлів. Вся програма складається з об'єднаних вузлів в потоки, де дані передаються від вхідних вузлів (наприклад опитування датчиків) на вихідні (наприклад виведення повідомлення) через проміжні вузли, які обробляють ці повідомлення (рис.1.1). Графічний редактор базується на WEB, він дає можливість розробляти застосунки через розміщення і з'єднання вузлів та їх налаштування. Хоч Node-RED надає можливість використовувати написання програм через кодування (для цього є вузол Function для запуску JavaScript-функцій), застосунки можна розробляти взагалі без написання коду. рис.1.1. Вікно з програмою Node-RED Node-RED розроблений працівниками компанії IBM для поєднання різноманітних пристроїв, API та онлайн-сервісів як складових частин Інтернету речей. За ініціативою IBM у 2016 році Node-RED став відкритим програмним забезпеченням (open-source) як частина проекту JS Foundation. Сьогодні Node-RED може запускатися на різноманітних засобах у тому числі комп'ютерах та гаджетах під керуванням різних операційних систем, та в хмарних застосунках (рис.1.2). рис.1.2. Можливе розміщення середовища виконання.
  • 9. 9 У Node-RED є як базові вузли, якими одразу забезпечений Node-RED після встановлення, так і додаткові, які можна встановлювати з відкритого репозиторію спільноти. Можна створювати свої власні вузли з унікальним функціоналом. Програми або ж їхні частини, розроблені за допомогою Node-RED, можуть бути збережені та поширені для вільного використання. Саме середовище побудовано на основі Node.js, який реалізовує виконання програм JavaScript як серверного застосунку. рис.1.3. Node-RED на Node.js Потоки, створені за допомогою Node-RED, зберігаються у вигляді JSON. Таким чином вони мають текстовий вигляд, який можна імпортувати та експортувати а також використовувати при розробці інструменти керування версіями Git. 1.2. Встановлення та перший запуск Node-RED Встановити Node-RED можна під платформи, які підтримують Node.js. Для ПК це може бути Windows 7/8/10, Linux, MacOS та інші ОС. Спочатку встановлюється Node.js https://nodejs.org та менеджер пакунків npm (Node Package Manager). Для середовища виконання Node.js npm є менеджером пакунків за замовчуванням. Включає в себе клієнт командного рядка, який також називається npm, а також онлайн-базу даних публічних та приватних пакунків, яка називається реєстром npm. Реєстр доступний через клієнт, а доступні пакунки можна переглядати та шукати через веб-сайт npm. Інсталювання Node-RED проводиться з використанням npm з командою install. npm install -g --unsafe-perm node-red Node-RED запускається з командного рядка node-red Після запуску можуть бути показані повідомлення про пропозицію розблокування брандмауером, з якими треба погодитись. У командному рядку виведуться різноманітні системні повідомлення про запуск та роботу Node-RED, на кшталт того, що показано на рис.1.4.
  • 10. 10 рис.1.4. Запуск Node-RED У прикладному процесі з консоллю де запускається Node-RED виконується серверна частина. Сам редактор функціонує у цьому процесі як ВЕБ-застосунок, тому розробник взаємодіє з ним через браузер. Браузер за замовченням доступається до порту 80, але Node-RED за замовченням надає доступ до своїх ресурсів через tcp-порт 1880. Тому якщо Node-RED запущений на вашому ПК, для редагування необхідно відкрити ВЕБ-браузер і ввести в ньому: http://127.0.0.1:1880/ 127.0.0.1 – це адреса того ж ПК, на якому запускається браузер, так званий loopback address або Localhost. Хоч так само можна доступитися до Node-RED запущеного на іншому вузлі, вказавши його IP-адресу. Для того, щоб Node-RED виконувався, вікно з командним рядком не можна закривати. 1.3. Знайомство з Node-RED Програма створена на Node-RED складається з потоків (Flow), які виконуються як умовно незалежні програми. Потоки – це зв’язані між собою інформаційними дротами (wires) вузли (Node), що виконують певну функцію. Таким чином, ідеологія програмування Node-RED дещо схоже на побудову програм на мові FBD, що є стандартною для програмування ПЛК (IEC 61131-3). Тим не менше, між цими мовами є значні відмінності. Так в FBD з МЕК 61131-3 усі функціональні елементи (функціональні блоки та функції) виконуються кожного разу, як виконується програмний блок, тоді як вузли в Node-RED виконуються тільки тоді, коли на їх вхід приходить повідомлення. Виключенням є вхідні вузли та функції, які можуть викликатися через зворотній виклик. Редактор Node-RED має вигляд як на рис рис.1.5.
  • 11. 11 рис.1.5. Вигляд редактору Node-RED З палітри вузлів вибирається необхідний вузол і переноситься на робочу область, після чого вузли з'єднуються між собою. Налаштування вузлів відбувається через подвійний клік. Найпростіша програма на Node-RED може мати вигляд як на рис.1.6. рис.1.6. Приклад простої програми з двома вузлами Для її побудови вибираються з палітри і розміщуються на робочій області два вузли  з палітри Common вузол inject, позначення за замовченням "timestamp"  з палітри Common вузол Debug, позначення за замовченням "msg.payload" Блакитні кружечки на рис.1.6 значать, що зміна в вузлах ще не відобразилася в середовищі виконання, так як змінена програма не була в ньому розгорнута. Для внесення змін в середовище виконання робиться розгортання. У головному меню вибирається пункт Deploy ->Modified Nodes (див.рис.1.7), після чого натискається Deploy (Розгортання). рис.1.7. Меню розгортання. При вдалому розгортанні з’явиться відповідне повідомлення. А в робочому просторі вузли вже будуть без блакитних кружечків. Для перевірки роботи програми часто використовують вузли Debug, який використаний на рис.1.6. Їх завдання – виводити повідомлення, що приходить на вхід вузла на бічну панель або в командний рядок. Для перевірки наведеної на рис.1.6 програми на бічній панелі треба
  • 12. 12 відобразити вікно Debug messages (налагоджувальні повідомлення) шляхом натиснення кнопки з «жуком» (рис.1.8). рис.1.8. Кнопка меню налагодження. Ліворуч вузла типу Inject з назвою «timestamp» є кнопка, яка приводить до ініціювання розрахунку ланцюжка вузлів, що починаються з нього. Якщо натиснути на цю кнопку з’явиться повідомлення про успішне вприскування (Inject) а на панелі повідомлень з’явиться повідомлення (рис.1.9). рис.1.9. Результат виконання програми Повідомлення – це така структурна змінна (об'єкт JavaScript), яка передається від вузла до вузла в потоці. Ця змінна має принаймні одне поле. У програмі з рис.1.9 повідомлення включає властивість payload, що відображає корисне навантаження повідомлення. За замовчуванням, вузол debug виводить саме його. Щоб вивести все повідомлення, необхідно зайти через подвійний клік в налаштування вузлу з іменем msg.payload і вибрати complete msg object, після чого натиснути кнопку Done (рис.1.10) рис.1.10. Налаштування виведення змісту повідомлення Після таких змін і повторного розгортання проекту, після впорскування вузлом inject повідомлення відобразиться повністю.
  • 13. 13 рис.1.11. Виведення всього повідомлення. На цьому прикладі розглянемо, як виконується програма. У більшості випадків перерахунок вузлів починається тоді, коли на його вхід подається повідомлення (message). Тобто в даній програмі після перерахунку вузла з іменем timestamp буде сформовано об’єкт- повідомлення (msg), який буде переданий по інформаційному дроту іншому вузлу, а саме типу debug. На вхід вузла з іменем timestamp повідомлення не надходять, бо цей вузол є ініціатором розрахунку. Всі вузли палітри що входять в групу вхідних є ініціаторами розрахунку. Ініціація вузлів типу Inject відбувається шляхом ручного запуску по кнопці, або через певні інтервали часу, що вказується у налаштуваннях вузлу. Ініціювання повідомлення - це формування полів для msg та відправка його іншим вузлам по інформаційним дротам. Повідомлення, надіслане вузлом Inject, має властивості payload (корисне навантаження) та topic (тема). Ці два поля притаманні більшості змінних повідомлення msg. Кожен вузол в полі корисного навантаження вказує певне значення, яке у свою чергу може також бути об'єктом (структурою). Поле теми вказує на назву повідомлення. Така структура повідомлення притаманна протоколу MQTT, що робить Node-RED дуже зручним для використання в застосунках Інтернету речей. Вузли, як правило, модифікують вхідні повідомлення і відправляють їх на свої виходи. Тому можна сказати, що повідомлення ініціюється вхідними вузлами, і модифікуються у процесі проходження через вузли поки не надійдуть до вихідного вузла. За замовченням вузол Inject записує у властивість topic відмітку часу (timestamp – кількість мілісекунд, що пройшла з 1980 року). А вузол типу Debug використовується для відображення повідомлень на бічній панелі Debug. Таким чином, після отримання повідомлення, цей вузол надсилає його зміст на бічну панель, якщо можна так виразитися. Потік (Flow) в NodeRED має двояке значення. З одного боку – це з'єднані між собою вузли, як це говорилося до цього. Кілька таких потоків можуть бути присутніми та редагуються на одній вкладці, яка також називається потоком. Таким чином кілька потоків розміщаються на одній вкладці-потоку. Вкладка потік має свою область видимості, яка дає можливість локалізувати "потокові змінні", які називаються контекстом потоку. 1.4. Редактор NODE-RED Як вже зазначалося редактор Node-RED складається з таких 4 компонентів (рис.1.5):  у верхній частині міститься заголовок, що містить кнопку розгортання, головне меню, і якщо користувач пройшов автентифікацію, меню користувача.  ліворуч знаходиться палітра (palette), яка містить вузли доступні для використання  посередині знаходиться основна робоча область(workspace), в якій створюються потоки  праворуч знаходиться бічна панель (sidebar) Розглянемо їх детальніше. Робоча область Основна робоча область (workspace) - це місце, де розробляються потоки (flow) шляхом перетягування з палітри і з’єднання між собою вузлів (nodes). Робоча область має ряд вкладок
  • 14. 14 вздовж заголовку – по одній для кожного потоку і будь-яких підпотоків, що були відкриті (рис.1.12). рис.1.12. Робоча область в редакторі Node-RED Інструменти перегляду Нижній колонтитул містить кнопки для збільшення/зменшення та відновлення стандартного рівня масштабування. Він також містить кнопку перемикання для навігатора перегляду (рис.1.13). Рис.1.13. Нижній колонтитул робочої області з активним навігатором перегляду. Навігатор перегляду забезпечує зменшений вигляд всієї робочої області, виділяючи ту зону, яку необхідно відобразити. Цю зону можна перетягнути всередині навігатора, щоб швидко перейти до інших частин робочої області. Це також корисно для пошуку вузлів, які були "втрачені" на інших краях робочого середовища. Налаштування вигляду Вигляд робочої області можна налаштувати за допомогою вкладки " View’ в діалоговому вікні " User Settings" (рис.1.14)
  • 15. 15 Рис.1.14. вкладка «User Settings» Потоки (Flows) Як вже зазначалося, уся програма складається з об’єднання вузлів – потоків. Для кожного потоку є своя вкладка з назвою потоку (рис.1.15). Потоки можуть називатися однаково, хоч це вносить плутанину. Рис.1.15. Вкладки потоку Щоб додати новий потік натисніть що знаходиться на верхній панелі (рис.1.15) Щоб змінити властивості потоку двічі натисніть на його вкладці у верхній панелі. Відкриється діалогове вікно Flow Properties (рис.1.16). Рис.1.16. Редагування властивостей потоку У діалоговому вікні може бути встановлена назва (name) та опис (description) потоку. Для форматування опису може використовувати синтаксис Markdown. Опис з'явиться у бічній
  • 16. 16 панелі. Для відключення або включення потоків можна використовувати властивість Status(Enables/Disabled). Якщо потік відключено він існує, але не виконується. Щоб видалити потік, натисніть кнопку Delete у діалоговому вікні Flow Properties. Вузли (Nodes) Вузли можуть бути додані до робочої області такими шляхами:  Перетягуванням їх з палітри  Використовуючи діалогове вікно швидкого додавання (CTRL+Click)  Імпортуючи з бібліотеки чи буферу обміну Вузли з’єднуються один з одним за допомогою з’єднань через їхні порти. Вузол може мати не більше одного вхідного порту, але багато вихідних. Порт може мати мітку (label), що буде показуватися при наведенні курсору (рис.1.17). У вузлі можуть бути вказані спеціальні мітки, наприклад, вузол Switch (перемикач) показує правило що відповідає даному порту. Мітки можна налаштувати в діалоговому вікні редагування вузла. рис.1.17. Мітки порту вузла Деякі вузли відображають статусне повідомлення або піктограми біля вузла. Це використовується для позначення стану вузла в режимі виконання. Наприклад, вузли можуть вказувати на те, чи підключені вони в даний час (статус connected на рис.1.18). Рис.1.18. Елементи вузлів Якщо вузол має які-небудь зміни, що не були розгорнуті в режимі виконання, це буде відображено синім кружком над ним. Якщо є помилки у конфігурації, то буде відображатися червоний трикутник (рис.1.18). Деякі вузли містять кнопку з лівого або правого боку. Вони служать для взаємодії з вузлом в редакторі. Вузли Inject і Debug є єдиними основними вузлами, які мають такі кнопки (див. рис.1.18) Діалог швидкого додавання Діалогове вікно швидкого додавання - це простий спосіб додати вузол до робочої області, без необхідності перетягувати її з палітри. Діалогове вікно відкривається шляхом утримування Ctrl або Command разом з натисканням (лівий клік миші) в робочі області (рис.1.19). Рис.1.19. Діалогове вікно швидкого додавання
  • 17. 17 У діалоговому вікні міститься повний список всіх вузлів, доступних для додавання. У верхній частині списку показуються п'ять основних вузлів, наступні – всі нещодавно додані та, нарешті, повний алфавітний список решти вузлів. Як і в основній палітрі, у діалоговому вікні можна швидко знаходити вузол або відфільтрувати список. Редагування конфігурації вузла Конфігурація вузла може бути відредагована подвійним кліком по вузлу чи натисканням клавіші Enter коли вузол в робочій області має фокус. Якщо вибрано декілька вузлів, редагуватися почне перший з них. Діалогове вікно редагування вузла має два окремих розділи: властивості (properties) та налаштувань (settings). У розділі властивостей відображається форма редагування (рис.1.20 ліворуч), специфічна для конкретного типу вузла. У розділі налаштувань відображаються загальні параметри, які можна встановити на всіх вузлах. Включаючи мітки спеціального порту, а також іконку для вузла. рис.1.20 Діалог редагування вузла - розділи властивостей (ліворуч) та налаштувань (праворуч) При натисканні на піктограму можна побачити засіб вибору значків вузла, який можна використовувати для вибору іконки вузла зі списку всіх доступних іконок. рис.1.21 Набір іконок для вузла
  • 18. 18 Конфігураційні вузли Конфігураційні вузли (config Node) - це спеціальний тип вузла, що містить конфігурацію багаторазової доступності, що може бути розподілена між звичайними вузлами потоку. Наприклад, вузли MQTT In і MQTT Out використовують конфігураційний вузол MQTT Broker для представлення спільного підключення до брокера MQTT. Конфігураційні вузли додаються через діалогове вікно редагування вузла, що вимагає вузол конфігурації (рис.1.22). У ньому буде поле для вибору з наявних вузлів конфігурації потрібного типу або додати новий екземпляр. рис.1.22.Додавання вузла конфігурації Натиснувши кнопку поруч із полем вибору, відкриється діалогове вікно редагування для вибраного вузла або додано новий екземпляр (рис.1.23). . рис.1.23.Вікно редагування вузла конфігурації У діалоговому вікні редагування конфігураційного вузла є лише розділ властивостей вузла, оскільки вузол конфігурації не має піктограм або портів для встановлення міток. У нижній частині діалогового вікна вказується, скільки вузлів використовує цей конфігураційний вузол. Вона також містить поле вибору для визначення області використання конфігураційного вузла. Бічна панель конфігурації вузлів може використовуватись для керування всіма конфігураційними вузлами. З’єднання (Wires) Вузли з’єднують разом, шляхом натискання на ліву кнопку миші по порту вузла, перетягуючи так званий дріт до кінцевого вузла та відпускаючи кнопку миші (рис.1.24).
  • 19. 19 рис.1.24. Формування з’єднання між вузлами. Альтернативно можна створити з’єднання шляхом утримання клавіші Ctrl/Command і натискання/відпускання лівою кнопкою миші на порт вузла, а потім натиснув на пункт призначення. Якщо Ctrl/Command залишається утримуваним, а безпосередньо провідний вузол призначення має вихідний порт, тоді з цього порту запускається новий дріт. Це дозволяє швидко з’єднуватися багатьом вузлам разом. Це також можна поєднати з діалогом швидкого додавання, яке спрацьовує Ctrl/Command-Click на робочій області, для швидкої вставки нових вузлів і вони вже будуть підключені до попередніх вузлів потоку. Якщо вузол із вхідним та вихідним портом перетягнений в середину дроту, дріт прийме вигляд штрихової лінії. При відпусканні він автоматично вставляється в потік в цій точці (рис.1.25). рис.1.25. Перемістіть вузол на з’єднання(дріт), щоб вставити його до потоку. Щоб від'єднати дріт від порту, виберіть дріт, натисніть на нього і потримайте клавішу Shift. Після цього дріт відключається від порту і може бути перекинутий на інший порт. Якщо відпустити кнопку над робочою областю, дріт буде видалено. Якщо до порту приєднано декілька дротів, і жоден з них не буде виділений, коли натискається Shiftt всі дроти почнуть рухатися. Щоб видалити дріт, спочатку виберіть його, натиснувши на нього, а потім натисніть кнопку delete Під-потоки (Subflows) Під-потоки – це сукупність вузлів, які згортаються в єдиний вузол у робочій області. Вони можуть бути використані для зменшення певної візуальної складності потоку або для об’єднання групи вузлів, що використовується в різних місцях. Після створення, під-потік додається до палітри доступних вузлів. Потім окремі екземпляри під-потоку можна додати до робочої області, як і будь-який інший вузол. Під-потік не може існувати сам собою без жодних вузлів, він повинен містити їх прямо або опосередковано. Створення та видалення під-потоків Під-потік можна створити, вибравши в меню пункт Subflow -> Create subflow Це створить порожній під-потік і відкриває його у робочій області. Також можна перетворити поточний вибір вузлів на підрівень, вибравши в меню пункт Subflow -> Selection to Subflow. Ці вузли будуть переміщені в новий під-потік і замінені на його екземпляр у потоці (рис.1.26).
  • 20. 20 рис.1.26.Створення під-потоку Це можливо тільки в тому випадку, якщо вхідні з’єднання підключені до одного вузла, - тому що результуючий під-потік вузла сам може мати не більше одного входу (рис.1.27). рис.1.27. Недійсний вибір для під-потоку Для видалення під-потоку та всіх його екземплярів може бути використана кнопка delete subflow на панелі інструментів під-потоку. Редагування під-потоку Існує два способи відкрити під-потік для редагування його вмісту: двічі клацнути на вузол у палітрі або натиснути кнопку Edit flow template у діалоговому вікні редагування вузла (рис. 1.28) Рис .1.28. Редагування під-потоку Під-потік відкривається в робочій області як нова вкладка. На відміну від звичайних вкладок потоку, вкладки під-потоків можуть бути закриті, щоб приховати їх. Входи & Виходи та властивості
  • 21. 21 Входи та виходи під-потоку представлені сірими квадратними вузлами, які можуть бути підключені до потоку. Панель інструментів надає можливість додавання та видалення цих вузлів. Як і в звичайних вузлів у підпотоках може бути не більше одного вводу та багато виходів, за необхідності. Кнопка edit properties відкриває вікно властивостей під-потоку (рис.1.29). Як і у діалоговому вікні властивостей потоку, тут можна вказати назву та опис під-потоку. Можна також встановити категорію під-потоку, або шляхом вибору з однієї з існуючих категорій або додати нову. рис.1.29. Вікно редагування властивостей під-потоку Вибір вузла та з'єднання Вузол вибирається при натисканні на ньому, при цьому буде оновлюватися інформація про нього на бічній панелі: властивості вузла та текст довідки для його типу. За допомогою Ctrl його буде додано до поточного вибору (або видалено з вибору при повторному натисканні). Якщо при натисканні на вузол утримується Shift, він вибере цей вузол та всі інші вузли, до якого той підключений. Дріт (з’єднання) вибирається при натисканні на ньому. На відміну від вузлів, можна вибрати лише одне з’єднання за один раз. Для вибору кількох вузлів може використовуватися інструмент «ласо» (рис.1.30). Він активується за допомогою перетягування одночасно з натисканням в робочій області. Його не можна використовувати для вибору з’єднання. рис. 1.30.Вибір декількох вузлів за допомогою lasso Щоб вибрати всі вузли потоку переконайтеся що робоча область має фокус, а потім натисніть Ctrl/Command-a. Всі вузли та з’єднання, що попали в виділення підтримують копіювання/вирізання/вставку. Зверніть увагу, що дії використовують внутрішній буфер обміну, а не системний, тому перенос в інші редактори Node-RED не працюють. Імпорт та експорт потоків Потоки можна імпортувати та експортувати з редактора, використовуючи формат JSON, що дозволяє дуже легко обмінюватися потоками з іншими редакторами. Щоб імпортувати потік, відкрийте діалогове вікно Import-> Clipboard, вставте текст експортованого потоку у форматі json та натисніть Import to Current flow. Кнопка Import активна лише тоді, коли у діалогове вікно вставлений правильний JSON. У діалоговому вікні
  • 22. 22 також є можливість імпортувати вузли в поточний потік або створити для них новий потік (рис.1.31) рис. 1.31.Діалог імпорту потоків Для копіювання потоку або його частини з редактора в форматі JSON може бути використано вікно експорту. Можна експортувати виділені вузли, поточний потік (включаючи його вузли) або повну конфігурацію потоку (рис.1.32). рис.1.32. Діалог Export Flows У діалоговому вікні експорту є можливість вибрати експорт в компактний або відформатований JSON. Опція compact означує створення єдиного рядку JSON без пробілів. Опція formatted робить JSON форматованим по декільком рядкам з повним відступом, що є зручним для читання. Пошук потоків Для пошуку вузлів усередині робочої області, включаючи конфігураційні вузли, може використовуватися діалогове вікно пошуку. Редактор індексує всі властивості вузлів, тому його можна використовувати для пошуку вузла за його ідентифікатором, типом, ім'ям або будь-якою іншою властивістю. Вибір вузла у списку результатів покаже той вузол у редакторі (рис.1.34).
  • 23. 23 рис.1.34 Діалог пошуку Палітра (Palette) Палітра містить всі вузли, які встановлені та доступні для використання. Вони організовані в декілька категорій (рис.1.35). Якщо є під-потоки, вони з'являються у категорії у верхній частині палітри. Категорії можна розширити або згорнути, натиснувши заголовок. Для згортання або розширення всіх категорій можуть бути використані кнопки та , які знаходяться в нижній частині палітри. Над палітрою є поле для введення, яке можна використовувати для фільтрації списку вузлів. рис.1.35. Основні вузли палітри Для встановлення нових вузлів до палітри може використовуватися менеджер палітри (Palette Manager). Доступ до нього можна отримати за вкладкою Palette tab в User Settings dialog (рис.1.36).
  • 24. 24 рис.1.36. Palette Manager - Nodes tab Менеджер палітри має дві вкладки:  список Nodes (рис.1.36) - список вузлів, які вже встановлені у середовищі виконання  список Install (рис.1.37) - список вузлів доступних до встановлювання Кожен запис у списку Nodes list відображає назву та версію модуля, а також список окремих типів вузлів, які надає модуль. Параметри надаються для видалення, відключення або оновлення кожного модуля. Якщо вузол в даний час використовується в потоці, модуль неможливо видалити чи деактивувати в палітрі. Вкладка Install може використовуватись для пошуку доступних модулів та їх встановлення. рис. 1.37. Palette Manager – вкладка Install Щоб знайти модуль, введіть його ім'я на панелі пошуку. Результати пошуку показують деталі модулів, в тому числі, коли востаннє було оновлено, і посилання на його документацію. Його можна встановити, натиснувши кнопку install. рис.1.38. Palette Manager – деталі інсталювання модулю Бічна панель (Sidebar)
  • 25. 25 Конкретна закладка бічної панелі відкриється при натисканні на значок в заголовку бічної панелі або вибравши їх з випадаючого списку(рис.1.39). Деякі вузли додають власні панелі бічної панелі, наприклад node-red-dashboard рис.1.39. Бічна панель редактору Можна змінити розмір бічної панелі, перетягнувши її край з робочою областю. Якщо край перетягнути близько до правого кінця вікна, бічна панель буде прихована. Її можна показати знову, вибравши опцію Show sidebar в меню View menu, чи через комбінацію Ctrl-Пробіл. Бічна панель: Інформація (Information) На бічній панелі Information відображається детальна інформація про поточний вибраний вузол, зокрема:  Перелік його властивостей  Текст довідки для вузла Якщо нічого не вибрано, панель відображає опис поточного потоку, який можна редагувати в Flow Properties. рис.1.40. Бічна панель інформації Бічна панель: Debug messages На бічній панелі Debug (рис.1.41) відображаються повідомлення, передані в потоці вузлам Debug, а також певні повідомлення з журналу середовища виконання (runtime).
  • 26. 26 рис.1.41.Вікно повідомлень. За замовчуванням бічна панель Debug відображає всі передані йому повідомлення. Повідомлення можна фільтрувати в панелі параметрів фільтрів, що відкривається відповідною кнопкою (рис.1.42). рис.1.42. Параметри фільтра налагоджування Панель містить 3 опції:  all nodes - відображає всі повідомлення  selected nodes - виберіть певні вузли відлагодження зі списку всіх доступних вузлів  current flow - відображає лише повідомлення з вузлів поточного потоку у робочій області Бічна панель Debug може відображати лише 100 останніх повідомлень. Якщо бічна панель наразі показує фільтрований список повідомлень, приховані повідомлення входять до 100 обмежених. Бічна панель може бути очищена натисненням на кнопку з зображенням корзини. Якщо потік має вузли Debug, які створюють багато повідомлень (флуд), і не фільтруються з бічної панелі, то краще їх відключити, натиснувши їх вихідну кнопку в робочій області. Кнопка в нижньому колонтитулі бічної панелі можна використовувати для відкриття окремого вікна веб-переглядача, що містить бічну панель Debug. Бічна панель: Конфігураційні вузли (Configuration nodes) Бічна панель конфігураційних вузлів (Configuration nodes) надає список всіх конфігураційних вузлів в одному екрані. Кожен вузол показує його тип і мітку, а також підрахунок того, скільки вузлів поточного потоку використовує цей вузол конфігурації (рис.1.43). Якщо конфігураційний вузол не використовується, він відображається пунктиром. Щоб показати лише невикористані вузли переглядач також можна фільтрувати, вибравши у заголовку фільтр unused. У діалоговому вікні редагування подвійним кліком миші можна відкрити конфігураційний вузол.
  • 27. 27 рис. 1.43. Конфігураційні вузли бічної панелі Бічна панель: Контекстні дані (Context data) Бічна панель контексту відображає вміст сховища контекстних даних (рис.1.44). Щоб отримати додаткові відомості про використання контексту, прочитайте відповідний розділ довідника. рис.1.44. Бічна панель контекстних даних Панель розділена на три частини, по одному для кожного типу контексту (рис.1.44). Розділ Node показує контекст поточного виділеного вузла. Він не відображає вміст автоматично, а вимагає, щоб користувач натиснув кнопку оновлення, щоб завантажити його. Розділ Flow показує контекст поточного потоку. Він автоматично оновлюється кожного разу, коли потік змінюється в основній робочій області. У розділі Global відображається глобальний контекст і завантажується кожного разу, коли завантажується редактор. Для оновлення виведення кожного типу контексту, використовується відповідна кнопка. Наведіть курсор на значення контекстного ресурсу для відображення кнопки, яка може скопіювати його вміст у системний буфер обміну. Значення буде перетворено в JSON, тому не всі значення можуть бути скопійовані.
  • 28. 28 1.5. Проекти (Projects) Представлення про проекти За замовчуванням при завантаженні Node-RED завантажуються потоки вказані в конфігураційному параметрі flowFile. Це зручно для систем, де розгортається конкретний застосунок в режимі виконання. Але на робочій станції розробника як правило розробляються застосунки для кількох станцій виконання, тому зручнішим механізмом є використання проектів. Замість того, щоб представляти потоки як просту пару файлів, проекти організують все необхідне для створення застосунку Node-RED, який може бути розповсюджений. Проекти підтримуються репозиторієм Git. Таким чином забезпечується керування версіями, як це робиться для програмних проектів. Щоб увімкнути функцію проектів, у файлі settings.js додається наступна опція в блок module.exports editorTheme: { projects: { enabled: true } } Після цього необхідно перезапустити Node-RED. Ця функція залежить від наявності утиліт командного рядку git та ssh-keygen, тому спочатку необхідно встановити їх, зокрема звідси. Створення першого проекту При першому відкритті редактору запропонується створити свій перший проект за допомогою ваших існуючих файлів потоку. рис.1.45. Вікно помічника створення проектів Це допоможе виконати наступні кроки. 1. Налаштувати клієнта керування версіями Node-RED використовує інструмент з відкритим кодом Git для керування версіями. Він відстежує зміни файлів проекту і дозволяє користуватися ними на дистанційних сховищах - репозиторіях (наприклад GitHub). Коли ви здійснюєте певні зміни, Git записує хто вніс зміни з іменем користувача та електронною адресою. Ім'я користувача може бути будь-яке.
  • 29. 29 2. Створити свій проект 3. Створити файли проекту Node-RED автоматично перенесе ваші файли потоків у ваш проект. Ви можете перейменувати їх тут, якщо хочете. 4. Налаштувати шифрування файлу облікових даних Так, як ви можете поділитися своїм проектом на публічних сайтах, таких як GitHub, в такому випадку рекомендується шифрувати файл облікових даних (паролі, маркери і т.п). Щоб його зашифрувати, потрібно вибрати ключ, який буде використовуватися для захисту файлу. Цей ключ не зберігається в межах проекту а тільки на робочій станції розробника. Якщо хтось клонує ваш проект, вам потрібно буде надати їм ключ для розшифровки файлу облікових даних. Інакше їм доведеться відредагувати потоки, щоб надавати власні облікові дані. Потім проект створюється у каталозі: ~/.node-red/projects/<project-name>. Робота з проектами Створивши свій проект, робота з редактором проводиться у звичному режимі. Є кілька нових частин редактора, які були додані для роботи з проектом. Доступ до налаштувань проекту Бічна панель інформації у верхній частині сторінки показує, з яким проектом ви працюєте. Біля назви проекту є кнопка, яка відкриває діалогове вікно Параметри проекту - Project Settings (рис.1.46) рис.1.46. Параметри проекту Ви також можете отримати доступ до нього через опцію в головному меню Projects - > Project Settings Діалогове вікно має три вкладки:  Project - дозволяє редагувати файл README.md проекту..  Dependencies - керувати списком модулів вузлів, від яких залежить ваш проект  Settings - керувати налаштуваннями проекту, включаючи GIT керування Кожен проект має свій власний файл package.json, який містить список модулів вузлів, від яких залежить проект. Редактор Node-RED відстежує, які вузли ви використовуєте в потоці, і допомагає вам підтримувати цей список залежностей (рис.1.47).
  • 30. 30 рис.1.47. Налаштування залежностей На рис.1.47 поточний проект має три модулі, перераховані в його файлі package., кожен в різному стані:  node-red-node-mysql - наразі не встановлено в системі  node-red-node-random - використовується поточним потоком  node-red-node-rbe - є в списку встановлених, але не використовується поточним потоком  node-red-node-smooth - забезпечує вузол, який використовується поточним потоком, але цей модуль не вказаний як залежний. Необхідно оновлювати список залежностей, якщо ви хочете поділитися проектом з іншими - так як це допоможе користувачам встановити необхідні модулі. Вкладка параметрів проекту (project settings) дозволяє вам керувати файлами потоку, конфігурацією шифрування ваших облікових даних та налаштовувати локальні Git-гілки та віддалені репозитарії. Керування версіями До бічної панелі була додана нова вкладка history. Тут ви керуєте версією вашого проекту (рис.1.48). Вкладка має два розділи:  Local Changes - показує файли проекту, які змінилися, дозволяючи виставити і впорядковувати їх.  Commit History - список всіх коммітів у репозитарії, з інструментами для push коммітів до віддалених репозитаріїв.
  • 31. 31 рис.1.48. Вікно керування версіями. Кожного разу, коли ви змінюєте файл проекту, наприклад, розгорнувши нову конфігурацію потоку, він буде перелічений в розділі Local files. Ви можете натиснути на назву файлу, щоб побачити, як відрізняється змінені файли від попередніх. Якщо навести курсор миші на файл, можна побачите кнопку «+» - натиснувши на яку він переміститься до списку Changes to commit. Коли ви встановите файли, з якими хочете працювати, натисніть кнопку commit введіть повідомлення та підтвердьте. У розділі Commit History перелічено всі комміти у поточній гілці сховища (рис.1.49). Під час створення проекту Node-RED автоматично створює початковий набір файлів за замовчуванням для проекту. рис.1.49. Вкладка Commit history У верхній частині списку знаходиться кнопка Branch, що дозволяє вам перевірити/створити гілки в сховищі. Якщо у вашому репозитарії є налаштований дистанційний репозитарій, то є також кнопка, яка показує скільки новіших коммітів у вашому локальному репозитарію, порівняно з дистанційним. Це дозволяє вибрати дистанційне/відгалужене відстеження і натискання/перетягування змін до дистанційного сховища. Це одна з областей, в якій редактор Node-RED намагається спростити дію користувачу, але не надає весь набор опцій, що надає git. Тому можна і надалі користуватися безпсередньо інструментами git. Створення, відкривання, клонування проектів
  • 32. 32 Створення нового проекту відбувається через меню Projects -> New, відкривається діалогове вікно Projects. Є три доступних опції:  відкрити існуючий проект  створити новий проект  клонування репозитарію проекту Node-RED може виконувати лише один проект в один момент часу. Відкриваючи інший проект, ви змінюєте запущені потоки. Переглядач open project також дозволяє видаляти проекти: наведіть курсор на проект у списку та натисніть кнопку видалення. Ви не можете видалити активний проект. Можна клонувати існуючий віддалений репозиторій. Можна використовувати url http(s) або git/ssh для вказівки сховища. Якщо репозитарій вимагає автентифікації, ви повинні пройти його тут Для http url-адреси, не включають ім’я користувача і його пароль. Ви маєте надати їх окремо, коли з’явиться запит. Для git/ssh, Node-RED запропонує список доступних SSH відкритих ключів. Цей список генерується скануванням ~/.ssh для файлів з розширенням .pub що мають відповідні файли приватних ключів. Це також дозволяє генерувати нові пари публічних/приватних ключів через вкладку Git config вікна основних налаштувань. Ці файли зберігаються в ~/.node-red/projects/.sshkeys/. Якщо в вас увімкнений adminAuth файли визначаються для поточного входу в систему, тому їм не потрібно передавати облікові дані для дистанційного репозитарію. 1.6. Робота з повідомленнями Потік Node-RED працює, передаючи повідомлення між вузлами, які обробляють їх. Повідомлення є простими об'єктами JavaScript, які можуть мати будь-який набір властивостей. Повідомлення, як правило, мають властивість payload, це властивість за умовчанням, з яким працюватиме більшість вузлів Node-RED також додає властивість, що називається _msgid - це ідентифікатор для повідомлення, яке може використовуватися для відстеження його проходження потоком { "_msgid": "12345", "payload": "..." } Окрім цих двох властивостей, як правило використовують властивість topic. Це властивість, якою іменують повідомлення (тема), щоб його можна було обробляти за певними правилами. Використання payload як носія значення повідомлення, а topic як його назви не є обов'язковим. Але програма в Node-RED очевидно буде більш зрозумілою іншим, якщо дотримуватися такого підходу. Значенням властивості може бути будь-який дійсний тип JavaScript, наприклад  Boolean - true, false  Number – наприклад 0, 123.4  String - "hello"  Array - [1,2,3,4]  Object - { "a": 1, "b": 2}  Null Докладніше про типи JavaScript можна дізнатися за посиланням. Розбір структури повідомлень Найпростіший спосіб зрозуміти структуру повідомлення - передати його в вузол Debug і переглянути його на бічній панелі Debug. За замовчуванням на вузлі Debug відображатиметься властивість msg.payload , але може бути налаштована для відображення будь-яка інша
  • 33. 33 властивість або все повідомлення цілком. При відображенні масиву або об'єкту бічна панель забезпечує структурований вигляд, який може використовуватися для вивчення повідомлення. рис.1.50. Перегляд структури повідомлення на бічній панелі Debug  в самому верху він показує ім'я властивості, яке було передано. Тут за замовчуванням використано msg.payload  поруч із назвою є назва типу властивості - Object, String, Array ін.  потім він показує вміст властивості. Для масивів і об'єктів властивість розкладається на рядки. Клацаючи по ньому, властивість розгорнеться, щоб показати більш детальну інформацію. Коли ви наводите курсор миші на будь-який елемент, праворуч з'являється набір кнопок (див.рис.1.51):  : копіює шлях до обраного елемента у буфер обміну. У цьому прикладі він буде копіювати payload.Phone[2].type. Це дозволяє швидко визначити, як отримати доступ до властивості на вузлі Change або Function.  : копіює значення елемента у буфер обміну як рядок JSON. Зауважте, що бічна панель обробляє масиви та буфери певної довжини. Копіюючи значення такої властивості, буде скопійована урізана версія.  : вибирає елемент таким чином, що він завжди відображається. Коли одне повідомлення одержується з того ж вузла відлагодження, його автоматично розширюють, щоб показати всі закріплені елементи. рис.1.51. Перегляд структури масивів та об’єктів в повідомленні
  • 34. 34 Об'єкти та JSON Якщо спростити принципи функціонування Node-RED, то застосунок по суті розробляється через графічне представлення інтерпретації зв'язку функцій JavaScript через змінні msg. Кожен вузол є реалізацією функцій JS, тому усі типи даних з яким вони працюють є типами даних JS. Тип object - у JavaScript це колекція властивостей і методів. Властивість – це значення або набір значень (у вигляді масиву або об'єкта), який є частиною об'єкта і може містити будь який тип даних. До властивості можна доступатися через крапку. Оскільки msg є об'єктом, до його властивості payload можна доступатися через крапку як до msg.payload. рис.1.52. Виведення властивості payload об'єкту msg У той же час payload, як і інші властивості msg можуть бути у свою чергу об'єктами. У JS значення типу об'єкт задається з використанням спеціального синтаксису, у якому воно вказується у фігурних дужках {} . Враховуючи що об'єкти мають властивості, їх перелічують через кому в форматі назва_властивості : значення_властивості. Для написання коду JS в Node-RED використовується вузол типу function, який використаємо для прикладу демонстрації. Якщо наведений на рис.1.52 код модифікувати як на рис.1.53, а вузол Debug налаштувати на виведення всього повідомлення, то результат виведення буде як зображено праворуч на рис.1.53. рис.1.53. Добавлення об'єктної властивості в JS Методом називається властивість-функція об'єкта. Як властивість, метод містить JS-код функції. Але якщо до методу звернутися з вказівкою дужок, цей код буде запускатися. Якщо код функції з рис.1.53 змінити на наступний msg.ob = { hello: "Привіт!", who: "Світ!", met: function (a) { return (msg.payload + a) } };
  • 35. 35 msg.ret = msg.ob.met(" Це я!") return msg; то результат вийде рис.1.54. Добавлення методу в JS Якщо об'єкт треба передати у вигляді тексту, для його кодування використовується схожий синтаксис як в коді JS, але з певними додатковими правилами. Цей синтаксис отримав назву JSON (JavaScript Object Notation) і він часто використовується у веб-API, MQTT та інших протоколах для кодування даних. Якщо властивість повідомлення містить рядок JSON, то перед тим, як отримувати доступ до його властивостей, його слід перетворити до еквівалентного об'єкта JavaScript. Щоб визначити, чи властивість вміщує String чи Object, може бути використаний вузол Debug. Для здійснення цього перетворення Node-RED забезпечує вузол JSON , який розглянуто нижче. Властивості об'єкту записуються у форматі ключ : значення наступним чином: {"key1" : 23 , "key2" : "24", "key5" : {"key5_1": 37, "key5_2": [123, 124]} } Ключі обов'язково беруться в подвійні лапки. Масиви записуються з використанням квадратних дужок, в яких перераховуються елементи масиву: [10, "20", 30] У якості елементів можна використовувати різні типи даних: Number, String, Object, Array, true/false, null. Таким чином масиви та об'єкти можуть включати у свою чергу також масиви та об'єкти. Так наприклад можна задавати властивість типу JSON у вузлі Inject . Аналогічний до рис.1.53 приклад з Inject може мати вигляд як на рис.1.55. рис.1.55. Створення властивості у форматі JSON у вузлі Inject Зміна властивостей повідомлення