使用?Node-RED對?MQTT?數(shù)據流處理
Node-RED 是一個可視化的編程工具,可以創(chuàng)新和有趣的方式將硬件設備、API 和在線服務等連接起來。它提供了一個基于瀏覽器的編輯器,通過調色板中廣泛的節(jié)點將流程輕松連接起來,而這些節(jié)點只需通過一次點擊即可部署到其運行時。
除 HTTP、WebScoket 等一些基礎的網絡服務應用節(jié)點外,Node-RED 還提供對于 MQTT 協(xié)議的連接支持。目前同時提供了一個 MQTT 的訂閱節(jié)點和 MQTT 的發(fā)布節(jié)點,訂閱節(jié)點用于數(shù)據的輸入,而發(fā)布節(jié)點可以用于數(shù)據的輸出。
本文將介紹使用 Node-RED 連接到 MQTT 服務器,并對 MQTT 數(shù)據進行過濾和處理后再將其發(fā)送至 MQTT 服務器的完整操作流程。讀者可以快速了解如何使用 Node-RED 對 MQTT 數(shù)據進行簡單的流處理。
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 物聯(lián)網云平臺 - EMQX Cloud 創(chuàng)建,服務器接入信息如下:
- Broker: broker-cn.emqx.io
- TCP Port: 1883
- WebSocket Port: 8083
在下面的功能演示中,我們將提供一個使用 Node-RED 來處理接收到的包含溫濕度信息的 JSON 數(shù)據,然后對溫度值進行規(guī)則判斷,當溫度發(fā)生改變的時候,就將當前發(fā)生改變的溫度值通過 MQTT 再次發(fā)送出去的簡單使用案例。
連接 MQTT 服務器
我們首先在左側菜單欄中,拖拽一個 MQTT in 的節(jié)點到頁面中,雙擊節(jié)點后,右側出現(xiàn)一個編輯 MQTT 節(jié)點的配置頁面,我們根據內容提示,新建一個連接信息后,再填入 MQTT 的其它連接信息后,點擊 Done 按鈕后,即可保存該節(jié)點信息。
對 MQTT 數(shù)據進行處理
接入數(shù)據:我們拖拽一個 JSON 節(jié)點到頁面中,可以在 JSON 節(jié)點的配置頁面中,配置一個 Action,我們設置為 Always convert to JavasScript Object
,因為我們無法確定發(fā)送過來的數(shù)據是一個 JSON 格式的數(shù)據還是一個 JSON 字符串,因此第一步都將接收到的消息進行一個 JSON 轉換。配置完成后,我們將該節(jié)點與 MQTT in 節(jié)點進行連接。
過濾數(shù)據
我們配置完成格式化發(fā)送過來的消息數(shù)據后,我們就可以拖拽一個 filter 節(jié)點到頁面中,同樣雙擊節(jié)點后,在配置頁面中配置規(guī)則,我們先選擇一個 Mode,我們設置為 blcok unless value changes
,過濾規(guī)則為需要當前接收到數(shù)據的值發(fā)生改變,因為目前數(shù)據為 JSON 格式,我們判斷的是 JSON 數(shù)據內的某一個值,因此我們需要在 Property 這里設置值為 msg.payload.temperature
配置完成后我們點擊 Done 按鈕來保存數(shù)據過濾節(jié)點的配置,最后將該節(jié)點連接到上一步配置完成后的 JSON 節(jié)點。
使用模版
當過濾完數(shù)據后,同樣拖拽一個 template 節(jié)點到頁面中,雙擊節(jié)點后來配置模版內容,使過濾完成后的數(shù)據,能通過模版將數(shù)據進行輸出。當然也可以不需要這個步驟,直接將過濾后的數(shù)據進行輸出。
發(fā)送經過處理后的 MQTT 數(shù)據
完成以上對數(shù)據的處理和過濾后,最后我們再來將處理完成后的數(shù)據使用 MQTT 將其發(fā)送出去,拖拽一個 MQTT out 的節(jié)點到頁面中,填入和 MQTT in 節(jié)點相同的連接信息,配置一個用戶接收數(shù)據的 Topic,最后保存完成后,再將其和 template 節(jié)點進行連接,點擊右上角的 Deploy 按鈕,即可對當前規(guī)則應用進行在線部署。
功能測試
在完成整個流數(shù)據處理的功能編排以后,我們使用 MQTT 5.0 客戶端工具 - MQTT X 來測試和驗證該功能的可用性。我們新建一個連接,連接到剛才在 Node-RED 中配置的 MQTT 云服務地址,然后輸入 MQTT in 節(jié)點內的 Topic 來發(fā)送一條消息,使 Node-RED 能夠接收到我們發(fā)送的 MQTT 數(shù)據。
然后我們再在 MQTT X 中訂閱一個在 MQTT out 節(jié)點內配置的 Topic,用于接收處理過的消息數(shù)據。當發(fā)送一條包含了溫濕度的消息數(shù)據后,我們可以接收到一條根據我們設定的消息模版發(fā)送過來的消息,再次發(fā)送就無法接收到。
因為此時溫度值沒有發(fā)生變化,當我們再次修改溫度值后,就會發(fā)現(xiàn)我們又接收到了一條包含提醒溫度值發(fā)生變化的消息。
總結
至此,我們完成了安裝并使用 Node-RED 連接到 MQTT 云服務,以及對 MQTT 消息數(shù)據進行過濾和處理,最后再將處理完成后的數(shù)據消息發(fā)送至 MQTT 服務器的全部流程。
Node-RED 的交互和使用方式,即用 UI 方式描述通用業(yè)務邏輯,可以降低非專業(yè)開發(fā)人員的上手門檻,使用一個可視化工具快速地創(chuàng)建需要的復雜執(zhí)行任務,可以通過簡單 Node 即節(jié)點連接構建出復雜的任務,特別是針對一些物聯(lián)網的應用場景,都很有幫助。
到此這篇關于使用 Node-RED 處理 MQTT 數(shù)據進行流處理的文章就介紹到這了,更多相關Node-RED 處理 MQTT 數(shù)據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nodejs Express 通過log4js寫日志到Logstash(ELK)
這篇文章主要介紹了Nodejs Express 通過log4js寫日志到Logstash(ELK),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08NodeJs環(huán)境安裝與配置的實現(xiàn)步驟
本文主要介紹了NodeJs環(huán)境安裝與配置,包括配置環(huán)境和配置國內鏡像,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01