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