Skip to content

Створення власних вузлів в Node-RED

Мета: Здобуття навичок розробки власних модулів в середовищі Node-RED. Практичне використання здобутих навичок роботи з системою модулів для створення власних ефективних рішень.

Виконавець:
студент групи КН-41
Кривобоков Микита Олександрович


Завдання

  1. Спроектуйте власний вузол, опишіть задачу яку він має вирішувати, та алгоритм рішення поставленої перед ним задачі.
  2. Використовуючи наданий в якості прикладу репозиторій, реалізуйте спроектований вузол.
  3. Додайте вузол в якості пакету (інструкція наведена в документації). Створіть тестовий потік, який буде містити базові приклади застосування вашого вузла. Оформіть візуальну складову новоствореного вузла (колір, іконка, опис), додайте базовий опис в діалог конфігурації.
  4. Протестуйте роботу новоствореного вузла, виправте потенційні помилки. Готовий результат повинен бути доступний в якості github репозиторію, посилання на нього має бути закріплено в звіті.
  5. Складіть звіт про виконану роботу, в якому необхідно описати виконану роботу.

Хід роботи

Проєктування вузла

Проблема: Використання вузлів типу change в деяких випадках потребує перетворити одне і те саме поле в різні результати, проте, із збільшенням кількості таких проміжних операцій ("маперів"), збільшується і кількість компонентів. Інший підхід передбачає винисення компонентів у окремі під-потоки — пробле залишиться так, як вона була делегована.

Приклад:

example

Ідея: Об'єднати компонент change (операція) та switch (результати).

Візуальне представлення

flowchart LR
    A[Вхідний об'єкт] --> B{Операції}
    B --> C1[Операція 1<br>Результат 1]
    B --> C2[Операція 2<br>Результат 2]
    B --> C3[Операція 3<br>Результат 3]
    C1 --> D1[Порт 1]
    C2 --> D2[Порт 2]
    C3 --> D3[Порт 3]
Плюси:

  1. Маштабованість та читабельність потоків, є вирішенням проблеми коли набір відносно простих операцій приймають однаковий об'єкт і результат розподіляють.

Мінуси:

  1. Не підходить для складної логіки через свою абстракцію у вигляді поєднання двох компонентів.

Приклад місця використання компонента

example

Це не ідеальне місце застосування компоненту transform-switch, проте демонструє гнучкість даного компонента.

alt text

Найбільшої ефективності від цього компонента можна отримати у ситуації розподілу, коли вхідний компонент може мати різні варіації себе після мапінгу — цей компонент спрощує даний процес без потреби створювати нові під-потоки.

Уточнення до модифікації

Наразі компонент має базові операції по типу set, move, delete, change та passthrough що нічого не робить з об'єктом і прокидує далі. Проте, найбільш ефективним був цей компонент якщо б він містив реалізацію JSONata, це дозволило спростити в деяких місцях потоки, враховуючи що це 'прості' формули.


Дебаг трансформатора

Вхідні дані

input data

Порт виходу 1

output_one

Без змін (об'єкт інший але модифікація в порту 1 відсутня)

Порт виходу 2

output_two

Змінено topic на stats що цілком очікувано від другого порта


Висновок

Здобувши навички розробки власних вузлів в Node-RED, відкрили нові горизонти для організації та проєктування вузлів. Створення кастомного вузла дозволяє оптимізувати роботу з потоками даних та підвищити гнучкість системи. Досвід розробки та тестування власного компонента поглибив розуміння архітектури Node-RED і розширив навички роботи з модульною структурою платформи.