一、Node-RED環(huán)境搭建
Node-RED是構(gòu)建物聯(lián)網(wǎng)(IoT,Internet of Things)應(yīng)用程序的一個(gè)強(qiáng)大工具,其重點(diǎn)是簡化代碼塊的“連接”以執(zhí)行任務(wù)。它使用可視化編程方法,允許開發(fā)人員將預(yù)定義的代碼塊(稱為“節(jié)點(diǎn)”,Node)連接起來執(zhí)行任務(wù)。連接的節(jié)點(diǎn),通常是輸入節(jié)點(diǎn)、處理節(jié)點(diǎn)和輸出節(jié)點(diǎn)的組合,當(dāng)它們連接在一起時(shí),構(gòu)成一個(gè)“流”(Flows)。
?Node-RED網(wǎng)關(guān)開發(fā)環(huán)境安裝流程
docker環(huán)境如何部署,網(wǎng)上已經(jīng)有很多教程,這里不再說明,推薦參考官方安裝說明。
地址:https://docs.docker.com/engine/install/centos/(國內(nèi)可能訪問比較慢),也可以在阿里云的文檔中心查看如何部署docker環(huán)境。
二、項(xiàng)目鏡像安裝
docker安裝項(xiàng)目文件非常的簡單,只需要兩條指令即可實(shí)現(xiàn)Node-RED開發(fā)環(huán)境部署,其中第一條通過“docker pull 存儲(chǔ)庫名稱”,就可以項(xiàng)目鏡像,也可以通過“docker --help”查詢指令說明。
docker --help指令(部分)
從Node-RED 1.0開始,Docker Hub上的存儲(chǔ)庫已重命名為“nodered/node-red”,使用“docker pull nodered/node-red”拉取項(xiàng)目鏡像。
要以最簡單的形式在 Docker 中運(yùn)行,只需運(yùn)行:
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
讓我們解讀下指令:
docker run:運(yùn)行容器;
-it:打印安裝會(huì)話,可以省略;
-p:配置本地端口和外部映射端口;
-v node_red_data:/data:掛載一個(gè)名為“node_red_data”的docker到容器/數(shù)據(jù)目錄;
--name mynodered:命名為“mynodered”;
nodered/node-red:鏡像地址;
只使用“Docker run”不先拉取項(xiàng)目鏡像也是可以的,該指令會(huì)查詢本地鏡像如果沒有就會(huì)自動(dòng)從Docker Hub存儲(chǔ)庫下載項(xiàng)目鏡像;
其他的自定義安裝建議仔細(xì)閱讀Node-RED官方文檔(https://nodered.org/docs/)后進(jìn)行,筆者這里只是介紹這個(gè)工具的一種用法,不使用自定義安裝功能。
三、安裝插件
通過Node-RED默認(rèn)安裝環(huán)境是無法實(shí)現(xiàn)RTU設(shè)備的邊緣采集,還需要通過安裝不同的功能插件才能實(shí)現(xiàn),安裝Modbus功能插件(node-red-contrib-modbus)實(shí)現(xiàn)Modbus RTU/Modbus TCP協(xié)議轉(zhuǎn)換和邊緣采集,安裝數(shù)據(jù)庫插件(node-red-node-mysql)實(shí)現(xiàn)邊緣采集數(shù)據(jù)的存儲(chǔ),除了安裝插件還需要少量的“javascript”腳本轉(zhuǎn)換格式和數(shù)據(jù)上報(bào)等。
好在安裝插件的過程可以通過可視化網(wǎng)頁界面實(shí)現(xiàn),無需理解復(fù)雜的安裝指令,這也是Node-RED的優(yōu)點(diǎn)之一,在地址欄中輸入部署Node-RED環(huán)境的IP地址和端口,這里為192.168.88.5:1880。
打開右上角的菜單,選擇節(jié)點(diǎn)管理,點(diǎn)擊“安裝”,搜索框中輸入Modbus功能插件(node-red-contrib-modbus)和數(shù)據(jù)庫插件(node-red-node-mysql)。
成功安裝節(jié)點(diǎn)后在工具欄新增以下節(jié)點(diǎn):
“node-red-contrib-modbus”節(jié)點(diǎn)作者,制作了不同用法的示例,可以通過導(dǎo)入功能,測試?yán)斫獠煌?jié)點(diǎn)的功能,強(qiáng)烈建議多去理解這些實(shí)例,方便后續(xù)使用。
四、網(wǎng)關(guān)實(shí)現(xiàn)
添加“Modbus read”節(jié)點(diǎn)周期查詢Modbus設(shè)備狀態(tài),第一需要配置Modbus設(shè)備的地址,筆者這里使用“Modbus Slave”軟件模擬,地址為192.168.88.100:8890:
圖左通過雙擊打開“Modbus read”配置界面,圖右新增Modbus設(shè)備連接地址,圖中配置寄存器參數(shù),這里以地址0x0000的保持寄存器為例,配置“Poll Rate”查詢周期。
使用“function”節(jié)點(diǎn)提取“Modbus read”節(jié)點(diǎn)周期查詢的數(shù)據(jù),雙擊打開函數(shù)節(jié)點(diǎn),編輯以下腳本:
msg.payload=msg.payload.data;
msg.payload=msg.payload.slice(0,1);
return msg;
使用“template”將“function”節(jié)點(diǎn)處理的結(jié)果進(jìn)行打包,這里將數(shù)據(jù)打包為JSON數(shù)據(jù):
最后通過TCP連接將數(shù)據(jù)傳輸到指定服務(wù)器:
“6”為“DEBUG”節(jié)點(diǎn)用于調(diào)試,通過上述配置就可以將Modbus TCP指令采集到的數(shù)據(jù)轉(zhuǎn)換為JSON數(shù)據(jù)并將數(shù)據(jù)上報(bào)到指定服務(wù)器:
也可以通過Node-RED提供的MQTT連接節(jié)點(diǎn)將數(shù)據(jù)傳輸?shù)椒?wù)器,同時(shí)也可以通過“mysql”節(jié)點(diǎn)將將采集數(shù)據(jù)通過sql語句傳輸?shù)綌?shù)據(jù)庫。
采集上報(bào)數(shù)據(jù)庫與MQTT服務(wù)器流程舉例
至此,一個(gè)簡單的邊緣采集網(wǎng)關(guān)搭建完成。