詳細(xì)介紹
1. 文檔介紹
1.1. 文檔目的
該文檔的主要目的是為了指導(dǎo)用戶如何有效地接入并使用物聯(lián)感知平臺(tái)。文檔將提供詳細(xì)的步驟,包括硬件設(shè)備的配置、網(wǎng)絡(luò)連接的建立、軟件接口的接入以及故障排除等。通過(guò)這個(gè)文檔,用戶能夠快速理解并掌握如何與系統(tǒng)進(jìn)行交互,以實(shí)現(xiàn)對(duì)高速公路的智能管理和優(yōu)化運(yùn)營(yíng)。
1.2.文檔對(duì)象 該文檔主要面向高速公路運(yùn)營(yíng)商、網(wǎng)絡(luò)和硬件工程師、系統(tǒng)管理員等技術(shù)人員。同時(shí),對(duì)于相關(guān)的軟件和高速公路管理人員,本文檔也將提供重要的參考信息。
1.3.文檔內(nèi)容 文檔的主要內(nèi)容包括:
系統(tǒng)概述:簡(jiǎn)單介紹物聯(lián)感知平臺(tái)的設(shè)計(jì)和功能。
設(shè)備接入:詳細(xì)說(shuō)明如何配置和接入硬件設(shè)備。
網(wǎng)絡(luò)連接:解釋如何建立和測(cè)試網(wǎng)絡(luò)連接。
軟件接口:描述如何通過(guò)軟件接口與系統(tǒng)交互。
故障排除:提供一些常見(jiàn)問(wèn)題的解決方案和建議。
系統(tǒng)維護(hù):提供系統(tǒng)日常維護(hù)和更新的建議。
希望通過(guò)本文檔,用戶可以有效地接入和使用物聯(lián)感知平臺(tái),提升高速公路的管理效率和服務(wù)質(zhì)量。
1.2.文檔對(duì)象 該文檔主要面向高速公路運(yùn)營(yíng)商、網(wǎng)絡(luò)和硬件工程師、系統(tǒng)管理員等技術(shù)人員。同時(shí),對(duì)于相關(guān)的軟件和高速公路管理人員,本文檔也將提供重要的參考信息。
1.3.文檔內(nèi)容 文檔的主要內(nèi)容包括:
系統(tǒng)概述:簡(jiǎn)單介紹物聯(lián)感知平臺(tái)的設(shè)計(jì)和功能。
設(shè)備接入:詳細(xì)說(shuō)明如何配置和接入硬件設(shè)備。
網(wǎng)絡(luò)連接:解釋如何建立和測(cè)試網(wǎng)絡(luò)連接。
軟件接口:描述如何通過(guò)軟件接口與系統(tǒng)交互。
故障排除:提供一些常見(jiàn)問(wèn)題的解決方案和建議。
系統(tǒng)維護(hù):提供系統(tǒng)日常維護(hù)和更新的建議。
希望通過(guò)本文檔,用戶可以有效地接入和使用物聯(lián)感知平臺(tái),提升高速公路的管理效率和服務(wù)質(zhì)量。
1.2. 文檔范圍
1.2.1 系統(tǒng)概述
本文檔會(huì)介紹物聯(lián)感知平臺(tái)的總體結(jié)構(gòu)、主要功能、系統(tǒng)需求以及相關(guān)的硬件和軟件組件。但這部分內(nèi)容將不會(huì)深入到具體的實(shí)現(xiàn)技術(shù)或編程細(xì)節(jié)。
1.2.2 設(shè)備接入
我們會(huì)詳細(xì)解釋如何將各類設(shè)備(如傳感器、攝像頭等)接入到物聯(lián)感知平臺(tái)中,包括設(shè)備的配置和連接過(guò)程。但是,具體的設(shè)備安裝和物理布線等步驟可能會(huì)根據(jù)設(shè)備的型號(hào)和規(guī)格略有不同,這些內(nèi)容不在本文檔的討論范圍內(nèi)。
1.2.3 網(wǎng)絡(luò)連接
本文檔會(huì)介紹如何建立和測(cè)試網(wǎng)絡(luò)連接,包括局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)和無(wú)線網(wǎng)絡(luò)(Wi-Fi)。我們不會(huì)討論如何建立和管理網(wǎng)絡(luò)基礎(chǔ)設(shè)施,如路由器、交換機(jī)和防火墻等。
1.2.4 軟件接口
我們會(huì)詳細(xì)描述如何通過(guò)軟件接口與物聯(lián)感知平臺(tái)進(jìn)行交互。然而,本文檔并不包括如何開(kāi)發(fā)或定制這些接口的具體編程指南。
1.2.5 故障排除
本文檔會(huì)提供解決物聯(lián)感知平臺(tái)中常見(jiàn)問(wèn)題的建議和解決步驟,但并不會(huì)涵蓋所有可能的故障或錯(cuò)誤。對(duì)于一些具體的、復(fù)雜的問(wèn)題,可能需要聯(lián)系系統(tǒng)供應(yīng)商或?qū)I(yè)的技術(shù)支持。
1.2.6 系統(tǒng)維護(hù)
我們將介紹如何進(jìn)行系統(tǒng)的日常維護(hù)和更新,但不會(huì)提供關(guān)于硬件維修或替換的詳細(xì)指南。
總的來(lái)說(shuō),本文檔旨在提供一個(gè)關(guān)于如何接入和使用物聯(lián)感知平臺(tái)的綜合指南,而不會(huì)涉及到具體的設(shè)備安裝、網(wǎng)絡(luò)基礎(chǔ)設(shè)施建設(shè)、接口編程、硬件維修等深層次的技術(shù)細(xì)節(jié)。
本文檔會(huì)介紹物聯(lián)感知平臺(tái)的總體結(jié)構(gòu)、主要功能、系統(tǒng)需求以及相關(guān)的硬件和軟件組件。但這部分內(nèi)容將不會(huì)深入到具體的實(shí)現(xiàn)技術(shù)或編程細(xì)節(jié)。
1.2.2 設(shè)備接入
我們會(huì)詳細(xì)解釋如何將各類設(shè)備(如傳感器、攝像頭等)接入到物聯(lián)感知平臺(tái)中,包括設(shè)備的配置和連接過(guò)程。但是,具體的設(shè)備安裝和物理布線等步驟可能會(huì)根據(jù)設(shè)備的型號(hào)和規(guī)格略有不同,這些內(nèi)容不在本文檔的討論范圍內(nèi)。
1.2.3 網(wǎng)絡(luò)連接
本文檔會(huì)介紹如何建立和測(cè)試網(wǎng)絡(luò)連接,包括局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)和無(wú)線網(wǎng)絡(luò)(Wi-Fi)。我們不會(huì)討論如何建立和管理網(wǎng)絡(luò)基礎(chǔ)設(shè)施,如路由器、交換機(jī)和防火墻等。
1.2.4 軟件接口
我們會(huì)詳細(xì)描述如何通過(guò)軟件接口與物聯(lián)感知平臺(tái)進(jìn)行交互。然而,本文檔并不包括如何開(kāi)發(fā)或定制這些接口的具體編程指南。
1.2.5 故障排除
本文檔會(huì)提供解決物聯(lián)感知平臺(tái)中常見(jiàn)問(wèn)題的建議和解決步驟,但并不會(huì)涵蓋所有可能的故障或錯(cuò)誤。對(duì)于一些具體的、復(fù)雜的問(wèn)題,可能需要聯(lián)系系統(tǒng)供應(yīng)商或?qū)I(yè)的技術(shù)支持。
1.2.6 系統(tǒng)維護(hù)
我們將介紹如何進(jìn)行系統(tǒng)的日常維護(hù)和更新,但不會(huì)提供關(guān)于硬件維修或替換的詳細(xì)指南。
總的來(lái)說(shuō),本文檔旨在提供一個(gè)關(guān)于如何接入和使用物聯(lián)感知平臺(tái)的綜合指南,而不會(huì)涉及到具體的設(shè)備安裝、網(wǎng)絡(luò)基礎(chǔ)設(shè)施建設(shè)、接口編程、硬件維修等深層次的技術(shù)細(xì)節(jié)。
1.3. 讀者對(duì)象
1.3.1 高速公路運(yùn)營(yíng)商
本文檔對(duì)高速公路運(yùn)營(yíng)商提供了關(guān)于如何使用和管理物聯(lián)感知平臺(tái)的指導(dǎo)。它可以幫助他們理解系統(tǒng)的功能和結(jié)構(gòu),以便有效地監(jiān)控和優(yōu)化公路的運(yùn)營(yíng)。
1.3.2 網(wǎng)絡(luò)和硬件工程師
網(wǎng)絡(luò)和硬件工程師是本文檔的主要讀者群體。本文檔將為他們提供如何配置、連接設(shè)備,以及如何建立和測(cè)試網(wǎng)絡(luò)連接的詳細(xì)步驟。
1.3.3 系統(tǒng)管理員
系統(tǒng)管理員可以通過(guò)本文檔了解如何進(jìn)行系統(tǒng)的日常維護(hù)和更新,以及如何解決系統(tǒng)中可能出現(xiàn)的常見(jiàn)問(wèn)題。
1.3.4 軟件
雖然本文檔并不包括具體的編程指南,但軟件仍然可以從中了解如何通過(guò)軟件接口與物聯(lián)感知平臺(tái)進(jìn)行交互。
1.3.5 高速公路管理人員
對(duì)于參與高速公路管理和運(yùn)營(yíng)決策的人員,本文檔也可以提供有用的參考信息,幫助他們了解物聯(lián)感知平臺(tái)的功能和用途。
請(qǐng)注意,由于本文檔涉及到一些技術(shù)性的內(nèi)容,讀者需要具有一定的網(wǎng)絡(luò)和硬件知識(shí)才能充分理解。對(duì)于沒(méi)有相關(guān)背景的讀者,我們建議他們?cè)陂喿x本文檔時(shí)與具有相關(guān)技術(shù)知識(shí)的專業(yè)人員一起進(jìn)行。
本文檔對(duì)高速公路運(yùn)營(yíng)商提供了關(guān)于如何使用和管理物聯(lián)感知平臺(tái)的指導(dǎo)。它可以幫助他們理解系統(tǒng)的功能和結(jié)構(gòu),以便有效地監(jiān)控和優(yōu)化公路的運(yùn)營(yíng)。
1.3.2 網(wǎng)絡(luò)和硬件工程師
網(wǎng)絡(luò)和硬件工程師是本文檔的主要讀者群體。本文檔將為他們提供如何配置、連接設(shè)備,以及如何建立和測(cè)試網(wǎng)絡(luò)連接的詳細(xì)步驟。
1.3.3 系統(tǒng)管理員
系統(tǒng)管理員可以通過(guò)本文檔了解如何進(jìn)行系統(tǒng)的日常維護(hù)和更新,以及如何解決系統(tǒng)中可能出現(xiàn)的常見(jiàn)問(wèn)題。
1.3.4 軟件
雖然本文檔并不包括具體的編程指南,但軟件仍然可以從中了解如何通過(guò)軟件接口與物聯(lián)感知平臺(tái)進(jìn)行交互。
1.3.5 高速公路管理人員
對(duì)于參與高速公路管理和運(yùn)營(yíng)決策的人員,本文檔也可以提供有用的參考信息,幫助他們了解物聯(lián)感知平臺(tái)的功能和用途。
請(qǐng)注意,由于本文檔涉及到一些技術(shù)性的內(nèi)容,讀者需要具有一定的網(wǎng)絡(luò)和硬件知識(shí)才能充分理解。對(duì)于沒(méi)有相關(guān)背景的讀者,我們建議他們?cè)陂喿x本文檔時(shí)與具有相關(guān)技術(shù)知識(shí)的專業(yè)人員一起進(jìn)行。
2. 設(shè)備接入
2.1. MQTT設(shè)備接入
通用的MQTT設(shè)備接入
1. 設(shè)備認(rèn)證
(1) 加密認(rèn)證(推薦)
(2) 簡(jiǎn)單認(rèn)證
2. 設(shè)備交互
(1) 發(fā)布物模型、設(shè)備信息、時(shí)鐘同步相關(guān)Mqtt主題
(2) 訂閱物模型、設(shè)備升級(jí)、時(shí)鐘同步相關(guān)Mqtt主題
3. 設(shè)備AP配網(wǎng)(可選,Wifi類設(shè)備)
(1) 設(shè)備檢測(cè)接口
(2) 設(shè)備配置接口
1. 設(shè)備認(rèn)證
(1) 加密認(rèn)證(推薦)
(2) 簡(jiǎn)單認(rèn)證
2. 設(shè)備交互
(1) 發(fā)布物模型、設(shè)備信息、時(shí)鐘同步相關(guān)Mqtt主題
(2) 訂閱物模型、設(shè)備升級(jí)、時(shí)鐘同步相關(guān)Mqtt主題
3. 設(shè)備AP配網(wǎng)(可選,Wifi類設(shè)備)
(1) 設(shè)備檢測(cè)接口
(2) 設(shè)備配置接口
2.1.1. 描述
l 參考的硬件SDK源碼https://gitee.com/kerwincui/gaocheng-smart/tree/master/sdk/
l 目前只支持Mqtt協(xié)議設(shè)備接入,其他協(xié)議例如TCP和Modbus協(xié)議在開(kāi)發(fā)中
l 如果設(shè)備的Mqtt消息格式是固定的,可以通過(guò)EMQX的規(guī)則引擎進(jìn)行轉(zhuǎn)發(fā),適配到平臺(tái)
l 目前只支持Mqtt協(xié)議設(shè)備接入,其他協(xié)議例如TCP和Modbus協(xié)議在開(kāi)發(fā)中
l 如果設(shè)備的Mqtt消息格式是固定的,可以通過(guò)EMQX的規(guī)則引擎進(jìn)行轉(zhuǎn)發(fā),適配到平臺(tái)
2.1.2. 設(shè)備認(rèn)證
l 設(shè)備認(rèn)證
n 加密認(rèn)證(推薦)
n 簡(jiǎn)單認(rèn)證
u 認(rèn)證類型:S=簡(jiǎn)單認(rèn)證,E=加密認(rèn)證
u 產(chǎn)品啟用設(shè)備碼后,碼不能為空
u 用戶ID就是登陸用戶的ID,使用不同用戶ID,設(shè)備歸屬于不同用戶??梢越y(tǒng)一使用admin賬號(hào)1,后面通過(guò)配網(wǎng)或者掃碼關(guān)聯(lián)設(shè)備分配給不同用戶。
u 設(shè)備編號(hào)有兩種方式獲取:1.使用系統(tǒng)新建設(shè)備時(shí),生成的設(shè)備編號(hào);2.系統(tǒng)未新建設(shè)備,硬件端生成一個(gè)編號(hào)作為設(shè)備編號(hào),認(rèn)證后系統(tǒng)會(huì)自動(dòng)注冊(cè)一個(gè)設(shè)備實(shí)體(設(shè)備比較多時(shí),推薦這種方式)
l 設(shè)備交互
n 發(fā)布物模型、設(shè)備信息、時(shí)鐘同步相關(guān)Mqtt主題
n 訂閱物模型、設(shè)備升級(jí)、時(shí)鐘同步相關(guān)Mqtt主題
l 設(shè)備AP配網(wǎng)(可選,Wifi類設(shè)備)
n 設(shè)備檢測(cè)接口
n 設(shè)備配置接口
2.1.3. 加密認(rèn)證
l 產(chǎn)品詳情中獲取產(chǎn)品編號(hào)、Mqtt賬號(hào)、Mqtt密碼和產(chǎn)品秘鑰,密碼通過(guò)產(chǎn)品秘鑰進(jìn)行AES加密,傳遞到后端;后端通過(guò)產(chǎn)品秘鑰解密進(jìn)行認(rèn)證;連接Mqtt消息服務(wù)器需要提供的客戶端ID、用戶名和密碼,具體格式如下:
# 客戶端Id等于 認(rèn)證類型 + 設(shè)備編號(hào) + 產(chǎn)品編號(hào) + 用戶IDclientId = E & deviceNumber & productId & userId |
# 用戶名userName = smart |
# 密碼password = mqtt密碼 & 過(guò)期時(shí)間password = mqtt密碼 & 過(guò)期時(shí)間 & 設(shè)備碼 (產(chǎn)品啟用設(shè)備時(shí)格式) |
l 客戶端ID等于 認(rèn)證類型 + 設(shè)備編號(hào) + 產(chǎn)品編號(hào) + 用戶ID,用 & 符號(hào)連接,中間無(wú)空格;
l 用戶名直接輸入Mqtt賬號(hào)
l 密碼等于 Mqtt密碼 + 密碼過(guò)期時(shí)間 + 設(shè)備碼(可選),然后進(jìn)行AES加密。為了安全,密碼過(guò)期時(shí)間應(yīng)該在24小時(shí)以內(nèi),采用時(shí)間戳格式,精確到毫秒。
l 賬號(hào)配置信息示例:
l 用戶名直接輸入Mqtt賬號(hào)
l 密碼等于 Mqtt密碼 + 密碼過(guò)期時(shí)間 + 設(shè)備碼(可選),然后進(jìn)行AES加密。為了安全,密碼過(guò)期時(shí)間應(yīng)該在24小時(shí)以內(nèi),采用時(shí)間戳格式,精確到毫秒。
l 賬號(hào)配置信息示例:
clientId = "E&D68329VL588&2&1" |
userName = "smart" |
password = "/W2A/4MK+9cEGBhyBDgr2K5c62DAjAK4m0b5pvwxX6FFMzI3h1pUmaDY3BH1P2mI" |
2.1.4. 簡(jiǎn)單認(rèn)證
l 產(chǎn)品詳情中獲取Mqtt賬號(hào)和Mqtt密碼,建議測(cè)試環(huán)境使用。Mqtt客戶端ID格式類似加密認(rèn)證,其中E改為S。
# 客戶端Id等于 認(rèn)證類型 + 設(shè)備編號(hào) + 產(chǎn)品編號(hào) + 用戶IDclientId = S & deviceNumber & productId & userId |
# 用戶名userName = smart |
# 密碼password = mqtt密碼 password = mqtt密碼 & 設(shè)備碼 (產(chǎn)品啟用設(shè)備時(shí)格式) |
l 賬號(hào)配置信息示例:
# 客戶端Id等于 認(rèn)證類型 + 設(shè)備編號(hào) + 產(chǎn)品編號(hào) + 用戶IDclientId = "S&D68329VL588&2&1"userName = "smart"password = "PHYFED93WSFF1DAS"password = "PHYFED93WSFF1DAS&ADBFCC8934864B26B55658C66F562A"(產(chǎn)品啟用設(shè)備時(shí)格式) |
2.1.5. 設(shè)備獲取當(dāng)前時(shí)間
l 獲取當(dāng)前時(shí)間,可以調(diào)用系統(tǒng)的NTP時(shí)間接口,接口請(qǐng)求時(shí)發(fā)送設(shè)備當(dāng)前運(yùn)行毫秒數(shù),返回設(shè)備發(fā)送時(shí)間、服務(wù)端接收時(shí)間、服務(wù)端發(fā)送時(shí)間。然后獲取設(shè)備當(dāng)前運(yùn)行毫秒數(shù),作為設(shè)備接收間。最后用公式計(jì)算出設(shè)備當(dāng)前的時(shí)間,時(shí)間必須以毫秒為單位。
# deviceSendTime值為設(shè)備當(dāng)前運(yùn)行的毫秒數(shù)http://localhost:8080/iot/tool/ntp?deviceSendTime=35768 |
# 計(jì)算時(shí)間設(shè)備當(dāng)前時(shí)間 = (服務(wù)端接收時(shí)間 + 服務(wù)端發(fā)送時(shí)間 + 設(shè)備接收時(shí)間 - 設(shè)備發(fā)送時(shí)間) / 2 |
2.1.6. 加密說(shuō)明
采用AES的CBC加密模式,偏移量固定為smart-open16位,輸出為Base64,加密使用的密碼為產(chǎn)品密鑰。測(cè)試可以使用:
加密模式: CBC |
填 充: pkcs5padding |
數(shù) 據(jù) 塊: 128位 |
偏 移 量: smart-open |
輸 出: base64 |
密 碼: 對(duì)應(yīng)系統(tǒng)的產(chǎn)品秘鑰 |
加密內(nèi)容: mqtt密碼 & expireTime & 碼(可選) |
2.1.7. 設(shè)備交互
{productId}代表產(chǎn)品ID,{deviceNum}代表設(shè)備編號(hào)。通過(guò)web端獲取產(chǎn)品ID和設(shè)備編號(hào),如果使用自動(dòng)添加設(shè)備,設(shè)備編號(hào)可以使用編碼或者使用設(shè)備MAC地址,設(shè)備認(rèn)證成功后會(huì)在后端自動(dòng)添加一個(gè)對(duì)應(yīng)的設(shè)備實(shí)體。
2.1.8. 訂閱主題
| 主題 | 描述 |
|---|---|
| /{productId}/{deviceNum}/info/get | 訂閱設(shè)備信息(訂閱到該主題就發(fā)布設(shè)備信息) |
| /{productId}/{deviceNum}/ota/get | 訂閱設(shè)備升級(jí) |
| /{productId}/{deviceNum}/property/get | 訂閱屬性(服務(wù)端發(fā)布,設(shè)備訂閱) |
| /{productId}/{deviceNum}/property-online/get | 訂閱屬性(在線模式,用戶端發(fā)布,設(shè)備訂閱) |
| /{productId}/{deviceNum}/function/get | 訂閱功能(服務(wù)端發(fā)布,設(shè)備訂閱) |
| /{productId}/{deviceNum}/function-online/get | 訂閱功能(在線模式,用戶端發(fā)布,設(shè)備訂閱) |
| /{productId}/{deviceNum}/monitor/get | 訂閱實(shí)時(shí)監(jiān)測(cè)信號(hào)(根據(jù)監(jiān)測(cè)次數(shù)和間隔,然后發(fā)布監(jiān)測(cè)數(shù)據(jù)) |
| /{productId}/{deviceNum}/ntp/get | 訂閱時(shí)鐘同步(可選,用于同步設(shè)備的當(dāng)前時(shí)間) |
| | |
| | |
2.1.9. 發(fā)布主題
| 主題 | 描述 |
|---|---|
| /{productId}/{deviceNum}/info/post | 發(fā)布設(shè)備信息 |
| /{productId}/{deviceNum}/property/post | 發(fā)布屬性 (實(shí)時(shí)顯示,包括監(jiān)測(cè)數(shù)據(jù),可定時(shí)上報(bào)監(jiān)測(cè)數(shù)據(jù)) |
| /{productId}/{deviceNum}/function/post | 發(fā)布功能 (實(shí)時(shí)顯示) |
| /{productId}/{deviceNum}/event/post | 發(fā)布事件 |
| /{productId}/{deviceNum}/monitor/post | 發(fā)布實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)(僅用于實(shí)時(shí)監(jiān)測(cè)圖表顯示,不會(huì)存儲(chǔ)) |
| /{productId}/{deviceNum}/ntp/post | 發(fā)布時(shí)鐘同步(可選) |
2.1.10. 數(shù)據(jù)格式
設(shè)備和系統(tǒng)交互使用JSON格式
l 訂閱設(shè)備信息,對(duì)應(yīng)主題:/info/get
l 訂閱設(shè)備信息,對(duì)應(yīng)主題:/info/get
# 描述:訂閱到設(shè)備信息后,發(fā)布設(shè)備信息,解決設(shè)備狀態(tài)同步問(wèn)題 |
# 設(shè)備消息內(nèi)容為空 |
l 發(fā)布設(shè)備信息,對(duì)應(yīng)主題:/info/post
# 描述:1.設(shè)備上電后發(fā)布設(shè)備信息; 2.設(shè)備接收到設(shè)備信息指令后發(fā)布設(shè)備信息# rssi 設(shè)備信號(hào)(信號(hào)[-55— 0],信號(hào)好[-70— -55],信號(hào)一般[-85— -70],信號(hào)差[-100— -85])# status 設(shè)備狀態(tài),固定為3,表示在線# firmwareVersion 固件版本# userId 可選,用戶的ID,可設(shè)置為admin用戶ID為1,僅Wifi類設(shè)備需要上傳用戶ID,配網(wǎng)時(shí)再分配設(shè)備給用戶。# longitude 可選,經(jīng)度,使用設(shè)備定位時(shí)需要上傳# latitude 可選,緯度,使用設(shè)備定位時(shí)需要上傳# summary 可選,摘要,設(shè)備的配置信息等,json格式,對(duì)象可自定義 { "rssi": -43, "firmwareVersion": 1.2, "status": 3, "userId": "1", "longitude": 0, "latitude": 0, "summary": { "name": "gaocheng-smart", "chip": "esp8266", "author": "kerwincui", "version": 1.2, "createTime": "2022-06-06" } } |
l 訂閱實(shí)時(shí)監(jiān)測(cè),對(duì)應(yīng)主題:/monitor/get
# 描述:訂閱到實(shí)時(shí)監(jiān)測(cè)消息,根據(jù)數(shù)量和間隔發(fā)布實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)# count 數(shù)量# interval 間隔,毫秒為單位 { "count": 60, "interval": 1000 } |
l 發(fā)布實(shí)時(shí)監(jiān)測(cè),對(duì)應(yīng)主題:/monitor/post
# 描述:根據(jù)訂閱到的實(shí)時(shí)監(jiān)測(cè)消息,發(fā)布指定數(shù)量和間隔的監(jiān)測(cè)數(shù)據(jù)# id 標(biāo)識(shí)符,實(shí)時(shí)監(jiān)測(cè)是物模型中的屬性,產(chǎn)品詳情中查看標(biāo)識(shí)符,對(duì)應(yīng)id值# value 設(shè)備采集的值,只能是整數(shù)或者小數(shù),以字符串類型傳遞# remark 可為空或者使用設(shè)備當(dāng)前時(shí)間 [{ "id": "temperature", "value": "27.43", "remark": ""}, { "id": "humidity", "value": "32.18", "remark": "" }] |
l 訂閱屬性/功能,對(duì)應(yīng)主題:/property/get、/function/get、property-online/get、/function-online/get
# 描述:屬性、功能、事件都屬于物模型,Json定義是一樣的。屬性和功能的在線模式和普通模式,用于區(qū)分不同種類消息,但是設(shè)備的處理都是一樣的。例如都訂閱到消息打開(kāi)開(kāi)關(guān),設(shè)備的處理都是把開(kāi)關(guān)打開(kāi)。 # id 標(biāo)識(shí)符,產(chǎn)品詳情中查看物模型,對(duì)應(yīng)物模型的標(biāo)識(shí)符# value 值,對(duì)應(yīng)物模型中定義,以字符串類型傳遞# remark 平臺(tái)中告警、場(chǎng)景聯(lián)動(dòng)和定時(shí)下發(fā)的指令有備注信息 [{ "id": "gear", "value": "1", "remark": "設(shè)備定時(shí)"},{ "id": "switch", "value": "0", "remark": "場(chǎng)景聯(lián)動(dòng)觸發(fā)" }] |
l 發(fā)布屬性/功能/事件,對(duì)應(yīng)主題:/property/post、/function/post、/event/post
# 描述:屬性、功能、事件都屬于物模型,Json定義是一樣的。`value` 的值如果是布爾類型,值為"0"或者"1",代表打開(kāi)/關(guān)閉;枚舉類型對(duì)應(yīng)枚舉項(xiàng)的鍵值(例如 "1",代表中速檔位);數(shù)組類型是以英文逗號(hào)分隔的字符串。# id 標(biāo)識(shí)符,產(chǎn)品詳情中查看物模型,對(duì)應(yīng)物模型的標(biāo)識(shí)符# value 值,對(duì)應(yīng)物模型中定義,以字符串類型傳遞# remark 可以直接使用訂閱到的備注信息,設(shè)備日志信息中查看到該備注 [{ "id": "gear", "value": "1", "remark": "檔位設(shè)置成功"}, { "id": "switch", "value": "0", "remark": "開(kāi)關(guān)已關(guān)閉" }] |
相關(guān)物模型說(shuō)明
l 所有物模型的Id(標(biāo)識(shí)符)都是的,盡量不要使用特殊字符,以字母和數(shù)字為主。
l 對(duì)象類型物模型下面子模型Id(標(biāo)識(shí)符)格式:parentId_childId,對(duì)象數(shù)組類型同樣,子模型Id增加父級(jí)的Id以下劃線分隔,例如:
| # 父級(jí)物模型Id:power# 子級(jí)物模型Id:power_light |
l 數(shù)組類型(包括對(duì)象數(shù)組類型)的物模型Id(標(biāo)識(shí)符)只有一個(gè),物模型值為數(shù)組(以英文逗號(hào)分隔的字符串存儲(chǔ)),例如98,100,50字符串。所以上報(bào)數(shù)組類型的屬性/功能/事件,相對(duì)特殊,Id(標(biāo)識(shí)符)必須以array_索引開(kāi)頭,索引是兩位數(shù),例如:
| # 普通數(shù)組格式 `array_00_RGB`# 對(duì)象數(shù)組格式 `array_00_power_switch`# 索引00代表數(shù)組中個(gè)元素,02 / 03 ... 98 / 99 以此類推,數(shù)組長(zhǎng)度不能超過(guò)100 [{ "id": "array_01_power_switch" , // array_01作為前綴,表示數(shù)組中的第二個(gè)元素 "value": "1" , "remark": "" }] |
l 發(fā)布時(shí)鐘同步,對(duì)應(yīng)主題:/ntp/post
# 描述:可選,發(fā)布時(shí)鐘同步消息,服務(wù)端訂閱到后下發(fā)時(shí)鐘同步消息# deviceSendTime 設(shè)備發(fā)送時(shí)間 {"deviceSendTime": "1592361428000"} |
l 訂閱時(shí)鐘同步,對(duì)應(yīng)主題:/ntp/get
# 描述:可選,訂閱到時(shí)鐘同步消息,計(jì)算當(dāng)前時(shí)間 = (服務(wù)端接收時(shí)間 + 服務(wù)端發(fā)送時(shí)間 + 設(shè)備接收時(shí)間 - 設(shè)備發(fā)送時(shí)間) / 2# deviceSendTime 設(shè)備發(fā)送時(shí)間# serverRecvTime 服務(wù)端接收時(shí)間# serverSendTime 服務(wù)端發(fā)送時(shí)間 { "deviceSendTime": "1592361428000", "serverSendTime": "1592366463548", "serverRecvTime": "1592366463548"} |
l 訂閱OTA升級(jí),對(duì)應(yīng)主題:/ota/get
# 描述:訂閱到設(shè)備升級(jí)消息后,根據(jù)固件下載地址,Http請(qǐng)求下載固件并升級(jí)# version 版本號(hào),可用于匹配固件版本# downloadUrl 固件下載地址 { "version": 1.1, "downloadUrl": "https://iot.gaocheng.live/prod-api/profile/iot/6/2022-0616-140539.bin" } |
2.1.11. 接入樣例
1、系統(tǒng)創(chuàng)建產(chǎn)品
(1) 通信協(xié)議根據(jù)實(shí)際情況選擇,一般默認(rèn)JSON解析協(xié)議
(2) 傳輸協(xié)議選擇MQTT
(3) 認(rèn)證方式選擇簡(jiǎn)單加密方式
(4) 針對(duì)當(dāng)前產(chǎn)品綁定對(duì)于物模型
2、系統(tǒng)創(chuàng)建設(shè)備
(1) 創(chuàng)建設(shè)備選擇指定的產(chǎn)品
(2) 生成或者填入設(shè)備編碼
(3) 創(chuàng)建完畢會(huì)出現(xiàn)mqtt連接信息,得到連接信息使用設(shè)備或者工具模擬
3、使用MQTTX或其他工具模擬設(shè)備上線下線,上報(bào)數(shù)據(jù)
(1) 打開(kāi)MQTTX工具設(shè)置好連接信息進(jìn)行保存
(2) 點(diǎn)擊連接按鈕 模擬設(shè)備上線
(3) /151/D15NTQGMU9KA/property/post 發(fā)送指定地址發(fā)送json格式數(shù)據(jù)如下圖
(1) 通信協(xié)議根據(jù)實(shí)際情況選擇,一般默認(rèn)JSON解析協(xié)議
(2) 傳輸協(xié)議選擇MQTT
(3) 認(rèn)證方式選擇簡(jiǎn)單加密方式
(4) 針對(duì)當(dāng)前產(chǎn)品綁定對(duì)于物模型
2、系統(tǒng)創(chuàng)建設(shè)備
(1) 創(chuàng)建設(shè)備選擇指定的產(chǎn)品
(2) 生成或者填入設(shè)備編碼
(3) 創(chuàng)建完畢會(huì)出現(xiàn)mqtt連接信息,得到連接信息使用設(shè)備或者工具模擬
3、使用MQTTX或其他工具模擬設(shè)備上線下線,上報(bào)數(shù)據(jù)
(1) 打開(kāi)MQTTX工具設(shè)置好連接信息進(jìn)行保存
(2) 點(diǎn)擊連接按鈕 模擬設(shè)備上線
(3) /151/D15NTQGMU9KA/property/post 發(fā)送指定地址發(fā)送json格式數(shù)據(jù)如下圖
2.2. 設(shè)備發(fā)現(xiàn)
2.2.1. 對(duì)接第三方設(shè)備進(jìn)行設(shè)備發(fā)現(xiàn)
針對(duì)第三方協(xié)議進(jìn)行定制,維護(hù)好配置
2.2.2. 設(shè)備管理界面點(diǎn)擊設(shè)備發(fā)現(xiàn)按鈕
2.2.3. 選擇第三方協(xié)議選項(xiàng),進(jìn)行加載設(shè)備
2.2.4. 勾選指定的設(shè)備同步到平臺(tái)中
2.3. 監(jiān)控設(shè)備接入
2.3.1. 監(jiān)控平臺(tái)整體架構(gòu)
2.3.2. 目前平臺(tái)支持的功能
l 設(shè)備接入注冊(cè)
l 設(shè)備心跳
l 設(shè)備信息查詢
l 設(shè)備通道查詢
l 設(shè)備直播
l 云臺(tái)控制
l 設(shè)備管理統(tǒng)一到平臺(tái)
l 設(shè)備本地錄像在線播放
l 設(shè)備通道國(guó)標(biāo)ID生成
l 設(shè)備心跳
l 設(shè)備信息查詢
l 設(shè)備通道查詢
l 設(shè)備直播
l 云臺(tái)控制
l 設(shè)備管理統(tǒng)一到平臺(tái)
l 設(shè)備本地錄像在線播放
l 設(shè)備通道國(guó)標(biāo)ID生成
2.3.3. 待開(kāi)發(fā)功能
l 設(shè)備告警
l 云端錄像存儲(chǔ),接入七牛云,螢石云,阿里云等
l 移動(dòng)端播放器,主要適配h5端
l 語(yǔ)音對(duì)講
l P2P協(xié)議,AI能力對(duì)接
l 其他監(jiān)控管理協(xié)議適配
l 云端錄像存儲(chǔ),接入七牛云,螢石云,阿里云等
l 移動(dòng)端播放器,主要適配h5端
l 語(yǔ)音對(duì)講
l P2P協(xié)議,AI能力對(duì)接
l 其他監(jiān)控管理協(xié)議適配
2.3.4. 設(shè)備接入流程
l 新增產(chǎn)品
l 選擇產(chǎn)品分類和設(shè)備類型
l 新建SIP配置,流媒體服務(wù)器配置
l 點(diǎn)擊獲取默認(rèn)配置,然后新建SIP配置
l 修改流媒體服務(wù)器IP為部署服務(wù)器公網(wǎng)IP,默認(rèn)為http播放協(xié)議,用https需修改zlmedia/conf/default.pem證書(shū)
l 新建設(shè)備,生成設(shè)備ID和通道ID
l 攝像頭:設(shè)備類型為"IPC",通道類型為"IPC"
l 錄像機(jī):設(shè)備類型為"錄像機(jī)",通道類型為"錄像機(jī)"
l NVR+IPC:設(shè)備類型為"NVR",通道類型為"IPC"
l DVR+IPC:設(shè)備類型為"DVR",通道類型為"IPC"
l 將相關(guān)信息填入設(shè)備
l 將產(chǎn)品中SIP配置和生成的id填入設(shè)備
l 服務(wù)器ID = SIP服務(wù)器ID(??担?= SIP服務(wù)器編號(hào)(大華)
l 服務(wù)器域 = SIP服務(wù)器域(??担?= SIP域(大華)
l 部署服務(wù)器公網(wǎng)IP = SIP服務(wù)器地址(海康) = SIP服務(wù)器IP(大華)
l 服務(wù)器端口 = SIP服務(wù)器端口(??担?= SIP服務(wù)器端口(大華)
l 認(rèn)證密碼 = 密碼(??担?= 注冊(cè)密碼(大華)
l 設(shè)備ID = SIP用戶名(??担?= SIP用戶認(rèn)證ID(海康) = 設(shè)備編號(hào)
l 通道ID = 視頻通道編號(hào)ID(??担?= 通道編號(hào)(大華)
l ??到尤胧纠?配置路徑:配置-> 網(wǎng)絡(luò)-> 高級(jí)配置-> 平臺(tái)接入
l 大華接入示例: 配置路徑:配置-> 網(wǎng)絡(luò)配置-> 平臺(tái)接入
l 攝像頭流媒體格式建議為:視頻:h264 音頻:aac
l 監(jiān)控設(shè)備管理
l 設(shè)備詳情
l 設(shè)備通道
l 設(shè)備直播
l 設(shè)備錄像點(diǎn)播
l 選擇產(chǎn)品分類和設(shè)備類型
l 新建SIP配置,流媒體服務(wù)器配置
l 點(diǎn)擊獲取默認(rèn)配置,然后新建SIP配置
l 修改流媒體服務(wù)器IP為部署服務(wù)器公網(wǎng)IP,默認(rèn)為http播放協(xié)議,用https需修改zlmedia/conf/default.pem證書(shū)
l 新建設(shè)備,生成設(shè)備ID和通道ID
l 攝像頭:設(shè)備類型為"IPC",通道類型為"IPC"
l 錄像機(jī):設(shè)備類型為"錄像機(jī)",通道類型為"錄像機(jī)"
l NVR+IPC:設(shè)備類型為"NVR",通道類型為"IPC"
l DVR+IPC:設(shè)備類型為"DVR",通道類型為"IPC"
l 將相關(guān)信息填入設(shè)備
l 將產(chǎn)品中SIP配置和生成的id填入設(shè)備
l 服務(wù)器ID = SIP服務(wù)器ID(??担?= SIP服務(wù)器編號(hào)(大華)
l 服務(wù)器域 = SIP服務(wù)器域(??担?= SIP域(大華)
l 部署服務(wù)器公網(wǎng)IP = SIP服務(wù)器地址(海康) = SIP服務(wù)器IP(大華)
l 服務(wù)器端口 = SIP服務(wù)器端口(??担?= SIP服務(wù)器端口(大華)
l 認(rèn)證密碼 = 密碼(??担?= 注冊(cè)密碼(大華)
l 設(shè)備ID = SIP用戶名(??担?= SIP用戶認(rèn)證ID(海康) = 設(shè)備編號(hào)
l 通道ID = 視頻通道編號(hào)ID(??担?= 通道編號(hào)(大華)
l ??到尤胧纠?配置路徑:配置-> 網(wǎng)絡(luò)-> 高級(jí)配置-> 平臺(tái)接入
l 大華接入示例: 配置路徑:配置-> 網(wǎng)絡(luò)配置-> 平臺(tái)接入
l 攝像頭流媒體格式建議為:視頻:h264 音頻:aac
l 監(jiān)控設(shè)備管理
l 設(shè)備詳情
l 設(shè)備通道
l 設(shè)備直播
l 設(shè)備錄像點(diǎn)播
2.3.5. 什么是GB28181協(xié)議
GB/T28181《安全防范視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)信息傳輸、交換、控制技術(shù)要求》是由部科技信息化局提出,由全國(guó)安全防范報(bào)警系統(tǒng)標(biāo)準(zhǔn)化技術(shù)委員會(huì)(SAC/TC100)歸口,部一所等多家單位共同起草的一部國(guó)家標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)規(guī)定了城市監(jiān)控報(bào)警聯(lián)網(wǎng)系統(tǒng)中信息傳輸、交換、控制的互聯(lián)結(jié)構(gòu)、通信協(xié)議結(jié)構(gòu),傳輸、交換、控制的基本要求和安全性要求,以及控制、傳輸流程和協(xié)議接口等技術(shù)要求。該標(biāo)準(zhǔn)適用于安全防范監(jiān)控報(bào)警聯(lián)網(wǎng)系統(tǒng)的方案設(shè)計(jì)、系統(tǒng)檢測(cè)、驗(yàn)收以及與之相關(guān)的設(shè)備研發(fā)、生產(chǎn),其他信息系統(tǒng)可參考采用。
2.3.6. sip協(xié)議,sdp協(xié)議
SIP(Session initialization Protocol,會(huì)話初始協(xié)議)是由IETF(Internet Engineering Task Force,因特網(wǎng)工程任務(wù)組)制定的多媒體通信協(xié)議。它是一個(gè)基于文本的應(yīng)用層控制協(xié)議,用于創(chuàng)建、修改和釋放一個(gè)或多個(gè)參與者的會(huì)話。SIP 是一種源于互聯(lián)網(wǎng)的IP 語(yǔ)音會(huì)話控制協(xié)議,具有靈活、易于實(shí)現(xiàn)、便于擴(kuò)展等特點(diǎn)。SIP(Session Initiation Protocol)是一種類似于http協(xié)議的純文本應(yīng)用層協(xié)議。SIP可以用來(lái)控制會(huì)話的建立、取消、關(guān)閉等操作。
SDP全稱是Session Description Protocol,翻譯過(guò)來(lái)就是描述會(huì)話的協(xié)議。主要用于兩個(gè)會(huì)話實(shí)體之間的媒體協(xié)商。 SDP描述由許多文本行組成,文本行的格式為<類型>=<值>,表示為key=value; SIP負(fù)責(zé)建立和釋放會(huì)話,一般來(lái)說(shuō),會(huì)話中包含相關(guān)的媒體,比如視頻和音頻。媒體數(shù)據(jù)是由SDP描述的。SDP一般不單獨(dú)使用,它與SIP配合使用時(shí)會(huì)放到SIP協(xié)議的body中。會(huì)話建立時(shí),需要媒體協(xié)商,雙方才能確定對(duì)方的媒體能力以及交換媒體的數(shù)據(jù)(這就是sdp的工作)。
SDP全稱是Session Description Protocol,翻譯過(guò)來(lái)就是描述會(huì)話的協(xié)議。主要用于兩個(gè)會(huì)話實(shí)體之間的媒體協(xié)商。 SDP描述由許多文本行組成,文本行的格式為<類型>=<值>,表示為key=value; SIP負(fù)責(zé)建立和釋放會(huì)話,一般來(lái)說(shuō),會(huì)話中包含相關(guān)的媒體,比如視頻和音頻。媒體數(shù)據(jù)是由SDP描述的。SDP一般不單獨(dú)使用,它與SIP配合使用時(shí)會(huì)放到SIP協(xié)議的body中。會(huì)話建立時(shí),需要媒體協(xié)商,雙方才能確定對(duì)方的媒體能力以及交換媒體的數(shù)據(jù)(這就是sdp的工作)。
2.3.7. rtp協(xié)議
實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol或簡(jiǎn)寫(xiě)RTP)是一個(gè)網(wǎng)絡(luò)傳輸協(xié)議,它是由IETF的多媒體傳輸工作小組1996年在RFC 1889中公布的。RTP協(xié)議詳細(xì)說(shuō)明了在互聯(lián)網(wǎng)上傳遞音頻和視頻的標(biāo)準(zhǔn)數(shù)據(jù)包格式。它一開(kāi)始被設(shè)計(jì)為一個(gè)多播協(xié)議,但后來(lái)被用在很多單播應(yīng)用中。RTP協(xié)議常用于流媒體系統(tǒng)(配合RTSP協(xié)議),視頻會(huì)議和一鍵通(Push to Talk)系統(tǒng)(配合H.323或SIP),使它成為產(chǎn)業(yè)的技術(shù)基礎(chǔ)。RTP協(xié)議和RTP控制協(xié)議RTCP一起使用,而且它是創(chuàng)建在UDP協(xié)議上的。
2.4. Modbus設(shè)備接入
2.4.1. 新增Modbus設(shè)備
提示:
本平臺(tái)實(shí)現(xiàn)modbus協(xié)議的方式有兩種方案,按照需要選擇
本平臺(tái)實(shí)現(xiàn)modbus協(xié)議的方式有兩種方案,按照需要選擇
2.4.2. 設(shè)備通訊協(xié)議
添加產(chǎn)品之前先確認(rèn)是否有對(duì)應(yīng)的設(shè)備通訊協(xié)議,由于硬件設(shè)備的通訊協(xié)議五花八門,目前系統(tǒng)支持json報(bào)文,modbusRtu協(xié)議報(bào)文,如需添加適配自己硬件設(shè)備的通訊解析,可以查看基于注解方式添加通訊協(xié)議文檔
2.4.3. 采集點(diǎn)模板配置
采集點(diǎn)模塊即是物模型模板,由于之前的物模型模板不支持子設(shè)備,所以新增了采集點(diǎn)模塊進(jìn)行配置設(shè)備組的物模型
Modbus實(shí)現(xiàn)有兩種方式
a. 云端輪詢:云端結(jié)合采集點(diǎn)模板定時(shí)下發(fā)讀指令給設(shè)備,由于是云端定時(shí)執(zhí)行,無(wú)法做到實(shí)時(shí)性,當(dāng)設(shè)備量少時(shí),上千級(jí)的設(shè)備量以下,使用沒(méi)有壓力。當(dāng)設(shè)備量超過(guò)萬(wàn)級(jí)時(shí),云端壓力較大,實(shí)時(shí)性很差,不推薦
b. 邊緣網(wǎng)關(guān):輪詢交給邊緣網(wǎng)關(guān)處理,外加MCU作為輪詢載體,成本低,而且移植性強(qiáng),大大提高云端處理數(shù)據(jù)的能力,而且能做到實(shí)時(shí)性,推薦使用。需要配合Dtu或者模組固件進(jìn)行采集
采集點(diǎn)詳情配置如下: 點(diǎn)擊新增->添加變量模板,
Modbus實(shí)現(xiàn)有兩種方式
a. 云端輪詢:云端結(jié)合采集點(diǎn)模板定時(shí)下發(fā)讀指令給設(shè)備,由于是云端定時(shí)執(zhí)行,無(wú)法做到實(shí)時(shí)性,當(dāng)設(shè)備量少時(shí),上千級(jí)的設(shè)備量以下,使用沒(méi)有壓力。當(dāng)設(shè)備量超過(guò)萬(wàn)級(jí)時(shí),云端壓力較大,實(shí)時(shí)性很差,不推薦
b. 邊緣網(wǎng)關(guān):輪詢交給邊緣網(wǎng)關(guān)處理,外加MCU作為輪詢載體,成本低,而且移植性強(qiáng),大大提高云端處理數(shù)據(jù)的能力,而且能做到實(shí)時(shí)性,推薦使用。需要配合Dtu或者模組固件進(jìn)行采集
采集點(diǎn)詳情配置如下: 點(diǎn)擊新增->添加變量模板,
2.4.4. 添加模板如下:
1. 添加從機(jī):
從機(jī)地址 : 硬件設(shè)備的地址編碼,例如485接口,有1-3個(gè)子設(shè)備,設(shè)備地址可以為 01 02 03
功能碼:目前支持 03,04
寄存器起始地址(10進(jìn)制): 一般為0x00,例如設(shè)備有0~100個(gè)寄存器,起始地址就為 0 寄存器結(jié)束地址(10進(jìn)制): 例如設(shè)備有0~100個(gè)寄存器,起始地址就為 100 批量采集頻率:目前這個(gè)參數(shù)沒(méi)有作用,采集頻率在: 系統(tǒng)監(jiān)控-定時(shí)任務(wù)-modbus云端輪詢的定時(shí)任務(wù)調(diào)節(jié) 組包寄存器數(shù)量 : 該參數(shù)決定批量讀取寄存器的個(gè)數(shù),默認(rèn)為32,若寄存器小于32,會(huì)根據(jù)起始地址和結(jié)束地址進(jìn)行計(jì)算長(zhǎng)度
2. 為從機(jī)添加變量
單個(gè)變量添加流程: 選中從機(jī),點(diǎn)擊添加變量,如下, 模型名稱:該物模型顯示的名稱 模型標(biāo)識(shí):如果是modbus,模型標(biāo)識(shí)根據(jù)寄存器地址一樣,自動(dòng)填充 寄存器: 目前功能碼支持 03 04,暫不支持01。后面輸入框?yàn)榧拇嫫鞯刂分?10進(jìn)制)
批量導(dǎo)入變量:點(diǎn)擊導(dǎo)入變量,下載模板填寫(xiě):如下
3. 新建產(chǎn)品
在前面步驟新建了設(shè)備通訊協(xié)議和采集點(diǎn)模板后,新增一個(gè)產(chǎn)品,如下
選擇通訊協(xié)議:系統(tǒng)目前只支持三種
選擇采集點(diǎn)模塊,我這里選擇先配置好的采集模塊,modbus從機(jī)組,
傳輸協(xié)議:目前支持 系統(tǒng)支持MQTT,TCP,其他協(xié)議服務(wù)如UDP,已經(jīng)搭建,但是沒(méi)有做協(xié)議解析邏輯。
設(shè)備類型: 這里選擇了modbus-rtu協(xié)議后,自動(dòng)選擇網(wǎng)關(guān)設(shè)備
4. 產(chǎn)品物模型:
新增后,可以看到配置的產(chǎn)品物模型:
5. 新建設(shè)備
選擇對(duì)應(yīng)的產(chǎn)品,設(shè)備編號(hào)需要填寫(xiě)模組的IMEI號(hào)或者Dtu設(shè)備的MAC編號(hào)
6. 運(yùn)行狀態(tài)和服務(wù)下發(fā)
新增完成后,可以看到設(shè)備的運(yùn)行狀態(tài)頁(yè)簽,設(shè)備的一次數(shù)據(jù)緩存
2.4.5. Modbus協(xié)議
2.4.5.1. Modbus-RTU協(xié)議
個(gè)報(bào)文就是一幀數(shù)據(jù),一個(gè)數(shù)據(jù)幀就一個(gè)報(bào)文: 指的是一串完整的指令數(shù)據(jù),本質(zhì)就是一串?dāng)?shù)據(jù)。
從機(jī)地址: 每個(gè)從機(jī)都有地址,占用一個(gè)字節(jié),范圍0-255,其中有效范圍是1-247,其中255是廣播地址(廣播就是對(duì)所有從機(jī)發(fā)送應(yīng)答)
功能碼: 占用一個(gè)字節(jié),功能碼的意義就是,知道這個(gè)指令是干啥的,比如你可以查詢從機(jī)的數(shù)據(jù),也可以修改從機(jī)的數(shù)據(jù),所以不同功能碼對(duì)應(yīng)不同功能.
數(shù)據(jù): 根據(jù)功能碼不同,有不同功能,比方說(shuō)功能碼是查詢從機(jī)的數(shù)據(jù),這里就是查詢數(shù)據(jù)的地址和查詢字節(jié)數(shù)等。
校驗(yàn): 在數(shù)據(jù)傳輸過(guò)程中可能數(shù)據(jù)會(huì)發(fā)生錯(cuò)誤,CRC檢驗(yàn)檢測(cè)接收的數(shù)據(jù)是否正確
從機(jī)地址: 每個(gè)從機(jī)都有地址,占用一個(gè)字節(jié),范圍0-255,其中有效范圍是1-247,其中255是廣播地址(廣播就是對(duì)所有從機(jī)發(fā)送應(yīng)答)
功能碼: 占用一個(gè)字節(jié),功能碼的意義就是,知道這個(gè)指令是干啥的,比如你可以查詢從機(jī)的數(shù)據(jù),也可以修改從機(jī)的數(shù)據(jù),所以不同功能碼對(duì)應(yīng)不同功能.
數(shù)據(jù): 根據(jù)功能碼不同,有不同功能,比方說(shuō)功能碼是查詢從機(jī)的數(shù)據(jù),這里就是查詢數(shù)據(jù)的地址和查詢字節(jié)數(shù)等。
校驗(yàn): 在數(shù)據(jù)傳輸過(guò)程中可能數(shù)據(jù)會(huì)發(fā)生錯(cuò)誤,CRC檢驗(yàn)檢測(cè)接收的數(shù)據(jù)是否正確
2.4.5.2. Modbus功能碼
Modbus規(guī)定了多個(gè)功能,那么為了方便的使用這些功能,我們給每個(gè)功能都設(shè)定一個(gè)功能碼,也就是指代碼。如下:
| 標(biāo)題 | 標(biāo)簽 | 字段名 |
|---|---|---|
| 01H | 讀取輸出線圈 | |
| 02H | 讀取輸入線圈 | |
| 03H | 讀取保持寄存器 | |
| 04H | 讀取輸入寄存器 | |
| 05H | 寫(xiě)入單線圈 | |
| 06H | 寫(xiě)入單寄存器 | |
| 0FH | 寫(xiě)入多線圈 | |
| 10H | 寫(xiě)入多寄存器 | |
| _ | | |
2.4.5.3. 主機(jī)對(duì)從機(jī)讀數(shù)據(jù)操作
0x01:從機(jī)的地址 0x03:查詢功能,讀取從機(jī)寄存器的數(shù)據(jù) 0x00 0x01: 代表讀取的起始寄存器地址.說(shuō)明從0x0001開(kāi)始讀取. 0x00 0x01: 查詢的寄存器數(shù)量為0x0001個(gè) Modbus把數(shù)據(jù)存放在寄存器中,通過(guò)查詢寄存器來(lái)得到不同變量的值,一個(gè)寄存器地址對(duì)應(yīng)2字節(jié)數(shù)據(jù); 寄存器地址對(duì)應(yīng)著從機(jī)實(shí)際的存儲(chǔ)地址 0xD5 0xCA: 循環(huán)冗余校驗(yàn) CRC
從機(jī)回復(fù)報(bào)文格式如下: | 從站地址 | 功能碼 | 字節(jié)計(jì)數(shù) | 字節(jié)1 |字節(jié)2 | 校驗(yàn) | | 0x01 | 0x03| 0x02| 0x01 | 0x00| 0x17| 0xF8 0x4A |
0x01:從機(jī)的地址 0x03:查詢功能,讀取從機(jī)寄存器的數(shù)據(jù) 0x02: 返回字節(jié)數(shù)為2個(gè) 一個(gè)寄存器2個(gè)字節(jié) 0x00 0x17:寄存器的值是0017 0xF8 0x4A: 循環(huán)冗余校驗(yàn) CRC
2.4.5.4. 主機(jī)對(duì)從機(jī)寫(xiě)數(shù)據(jù)操作
x01:從機(jī)的地址 0x06:修改功能,修改從機(jī)寄存器的數(shù)據(jù) 0x00 0x01: 代表修改的起始寄存器地址.說(shuō)明修改0x0000-0x0001的存儲(chǔ)內(nèi)容 0x00 0x17: 要修改的數(shù)據(jù)值為0017 0x98 0x04: 循環(huán)冗余校驗(yàn) CRC
從機(jī)回復(fù)報(bào)文一樣
0106000100179804
| 0x01 | 06 | 00 01 | 00 17 | 98 04 |
|---|---|---|---|---|
| 從機(jī)地址 | 功能號(hào) | 數(shù)據(jù)地址 | 數(shù)據(jù) | CRC校驗(yàn) |
2.4.5.5. .主機(jī)對(duì)從機(jī)讀數(shù)據(jù)操作
F84A
| 0x01 | 03 | 00 01 | 00 01 | D5 CA |
|---|---|---|---|---|
| 從機(jī)地址 | 功能號(hào) | 數(shù)據(jù)地址 | 讀取數(shù)據(jù)個(gè)數(shù) | CRC校驗(yàn) |
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
0x01 06 00 01 00 17 98 04 從機(jī)地址 功能號(hào) 數(shù)據(jù)地址 數(shù)據(jù) CRC校驗(yàn)
2.4.5.6. 報(bào)文實(shí)例
1、讀40005、40006兩個(gè)寄存器,假設(shè)從機(jī)地址為1
下行報(bào)文:01 03 00 04 00 02 85 ca
下行報(bào)文:01 03 00 04 00 02 85 ca
| 從機(jī)地址 | 功能碼 | 寄存器起始地址 | 讀取寄存器個(gè)數(shù) | CRC校驗(yàn) |
| 01 | 03 | 00 04 | 00 02 | 85 ca |
上行報(bào)文:01 03 04 00 00 00 00 21 33
| 從機(jī)地址 | 功能碼 | 返回字節(jié)個(gè)數(shù) | 寄存器40005數(shù)據(jù) | 寄存器40006數(shù)據(jù) | CRC校驗(yàn) |
| 01 | 03 | 04 | 00 00 | 00 00 | 21 33 |
2.4.5.7. Modbus-Rtu常用功能碼
| 數(shù)據(jù)類型 | 讀功能碼 | 寫(xiě)功能碼 | 對(duì)象類型 |
| 離散量輸入 | 02 | | 單個(gè)位 |
| 線圈狀態(tài) | 01 | 05,15 | 單個(gè)位 |
| 輸入寄存器 | 04 | | 16位字 |
| 保持寄存器 | 03 | 06,16 | 16位字 |
2.4.5.8. 寄存器起始地址(起始數(shù)據(jù)地址)
| 數(shù)據(jù)類型 | 參數(shù)地址,寄存器編號(hào) |
| 離散量輸入 | 00001~0FFFF |
| 線圈狀態(tài) | 10001~1FFFF |
| 輸入寄存器 | 30001~3FFFF |
| 保持寄存器 | 40001~4FFFF |
2.5. TCP設(shè)備接入
2.5.1. TCP設(shè)備連接
l 注冊(cè)包:
由于TCP設(shè)備連接,需要識(shí)別設(shè)備,因此TCP客戶端連接時(shí),上報(bào)的個(gè)報(bào)文為客戶端的注冊(cè)包。
例如:7e80D4AD203F3A1C7e
其中 7e 是包頭包尾
80是注冊(cè)包的標(biāo)識(shí)位
D4AD203F3A1C 是設(shè)備編號(hào)
客戶端上報(bào)注冊(cè)包后,更新設(shè)備狀態(tài)為在線
l 心跳包:
TCP需要主動(dòng)發(fā)送消息來(lái)維持設(shè)備的心跳保持,上圖中 keep-alive 是心跳超時(shí)的判定時(shí)間 70s,因此設(shè)備的心跳需要維持在70s以下。
心跳包例如: 7e817e 7e 是包頭包尾,81是標(biāo)識(shí)位 (心跳包只是維持TCP長(zhǎng)連接,一般無(wú)其他實(shí)際意義)
l 特殊的注冊(cè),心跳 數(shù)據(jù)包:
在有些設(shè)備客戶端,會(huì)把設(shè)備的注冊(cè)包,心跳包,數(shù)據(jù)包,定時(shí)上報(bào),一方面是包含了設(shè)備編號(hào),也可以維持了心跳,數(shù)據(jù)包還包含了設(shè)備上報(bào)的信息,這種情況系統(tǒng)也是可以支持的。
由于TCP設(shè)備連接,需要識(shí)別設(shè)備,因此TCP客戶端連接時(shí),上報(bào)的個(gè)報(bào)文為客戶端的注冊(cè)包。
例如:7e80D4AD203F3A1C7e
其中 7e 是包頭包尾
80是注冊(cè)包的標(biāo)識(shí)位
D4AD203F3A1C 是設(shè)備編號(hào)
客戶端上報(bào)注冊(cè)包后,更新設(shè)備狀態(tài)為在線
l 心跳包:
TCP需要主動(dòng)發(fā)送消息來(lái)維持設(shè)備的心跳保持,上圖中 keep-alive 是心跳超時(shí)的判定時(shí)間 70s,因此設(shè)備的心跳需要維持在70s以下。
心跳包例如: 7e817e 7e 是包頭包尾,81是標(biāo)識(shí)位 (心跳包只是維持TCP長(zhǎng)連接,一般無(wú)其他實(shí)際意義)
l 特殊的注冊(cè),心跳 數(shù)據(jù)包:
在有些設(shè)備客戶端,會(huì)把設(shè)備的注冊(cè)包,心跳包,數(shù)據(jù)包,定時(shí)上報(bào),一方面是包含了設(shè)備編號(hào),也可以維持了心跳,數(shù)據(jù)包還包含了設(shè)備上報(bào)的信息,這種情況系統(tǒng)也是可以支持的。
2.5.2. TCP模擬客戶端測(cè)試
模擬客戶端放在如下文件
模擬客戶端上線
發(fā)送注冊(cè)包:配置好后,點(diǎn)擊鏈接,發(fā)送注冊(cè)包,如下 7e80D4AD203F3A1C7e
這個(gè)時(shí)候,看下本地啟動(dòng)服務(wù)可以看到
a. TCP客戶端上線
b. 更新TCP客戶的狀態(tài)
c. 記錄設(shè)備事件記錄
查看前端頁(yè)面展示: webSocket 推送設(shè)備上線消息,實(shí)時(shí)更新前端顯示
模擬客戶端上線
發(fā)送注冊(cè)包:配置好后,點(diǎn)擊鏈接,發(fā)送注冊(cè)包,如下 7e80D4AD203F3A1C7e
這個(gè)時(shí)候,看下本地啟動(dòng)服務(wù)可以看到
a. TCP客戶端上線
b. 更新TCP客戶的狀態(tài)
c. 記錄設(shè)備事件記錄
查看前端頁(yè)面展示: webSocket 推送設(shè)備上線消息,實(shí)時(shí)更新前端顯示
2.5.3. 模擬TCP客戶端斷電或 斷開(kāi)
斷電需要等待設(shè)備心跳超時(shí)(70S), 斷開(kāi)連接是,是實(shí)時(shí)上報(bào)設(shè)備狀態(tài)
斷開(kāi)連接是,打印信息如下,更新設(shè)備上下線狀態(tài),新增設(shè)備事件記錄,前端ws推送實(shí)時(shí)更新
同樣模擬客戶端斷電,需要等待客戶端超過(guò)心跳超時(shí)時(shí)間 (70s),更新動(dòng)作跟設(shè)備斷開(kāi)一致。
斷開(kāi)連接是,打印信息如下,更新設(shè)備上下線狀態(tài),新增設(shè)備事件記錄,前端ws推送實(shí)時(shí)更新
同樣模擬客戶端斷電,需要等待客戶端超過(guò)心跳超時(shí)時(shí)間 (70s),更新動(dòng)作跟設(shè)備斷開(kāi)一致。
2.5.4. TCP客戶端前端連接展示
新建產(chǎn)品,選擇TCP傳輸協(xié)議,通訊協(xié)議可以選擇 JSON,Modbus-rtu協(xié)議
新建產(chǎn)品后,選中產(chǎn)品新建設(shè)備即可。
新建產(chǎn)品后,選中產(chǎn)品新建設(shè)備即可。
2.5.5. TCP數(shù)據(jù)包,粘包,分包處理
TCP粘包拆包發(fā)生場(chǎng)景
因?yàn)門CP是面向流,沒(méi)有邊界,而操作系統(tǒng)在發(fā)送TCP數(shù)據(jù)時(shí),會(huì)通過(guò)緩沖區(qū)來(lái)進(jìn)行優(yōu)化,例如緩沖區(qū)為1024個(gè)字節(jié)大小。
如果一次請(qǐng)求發(fā)送的數(shù)據(jù)量比較小,沒(méi)達(dá)到緩沖區(qū)大小,TCP則會(huì)將多個(gè)請(qǐng)求合并為同一個(gè)請(qǐng)求進(jìn)行發(fā)送,這就形成了粘包問(wèn)題。
如果一次請(qǐng)求發(fā)送的數(shù)據(jù)量比較大,超過(guò)了緩沖區(qū)大小,TCP就會(huì)將其拆分為多次發(fā)送,這就是拆包。
對(duì)于粘包和拆包問(wèn)題,常見(jiàn)的解決方案有四種:
發(fā)送端將每個(gè)包都封裝成固定的長(zhǎng)度,比如100字節(jié)大小。如果不足100字節(jié)可通過(guò)補(bǔ)0或空等進(jìn)行填充到指定長(zhǎng)度;
發(fā)送端在每個(gè)包的末尾使用固定的分隔符,例如
。如果發(fā)生拆包需等待多個(gè)包發(fā)送過(guò)來(lái)之后再找到其中的
進(jìn)行合并;例如,F(xiàn)TP協(xié)議;
將消息分為頭部和消息體,頭部中保存整個(gè)消息的長(zhǎng)度,只有讀取到足夠長(zhǎng)度的消息之后才算是讀到了一個(gè)完整的消息;
通過(guò)自定義協(xié)議進(jìn)行粘包和拆包的處理
Netty對(duì)粘包和拆包問(wèn)題的處理
Netty對(duì)解決粘包和拆包的方案做了抽象,提供了一些(Decoder)來(lái)解決粘包和拆包的問(wèn)題。如:
LineBasedFrameDecoder:以行為單位進(jìn)行數(shù)據(jù)包的解碼;
DelimiterBasedFrameDecoder:以特殊的符號(hào)作為分隔來(lái)進(jìn)行數(shù)據(jù)包的解碼;
FixedLengthFrameDecoder:以固定長(zhǎng)度進(jìn)行數(shù)據(jù)包的解碼;
LenghtFieldBasedFrameDecode:適用于消息頭包含消息長(zhǎng)度的協(xié)議();
因?yàn)門CP是面向流,沒(méi)有邊界,而操作系統(tǒng)在發(fā)送TCP數(shù)據(jù)時(shí),會(huì)通過(guò)緩沖區(qū)來(lái)進(jìn)行優(yōu)化,例如緩沖區(qū)為1024個(gè)字節(jié)大小。
如果一次請(qǐng)求發(fā)送的數(shù)據(jù)量比較小,沒(méi)達(dá)到緩沖區(qū)大小,TCP則會(huì)將多個(gè)請(qǐng)求合并為同一個(gè)請(qǐng)求進(jìn)行發(fā)送,這就形成了粘包問(wèn)題。
如果一次請(qǐng)求發(fā)送的數(shù)據(jù)量比較大,超過(guò)了緩沖區(qū)大小,TCP就會(huì)將其拆分為多次發(fā)送,這就是拆包。
對(duì)于粘包和拆包問(wèn)題,常見(jiàn)的解決方案有四種:
發(fā)送端將每個(gè)包都封裝成固定的長(zhǎng)度,比如100字節(jié)大小。如果不足100字節(jié)可通過(guò)補(bǔ)0或空等進(jìn)行填充到指定長(zhǎng)度;
發(fā)送端在每個(gè)包的末尾使用固定的分隔符,例如
。如果發(fā)生拆包需等待多個(gè)包發(fā)送過(guò)來(lái)之后再找到其中的
進(jìn)行合并;例如,F(xiàn)TP協(xié)議;
將消息分為頭部和消息體,頭部中保存整個(gè)消息的長(zhǎng)度,只有讀取到足夠長(zhǎng)度的消息之后才算是讀到了一個(gè)完整的消息;
通過(guò)自定義協(xié)議進(jìn)行粘包和拆包的處理
Netty對(duì)粘包和拆包問(wèn)題的處理
Netty對(duì)解決粘包和拆包的方案做了抽象,提供了一些(Decoder)來(lái)解決粘包和拆包的問(wèn)題。如:
LineBasedFrameDecoder:以行為單位進(jìn)行數(shù)據(jù)包的解碼;
DelimiterBasedFrameDecoder:以特殊的符號(hào)作為分隔來(lái)進(jìn)行數(shù)據(jù)包的解碼;
FixedLengthFrameDecoder:以固定長(zhǎng)度進(jìn)行數(shù)據(jù)包的解碼;
LenghtFieldBasedFrameDecode:適用于消息頭包含消息長(zhǎng)度的協(xié)議();
3. 使用說(shuō)明
3.1. 名詞解釋
物模型:物模型是產(chǎn)品或設(shè)備的數(shù)據(jù)模型。包括屬性、功能和事件。屬性指設(shè)備的狀態(tài)、配置和監(jiān)測(cè)數(shù)據(jù),例如溫濕度;監(jiān)測(cè)數(shù)據(jù)只能讀取,配置和狀態(tài)可以讀取和寫(xiě)入。功能用于執(zhí)行某項(xiàng)特定任務(wù),例如打開(kāi)風(fēng)扇,可讀取和寫(xiě)入。事件是設(shè)備主動(dòng)上報(bào)給系統(tǒng),例如溫度過(guò)高,設(shè)備異常等。
設(shè)備影子:用于緩存設(shè)備的屬性和功能。設(shè)備離線時(shí)可以控制設(shè)備,設(shè)備上線后系統(tǒng)把離線控制的屬性和功能下發(fā)給設(shè)備,設(shè)備作出響應(yīng)。
場(chǎng)景聯(lián)動(dòng):一種自動(dòng)化業(yè)務(wù)邏輯的可視化編程方式。例如設(shè)置晚上回家這個(gè)場(chǎng)景,門鎖一打開(kāi),就把電視、飲水機(jī)和空調(diào)打開(kāi)。
設(shè)備影子:用于緩存設(shè)備的屬性和功能。設(shè)備離線時(shí)可以控制設(shè)備,設(shè)備上線后系統(tǒng)把離線控制的屬性和功能下發(fā)給設(shè)備,設(shè)備作出響應(yīng)。
場(chǎng)景聯(lián)動(dòng):一種自動(dòng)化業(yè)務(wù)邏輯的可視化編程方式。例如設(shè)置晚上回家這個(gè)場(chǎng)景,門鎖一打開(kāi),就把電視、飲水機(jī)和空調(diào)打開(kāi)。
制藥網(wǎng)






制藥網(wǎng)
汾阳市|
枣阳市|
荥阳市|
日土县|
东乡县|
玉树县|
延寿县|
榆社县|
盘锦市|
洪泽县|
调兵山市|
南川市|
宜都市|
德化县|
宁陕县|
于田县|
确山县|
竹山县|
万宁市|
芮城县|
崇义县|
长垣县|
五大连池市|
柞水县|
和顺县|
儋州市|
漯河市|
商城县|
蒲江县|
色达县|
清镇市|
民权县|
临沭县|
西宁市|
门源|
双辽市|
上杭县|
武宣县|
宁远县|
资兴市|
周口市|