Node-RED 第二章:構建第一條流
留下微信號:bc968413
本篇文章字元數:4698,建議閱讀時間17分鐘,粗略閱讀時間5分鐘。建議開始部署自己的第一條流;
閱讀重點提醒: 1.編輯環境介紹;2.三種類型的節點;3.簡單流的部署邏輯;
需要本案例的程序,直接微我就行,有詳細地Windows配置Node-RED方法,以及案例使用方法。
任何問題與建議,歡迎交流,會定期回復大家。
正文
本章將介紹 Node-RED可視化工具,並展示如何開始構建第一條流。主要學習如何創建簡單流,使用調試節點跟蹤流中的消息,以及如何使用函數節點編寫簡單的JavaScript代碼,來滿足節點特定需求。
為了更好的開始,你可以使用一個配置Node-RED雲服務,為避免廣告之嫌,就不去介紹推薦雲服務的Node-RED了。也可以在本地或智能硬體配置Node-RED。具體的配置方法可以參見:Node-RED,若有必要,後續我們寫出詳細地步驟。
在本章的結束時,希望你能夠創建自己的簡單流,了解Node-RED的UI的方式,同時熟悉 Node-RED提供的一些基本內置節點(Node)使用方法。
Node-RED用戶界面
當激活你所部署的Node-RED時,將看到標準的Node-RED UI,它由三個主窗格組成,如圖2.1所示。
圖2.1 Node-RED UI——顯示節點選擇板(左)、流的編輯界面(中心)和輸出窗格(右)
主窗格是流創建工作區,主要功能就是拖放節點並用線連接它們的地方。在工作區窗格的頂部是一組選項卡。每個選項卡打開以前創建的工作區,並顯示使用該工作區創建的流。
左邊是節點選擇窗格,其中包含 Node-RED支持的所有內置節點。同時也可以安裝開發人員附加的節點。節點以組別功能分門別類,打開其中一個功能類可以顯示單個節點信息。
右側是輸出窗格可以切換信息和調試選項卡等。選擇信息後,將顯示所選節點的文檔。當調試被選中時,它將顯示調試節點的信息、錯誤和警告。
以上這三個主要是常用工具欄,流窗口編輯頁面和右側的輸出窗口。部署按鈕,用戶信息的管理和控制管理的下拉菜單,後續也會有詳細的介紹。
部署按鈕(Deploy)在構建流程時使用,使流部署到Node-RED系統並執行。部署所發生的細節後續也會有介紹。現在只需理解為部署按鈕視使編輯的流運行。
快速訪問Node-RED 節點和消息
正如您在第一章中看到的,Node-RED可以將節點連接在一起,以創建需要執行的編程任務以及流程。消息傳遞到節點之間,從輸入節點通過處理節點最後到輸出節點。簡單地看一下節點、流和消息三者之間的關係。
主要有三種類型的節點:
輸入節點(例如:inject)
輸出節點(例如:debug)
處理節點(例如:function)
圖2.2 節點的主要類型:輸入、輸出和處理
輸入節點允許數據輸入到紅色應用程序或「流」節點中。它們至少有一個輸出端點由右邊的小灰色方塊表示。同時也可以將其他服務數據連接到輸入節點,例如推特,UDP,S7,Modbus,WebSockets,TCP等節點,或利用手動輸入數據到一個流之中。
輸出節點允許在Node-RED的流之外發送數據。它們的左側有一個輸入端點。使用輸出節點將數據發送到其他服務,例如通過Twitter、S7、OPC UA、TCP、serial或電子郵件節點,或者使用調試節點輸出到調試窗進行觀察。
順便提一句,隨著Node-RED的社區日益壯大,同時,在物理網領域中,也逐漸形成了主流的編輯平台。大量的物聯網平台也在Node-RED上提供一些介面,比如:IBM,GE的Predix,西門子的MindSphere也會在Node-RED上提供介面。相信隨著大家對Node-RED平台的認識深入,一定會有助於Node-RED,工業物理網以及物聯網的發展。
處理節點主要功能是處理數據。它們有一個輸入端點和一個或多個輸出端點。它可以轉換數據類型(例如:JSON、CSV、XML)節點,使用數據觸發消息(例如:觸發器trigger、延遲delay)節點,並編寫自定義代碼(例如:函數節點function)進而編寫使用接收到的數據的。
這裡要注意的是,一些節點比如注入(inject)和調試(debug)消息,有一個按鈕可以允許激活一次節點信息(如使用注入節點情況下),或者啟用和禁用一些節點(如在調試節點的情況)。
流由多個節點連接在一起,輸出節點與流中下一個輸入節點相連。消息沿著節點到節點進行傳輸。
Node-RED節點消耗輸入消息並生成輸出消息。消息是包含至少一個「payload「參數的JavaScript對象,如下所示:
表2.1基本 Node-RED 消息結構
msg={
payload:」message payload」
};
結點產生和使用信息,通常使用msg.payload作為主要數據佔位符。但是,消息可以擴展其他參數。例如,設置消息主題並或者添加一個新參數、位置,也可以創建一個新的msg對象,如表2.2所示。
表2.2一個更複雜的Node-RED 消息結構
msg = {
payload:」message payload」,
topic:」error」,
location:」somewhere in space and time」
};
示例2.1 構建第一條流:Hello World
讓我們開始構建第一個流,這樣就可以看到使用Node-RED UI方式以及部署流的過程有多麼簡單。
從最簡單的流程開始,向流中注入一些信息的節點,連接到調試節點,在調試節點中看流的輸出信息。開始我們的設置,一起完成構建完整的」hello word「流。
由於這是第一次演示如何實際構建流,會放慢步驟並解釋每一步的原因。當熟悉了如何創建了第一條流程並看到了它的簡單過程後,後續我們只將看到流的最後狀態,而不會對所有流程進行截圖。
讓我們從最簡單的節點、注釋節點(comment node)開始。將在節點選擇板的功能部分中找到這注釋節點。並將注釋節點拖放到工作流工作區,如圖2.3所示。
圖2.3:使用注釋節點是將可視注釋添加到流中的好方法
看看右邊的信息面板(如果調試選項卡被選中,需要切換到信息)。能看到關於節點的一些信息,包括節點名、唯一ID和帶有節點描述的屬性欄位。更複雜的節點有更多的信息,雙擊注釋節點,將看到一個配置窗口(如圖2.4)
圖2.4 給出注釋的名稱,並在文本框中添加想要的任何信息
讓我們添加實際執行操作的節點,一個注入節點(inject node)。注入節點用於生成流中的輸入,如果將一個注入節點拖放到流工作區,然後查看「信息」選項卡,會看到注入節點的相關文檔。注意,工作區上的節點名稱從注入(inject )更改為時間戳(timestamp ),因為節點的默認行為是注入時間戳——當前時間是從1970年1月1日起,並以毫秒進行記時一個時間戳。
圖2.5 注入節點允許插入事件作為消息,默認為時間戳
還可以注意到注入節點(現在窗口中名為時間戳,timestamp)的右側有一個藍色點在右上方和一個灰色方在中心位置。藍色點表示該節點自從上次更改後沒有被部署,灰色正方形是節點的輸出點。這是將「輸出」消息從注入節點到流中的下一個節點的「連線」位置。
為了獲得注入節點和整個流部署過程的意義,讓我們添加一個調試節點,看看會發生什麼,將它們連接起來,然後部署流並測試它。
首先從節點選擇板拖動一個調試節點(debug node)到工作區。同樣,可以查看節點的信息。
然後把兩個節點連接起來。單擊注入節點的灰色輸出點,然後按下滑鼠按鈕,拖動到調試節點。出現一條線,然後可以連接到調試節點的灰色輸入點。
圖2.6 將注入節點連接到調試節點
這是最簡單的流程,並將當前時間戳發送到調試節點,可以在調試窗格中顯示。
單擊Node-RED窗口中的部署按鈕(deploy,右上角)。可以看到一個彈出框,說明流已成功部署。你也會注意到節點上的藍點消失,說明沒有未部署的流。
在測試流之前,請確保在右邊窗格中選中了調試選項卡。然後單擊注入節點上的左側選項卡,並查看調試窗格中顯示的內容。
注入節點在單擊時生成一個時間戳(從1970年1月1日起的毫秒數),它被轉換成一條消息,並沿著輸出線發送,該傳輸線作為一個輸入消息傳遞到調試節點。調試節點的默認行為是顯示它接收到的任何消息,它在右邊的調試窗格中執行。
祝賀你創建並部署了第一條流!
現在讓我們稍微增加一點,看看我們能用這個簡單的流程做些什麼。首先,我們將編輯注入節點來傳遞文本消息,而不是時間戳。為此,選擇流中的注入節點並雙擊它。您會看到一個配置窗口,如圖2.7所示。
圖2.7 編輯注入節點發送文本而不在是時間戳在有效負載欄位中,選擇字元串而不是時間戳,然後將您喜歡的任何字元串鍵入到有效負載欄位下的空白欄位中。讓我們從「Hello World - 這是我的第一條流「
完成更改後,單擊OK保存更改並查看流程。你會看到藍色的圓點出現在注入節點(這也回到了被稱為注入而不是時間戳)來表明你已經改變了節點的屬性。再次單擊部署按鈕,然後單擊「注入節點」上的選項卡。如果看到調試輸出,不在是時間戳,文本已作為消息發送給調試節點。
圖2.8 發送文本消息而不是時間戳
正如所看到的,很容易連接一些簡單的節點,並讓數據作為消息傳遞到您的流程中。在這個階段,可能會對節點間流動的消息有點疑惑,這時就可以使用調試節點更詳細地檢查它們。
Node-RED中的所有消息都有三個默認屬性:所看到的payload有效負載,message topic消息主題,這是一個用戶定義的字元串用於描述消息的內容和一個內部標識符。如果編輯調試節點配置,就可以看到這些信息。
圖2.9 設置調試節點以顯示消息的內部
選擇調試(debug)節點,雙擊並將節點輸出欄位更改為完成msg對象(Complete msg object)。如果你保存,再次部署和點擊注入節點,你會看到在調試節點窗口中的JSON結構包含3個欄位:topic目前是空白,payload包含字元串設置在注入節點和內部ID欄位」msgid」。通常,內部消息id欄位不被使用。當開發流時,topic和payload會經常使用。
這些欄位是可擴展的,所以你可以定義新的消息屬性,例如,msg.location,可用於對消息源添加行或者列。後續會介紹一個複雜的流。
示例2.2 第二條流:天氣警報
在這個例子中,它類似於第1章中介紹的一個例子,將監測某地的天氣,並在天氣看起來不錯的情況下給自己發一條信息。你可以使用一個內置的天氣結點openweathermap,從http://openweathermap.org檢索你設置的位置的天地信息。一個簡單的函數節點將被用來檢查天氣晴朗的狀態,當天氣不錯時,節點信息將發送到調試界面中。
首先你需要在openweathermap API密鑰。openweathermap提供了一個很好的服務,為世界各地提供詳細的天氣信息。訪問How to start - OpenWeatherMap,畫面如下截圖所示。
你需要註冊一個openweather賬戶如下所示(註冊時可能需要VPN):
現在,讓我們使用API來構建一個天氣預報流。從左窗格拖放一個天氣節點到工作區,如圖2.10所示。
圖2.10 將天氣節點拖放到空白工作區
如果你選擇右邊的信息面板,你可以看到一個描述的openweathermap節點詳細信息以及如何配置和使用它。值得注意的一些有趣的是:
1 它有一個完整的JSON結構為msg.payload,很多天氣細節,都作為名稱值對,例如風速、溫度等;
2 節點定義了3個新的信息的性質,msg.location,msg.time和msg.data。正如上面提到的,可以自由添加屬性信息。openweathermap節點已經添加了一些額外信息。
讓我們配置節點並查看查詢本地天氣後生成的實際數據結構。從雙擊節點開始,並用您的位置填寫表單。在鍵入你的城市和國家。添加API密鑰,你得到的How to start - OpenWeatherMap並點擊「確定」如圖2.11所示。
圖2.11 在配置窗體中設置您的城市和國家,使用上面步驟中獲得的API
然後拖放一個調試節點和線到openweathermap節點。單擊「部署」看到,在調試面板從openweathermap節點的負載對象。
openweathermap節點中所包含的消息payload的是一個JSON結構的數據描述天氣狀況、溫度、日出時間等消息。
圖2.12 openweathermap節點所包含的信息
正如所看到的,該節點提供了大量關於本地天氣的信息,這些都是通常的名稱:value pairs。對於本例,希望使用要測試的天氣欄位來查看它是否被報告為「clear」。如果它是晴朗,就發送下一個信息。
為了編程這個邏輯,需要使用一個函數節點。在第一章節中看到了其中的一個案例,但沒有細節。現在拖動一個功能節點到工作流編輯區,然後雙擊打開節點編輯器。
圖2.13 在openweathermap節點添加一個功能節點
雙擊函數節點並鍵入/複製這個(注意,如果你使用複製/粘貼,確保你粘貼純文本,有時插入奇怪的字元)
if (msg.payload.weather === 「Clear」) {
msg.payload = 「北京今兒是個好天氣 !」
return msg;
}
return null;
圖2.14 編輯函數節點,添加所示的JavaScript
查看所編輯的程序,可以看到,將所傳入的天氣參數信息進行解析,並將其與字元串「Clear」(第1行)進行比較。如果它是相等的,將用自己的字元串重寫消息payload:「北京今兒是個好天氣 !「(第2行)。否則將返回空消息(第5行)。最後一位非常重要,因為在Node-RED 節點中忽略空消息。
你可以做各種各樣的事情,例如連接這一消息到電子郵件節點。在本教程中,我們使用調試輸出節點。
圖2.15 流編輯完成以後,所呈現的結果
總結
在本章節中,開始創建了第一條流,並看到如何將一組基本節點連接在一起,以完成複雜的任務。在講解過程中已經跳過了一些基本的細節,以便讓大家快速地進行,後續的第3章節和第4章節中會有其他講解。然而,到目前為止,已經看到了如何使用Node-RED可視化流生成器、輸入、輸出和處理節點的基本類型。了解了消息的簡要概述,以及如何使用函數節點編寫自己的JavaScript代碼,以便對流中的消息進行簡單的處理。在下一章中,我們將更深入地了解Node-RED的編程模型,並更好地了解主要編程元素和節點以及如何使用多種節點編寫更複雜的流。
推薦閱讀:
※NB-IoT+eMTC+GSM聯網新方式 物聯網爆發真的要到了
※物聯網平台的生態化趨勢
※物聯網PaaS平台承載未來業務
※楊元慶烏鎮暢談智能互聯網,能否成為聯想新機遇?