首頁 > 軟體

使用 Node-RED對 MQTT 資料流處理

2022-05-24 22:02:00

Node-RED 是一個視覺化的程式設計工具,可以創新和有趣的方式將硬體裝置、API 和線上服務等連線起來。它提供了一個基於瀏覽器的編輯器,通過調色盤中廣泛的節點將流程輕鬆連線起來,而這些節點只需通過一次點選即可部署到其執行時。

除 HTTP、WebScoket 等一些基礎的網路服務應用節點外,Node-RED 還提供對於 MQTT 協定的連線支援。目前同時提供了一個 MQTT 的訂閱節點和 MQTT 的釋出節點,訂閱節點用於資料的輸入,而釋出節點可以用於資料的輸出。

本文將介紹使用 Node-RED 連線到 MQTT 伺服器,並對 MQTT 資料進行過濾和處理後再將其傳送至 MQTT 伺服器的完整操作流程。讀者可以快速瞭解如何使用 Node-RED 對 MQTT 資料進行簡單的流處理。

Node-RED 安裝

Node-RED 無論是在你原生的電腦上,還是樹莓派等裝置,亦或是雲端伺服器,都可以快速安裝和使用,下面將使用兩種比較常見的安裝方式:

使用 npm 進行全域性安裝:

1npm install -g --unsafe-perm node-red

使用 Docker 進行安裝:

1docker run -it -p 1880:1880 --name mynodered nodered/node-red

執行

如果使用的是 npm 進行的全域性安裝,那麼在提示安裝成功後,只需要在全域性執行 node-red 命令就可以立即啟動 Node-RED。

無論是使用 Docker 還是 npm 在啟動成功後,我們只需要開啟瀏覽器,輸入當前地址加 1880 埠號,即可開啟 Node-RED 的瀏覽器編輯器頁面,例如在本地執行的話,開啟瀏覽器,輸入 http://127.0.0.1:1880,當看到如下圖所示頁面後,說明 Node-RED 已經成功啟動:

在 Node-RED 中使用 MQTT

本文將使用 EMQ 提供的 免費公共 MQTT 伺服器,該服務基於 MQTT 物聯網雲平臺 - EMQX Cloud 建立,伺服器接入資訊如下:

  • Broker: broker-cn.emqx.io
  • TCP Port: 1883
  • WebSocket Port: 8083

在下面的功能演示中,我們將提供一個使用 Node-RED 來處理接收到的包含溫溼度資訊的 JSON 資料,然後對溫度值進行規則判斷,當溫度發生改變的時候,就將當前發生改變的溫度值通過 MQTT 再次傳送出去的簡單使用案例。

連線 MQTT 伺服器

我們首先在左側選單欄中,拖拽一個 MQTT in 的節點到頁面中,雙擊節點後,右側出現一個編輯 MQTT 節點的設定頁面,我們根據內容提示,新建一個連線資訊後,再填入 MQTT 的其它連線資訊後,點選 Done 按鈕後,即可儲存該節點資訊。

對 MQTT 資料進行處理

接入資料:我們拖拽一個 JSON 節點到頁面中,可以在 JSON 節點的設定頁面中,設定一個 Action,我們設定為 Always convert to JavasScript Object,因為我們無法確定傳送過來的資料是一個 JSON 格式的資料還是一個 JSON 字串,因此第一步都將接收到的訊息進行一個 JSON 轉換。設定完成後,我們將該節點與 MQTT in 節點進行連線。

過濾資料

我們設定完成格式化傳送過來的訊息資料後,我們就可以拖拽一個 filter 節點到頁面中,同樣雙擊節點後,在設定頁面中設定規則,我們先選擇一個 Mode,我們設定為 blcok unless value changes,過濾規則為需要當前接收到資料的值發生改變,因為目前資料為 JSON 格式,我們判斷的是 JSON 資料內的某一個值,因此我們需要在 Property 這裡設定值為 msg.payload.temperature 設定完成後我們點選 Done 按鈕來儲存資料過濾節點的設定,最後將該節點連線到上一步設定完成後的 JSON 節點。

使用模版

當過濾完資料後,同樣拖拽一個 template 節點到頁面中,雙擊節點後來設定模版內容,使過濾完成後的資料,能通過模版將資料進行輸出。當然也可以不需要這個步驟,直接將過濾後的資料進行輸出。

傳送經過處理後的 MQTT 資料

完成以上對資料的處理和過濾後,最後我們再來將處理完成後的資料使用 MQTT 將其傳送出去,拖拽一個 MQTT out 的節點到頁面中,填入和 MQTT in 節點相同的連線資訊,設定一個使用者接收資料的 Topic,最後儲存完成後,再將其和 template 節點進行連線,點選右上角的 Deploy 按鈕,即可對當前規則應用進行線上部署。

功能測試

在完成整個流資料處理的功能編排以後,我們使用 MQTT 5.0 使用者端工具 - MQTT X 來測試和驗證該功能的可用性。我們新建一個連線,連線到剛才在 Node-RED 中設定的 MQTT 雲服務地址,然後輸入 MQTT in 節點內的 Topic 來傳送一條訊息,使 Node-RED 能夠接收到我們傳送的 MQTT 資料。

然後我們再在 MQTT X 中訂閱一個在 MQTT out 節點內設定的 Topic,用於接收處理過的訊息資料。當傳送一條包含了溫溼度的訊息資料後,我們可以接收到一條根據我們設定的訊息模版傳送過來的訊息,再次傳送就無法接收到。

因為此時溫度值沒有發生變化,當我們再次修改溫度值後,就會發現我們又接收到了一條包含提醒溫度值發生變化的訊息。

總結

至此,我們完成了安裝並使用 Node-RED 連線到 MQTT 雲服務,以及對 MQTT 訊息資料進行過濾和處理,最後再將處理完成後的資料訊息傳送至 MQTT 伺服器的全部流程。

Node-RED 的互動和使用方式,即用 UI 方式描述通用業務邏輯,可以降低非專業開發人員的上手門檻,使用一個視覺化工具快速地建立需要的複雜執行任務,可以通過簡單 Node 即節點連線構建出複雜的任務,特別是針對一些物聯網的應用場景,都很有幫助。

到此這篇關於使用 Node-RED 處理 MQTT 資料進行流處理的文章就介紹到這了,更多相關Node-RED 處理 MQTT 資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com