Node-RED系列(五):Node-RED序列節點的使用
上一期我們講到了Node-RED中函式節點的使用,利用函式節點我們可以除錯程式,捕獲錯誤,監聽狀態的改變,本篇文章我再來給大家講一下Node-RED中序列sequence分類下的節點,該分類下有4個節點,
主要是用於對訊息體的處理,四個都是仿照著陣列的方法來實現的. 分別是split, joib,sort,batch,讓我們來一個一個地分析如何使用這些節點完成Iot中流的處理。
splitsplit節點可以將一msg.payload基於一個字串進行分割,比如有一個字串 msg.payload = '1;2;3;4;5'呼叫split節點後,使用;來分割msg.payload,那麼split的下一級節點將會被觸發5次
此節點也可以用於處理二進位制,使用長度分割。
關於這個節點詳細的解釋
輸入
payload節點的行為由msg.payload的型別決定:
字串/buffer - 使用指定的字元(預設值:\n),緩衝區序列或固定長度將訊息拆分。陣列 - 訊息被拆分為單個數組元素或固定長度的陣列。object - 將為物件的每個鍵/值對傳送一條訊息。輸出partsobject此屬性包含有關如何將訊息與原始訊息分開的資訊。如果傳遞給join節點,則可以將序列重組為單個訊息。該屬性具有以下屬性:
id - 一組訊息的識別符號index - 組中的位置count - 如果已知組中的郵件總數。請參閱下面的“流媒體模式”type - 訊息的型別-字串/陣列/物件/bufferch - 對於字串或buffer,用於將訊息拆分為字串或位元組陣列的資料key - 對於物件,建立此訊息的屬性的鍵。可以將節點配置為也將此值複製到另一個訊息屬性,例如msg.topiclen - 使用固定長度值拆分訊息時,每段子訊息的長度在使用join節點將序列重新組合為單個訊息之前,推薦使用此節點來輕鬆地建立跨訊息序列,執行通用操作的流。它使用msg.parts屬性跟蹤序列的各個部分。
流媒體模式
該節點還可以用於重排訊息流。例如,傳送換行符終止命令的序列裝置可能會傳遞一條訊息,並在其末尾帶有部分命令。 在“流模式”下,此節點將拆分一條訊息併發送每個完整的段。如果末尾有部分片段,則該節點將保留該片段,並將其新增到收到的下一條訊息之前。
在此模式下執行時,該節點將不會設定msg.parts.count屬性,因為流中期望的訊息數還是未知的。這意味著它不能在自動模式下與join節點一起使用。
join將訊息序列合併為一條訊息.此模式假定此節點與split相連, 或者接收到的訊息有正確配置的msg.parts屬性.
共有三種模式:
自動模式 與split節點配對時,它將自動將已被拆分的訊息進行合併。手動模式 手動地以各種方式合併訊息序列。列聚合模式 對訊息列中的所有訊息應用表示式以將其簡化為單個訊息。輸入parts使用自動模式時,所有的訊息都應包含此屬性。split節點會生成此屬性,但也可以手動進行設定。該屬性具有以下屬性:
id - 訊息組的識別符號index - 組中的位置count - 如果已知組中的郵件總數。請參閱下面的“流媒體模式”type - 訊息的型別-字串/陣列/物件/bufferch - 對於字串或buffer,用於將訊息拆分為字串或位元組陣列的資料key - 對於物件,建立此訊息的屬性的鍵。可以將節點配置為也將此值複製到另一個訊息屬性,例如msg.topic/li>len - 使用固定長度值拆分訊息時,每段子訊息的長度complete 如果設定,則節點將以其當前狀態傳送其輸出訊息
詳細
自動模式自動模式使用傳入訊息的parts屬性來確定應如何連線序列。這使它可以自動逆轉split節點的操作。手動模式設定為以手動模式時,該節點能以各種不同的方法來處理訊息:字串或緩衝區-透過將每條訊息的選定屬性與指定的連線字元或緩衝區連線起來。陣列 - 透過將每個選定的屬性或整個訊息新增到輸出陣列鍵/值物件 - 透過使用每個訊息的屬性來確定儲存所需值的鍵。merged object - 透過將每個訊息的屬性合併到一個物件下。輸出訊息的其他屬性都取自發送結果前的最後一條訊息。
可以用計數來確定應接收多少條訊息來進行合併。對於物件輸出,可以設定為達到此計數後的每條後續訊息都發送一條輸出。
可以用超時來設定傳送新訊息之前的等待時間。
如果收到設定了msg.complete屬性的訊息時傳送輸出訊息並重置訊息列數。
列聚合模式選擇列聚合模式時,將表示式應用於組成訊息列的每條訊息,並使用聚合值組成一條訊息。sort對訊息屬性或訊息序列進行排序的函式。
當配置為對訊息屬性進行排序時,節點將對指定訊息屬性所指向的陣列資料進行排序。
當配置為對訊息序列排序時,它將對訊息重新排序。
排序順序可以是:
升序降序對於數字,可以透過複選框指定數字順序。排序鍵可以是元素值,也可以是JSONata表示式來對屬性值進行排序,還可以是message屬性或JSONata表示式來對訊息序列進行排序。
在對訊息序列進行排序時,排序節點依賴於接收到的訊息來設定msg.parts。拆分節點將生成此屬性,但也可以手動建立。它具有以下屬性:
id - 訊息組的識別符號index - 組中的位置count - 群組中的郵件總數注意:在此節點的處理中,訊息在內部儲存。透過指定要累積的最大訊息數,可以防止意外的高記憶體使用。預設設定是不限制訊息數量。nodeMessageBufferMaxLength屬性在settings.js中設定。
batch根據各種規則建立訊息序列。
詳細有三種建立訊息序列的模式:
訊息數 將訊息分組為給定長度的序列。 overlap(重疊)選項指定在一個序列的末尾應重複多少訊息。時間間隔 對在指定時間間隔內到達的郵件進行分組。如果在該時間間隔內沒有訊息到達,則該節點可以選擇傳送空訊息。串聯序列 透過串聯輸入序列來建立訊息序列。每條訊息必須具有msg.topic屬性和標識其序列的msg.parts屬性。該節點配置有topic值列表,以標識所連線的順序序列。儲存訊息該節點將在內部緩衝訊息,以便跨序列工作。執行時設定nodeMessageBufferMaxLength可用於限制節點將快取多少訊息