使用?Node-RED對?MQTT?數(shù)據(jù)流處理
Node-RED 是一個可視化的編程工具,可以創(chuàng)新和有趣的方式將硬件設(shè)備、API 和在線服務(wù)等連接起來。它提供了一個基于瀏覽器的編輯器,通過調(diào)色板中廣泛的節(jié)點(diǎn)將流程輕松連接起來,而這些節(jié)點(diǎn)只需通過一次點(diǎn)擊即可部署到其運(yùn)行時。
除 HTTP、WebScoket 等一些基礎(chǔ)的網(wǎng)絡(luò)服務(wù)應(yīng)用節(jié)點(diǎn)外,Node-RED 還提供對于 MQTT 協(xié)議的連接支持。目前同時提供了一個 MQTT 的訂閱節(jié)點(diǎn)和 MQTT 的發(fā)布節(jié)點(diǎn),訂閱節(jié)點(diǎn)用于數(shù)據(jù)的輸入,而發(fā)布節(jié)點(diǎn)可以用于數(shù)據(jù)的輸出。
本文將介紹使用 Node-RED 連接到 MQTT 服務(wù)器,并對 MQTT 數(shù)據(jù)進(jìn)行過濾和處理后再將其發(fā)送至 MQTT 服務(wù)器的完整操作流程。讀者可以快速了解如何使用 Node-RED 對 MQTT 數(shù)據(jù)進(jìn)行簡單的流處理。
Node-RED 安裝
Node-RED 無論是在你本地的電腦上,還是樹莓派等設(shè)備,亦或是云端服務(wù)器,都可以快速安裝和使用,下面將使用兩種比較常見的安裝方式:
使用 npm 進(jìn)行全局安裝:
1npm install -g --unsafe-perm node-red
使用 Docker 進(jìn)行安裝:
1docker run -it -p 1880:1880 --name mynodered nodered/node-red
運(yùn)行
如果使用的是 npm 進(jìn)行的全局安裝,那么在提示安裝成功后,只需要在全局運(yùn)行 node-red 命令就可以立即啟動 Node-RED。
無論是使用 Docker 還是 npm 在啟動成功后,我們只需要打開瀏覽器,輸入當(dāng)前地址加 1880 端口號,即可打開 Node-RED 的瀏覽器編輯器頁面,例如在本地運(yùn)行的話,打開瀏覽器,輸入 http://127.0.0.1:1880,當(dāng)看到如下圖所示頁面后,說明 Node-RED 已經(jīng)成功啟動:

在 Node-RED 中使用 MQTT
本文將使用 EMQ 提供的 免費(fèi)公共 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ù),然后對溫度值進(jìn)行規(guī)則判斷,當(dāng)溫度發(fā)生改變的時候,就將當(dāng)前發(fā)生改變的溫度值通過 MQTT 再次發(fā)送出去的簡單使用案例。
連接 MQTT 服務(wù)器
我們首先在左側(cè)菜單欄中,拖拽一個 MQTT in 的節(jié)點(diǎn)到頁面中,雙擊節(jié)點(diǎn)后,右側(cè)出現(xiàn)一個編輯 MQTT 節(jié)點(diǎn)的配置頁面,我們根據(jù)內(nèi)容提示,新建一個連接信息后,再填入 MQTT 的其它連接信息后,點(diǎn)擊 Done 按鈕后,即可保存該節(jié)點(diǎn)信息。

對 MQTT 數(shù)據(jù)進(jìn)行處理
接入數(shù)據(jù):我們拖拽一個 JSON 節(jié)點(diǎn)到頁面中,可以在 JSON 節(jié)點(diǎn)的配置頁面中,配置一個 Action,我們設(shè)置為 Always convert to JavasScript Object,因?yàn)槲覀儫o法確定發(fā)送過來的數(shù)據(jù)是一個 JSON 格式的數(shù)據(jù)還是一個 JSON 字符串,因此第一步都將接收到的消息進(jìn)行一個 JSON 轉(zhuǎn)換。配置完成后,我們將該節(jié)點(diǎn)與 MQTT in 節(jié)點(diǎn)進(jìn)行連接。

過濾數(shù)據(jù)
我們配置完成格式化發(fā)送過來的消息數(shù)據(jù)后,我們就可以拖拽一個 filter 節(jié)點(diǎn)到頁面中,同樣雙擊節(jié)點(diǎn)后,在配置頁面中配置規(guī)則,我們先選擇一個 Mode,我們設(shè)置為 blcok unless value changes,過濾規(guī)則為需要當(dāng)前接收到數(shù)據(jù)的值發(fā)生改變,因?yàn)槟壳皵?shù)據(jù)為 JSON 格式,我們判斷的是 JSON 數(shù)據(jù)內(nèi)的某一個值,因此我們需要在 Property 這里設(shè)置值為 msg.payload.temperature 配置完成后我們點(diǎn)擊 Done 按鈕來保存數(shù)據(jù)過濾節(jié)點(diǎn)的配置,最后將該節(jié)點(diǎn)連接到上一步配置完成后的 JSON 節(jié)點(diǎn)。

使用模版
當(dāng)過濾完數(shù)據(jù)后,同樣拖拽一個 template 節(jié)點(diǎn)到頁面中,雙擊節(jié)點(diǎn)后來配置模版內(nèi)容,使過濾完成后的數(shù)據(jù),能通過模版將數(shù)據(jù)進(jìn)行輸出。當(dāng)然也可以不需要這個步驟,直接將過濾后的數(shù)據(jù)進(jìn)行輸出。

發(fā)送經(jīng)過處理后的 MQTT 數(shù)據(jù)
完成以上對數(shù)據(jù)的處理和過濾后,最后我們再來將處理完成后的數(shù)據(jù)使用 MQTT 將其發(fā)送出去,拖拽一個 MQTT out 的節(jié)點(diǎn)到頁面中,填入和 MQTT in 節(jié)點(diǎn)相同的連接信息,配置一個用戶接收數(shù)據(jù)的 Topic,最后保存完成后,再將其和 template 節(jié)點(diǎn)進(jìn)行連接,點(diǎn)擊右上角的 Deploy 按鈕,即可對當(dāng)前規(guī)則應(yīng)用進(jìn)行在線部署。

功能測試
在完成整個流數(shù)據(jù)處理的功能編排以后,我們使用 MQTT 5.0 客戶端工具 - MQTT X 來測試和驗(yàn)證該功能的可用性。我們新建一個連接,連接到剛才在 Node-RED 中配置的 MQTT 云服務(wù)地址,然后輸入 MQTT in 節(jié)點(diǎn)內(nèi)的 Topic 來發(fā)送一條消息,使 Node-RED 能夠接收到我們發(fā)送的 MQTT 數(shù)據(jù)。
然后我們再在 MQTT X 中訂閱一個在 MQTT out 節(jié)點(diǎn)內(nèi)配置的 Topic,用于接收處理過的消息數(shù)據(jù)。當(dāng)發(fā)送一條包含了溫濕度的消息數(shù)據(jù)后,我們可以接收到一條根據(jù)我們設(shè)定的消息模版發(fā)送過來的消息,再次發(fā)送就無法接收到。

因?yàn)榇藭r溫度值沒有發(fā)生變化,當(dāng)我們再次修改溫度值后,就會發(fā)現(xiàn)我們又接收到了一條包含提醒溫度值發(fā)生變化的消息。

總結(jié)
至此,我們完成了安裝并使用 Node-RED 連接到 MQTT 云服務(wù),以及對 MQTT 消息數(shù)據(jù)進(jìn)行過濾和處理,最后再將處理完成后的數(shù)據(jù)消息發(fā)送至 MQTT 服務(wù)器的全部流程。
Node-RED 的交互和使用方式,即用 UI 方式描述通用業(yè)務(wù)邏輯,可以降低非專業(yè)開發(fā)人員的上手門檻,使用一個可視化工具快速地創(chuàng)建需要的復(fù)雜執(zhí)行任務(wù),可以通過簡單 Node 即節(jié)點(diǎn)連接構(gòu)建出復(fù)雜的任務(wù),特別是針對一些物聯(lián)網(wǎng)的應(yīng)用場景,都很有幫助。
到此這篇關(guān)于使用 Node-RED 處理 MQTT 數(shù)據(jù)進(jìn)行流處理的文章就介紹到這了,更多相關(guān)Node-RED 處理 MQTT 數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
NodeJS實(shí)現(xiàn)不可逆加密與密碼密文保存的方法
這篇文章主要介紹了NodeJS實(shí)現(xiàn)不可逆加密與密碼密文保存的方法,簡單講述了不可逆加密與密碼密文保存的原理并結(jié)合實(shí)例形式分析了nodejs相關(guān)加密操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-03-03
node.js中path路徑模塊的使用方法實(shí)例分析
這篇文章主要介紹了node.js中path路徑模塊的使用方法,結(jié)合實(shí)例形式分析了node.js path路徑模塊的基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能
開發(fā)個人網(wǎng)站時,注冊頁面可以使用郵箱驗(yàn)證,于是記錄一下如何用nodejs/express服務(wù)器實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼,不僅可以在郵箱注冊時使用,還可以拓展用于各種安全驗(yàn)證,本文給大家介紹了使用nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能,需要的朋友可以參考下2024-07-07
利用node.js爬取指定排名網(wǎng)站的JS引用庫詳解
最近在學(xué)習(xí)node.js爬蟲,由于 nodejs 強(qiáng)大的異步特性,讓我們可以輕松以異步高并發(fā)去爬取網(wǎng)站,下面這篇文章主要給大家介紹了關(guān)于利用node.js爬取指定排名網(wǎng)站的JS引用庫的相關(guān)資料,需要的朋友可以參考下。2017-07-07

