摘要:IoT, Internet of Things,物聯網,顧名思義,是物物相連,而要實作“物物相連”,一共有3個階段性任務,而這3個階段性任務,也伴隨著巨大的挑戰
本文分享自華為云社區《【云駐共創】以小窺大,從一盞路燈看億萬物聯網之路》,作者: 啟明,
物聯網的必然趨勢與巨大挑戰
在介紹華為云IoT設備接入管理服務業務之前,我們需要先了解“IoT”是什么,
IoT, Internet of Things,物聯網,顧名思義,是物物相連,而要實作“物物相連”,一共有3個階段性任務,而這3個階段性任務,也伴隨著巨大的挑戰:

階段一:讓“物”說話,
正如嬰兒要融入世界,需要會說話一樣,我們的“物”也需要能夠與外界交流,感知物理世界,變成數字信號:讓萬物可以感知溫度、空間、五覺,并且將自己感知到的進行資料化,在這資料化的程序中,我們發現如下挑戰:
- 大量現存設備未被數字化;
- 多樣化設備、各種行業協議、各種通信網路;
- 設備要求低功耗、低成本;
- 設備安全問題突出
階段二:讓“物”說一種話
嬰兒光會說話是不行的,要能夠和外界交流,還需要和外界使用共同的語言,對于“物”也是一樣,我們需要將數變成Online,提供標準化資料,讓外部能夠理解“物”說的話,而這就需要有廣聯接和多協議接入,并且資料標準化,統一物模型,可是,現狀卻是:
- 百萬中資料元素,缺乏標準和規范;
- 多樣化資料格式
- 各廠商煙囪式發展,資料孤島林立,資料互通困難
階段三:讓“物”時候有價值的話
在可以用同一種語言溝通的基礎上,我們還需要讓嬰兒說有價值的話,才能夠實作高效溝通,對于“物”而言,亦是如此,尤其是在“物”的世界,我們需要解決海量資料處理和分析,因此對算力的要求極高,并且要求實時性,最終的結果就是行業數字化、數字化行業,但是,正如前面說到的:
- 海量資料帶來算力、存盤問題;
- 實時流、時序、離線、多維分析復雜;
- 行業應用場景的復雜性;
- 商業倍訓、價值變形和分配問題
以小窺大,從一盞路燈,看萬物互聯世界
首先,讓我們在腦海里描繪一盞路燈的樣子,你是不是覺得很簡單?
我們來回顧一下路燈的發展史:

從五六十年代的時間控制器+本地回路控制,定時開關,最簡單的邏輯處理關系;到70年代,加上光電控制器,稍微“聰明”了一些,能夠感知周圍的光感強度,從而調節開關,但是此時還只是在本地回路控制;而到了90年代,已經可以基于無線專網的三遙監控系統,實作遠程回路控制;最后再到現在,基于物聯網技術的智能化系統,實作資訊融合、智能場景和應用拓展,從而實作智慧照明場景(如上圖),
可以看到,智慧場景下的智慧路燈,搭載了許多智能設備,諸如監控組件、LED螢屏、集中控制器、電動汽車充電樁等等,讓一盞路燈實作一個路面能實作的基本功能,
以上,就是一盞燈的智慧之路,在這個程序中,物聯網技術發揮了極大的作用,讓一個單定時控制的路燈,一步步具有多場景、多應用的功能,最后演變為智慧路燈,
而華為云IoT設備接入管理服務,正是基于此技術,
華為云IoT設備接入管理服務介紹
首先,我們對物聯網要有一個正確的認知:物聯網是由多個服務組成的,而非單一的服務,下圖是一個整體的物聯網解決方案,

在圖左側,是設備,體現的是我們前面說到的:讓設備說話、讓設備時候同一種話、讓設備有說價值的話,那么,我們首先要讓這些設備能夠“被”感知到,在這個程序中,我們通過物聯網作業系統(LiteOS)或者SDK使能,使其智能化;然后感知到的東西以資料的形式通過網關、邊緣網關或者直連的方式上傳,具體要上傳到哪里呢?
考慮到設備的海量問題,我們需要有一個物聯網平臺,資料通過前面所說的方式上傳至物聯網平臺中的設備接入服務,在設備接入服務,可以實作多網路接入、多協議接入、設備影子等等多種功能;而在整體物聯網平臺上,還包括全球SIM連接、設備發放、資料分析等等服務,
在圖右側,更能對接華為云的其他產品,諸如DIS/DCS/OBS等等,幫助客戶快速構筑滿足客戶要求的物聯網應用,如智慧城市、智慧園區、車聯網等等,
回歸到技術本身,我們前面聊到,不同的設備,都可以通過華為云設備接入服務接入,但實際上,他們的接入方式和接入協議都是不一樣的,那么華為云設備接入服務又是怎么屏蔽底端差異,實作設備接入的呢?
我們首先來看下面這張圖:

通訊模型:在華為云設備接入服務里,定義了“通訊模型”,同樣以我們之前說的嬰兒說話為例,人與人之間的溝通,雖然語言有很多種,但是表達的方式還是主要以聲音(說話)或者視覺(手語)為主,而物與物之間,同樣的,主要的內容也主要是幾類:命令下發、命令相應、屬性設備等等,
設備影子:而在此基礎之上,我們還有“設備影子”這一概念,物聯網平臺支持創建設備的“影子”,設備影子是一個JSON檔案,用于存盤設備的在線狀態、設備最近一次上報的設備屬性值、應用服務器期望下發的配置,每個設備有且只有一個設備影子,設備可以獲取和設定設備影子以此來同步設備屬性值,這個同步可以是影子同步給設備,也可以是設備同步給影子,
通用協議接入層:在具備“通訊模型”以后,我們需要把設備資料和通訊模型進行關聯,而進行關聯的就是“通用協議接入層”,通過通訊協議接入層,我們可以將不同的協議型別(如MQTT/CoAP/TCP等等)上的不同資料轉化到通訊模型上,
編解碼處理:一款產品的設備上報資料時,如果“資料格式”為“二進制碼流”,則該產品需要進行編解碼插件開發;如果“資料格式”為“JSON”,則該產品下不需要進行編解碼插件開發,
以NB-IoT場景為例,NB-IoT設備和物聯網平臺之間采用CoAP協議通訊,CoAP訊息的payload為應用層資料,應用層資料的格式由設備自行定義,由于NB-IoT設備一般對省電要求較高,所以應用層資料一般不采用流行的JSON格式,而是采用二進制格式,但是,物聯網平臺與應用側使用JSON格式進行通信,因此,需要開發編碼插件,供物聯網平臺呼叫,以完成二進制格式和JSON格式的轉換,

華為云IoT設備接入管理服務云化架構解讀
IoT設備接入管理服務架構

在講解整個框架之前,我們首先要明確的是,華為云IoT設備接入服務內部,實際上是基于Cloud Native(云原生)的微服務的一個架構,里面所有業務相關的服務,都是無狀態的,無狀態的服務就意味著可以隨時被創建,也可以隨時被kill掉,
也就是說,即使任何一個服務實體出現問題,都可以通過創建服務來保證業務的無損,同時在海量并發的情況下,通過彈性的縮、擴容,能夠使服務滿足對應業務量的需求,
在基于無狀態服務的框架下,除了負載均衡層(目的是為了讓海量的設備能夠接入到服務中),上面可以分為兩層:
一層是CIG云通訊網關層,這一層實際上是將各種各樣的設備的不同的協議和不同的資料格式轉換成統一的模型;
另一層是連接&管理業務服務:資料和協議轉換成統一的模型,流轉到這一層后,由業務服務來做處理,比如說訊息流轉推送、設備影子、規則引擎服務,以及任務管理服務等等,
更上層是公有云支撐管理服務:通過公有云的支撐服務,像CBC/IAM/SMN等等來整體構建設備接入管理服務,
以上就是設備技術管理服務的一個大致的框架,通過此框架可以了解內部的業務處理邏輯,有助于大家理解后續我們的沙箱實驗體驗,
產品模型(Profile)-統一的資料&通訊模型
產品模型,也就是常說的Profile,簡單來說也就是通信模型的映射,

上圖是如何將不同型別的資料映射到通訊模型上面的實體,
在圖左側,有3個不同的表計,雖然它們都是水表,但是它們是由不同的廠家生產的,因此資料格式和協議也是不一樣的,那么我們該如何采集它們的資料形成統一的格式呢?
答案就是產品模型,通過產品模型里面不同的插件,可以將這些不同資料轉換成相同格式的資料,對設備廠商來說,無需修改設備代碼,通過插件即可適配不同企業的訴求,降低設備廠家的維護復雜度,而對上層應用來說,降低了上層應用對設備管理復雜度,通過在平臺規整不同廠家的資料,形成統一的Profile,上層應用無需感知不同設備的差異

接下來再看規則引擎,規則引擎是華為云IoT設備接入服務特有的能力,通過規則引擎可以實作資料流轉和設備聯動,無縫與公有云其他服務對接,實作設備資料按需流轉和處理;
而設備聯動,也是基于規則引擎來實作的,由條件觸發,基于預置規則,引發多設備協同反應,如提醒、告警、狀態報告等等,
華為云IoT智慧路燈沙箱實驗演示
在介紹完華為云IoT設備接入管理服務之后,接下來然后就帶大家了解一下相關的沙箱實驗,
沙箱實驗介紹

智慧路燈沙箱實驗組網結構如上,為了方便大家在線完成路等試驗,我們需要有一個虛擬設備,在此我們使用的是設備模擬器,設備接入平臺,上報屬性,然后接收平臺下發的命令,而在平臺上層,有一個基于華為云軟開云的應用層的實作,大致步驟如下:
1、通過華為云軟體開發平臺構建一個路燈的模擬應用(真實的應用可以參考其構建的方法);
2、申請ECS云服務,將構建的應用部署于ECS上,通過EIP對接IoT設備接入服務,并進行訂閱通知;
3、在實驗桌面運行MQTT模擬器,模擬路燈設備的行為
設備模擬器
在正式開始之前,我們先看一下設備模擬器(如下圖),

連接引數配置區:
設備模擬器打開之后,打開“MQTT設備模擬器”頁簽,在“連接引數配置區”需要指定進入平臺的地址資訊,拿到“注冊設備成功”或者設備ID和設備密鑰,并與平臺建立連接;
訊息上報區:
與平臺建立連接之后,設備上報資料到平臺,下面有“訊息上報區”,可以在指定設備上報屬性的topic之后,在下面將jason格式資料粘貼進來,并進行上報;
日志列印區:
右側是一個類似訊息跟蹤的日志列印區域,在此可以看到訊息上報的訊息記錄,包括平臺的下發的命令,也會在這里做一個列印跟蹤,
Topic訂閱區:
Topic訂閱區是另一個頁簽,設備需要訂閱平臺下發命令的相關topic的時候,就可以在這里指定topic進行訂閱,
應用實作-API介紹
在實驗桌面里面,創建代碼倉庫之后,可以查看詳細的源檔案,而比較典型的幾個源檔案的實作,是對應用側API的實作,比如:
創建設備API:src/main/java/com/huawei/service/RegisterDirectConnectedDevice.java
創建訂閱API:src/main/java/com/huawei/service/SubscribeDataChg.java
下發設備命令API:src/main/java/com/huawei/service/CreateDeviceCommand.java
基于這些源檔案的樣例代碼,開發人員可以再基于自己的思路,做定制化開發,
前臺web頁面布局的關鍵檔案,就是一個index的html的源檔案,加一個 js腳本:
頁面布局:src/main/resources/static/index.html
腳本檔案:src/main/resources/static/js/common.js
智慧路燈沙箱實驗實操步驟
智慧路燈沙箱實驗,分為7步:
1、編譯構建智慧路燈應用DevCloud
2、創建主題并訂閱SMN
3、創建彈性云服務器ECS
4、部署智慧路燈應用DevCloud
5、匯入產品模型IoTDA
6、配置智慧路燈應用Web
7、結果驗證

開發者在登錄華為云賬號,進入沙箱實驗之后,會有上圖頁面:
左上角呈現實驗賬號,開發者拿這個實驗賬號在實驗桌面里面通過firefox瀏覽器登錄華為云,并通過控制臺進入到各個服務,
賬號下有 step by step的實驗步驟指導,按照步驟操作即可,
右上角有一個完成進度顯示,實時重繪,可以得到進度顯示和實驗倒計時,
在左側部分,有一些相關的命令執行,可以方便大家執行的時候快速拷貝,
由于時間限制,我們省略前面簡單的1~4步,從第5步然后創建產品開始,正常后面的正式實驗程序中,
PS:前面1~4步程序中需要注意的事項是在創建主題并訂閱的時候,平臺會發送一個確認的短信到用戶手機上,用戶需要查看短信,點擊里面的鏈接,確認之后才能完成實際的訂閱,
接下來,我們正式進入實驗操作:
匯入產品模型:
創建產品
在華為云控制臺,展開左側導航,選擇“服務串列”-> “物聯網”->“設備接入IoTDA”,如下圖所示:

在左側欄中選擇“產品”,點擊“創建產品”,引數如下:

①所屬資源空間:Default_APP_Sandbox_user_iot
②產品名稱:自定義,如:StreetLight
③協議型別:MQTT
④資料格式:JSON
⑤廠商名稱:自定義,如:Huawei_IoT
⑥設備型別:自定義,如:StreetLight
填寫完成,點擊“立即創建”,產品創建成功,請記錄“產品ID”資訊,并查看“詳情”,

上傳模型檔案
點擊創建的產品進入詳情,然后點擊“上傳模型檔案”,選擇SmartStreetLight.zip檔案,點擊“確認”完成上傳,

配置智慧路燈應用(訂閱推送方案)
訪問智慧路燈Web界面
新建瀏覽器標簽頁,輸入http://EIP:8080/index.html(使用步驟3.2中彈性云服務器的彈性公網IP替換地址中的“EIP”),訪問智慧路燈Web頁面,
引數設定
在彈出的“引數設定”視窗,引數填寫如下:
①資料來源:引數設定頁面下拉框選擇“訂閱推送”,
②本機IP:“控制臺”->“服務串列”->“計算”->“彈性云服務器ECS”進入服務器串列,進行查看并復制彈性公網IP,

③主題URN:“控制臺”->“服務串列”->“管理與監管”->“訊息通知服務SMN”進入主題串列,進行查看并復制主題URN,
④APPID:“控制臺”->“服務串列”-> “物聯網”->“設備接入IoTDA”,在左側導航欄選擇“資源空間”,復制獲取產品所需的“APPID”,

⑤賬號名:系統為您分配的華為云實驗賬號名,
⑥IAM用戶名:系統為您分配的華為云實驗用戶名,
⑦IAM用戶密碼:系統為您分配的華為云實驗密碼,

⑧專案ID:控制臺在右上角用戶名下拉框中選擇“我的憑證->API憑證”頁面復制獲取所屬區域為“華北-北京四”的專案ID,

⑨產品ID:“控制臺”->“服務串列”-> “物聯網”->“設備接入IoTDA”,在左側導航欄選擇“產品”,復制獲取產品所需的“產品ID”,


填寫完成后點擊“確定”,彈窗提示如下,表示引數設定成功,

注冊設備
輸入設備標識(自定義,如123456789f),點擊“注冊設備”,

彈窗提示如下,表示注冊設備成功,請記錄“設備Id”和“密鑰”資訊,用于后續驗證,

注意:請記錄設備id以及密鑰,便于后期使用!
設備注冊成功后是“未激活”狀態,請選擇“服務串列”-> “物聯網”->“設備接入服務”,在左側欄選擇“設備 > 所有設備”,點擊設備標識碼進入,查看設備Id,或修改密鑰,
結果驗證(設備屬性上報/訂閱/設備命令下發)
模擬器與平臺建立連接
打開MQTT設備模擬器
在實驗桌面雙擊“Xfce終端”打開Terminal,執行以下命令打開設備接入模擬器(HubSimulator.jar),然后切換到MQTT設備模擬器頁簽,

建立連接
在MQTT設備模擬器頁簽下,填寫引數如下:
①服務IP:進入“服務串列”-> “物聯網”->“設備接入IoTDA”,在左側欄選擇“總覽”,點擊“平臺接入地址”,

復制使用MQTT/MQTTS接入資訊的域名,

②設備ID:配置智慧路燈應用,注冊設備成功后回傳的設備Id
③設備密鑰:配置智慧路燈應用,注冊設備成功后回傳的密鑰
配置好以上引數后,點擊“建立連接”按鈕,

建立連接成功后,右側日志顯示MQTT服務連接成功,如下圖所示:

若無法建立連接,請打開“命令提示符”視窗,輸入“ping 服務IP”查看您的主機是否能和華為云物聯網平臺正常通信,若無法正常通信,請更換主機的網路環境,
查看設備狀態
回到物聯網所有設備串列( “服務串列”-> “物聯網”->“設備”→“所有設備”),設備狀態變更為“在線”,如下圖所示:

模擬器設備屬性上報
模擬器發送訊息,上報設備屬性,
①在模擬器視窗中的Topic欄中輸入以下代碼:$oc/devices/{device_id}/sys/properties/report,其中的{device_id}需要替換成實際設備ID,
$oc/devices/{device_id}/sys/properties/report
②訊息內容:
其中,光感強度可自定義,燈狀態建議為OFF,
在模擬器視窗中的訊息編輯欄中輸入以下代碼:
{"services":[{"service_id":"Sensor","properties":{"luminance":"200","light_state":"OFF"}}]}

發送訊息成功后,右側日志顯示資訊推送成功(圖片僅為示意,請以實際上報資料為準),
查看應用界面變化
回傳智慧路燈Web界面,此時顯示“環境亮度”為200LUX,“燈狀態”為關,

注意:模擬器與Web頁面之間會有短暫延遲,不用重繪頁面,幾秒鐘后可發現頁面會隨之變化!
模擬器訂閱Topic
切換到“訂閱Topic”頁簽,并在Topic欄中輸入以下代碼:
$oc/devices/{device_id}/sys/commands/#,其中的{device_id}需要替換成實際設備ID,
輸入完畢后,點擊“訂閱”按鈕可完成訂閱,
$oc/devices/{device_id}/sys/commands/#

訂閱成功后,右側日志顯示訂閱Topic成功,
平臺下發設備命令/模擬器回應
終端聯控模式配置
回傳智慧路燈Web界面,“路燈控制”選擇“終端聯控模式”,開關選擇“開”,單擊“設定”,然后點擊”確認”,
①若當前燈狀態為“關”,開關選擇為“開”,服務后臺會實時下發一條開燈命令,彈窗提示會有5-10秒左右延遲,請耐心等待,
②若當前燈狀態為“關”,開關選擇為“關”,不會觸發命令下發,直接彈窗提示設定成功,
即“燈狀態”與“開關選擇”一致時,不會觸發命令下發;“燈狀態”與“開關選擇”不一致時,會觸發實時命令下發,

命令接收
因為當前“燈狀態”為關,“開關選擇”為開,查看模擬器日志區域,會收到一條開燈命令,(payload的值經過base64加密,解密后即可得到命令內容),

模擬器發送訊息,上報變更后的設備屬性,
①Topic:$oc/devices/{device_id}/sys/properties/report,其中的{device_id}需要替換成實際設備ID,
②訊息內容:
其中,光感強度可自定義,燈狀態建議為ON,
{"services":[{"service_id":"Sensor","properties":{"luminance":"110","light_state":"ON"}}]}
查看應用界面變化
如下圖所示,應該顯示“環境亮度”為110LUX,“燈狀態”為開,

短信/郵件通知
在模擬器上單擊“斷開連接”后,重復7.4.1,“路燈控制”選擇“終端聯控模式”,開關選擇“關”,單擊“設定”,
因為燈狀態為“開”,開關選擇為“關”,服務后臺會實時下發一條關燈命令;而設備處于離線狀態,導致命令下發失敗,
此時,系統會發送短信/郵件通知告知訂閱用戶命令下發失敗;通知內容為命令下發失敗的錯誤資訊,
通知示例:【華為云】錯誤資訊:{"error_code":"IOTDA.014016","error_msg":"Operation not allowed. The device is not online."}
設備變更為“離線”狀態,請登錄華為云控制臺,選擇“物聯網 > 設備接入服務”,在左側導航欄,選擇“設備 > 所有設備”,根據設備標識碼查看設備狀態,

模擬器接收反應
因為當前“環境亮度”為110LUX,“燈狀態”為開,查看模擬器日志區域,應該會收到關燈命令,
①若當前“環境亮度”大于“亮度閾值”,且“燈狀態”為“開”,服務后臺會實時下發一條關燈命令,彈窗提示會有5-10秒左右延遲,請耐心等待,
②若當前“環境亮度”小于“亮度閾值”,且“燈狀態”為“開”,不會觸發命令下發,直接彈窗提示設定成功,
即“環境亮度”小于“亮度閾值”,且“燈狀態”為“開”或“環境亮度”大于“亮度閾值”,且“燈狀態”為“關”時,不會觸發命令下發;反之,則會觸發實時命令下發,

模擬器發送訊息,上報變更后的設備屬性,
①Topic:$oc/devices/{device_id}/sys/properties/report,其中的{device_id}需要替換成實際設備ID,
②訊息內容:
其中,光感強度<100,燈狀態為OFF,
{"services":[{"service_id":"Sensor","properties":{"luminance":"80","light_state":"OFF"}}]}
查看Web界面
回傳智慧路燈Web界面,單擊“設定”,查看模擬器日志區域,會收到一條開燈命令,

洗掉資源
洗掉彈性云服務器 ECS
在華為云控制臺,選擇“服務串列”-> “計算”-> “彈性云服務器 ECS”進入,勾選待洗掉ECS服務器,如ecs-iot,選擇“更多 > 洗掉”,在彈窗中請勾選洗掉彈性公網IP和資料盤后,點擊“是”完成洗掉,
洗掉設備接入服務 IoTDA
在華為云控制臺,選擇“服務串列”->“物聯網”->“設備”→“所有設備”進入所有設備串列,根據設備標識碼洗掉設備,如123456789f,然后在左側欄選擇“產品”,洗掉產品,如StreetLight,
洗掉桌面下載的資源包
桌面雙擊“Xfce終端”打開Terminal,輸入以下命令下載洗掉“HubSimulator.jar”檔案,
cd Desktop/
rm HubSimulator.jar
接下來洗掉“SmartStreetLight.zip”壓縮包,命令如下:
rm SmartStreetLight.zip
至此實驗體驗完畢,
總結
華為云設備接入服務(IoT Device Access)是華為云的物聯網平臺,提供海量設備連接上云、設備和云端雙向訊息通信、批量設備管理、遠程控制和監控、OTA升級、設備聯動規則等能力,并可將設備資料靈活流轉到華為云其他服務,幫助物聯網行業用戶快速完成設備聯網及行業應用集成,全新升級后的設備接入服務IoTDA,整合了原設備接入服務和設備管理服務的功能,
感興趣就來一起體驗一下吧~ https://www.huaweicloud.com/product/iothub.html
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310644.html
標籤:其他
上一篇:4G DTU+MODBUS溫濕度傳感器+MQTT連接電信云
下一篇:BLIINKER+ESP32編譯問題:some warnings being treated as errors
