NodeREDGuidUKR

ДОВІДНИК З NODE-RED українською мовою

На головну Розділ
<- Робота з вузлом Function Робота з контекстом ->

Робота з повідомленнями

Джерело, російськомовна версія

Потік Node-RED працює, передаючи повідомлення між вузлами. Повідомлення є простими об'єктами JavaScript, які можуть мати будь-який набір властивостей. Повідомлення, як правило, мають властивість payload, це властивість за умовчанням, з яким працюватиме більшість вузлів Node-RED також додає властивість, що називається _msgid - це ідентифікатор для повідомлення, яке може використовуватися для відстеження його проходження потоком

{
"_msgid": "12345",
    "payload": "..."
}

Значенням властивості може бути будь-який дійсний тип JavaScript, наприклад

Докладніше про типи JavaScript або з лекції

Розуміння структури повідомлень

Найпростіший спосіб зрозуміти структуру повідомлення - передати його в вузол Debug і переглянути його на бічній панелі Debug. За замовчуванням на вузлі Debug відображатиметься властивість msg.payload , але може бути налаштована для відображення будь-яка інша властивість або все повідомлення цілком. При відображенні масиву або об'єкту бічна панель забезпечує структурований вигляд, який може використовуватися для вивчення повідомлення.

{width=”3.8854166666666665in” height=”3.1354166666666665in”}

рис.1.42. Перегляд структури повідомлення на бічній панелі Debug

Коли ви наводите курсор миші на будь-який елемент, праворуч з'являється набір кнопок:

рис.1.43. Перегляд структури масивів та об’єктів в повідомленні

JSON (JavaScript Object Notation) - це стандартний спосіб подання об'єкта JavaScript у вигляді рядку. Він часто використовується у веб-API для повернення даних. Якщо властивість повідомлення містить рядок JSON, то перед тим, як отримувати доступ до його властивостей, його слід перетворити до еквівалентного об'єкта JavaScript. Щоб визначити, чи властивість вміщує String чи Object, може бути використаний вузол Debug. Для здійснення цього перетворення Node-RED забезпечує вузол JSON .

Зміна властивостей повідомлення

Загальне завдання усіх вузлів в потоці - змінювати властивості повідомлення, яке проходить між вузлами. Наприклад, результатом роботи вузлу  HTTP Request  може бути об'єкт з багатьма властивостями, з яких потрібні лише деякі.

Для модифікації повідомлення використовують два основні вузли – Function та Change

Вузол Function дозволяє запускати будь-який код JavaScript для обробки повідомлення. Це дає вам повну гнучкість в тому, що ви робите з повідомленням, але вимагає розуміння JavaScript і не є необхідним для багатьох простих випадків. 

Вузол Change забезпечує багато функціональних можливостей без необхідності писати код JavaScript. Він не тільки може змінювати властивості повідомлення, але також може отримати доступ до контексту потоку або глобального контексту.

Він забезпечує чотири основні операції:

Для операції set ви спочатку означуєте, яку властивість хочете встановити, тоді значення, яке ви хочете мати. Це значення може бути або жорстко закріплене, наприклад, рядок чи число, або це може бути взяте з іншого повідомлення або властивості контексту потоку або глобального контексту. Він також підтримує використання  JSONata для розрахунку нового значення.

рис.1.44. Встановлення властивості потоку з використанням вузу Change

Наприклад, за допомогою можливості вузлів Debug означати структуру повідомлень, ви можете вставити адресу необхідного атрибуту прямо в поле to, з вибраного списку msg. Тоді буде встановлено  msg.payload в значення msg.payload.Phone[2].type.

Інший приклад виразу  JSONata полягає в перетворенні температури, що зберігається в msg.payload.temperature з одиниць Фаренгейта до Цельсія та збереження результату у новій властивості повідомлення  msg.payload.temperature_c.

рис.1.45. Використання в вузі Change виразів JSONata

{
    "payload": {
        "temperature": 90,
        "temperature_c": 32.22222
    }
}

Зауважте, що вирази JSONata виглядають так само, як JavaScript, але мають деякі ключові відмінності. Див jsonata  для додаткової інформації.

Детальніше про вузол Change читайте за посиланням

Послідовності повідомлень

Послідовність повідомлень - це впорядкована серія повідомлень, які певним чином пов'язані між собою. Деякі вузли призначені для обробки таких послідовностей. Наприклад, вузол Split може перетворювати одне повідомлення, яке є масивом payload , у послідовність повідомлень, де кожне повідомлення містить payload що відповідає одному з елементів масиву.

Є кілька основних вузлів, які можуть працювати з послідовностями повідомлень.

Про msg.parts

Кожне повідомлення в послідовності має властивість msg.parts. Це об'єкт, який містить інформацію про те, як повідомлення входить у послідовність. Він має такі властивості:

msg.parts.id – унікальний ідентифікатор всієї послідовності

msg.parts.index – позиція повідомлення в межах послідовності

msg.parts.count - якщо відомо, загальна кількість повідомлень у послідовності

Примітка: масив parts може містити додаткові метадані про послідовність. Наприклад,  вузол split  також надає інформацію, яка може бути використана  вузлом join  для повторного зібрання послідовності. Див  документацію для вузла split .

Split

Розділює одне повідомлення в послідовність повідомлень. Конкретна поведінка вузла залежить від типу msg.payload.

Вихідне повідомлення містить властивість:

parts (object) – ця властивість містить інформацію про те, як повідомлення було відокремлено від оригінального. Якщо повідомлення проходить через вузол join, послідовність може бути зібрана в одне повідомлення. Властивість має такі властивості:

На наступному прикладі показано, як використовуючи роздільник пробіл ( ) робляться перетворення речення в слова.

На наступному рисунку показаний приклад розділення об’єкту заданого на вхід в форматі JSON.

Вузол Split дозволяє легко створити потік, який виконує загальні дії по всій послідовності повідомлень перед тим, як використати вузол join , рекомбінуючи послідовність знову в одне повідомлення. Він використовує властивість msg.parts для відстеження окремих частин послідовності.

Streaming mode

Вузол також можна використовувати для поповнення потоку повідомлень. Наприклад, пристрій з послідовним інтерфейсом, який надсилає команди з символом переведення рядку, може доставити одне повідомлення з частковою командою в його кінці (що не завершується вказаною послідовністю). У режимі ‘streaming mode’ (Handle as a stream of messages) цей вузол розділить повідомлення та відправить кожен повний сегмент. Якщо в кінці є частковий сегмент, вузол буде тримати його і додавати його до наступного повідомлення, яке отримано.

Під час роботи в цьому режимі вузол не встановлює властивість msg.parts.count, оскільки він не знає, скільки повідомлень очікувати в потоці. Це означає, що його не можна використовувати з вузлом join в автоматичному режимі.

Join

Об’єднує послідовність повідомлень у єдине повідомлення.

Вузол забезпечує три режими роботи:

На вході в payload передаються зміст повідомлення, які треба об’єднати.

Крім того вузол очікує об’єкт parts для режиму автоматичного об’єднання. Ці властивості формуються вузлом split але вони можуть бути створені або модифіковані іншими вузлами. Це має наступні властивості:

Вузол також очікує complete . Якщо ця властивість буде у вхідному повідомленні, вузол додасть корисне навантаження а тоді відправить сформоване вихідне повідомлення. Якщо необхідно просто завершити об’єднання без добавлення корисного навантаження, його треба просто видалити з керуючого повідомлення завершення (що має властивість complete )

Automatic mode (автоматичний режим)

Автоматичний режим для визначення способу з’єднання послідовності використовує властивість parts вхідних повідомлень. Це дозволяє йому автоматично перевертати дію вузла split .

Manual mode (ручний режим)

У ручному режимі, вузол може приєднати послідовності повідомлень до декількох різних типів результатів:

Інші властивості вихідного повідомлення взяті з останнього повідомлення, отриманого до відправки результату.

After a number of messages parts Для того, щоб вказати скільки повідомлень слід отримати, перш ніж генерувати вихідне повідомлення, може бути встановлена властивість кількість повідомлень (count). Для виходів типу об’єкт, після досягнення цієї кількості, вузол може бути налаштований для надсилання повідомлення для кожного наступного отриманого повідомлення (for everysubsequent message).

Можна також налаштувати час timeout, який буде визначати час від отримання першого повідомлення.

Якщо повідомлення отримано із встановленою властивістю msg.complete, вихідне повідомлення завершується та надсилається. Це скидає будь-яку кількість частин.

Якщо повідомлення отримано з встановленою властивістю msg.reset, частково наповнене повідомлення видаляється та не надсилається. Це скидає будь-яку кількість частин.

Reduce Sequence mode

Коли налаштовано Reduce Sequence mode, до кожного повідомлення в послідовності застосовується вираз, а результат накопичується для створення одного повідомлення.

За замовчуванням вираз зменшення застосовується в порядку, від першого до останнього повідомлення послідовності. Він необов’язково може застосовуватися у зворотному порядку.

Приклад: наступні параметри, з урахуванням послідовності числових значень, обчислюють середнє значення:

Зберігання повідомлень

Цей вузол буде буферувати повідомлення всередині, щоб працювати через послідовності. Для обмеження кількості буферів вузлів повідомлень можна використовувати налаштування середовища виконання nodeMessageBufferMaxLength

Sort

Сортує масив або послідовність повідомлень на основі значення властивості або результату вираження JSONata.

Якщо вузол налаштований для сортування властивості повідомлення (Sort = msg), вузол сортує дані масиву, на які вказує задана властивість повідомлення.

Якщо налаштовано для сортування послідовності повідомлень (Sort = messge seqence), вузол буде змінювати їх порядок.

Сортування може бути налаштоване:

Для чисел може бути вказане числове впорядкування as number.

Ключ сортування може бути:

Під час сортування послідовності повідомлень вузол сортування покладається на отримані повідомлення, щоб встановити msg.parts. Вузол split генерує цю властивість, але її можна створити вручну. Він має такі властивості:

Заувага: Цей вузол зберігає всередині повідомлення для своєї роботи. Щоб запобігти несподіваному використанню великих обсягів пам’яті, можна вказати максимальну кількість повідомлень, що зберігаються. За замовчуванням кількість повідомлень не обмежується .

Нижче наведено приклад використання вузла Sort. На вхід потоку подається речення з переліком імен в невідсортованому порядку. Спочатку це речення ділиться на послідовність слів, які розділяються за критерієм символу пробілу. Далі ця послідовність сортується за збільшенням, після чого автоматично об’єднується.

Batch

Створює нові послідовності згрупованих повідомлень з отриманих.

Вузол забезпечує три режими роботи:

Заувага: Цей вузол зберігає всередині повідомлення для своєї роботи. Щоб запобігти несподіваному використанню великих обсягів пам’яті, можна вказати максимальну кількість повідомлень, що зберігаються. За замовчуванням кількість повідомлень не обмежується .

Якщо повідомлення отримано із встановленою властивістю msg.reset, буферні повідомлення видаляються та не надсилаються.

Робота з контекстом ->