使用 Node-RED 處理 MQTT 資料

語言: CN / TW / HK

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 伺服器​ ​ 建立,伺服器接入資訊如下:

  • 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 即節點連線構建出複雜的任務,特別是針對一些物聯網的應用場景,都很有幫助。

版權宣告: 本文為 EMQ 原創,轉載請註明出處。

原文連結:​ ​https://www.emqx.com/zh/blog/using-node-red-to-process-mqtt-data​