Node-RED:Библиотеки/node-red/Join

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Нода «Join»

Объединяет серию сообщений в одно сообщение. Работает в трех режимах:

  • Режим «automatic» – если нода «Join» работает в паре с нодой «Split», она будет автоматически объединять созданные ею сообщения, тем самым реверсируя дробление исходного сообщения
  • Режим «manual» – здесь можно задать разные способы объединения сообщений
  • Режим «reduce sequence» – применяет регулярное выражение ко всем сообщениям в серии, чтобы сократить их до одного сообщения

Свойства присылаемого сообщения

  • Свойство «parts» (объект) – для автоматического объединения серии сообщений все они должны иметь это свойство. Его генерирует нода «Split», но его также можно создать вручную. У этого свойства есть несколько подсвойств:
    • «id» – идентификатор группы сообщений
    • «index» – позиция сообщения в группе
    • «count» – общее количество сообщений в группе
    • «type» – тип сообщения (строка/массив/объект/буфер)
    • «ch» – данные, используемые для того, чтобы разбить сообщение на несколько сообщений (используется для строки и буфера)
    • «key» – ключ из пары «ключ/значение», из которой было создано сообщение (используется для объекта)
    • «len» – длина каждого сообщения, если исходное сообщение было разбито на фрагменты фиксированной длины
  • Свойство «complete» – если в этом свойстве будет задано «true», нода отправит исходящее сообщение в его текущем состоянии

Подробное описание

Режим «automatic»

Этот режим использует свойство «parts» входящих сообщений, чтобы определить правильный порядок их объединения. Это позволяет автоматически реверсировать действия, выполненные нодой «Split».

Режим «manual»

В этом режиме можно задать разный результат объединения сообщений:

  • Строка («a String») или буфер («a Buffer») – создаются при помощи объединения заданного свойства (например, «msg.payload») каждого сообщения с использованием специального объединительного символа (например, «\n»)
  • Массив («an Array») – создается при помощи добавления заданного свойства (например, «msg.payload») каждого сообщения или всего сообщения в выходной массив
  • Объект с парами «ключ/значение» («a key/value Object») – здесь «ключ» – это одно свойство сообщения (например, «msg.topic»), а «значение» – другое (например, «msg.payload»), которые объединяются в один объект
  • Объединенный объект («а merged Object») – создается при помощи объединения заданного свойства (например, «msg.payload») каждого сообщения в один объект

Другие свойства выходящего сообщения берутся из последнего сообщения, полученного перед отправкой результата.

Поле «After a number of message parts» («count») можно использовать, чтобы задать, сколько сообщений должно быть получено перед генерированием выходного сообщения. Если у вас на выходе задан объект, то в меню редактирования также будет пункт «and every subsequent message», где можно задать, чтобы после достижения значения в поле «count» нода «Join» отправляла сообщение для каждого последующего полученного сообщения.

В поле «After a timeout following the first message» («seconds») можно задать время, которое должно пройти, прежде чем нода отправит сообщение со всем, что собрала в данный момент.

Если в ноду «Join» придет сообщение со свойством «msg.complete», заданным на «true», сборка нового сообщения тут же прекратится, и нода «Join» отправит его дальше. Это сбросит все незаконченные счетчики. Если в ноду «Join» придет сообщение со свойством «msg.reset», заданным на «true», неполное сообщение будет удалено и не будет отправлено. Это также сбросит все незаконченные датчики.

Режим «reduce sequence»

В этом режиме к каждому сообщению в серии будет применено регулярное выражение, результаты которого будут объединены в одно сообщение.

Поле «Initial value»

Начальное значение, к которому будет суммироваться результат («$A»).

Поле «Reduce exp»

JSONata-выражение, вызываемое для каждого сообщения в серии. Его результат будет передан следующему вызову этого JSONata-выражения, и с каждым вызовом новое значение-результат будет суммироваться к предыдущему. В выражении можно использовать следующие специальные переменные:

  • «$A» – суммированное выражение
  • «$I» – индекс сообщения в серии
  • «$N» – количество сообщений в серии

Поле «Fix-up exp»

Опциональное JSONata-выражение, применяемое после JSONata-выражения из поля «Reduce exp» ко всем сообщениям в серии. В нем можно использовать следующие специальные переменные:

  • «$A» – суммированное выражение
  • «$N» – количество сообщений в серии

По умолчанию выражение из поля «Reduce exp» применяется по порядку – от первого к последнему сообщениям в серии. Но при помощи галочки в пункте «Evaluate in reverse order (last to first)» этот порядок можно реверсировать.

В примере ниже в ноду «Join» приходит серия числовых значений, а она рассчитывает из них среднее значение:

  • «Reduce exp»$A+payload
  • «Initial value»0
  • «Fix-up exp»$A/$N

Хранение сообщений

Нода «Join» сохраняет полученные сообщени я во внутренний буфер, что позволяет ей работать с разными сериями сообщений. Задать лимит сообщений для этого буфера можно в настройке среды выполнения «nodeMessageBufferMaxLength».

См.также

Внешние ссылки