手摸手帶你完成智慧路燈構建及避坑
【摘要】 彥祖你好,我是程序員龍哥,物聯網如今發展如火如荼,并且不管是政策還是市場都很鼓勵,所以咱們依托云平臺集成特有優勢來手把手完成智慧路燈構建,其中我也把踩過坑告訴你不要再踩,干貨很多其中插入涉及到應該掌握的小知識,還不忘老爺們點個贊再走吧?
本文的主要內容有:
一 先完成準備任務
二 然后構建并歸檔軟件包
三 實現消息通知服務(SMN)
四 云服務器部署初步上線
五 設備接入及模擬器連接
一 ????? 先完成準備任務
前面登錄,賬號密碼哪些略過,直接下載要用到資源先,回到桌面雙擊“Xfce終端”打開Terminal,輸入以下命令下載保存“HubSimulator.jar”到自己的云桌面上面
cd Desktop/wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/internet-wisdom-lamp/HubSimulator.jar
然后輸以下命令保存“SmartStreetLight.zip”壓縮包
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/internet-wisdom-lamp/SmartStreetLight.zip
1.1新建項目
然后選擇“服務列表”->“開發與運維”->“項目管理”,進入軟件開發云,如下圖這樣
敲黑板?。翰贿^先知道什軟件開發平臺是啥?
它是集華為近30年研發實踐、前沿研發理念、先進研發工具為一體的一站式云端DevOps平臺,面向開發者提供的云服務,即開即用,隨時隨地在云端進行項目管理、代碼托管、流水線、代碼檢查、編譯構建、部署、測試、發布等,從而給開發者快速而又輕松地開啟云端開發之旅。
點擊“立即使用”按鈕,跳轉到DevCloud操作界面,它是企業級軟件協作一體化DevOps平臺,如下圖這樣
DevCloud操作界面如下圖:
點擊上圖紅圈標注“新建項目”按鈕,開始創建項目,如下圖所示:
點擊標注的“Scrum”區域,創建“Scrum”類型項目,參數如下:
項目設置模板:Scrum
項目名稱:QuickStart
參數填寫完畢,點擊確定按鈕即可完成項目創建。
1.2創建代碼倉庫
1.2.1新建倉庫
選擇導航欄“代碼 > 代碼托管”,進入管理頁面,展開右上角“普通新建”下拉菜單,點擊“按模板新建”
1.2.2選擇模板
在搜索框中輸入“IoT_Streetlight_New_Demo”,如下圖所示選擇“華北-北京四”,選中該模板,單擊“下一步”。
1.2.3然后填倉庫基本信息
基本信息參數如下:
①代碼倉庫名稱:自定義,如:IoT_Streetlight_New_Demo ②選擇gitignore:Java 其他選項保持默認
單擊“確定”,完成倉庫創建。
創建成功后,可單擊倉庫名稱進入倉庫,查看倉庫文件
二 ? 然后構建并歸檔軟件包
2.1新建編譯構建任務
點擊導航欄“構建&發布 > 編譯構建”,進入管理頁面,點擊“新建任務”,參數如下
①源碼源:CodeHub;
②源碼倉庫:默認選擇1.2步創建的代碼倉庫;
③分支:master;
點擊“下一步”進入“選擇構建模板”
2.2選擇構建模板
本項目是一個Java Maven項目,所以搜索選擇“Maven”模板, 單擊“確定”,進入“構建步驟”頁面
2.3然后構建步驟
使用系統模板中提供的兩個默認步驟、以及每個步驟中的默認配置,即可完成本例的構建。點擊“新建并執行”即可完成步驟的配置并啟動構建任務,如下圖所示
敲黑板:構建需要2-3分鐘,請耐心等待...............
當出現上面圖片表示的頁面時,表示構建任務執行成功。若執行失敗,就查看日志信息排查問題,或通過編譯構建-常見問題查找解決方法。
2.4驗證構建任務執行結果
點擊導航欄“發布”,進入“軟件發布庫”頁面,點擊進入“IoT_Streetlight...”下的“202…”日期命名的文件夾,即可看到生成的軟件包“huawei-0.0.1-SNAPSHOT.jar”
2.5創建主題并訂閱 SMN
在華為云控制臺,展開左側目錄,選擇【服務列表】->【管理與監管】 -> 【消息通知服務SMN】,或在服務列表搜索框中搜索“SMN”。
什么是消息通知服務?
注意:若提示無權限,請確認左上角區域是否在“華北-北京四”即可
在左側導航欄,選擇“主題管理 > 主題”,單擊“創建主題”,輸入“主題名稱”(自定義,例如:StreetLight)后單擊“確定”完成主題創建
三 ???? 實現消息通知服務(SMN)
主題創建成功后,系統會自動生成主題URN,主題URN是主題的唯一資源標識,不可修改,后續步驟將會用到該URN
點擊主題“StreetLight”右側操作“添加訂閱”,可采用短信或者郵件任意一種協議完成訂閱。
“短信協議”參數如下:
①協議:短信
②訂閱終端:用戶手機號碼(需填寫您的手機號完成此步)
單擊“確定”后,請查看手機接收短信,點擊短信中的鏈接進行訂閱確認
“郵件協議”參數如下:
①協議:郵件
②訂閱終端:用戶郵箱地址(需填寫您的郵箱完成此步)
單擊“確定”后,請查收郵件,點擊郵件中的鏈接進行訂閱確認
四 ???? 云服務器部署初步上線
4.1網絡配置
點擊“前往控制臺創建”,就能跳轉到虛擬私有云控制臺頁面
在虛擬私有云控制臺,點擊“創建虛擬私有云”,區域選擇“華北-北京四”,名稱自定義(如:vpc-iot),默認子網名稱自定義(如:subnet-iot),其他參數均可默認,點擊“立即創建”完成后,即可返回網絡配置頁面;
返回網絡配置頁面,刷新后,選擇剛創建的虛擬私有云VPC(如:vpc-iot)和子網(如:subnet-iot),自動分配IP地址,如下圖所示
②擴展網卡:默認配置
③安全組:默認配置
④彈性公網IP:現在購買
⑤線路:默認配置
⑥公網帶寬:按帶寬計費
⑦帶寬大?。?Mbit/s
4.2 高級配置
完成網絡配置后單擊“下一步:高級配置”,參數如下:
①云服務器名稱:自定義,如:ecs-iot
②登錄憑證:密碼
③密碼/確認密碼:自定義,如:SM1$b9Zs1#
⑥其他參數:默認配置
完成高級配置后點擊“下一步:確認配置”,閱讀并勾選同意協議,單擊“立即購買”后,點擊返回云服務器列表。當狀態為“運行中”表示已創建完成;
4.3 主機授信配置
創建的彈性云服務器ECS的“彈性公網IP”信息將在后續步驟4.1添加授信主機的配置中用到;
4.4 添加安全組入方向規則
點擊新創建的彈性云服務器ECS的名稱進入詳情頁,選擇“安全組”頁簽,點擊Sys-WebServer安全組右側的【配置規則】進入規則配置頁面。
在新打開的安全組控制界面,選擇“入方向規則”,單擊“添加規則”,如下圖所示:
① 優先級:1
② 策略:允許
③ 協議端口:8080;
④ IP地址設為0.0.0.0/0。
點擊“確定”。
敲黑板:SSH協議端口(22)的入方向TCP協議默認開放,無需修改。將智慧路燈應用端口(8080)的入方向放開限制,用于后續訪問智慧路燈應用。出方向規則默認不做限制,無需修改;
4.5 配置系統防火墻規則
返回實驗桌面雙擊“Xfce終端”打開Terminal,輸入以下命令,并按照操作說明執行,登錄云服務器:
操作說明:
①使用彈性云服務器ECS的彈性公網IP替換命令中的[EIP]
說明:云服務器的彈性公網IP地址可以通過點擊“控制臺”->“服務列表”->“計算”->“彈性云服務器ECS”進入服務器列表,進行查看并復制
ssh root@EIP
②接受秘鑰輸入“yes”,回車;
③輸入密碼:SM1$b9Zs1#(輸入密碼時,命令行窗口不會顯示密碼,輸完之后直接鍵入回車)。成功登錄云服務器之后如下圖所示
④執行sudo ufw enable開啟ufw服務,輸入“y”確認。
sudo ufw enable
⑤執行sudo ufw allow 22/tcp啟用22端口。
sudo ufw allow 22/tcp
⑥執行sudo ufw allow 8080/tcp啟用8080端口。
sudo ufw allow 8080/tcp
4.6 部署智慧路燈應用
添加授信主機
“智慧路燈”是一個Web項目,需要部署到服務器上才可以運行,本例采用部署服務器是華為云彈性云服務器
DevCloud在使用彈性云服務器之前需要先對其授信
回到軟件開發平臺DevCloud,這個開頭我介紹過 若不知道到開頭熟悉先,點擊已創建的項目,如QuickStart,如下圖所示
單擊導航欄“更多 > 設置 > 通用設置”,選擇左側欄“主機組管理”,然后點擊“新建主機組”,參數如下:
①主機組名:自定義,如:iot
②操作系統:Linux
點擊“保存”完成主機組的創建,并進入該主機組。
在創建的主機組內,點擊“添加主機”,參數如下:
①主機名:自定義,可與創建的ECS名稱保持一致,如:ecs-iot
②IP:創建彈性云服務器ECS的彈性公網IP(見步驟3.2)
③認證方式:密碼
④用戶名:root
⑤密碼:填創建彈性云服務器ECS的用戶密碼;如:SM1$b9Zs1#
⑥ssh端口:22
勾選閱讀并同意聲明,點擊“添加”完成主機的添加。當主機連通性驗證顯示“驗證成功”時,說明主機成功添加
新建部署任務
點擊導航欄“構建&發布 > 部署”進入,然后點擊“新建任務”,輸入任務名稱(可使用默認值),單擊“下一步”進入“選擇部署模板”。
選擇模板“SpringBoot應用部署”,單擊“下一步”,進入“部署步驟”頁面
4.3配置部署步驟并執行
SpringBoot應用部署模板默認包含以下步驟:安裝JDK、停止SpringBoot服務、選擇部署來源、啟動SpringBoot服務、URL健康測試
4.3.1刪除“停止SpringBoot服務”和“URL健康測試”;
4.3.2選中“安裝JDK”,主機組:選擇添加授信主機是創建的主機組(如:iot),彈框提示點擊“確定”,jdk版本:openjdk-1.8.0;
敲黑板啊:部署失敗怎么辦?
答案:請根據實驗步驟逐步檢查: 1、主機是否添加成功并完成了連通性驗證 2、所有步驟的參數是否配置正確,手動輸入的參數是否多了個空格,少了個符號等等。 3、不用的步驟和參數是否都已刪除。
選中“選擇部署來源”,參數如下:
①選擇源類型:軟件包;
②選擇軟件包:點擊右側“…”,選擇構建包,路徑如下圖所示;
③下載到主機的部署目錄:按需填寫,如/usr/local
選中“啟動SpringBoot服務”,參數如下:
①服務操作類型:保持默認值
②服務對應的絕對路徑:由“下載到主機的部署目錄”和軟件包包名組成,如/usr/local/huawei-0.0.1-SNAPSHOT.jar
③組件監控:去掉勾選
切換到“參數設置”頁簽,逐一刪除全部參數
點擊“保存并執行”,完成部署任務的配置,并執行部署任務;
頁面顯示“部署成功”,表示任務執行完畢。若任務執行失敗,可通過頁面中的原因提示及鏈接來排查解決;
五 ???? 設備接入及模擬器連接
5.1創建產品
在華為云控制臺,展開左側導航,選擇“服務列表”-> “物聯網”->“設備接入IoTDA”,如下圖所示
敲黑板?。涸O備接入服務是什么?
它是華為云的物聯網平臺,提供海量設備連接上云、設備和云端雙向消息通信、批量設備管理、遠程控制和監控、OTA升級、設備聯動規則等能力,并可將設備數據靈活流轉到華為云其他服務。物聯網平臺中,某一類具有相同能力或特征的設備的合集被稱為一款產品。您可為產品定義產品模型,產品模型用于描述設備具備的能力和特性。定義產品模型,即在物聯網平臺構建一款設備的抽象模型,使平臺理解該款設備支持的服務、屬性、命令等信息;
在左側欄中選擇“產品”,點擊“創建產品”,參數如下
①所屬資源空間:Default_APP_Sandbox_user_iot
②產品名稱:自定義,如:StreetLight
③協議類型:MQTT
④數據格式:JSON
⑤廠商名稱:自定義,如:Huawei_IoT
⑥設備類型:自定義,如:StreetLight
填寫完成,點擊“立即創建”,產品創建成功,請記錄“產品ID”信息,并查看“詳情”
5.2 上傳模型文件
點擊創建的產品進入詳情,然后點擊“上傳模型文件”,選擇SmartStreetLight.zip文件,點擊“確認”完成上傳
5.3 訪問智慧路燈Web界面
新建瀏覽器標簽頁,輸入http://EIP:8080/index.html(使用步驟3.2中彈性云服務器的彈性公網IP替換地址中的“EIP”),訪問智慧路燈Web頁面。
6.2參數設置
在彈出的“參數設置”窗口,參數填寫如下:
①數據來源:參數設置頁面下拉框選擇“訂閱推送”;
②本機IP:“控制臺”->“服務列表”->“計算”->“彈性云服務器ECS”進入服務器列表,進行查看并復制彈性公網IP;
敲黑板?。簽槭裁匆渲眠@些參數?
智慧路燈應用通過API方式和華為云對接,注冊設備、獲取設備數據和下發命令,這些參數在調用API時才用;
③主題URN:“控制臺”->“服務列表”->“管理與監管”->“消息通知服務SMN”進入主題列表,進行查看并復制主題URN
④APPID:“控制臺”->“服務列表”-> “物聯網”->“設備接入IoTDA”,在左側導航欄選擇“資源空間”,復制獲取產品所需的“APPID”
⑤賬號名:系統為您分配的華為云實驗賬號名
⑥IAM用戶名:系統為您分配的華為云實驗用戶名
⑦IAM用戶密碼:系統為您分配的華為云實驗密碼
⑧項目ID:控制臺在右上角用戶名下拉框中選擇“我的憑證->API憑證”頁面復制獲取所屬區域為“華北-北京四”的項目ID。
⑨產品ID:“控制臺”->“服務列表”-> “物聯網”->“設備接入IoTDA”,在左側導航欄選擇“產品”,復制獲取產品所需的“產品ID”。
填寫完成后點擊“確定”,彈窗提示如下,表示參數設置成功
5.4 注冊設備
輸入設備標識(自定義,如123456789f),點擊“注冊設備”
敲黑板?。簭棿疤崾救缦?,表示注冊設備成功。請記錄“設備Id”和“密鑰”信息,用于后續驗證,請記錄設備id以及密鑰,便于后期使用!
設備注冊成功后是“未激活”狀態,請選擇“服務列表”-> “物聯網”->“設備接入服務”,在左側欄選擇“設備 > 所有設備”,點擊設備標識碼進入,查看設備Id,或修改密鑰。
結果驗證(設備屬性上報/訂閱/設備命令下發);
5.5 模擬器與平臺建立連接
7.1.1打開MQTT設備模擬器
在實驗桌面雙擊“Xfce終端”打開Terminal,執行以下命令打開設備接入模擬器(HubSimulator.jar),然后切換到MQTT設備模擬器頁簽
敲黑板?。篐ubSimulator.jar是什么工具?
HubSimulator.jar是設備接入服務提供的多功能模擬器,本實驗中我們用它來模擬MQTT設備接入;連接失敗怎辦呢,請檢查服務IP(域名),設備ID和設備秘鑰的填寫是否都正確,有無多余的空格基本就可以解決了哈;
cd Desktop//usr/local/share/jre1.8.0_181/bin/java -jar HubSimulator.jar
5.6 建立連接
在MQTT設備模擬器頁簽下,填寫參數如下:
①服務IP:進入“服務列表”-> “物聯網”->“設備接入IoTDA”,在左側欄選擇“總覽”,點擊“平臺接入地址”
復制使用MQTT/MQTTS接入信息的域名。
②設備ID:配置智慧路燈應用,注冊設備成功后返回的設備Id
③設備密鑰:配置智慧路燈應用,注冊設備成功后返回的密鑰
配置好以上參數后,點擊“建立連接”按鈕。
建立連接成功后,右側日志顯示MQTT服務連接成功,如下圖所示:
若無法建立連接,請打開“命令提示符”窗口,輸入“ping 服務IP”查看您的主機是否能和華為云物聯網平臺正常通信,若無法正常通信,請更換主機的網絡環境
5.7 查看設備狀態
回到物聯網所有設備列表( “服務列表”-> “物聯網”->“設備”→“所有設備”),設備狀態變更為“在線”,如下圖所示
5.8 模擬器設備屬性上報
7.2.1模擬器發送消息,上報設備屬性
①在模擬器窗口中的Topic欄中輸入以下代碼:$oc/devices/{device_id}/sys/properties/report,其中的{device_id}需要替換成實際設備ID
敲黑板啊:應用界面不顯示上報的數據怎么辦?
首先檢查上報數據的Topic填寫是否正確,然后檢查上報數據是否符合JSON格式。如果以上兩點都檢查沒問題,再檢查之前參數設置的是否都正確
$oc/devices/{device_id}/sys/properties/report
②消息內容:
其中,光感強度可自定義,燈狀態建議為OFF。
在模擬器窗口中的消息編輯欄中輸入以下代碼:
{"services":[{"service_id":"Sensor","properties":{"luminance":"200","light_state":"OFF"}}]}
發送消息成功后,右側日志顯示信息推送成功(圖片僅為示意,請以你上報實際數據為準哈)
5.9 查看應用界面變化
返回智慧路燈Web界面,此時顯示“環境亮度”為200LUX,“燈狀態”為關。
敲黑板啦:模擬器與Web頁面之間會有短暫延遲,不用刷新頁面,幾秒鐘后可發現頁面會隨之變化!
5.10 模擬器訂閱Topic
切換到“訂閱Topic”頁簽,并在Topic欄中輸入以下代碼:
$oc/devices/{device_id}/sys/commands/#,其中的{device_id}需要替換成實際設備ID。
輸入完畢后,點擊“訂閱”按鈕可完成訂閱。
$oc/devices/{device_id}/sys/commands/#
訂閱成功后,右側日志顯示訂閱Topic成功
5.11 平臺下發設備命令/模擬器響應
7.4.1終端聯控模式配置
返回智慧路燈Web界面,“路燈控制”選擇“終端聯控模式”,開關選擇“開”,單擊“設置”,然后點擊”確認”。
①若當前燈狀態為“關”,開關選擇為“開”,服務后臺會實時下發一條開燈命令,彈窗提示會有5-10秒左右延遲,請耐心等待。
②若當前燈狀態為“關”,開關選擇為“關”,不會觸發命令下發,直接彈窗提示設置成功;
即“燈狀態”與“開關選擇”一致時,不會觸發命令下發;“燈狀態”與“開關選擇”不一致時,會觸發實時命令下發;
收不到命令怎么辦?
5.12 命令接收
因為當前“燈狀態”為關,“開關選擇”為開,查看模擬器日志區域,會收到一條開燈命令。(payload的值經過base64加密,解密后即可得到命令內容)
5.13 模擬器發送消息,上報變更后的設備屬性
①Topic:$oc/devices/{device_id}/sys/properties/report,其中的{device_id}需要替換成實際設備ID。
$oc/devices/{device_id}/sys/properties/report
②消息內容:
其中,光感強度可自定義,燈狀態建議為ON。
{"services":[{"service_id":"Sensor","properties":{"luminance":"110","light_state":"ON"}}]}
5.14 查看應用界面變化
如下圖所示,應該顯示“環境亮度”為110LUX,“燈狀態”為開。
5.15 短信/郵件通知
在模擬器上單擊“斷開連接”后,重復7.4.1,“路燈控制”選擇“終端聯控模式”,開關選擇“關”,單擊“設置”。
因為燈狀態為“開”,開關選擇為“關”,服務后臺會實時下發一條關燈命令;而設備處于離線狀態,導致命令下發失敗
此時,系統會發送短信/郵件通知告知訂閱用戶命令下發失敗;通知內容為命令下發失敗的錯誤信息
通知示例:【華為云】錯誤信息:{"error_code":"IOTDA.014016","error_msg":"Operation not allowed. The device is not online."}
設備變更為“離線”狀態,請登錄華為云控制臺,選擇“物聯網 > 設備接入服務”,在左側導航欄,選擇“設備 > 所有設備”,根據設備標識碼查看設備狀態
5.16(可選)自動調光模式
自動調光模式參數配置
在模擬器上單擊“建立連接”,將設備重新上線。返回智慧路燈Web界面,“路燈控制”選擇“自動調光模式”,設置亮度閾值為100
5.17 模擬器接收反應
因為當前“環境亮度”為110LUX,“燈狀態”為開,查看模擬器日志區域,應該會收到關燈命令。
①若當前“環境亮度”大于“亮度閾值”,且“燈狀態”為“開”,服務后臺會實時下發一條關燈命令,彈窗提示會有5-10秒左右延遲,請耐心等待。
②若當前“環境亮度”小于“亮度閾值”,且“燈狀態”為“開”,不會觸發命令下發,直接彈窗提示設置成功
即“環境亮度”小于“亮度閾值”,且“燈狀態”為“開”或“環境亮度”大于“亮度閾值”,且“燈狀態”為“關”時,不會觸發命令下發;反之,則會觸發實時命令下發
模擬器發送消息,上報變更后的設備屬性。
①Topic:$oc/devices/{device_id}/sys/properties/report,其中的{device_id}需要替換成實際設備ID
$oc/devices/{device_id}/sys/properties/report
②消息內容:
其中,光感強度<100,燈狀態為OFF
{"services":[{"service_id":"Sensor","properties":{"luminance":"80","light_state":"OFF"}}]}
5.18 查看Web界面
返回智慧路燈Web界面,單擊“設置”,查看模擬器日志區域,會收到一條開燈命令
5.19(可選)分段定時模式
分段定時模式參數配置
返回智慧路燈Web界面,“路燈控制”選擇“分段定時模式”,設置關燈時間段為06:30-18:30。
敲黑板啦:“關燈時間段”和“亮度曲線”橫軸時間均為彈性云服務器系統時間,即為GMT+0:00時區
結果判定,因為當前“燈狀態”為關,需根據彈性云服務器系統時間(參考“亮度曲線”橫軸時間)判斷結果;
①若系統時間位于“關燈時間段”之外,且“燈狀態”為“關”,服務后臺會實時下發一條開燈命令,彈窗提示會有5-10秒左右延遲,請耐心等待
②若系統時間位于“關燈時間段”之內,且“燈狀態”為“關”,不會觸發命令下發,直接彈窗提示設置成功啦開心
5.20 (可選)如何正確刪除應用服務
首先刪彈性云服務器 ECS
在華為云控制臺,選擇“服務列表”-> “計算”-> “彈性云服務器 ECS”進入,勾選待刪除ECS服務器,如ecs-iot,選擇“更多 > 刪除”,在彈窗中請勾選刪除彈性公網IP和數據盤后,點擊“是”完成刪除
然后刪設備接入服務 IoTDA
在華為云控制臺,選擇“服務列表”->“物聯網”->“設備”→“所有設備”進入所有設備列表,根據設備標識碼刪除設備,如123456789f。然后在左側欄選擇“產品”,刪除產品,如StreetLight
最后刪桌面下載的資源包
桌面雙擊“Xfce終端”打開Terminal,輸入以下命令下載刪除“HubSimulator.jar”文件。
cd Desktop/rm HubSimulator.jar
接下來刪除“SmartStreetLight.zip”壓縮包。命令如下:
rm SmartStreetLight.zip
轉載請在文章開頭和結尾顯眼處標注:作者、出處和鏈接。不按規范轉載侵權必究。
未經授權嚴禁轉載,授權事宜請聯系作者本人,侵權必究。
本文禁止轉載,侵權必究。
授權事宜請至數英微信公眾號(ID: digitaling) 后臺授權,侵權必究。
評論
評論
推薦評論
暫無評論哦,快來評論一下吧!
全部評論(0條)