使用 Node-RED對 MQTT 數據流處理

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 數據內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: