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».
См.также
Внешние ссылки