Spring OXM- 漫談XML解析技術">Spring OXM- 漫談XML解析技術
1285
2022-05-30
1 前言
本文檔主要通過實例講述如何通過Agent Tiny SDK的端云互通組件,使用LwM2M協議快速接入華為物聯網平臺。
2 Agent Tiny SDK簡介
Agent Tiny是部署在具備廣域網能力、對功耗/存儲/計算資源有苛刻限制的終端設備上的輕量級互聯互通中間件,您只需調用API接口,便可實現設備快速接入到物聯網平臺以及數據上報和命令接收等功能。 Agent Tiny SDK是Huawei Agent Tiny軟件開發工具包(Software Development Kit),通過Agent Tiny SDK端云互通組件,簡單快速地實現與華為物聯網平臺安全可靠連接,可以大大減少開發周期, 快速構建IoT產品。端云互通組件可以采用MQTT、CoAP和LwM2W協議接入物聯網平臺。
IOT SDK 架構圖
圖2-01
3接入物聯網平臺流程
本章分別從 IoT 平臺側和端側闡述通過端云互通組件接入物聯網平臺的開發流程,旨在幫助開發者在 IoT 設備上集成端云互通組件,進行IoT應用開發和調測。 端云互通組件接入華為 OceanConnect IoT 云平臺默認采用的是以太網方式(即以太網口驅動+LwIP網絡協議棧+LwM2M協議+Agent Tiny SDK 對接云平臺), 同時也支持WIFI、GSM、NB-IoT等無線方式。OceanConnect 即華為IoT聯接管理平臺(IoT Connection Management Platform)是面向運營商和企業/行業領域的統一開放云平臺, 支持SIM和非SIM場景的各種聯接和聯接管理。通過開放的APIs,向上集成各種行業應用,向下接入各種傳感器、終端和網關,幫助運營商和企業/行業客戶實現多種行業終端的快速接入, 多種行業應用的快速集成。華為IoT聯接管理平臺提供安全可控的全聯接管理,使能行業革新,構建IoT生態(本章中提到的IoT平臺指OceanConnect)。
平臺對接信息
圖3-01
設備接入云端可分為直連接入和BS引導接入,如下示意圖
圖3-02直連接入物聯網平臺示意圖
圖3-03 BS引導接入物聯網平臺示意圖
4直連接入實例
(參考)端云互通組件以太網接入實例
- 硬件設備:野火STM32F429開發板,調試下載器(J-Link、ST-Link等)、網線、路由器、USB轉串口線。
說明:本章以野火STM32F429IG開發板為例進行介紹,板子的詳細資料可以從http://www.firebbs.cn/forum.php下載。
4.0-01圖STM32F429IG_FIRE開發板外設
4.0-02 直連模式下整體配置流程
4.1平臺側開發
使用“開發中心”完成平臺側的開發。開發中心是基于設備管理服務提供的一站式開發工具,幫助開發者快速開發產品(Profile、編解碼插件) ,并進行自動化測試,生成測試報告。平臺側配置流程包括:新建項目,新建產品、開發profile,開發編解碼插件,注冊設備。
1環境準備
在開發之前,需要提前獲取如下信息:
開發中心的訪問賬號/密碼,需要向OceanConnect IoT平臺申請
2新建項目
項目是物聯網平臺提供物聯網應用和設備的調測空間,可以根據場景的不同創建不同項目空間分別調測。 在基于開發中心進行物聯網開發時,需要根據行業屬性創建獨立的項目,并在該項目空間內開發物聯網產品和應用。
創建項目時,物聯網平臺會分配一個應用ID(接口調用時參數名為appId)作為項目的唯一標識。若應用服務器需要調用物聯網平臺的API接口進行一些業務處理, 請求中必須攜帶appId以接入對應的項目空間,鑒權接口攜帶在Body中,其他接口的appId的值一般攜帶在Header中。 創建項目后,可以在項目中查看應用服務器和設備的接入地址和端口信息,方便您快速對接應用服務器和設備。 項目被刪除后項目內的所有資源,如設備、產品、訂閱數據在平臺中的信息會被全部刪除,并且不可恢復,請謹慎操作。
(1)登錄物聯網平臺。
(2)進入開發者中心,在我的項目中點擊“新建項目”。
圖4.1-01新建項目
(3)在新彈出窗口中,配置項目信息,點擊“確定”。
配置示例如下圖,點擊“確定”后,IoT平臺會返回項目對應的應用ID和應用密鑰,請妥善保存應用密鑰,以便于應用服務器接入平臺時使用。如果遺忘密鑰,需要通過“對接信息”->"重置密鑰”進行重置。
圖4.1-02配置項目
說明:如上配置僅為參考舉例,具體配置請以現網需求為準。
圖4.1-03 項目創建成功
3產品開發
在物聯網平臺中,某一類具有相同能力或特征的設備的合集被稱為一款產品。產品包含Profile(產品模型)、編解碼插件、測試報告等資源, 其中產品信息被記錄在Profile中。產品的Profile文件用來描述設備類型和設備服務能力。它定義了設備具備的服務能力,每個服務具備的屬性、 命令以及命令參數。
在一個項目里最多可以創建20個產品。產品開發最重要的是開發Profile,Profile用于描述設備具備的能力和特性。定義Profile,即在物聯網平臺構建一款設備的抽象模型,使平臺理解該款設備支持的服務、屬性、命令等信息。如果設備上報的數據是二進制碼流格式,就需要開發對應的編解碼插件,用于物聯網平臺完成二進制格式和JSON格式的轉換。 刪除產品后,該產品下的Profile、編解碼插件等資源將被清空,請謹慎操作。
開發中心上提供了多種創建產品的方法。
圖4.1-04
(1)登錄IoT平臺的開發者中心。
(2)進入項目->選擇“產品開發”->點擊“新建產品”->選擇“自定義產品”->點擊“自定義產品”。
IoT平臺提供了產品的Profile模板庫,開發者可以根據自己需要,選擇合適的模板直接使用。如果在模板庫中未找到需要的Profile,再自己定義,示例如下。
圖4.1-05創建Profile文件
說明:如上配置僅為參考舉例,具體配置請以現網需求為準。
(3) 選擇新創建的產品,點擊“新建服務”,配置設備的服務能力。
可參考“產品開發”->“添加”->“基于系統模板創建”中的產品進行配置。例如新建一個名為LightControl的服務,包含一種屬性light(燈亮LUX數)和一種命令(設置燈亮on或者滅off)
圖4.1-06新建LightControl服務
(4)(可選)開發者中心提供了Profile文件的導出功能。
選擇“產品開發”->選擇已創建的產品->點擊右上角“導出Profile”,可以對線上開發的Profile文件進行導出。
圖4.1-07導出Profile文件
4開發編解碼插件
IoT設備和IoT平臺之間采用LwM2M協議通信,LwM2M消息的數據為應用層數據,應用層數據的格式由設備廠商自行定義。由于IoT設備對省電要求較高,所以應用層數據一般采用二進制格式。IoT平臺在對應用層數據進行協議解析時,會轉換成統一的json格式,以方便應用服務器使用。要實現二進制消息與json格式消息的轉換,IoT平臺需要使用編解碼插件。
(1)選擇“產品開發”->選擇已創建的產品->選擇“編解碼插件開發”,選擇“在線編解碼插件編輯器”。
圖4.1-08創建插件
(2)點擊“新增消息”,配置二進制碼流和Profile屬性/命令/命令響應的映射關系。
圖4.1-09開發插件(新增數據上報消息)
圖4.1-10開發插件(添加字段)
圖4.1-11開發插件(添加字段
圖4.1-12開發插件(新建命令下發消息)
圖4.1-13開發插件(添加字段)
編解碼插件的開發,即定義:
l? Profile文件定義的屬性/響應在設備上報的二進制碼流中的位置,以便于平臺對設備上報數據和命令響應進行解碼。
l? Profile文件定義的命令在平臺下發的二進制碼流中的位置,以便于平臺對下發命令進行編碼。
圖4.1-14 二進制碼流和Profile文件的映射關系
(3)點擊右上角“部署”。
點擊部署后,需要先“保存”插件,之后才開始部署。部署需要等待時間小于60s。
圖4.1-15保存插件
圖4.1-16部署插件
(4)(可選)開發者中心提供了編解碼插件的下載功能。
選擇“產品開發”->選擇已創建的產品->選擇“編解碼插件開發”,選擇“插件管理”,點擊“下載”可以對線上開發的編解碼插件進行導出。
5添加真實&虛擬設備
平臺通過接入真實&虛擬的設備,對開發的應用和設備進行在線調測,并進行統一的設備管理。
(1)選擇“設備管理”->“添加真實設備”->選擇已創建的產品->輸入設備名稱和設備標識,并根據業務需求選擇是否加密設備。最后點擊“確定”。
圖4.1-17注冊設備信息
添加設備后,IoT平臺會返回設備ID和PSK碼,請妥善保存。新添加的設備狀態為“離線”。
圖4.1-18 注冊設備
4.2設備側開發
直連模式設備側開發包括: 配置Demo中對接云端設備的信息、編譯、運行SDK、數據上報任務與命令下發調測。
設備側開發環境準備
在開發之前,需要提前進行如下操作:
l? 搭建好Eclipse開發工具軟件環境
l? 使用網線將野火STM32F429開發板接入互聯網并使用USB轉串口線連接開發版的串口1與PC
l? 獲取端云互通組件代碼:https://github.com/LiteOS/LiteOS/tree/iot_link
配置Demo中對接云端設備的信息
1. 開發板的網口通過網線連接到路由器。 2. 設置本地IP。
在net_driver.c中修改device接入的局域網的IP地址值。目前demo程序采用的是靜態IP地址的方式,如果需要使用DHCP方式,請在main.c中頂部頭文件包含之后定義USE_DHCP宏即可。
void?net_init(void)? { ????/*?IP?addresses?initialization?*/? ????IP_ADDRESS[0]?=?192;? ????IP_ADDRESS[1]?=?168;? ????IP_ADDRESS[2]?=?0;? ????IP_ADDRESS[3]?=?115;? ????NETMASK_ADDRESS[0]?=?255;? ????NETMASK_ADDRESS[1]?=?255;? ????NETMASK_ADDRESS[2]?=?255;? ????NETMASK_ADDRESS[3]?=?0;? ????GATEWAY_ADDRESS[0]?=?192;? ????GATEWAY_ADDRESS[1]?=?168;? ????GATEWAY_ADDRESS[2]?=?0;? ????GATEWAY_ADDRESS[3]?=?1; }
接口net_init()的作用是完成lwip協議相關的初始化。net_driver.c位于 LiteOS-iot_link/targets/STM32F429IGTx_FIRE/Src。
3 網口的mac地址修改。
在eth.c中將MAC_ADDR0~MAC_ADDR5修改成真實的mac地址值保證不重復。
static?int8_t?eth_init(struct?netif*?netif)? { ??HAL_StatusTypeDef?hal_eth_init_status;? ??MACAddr[0]?=?0x00;? ??MACAddr[1]?=?0x80;? ??MACAddr[2]?=?0xE1;? ??MACAddr[3]?=?0x00;? ??MACAddr[4]?=?0x00;? ????MACAddr[5]?=?0x00; }
注意:接口eth_init()將在步驟2中的net_init()中被調用。eth.c位于 LiteOS-iot_link/targets/STM32F429IGTx_FIRE/Src。
4 設置云平臺IP以及設備EP Name和PSK。
根據開發中心添加的設備信息修改oc_dtls_lwm2m_demo.c中參數。
/**/#define?cn_endpoint_id????????"LedLight001" ?/**/#define?cn_app_server?????????"49.4.85.232" ?/**/#define?cn_app_port???????????"5684" ?const?unsigned?char??s_app_psk[]={0xd6,0x69,0x42,0x7e,0x2d,0xd4,0x38,0xf1,0xd5,0xb5,0xed,0x32,0x96,0x29,0xe6,0x20};
oc_dtls_lwm2m_demo.c位于 LiteOS-iot_link/demos。
5編譯并運行程序。
config.mk位于 LiteOS-iot_link/targets/STM32F429IGTx_FIRE/GCC。
修改配置參數為:
CONFIG_OS_TYPE?:=?"liteos" ? ?CONFIG_ARCH_CPU_TYPE?:=?"armv7-m" ? ? ?CONFIG_SHELL_ENABLE?:=?y ? ?CONFIG_STIMER_ENABLE?:=?y ? ?CONFIG_DRIVER_ENABLE?:=?y ? ?CONFIG_AT_ENABLE?????:=?y ? ?CONFIG_CJSON_ENABLE?:=?y ? ?CONFIG_TCPIP_ENABLE?:=?y ?CONFIG_TCPIP_TYPE?:=?"lwip_socket" ? ?CONFIG_DTLS_ENABLE???:=?y ?CONFIG_DTLS_TYPE?????:=?"mbedtls_psk" ? ?CONFIG_MQTT_ENABLE???:=?n ?CONFIG_MQTT_TYPE?????:=?"lite_mqtt" ? ?CONFIG_LWM2M_ENABLE???:=?y ?CONFIG_LWM2M_TYPE?????:=?"wakaama_lwm2m" ? ?CONFIG_COAP_ENABLE???:=?n ?CONFIG_COAP_TYPE?????:=?"lite_coap" ? ?CONFIG_OC_COAP_ENABLE?:=?n ?CONFIG_OC_COAP_TYPE???:=?"soft" ? ?CONFIG_OC_MQTT_ENABLE?:=?n ?CONFIG_OC_MQTT_TYPE???:=?"soft" ? ?CONFIG_OC_LWM2M_ENABLE?:=?y ?CONFIG_OC_LWM2M_TYPE???:=?"soft" ? ?CONFIG_OTA_ENABLE??????:=?n ?CONFIG_PCP_ENABLE??????:=?n ? ? ?CONFIG_DEMO_ENABLE?:=?y ? ?CONFIG_DEMO_TYPE???:=?"oc_dtls_lwm2m_demo" ? ?include?$(TOP_DIR)/iot_link/iot.mk
6查看設備狀態。
登錄IoT平臺開發者中心,選擇“設備管理”,在設備列表中查看對應設備的狀態。如果狀態為“在線”,則表示設備已經成功接入IoT平臺。
圖4.2-01 查看設備狀態
4.3調測
數據上報
對于開發者來說,只需在app\_report\_task\_entry\(\)中將其傳遞給數據上報結構體 light 即可。具體調測過程如下:
設備側執行app_report_task_entry函數,使設備上報數據。
oc_lwm2m_demo_dtls.c中的函數app_report_task_entry如下:
static?int?app_report_task_entry() ?{ ??????????int?ret?=?-1; ??????????int?lux?=?0; ??????????oc_config_param_t??????oc_param; ??????????app_light_intensity_t??light; ? ??????????memset(&oc_param,0,sizeof(oc_param)); ? ??????????oc_param.app_server.address?=?cn_app_server; ??????????oc_param.app_server.port?=?cn_app_port; ??????????oc_param.app_server.ep_id?=?cn_endpoint_id; ??????????oc_param.app_server.psk?=?(char?*)s_app_psk; ??????????oc_param.app_server.psk_len?=?sizeof(s_app_psk); ??????????oc_param.app_server.psk_id?=?cn_endpoint_id; ? ??????????oc_param.boot_mode?=?en_oc_boot_strap_mode_factory; ??????????oc_param.rcv_func?=?app_msg_deal; ? ??????????ret?=?oc_lwm2m_config(&oc_param); ? ??????????if(ret?==?0)???//success?,so?we?could?receive?and?send ??????????{ ??????????????//install?a?dealer?for?the?led?message?received ??????????????while(1)?//--TODO?,you?could?add?your?own?code?here ??????????????{ ???????????????????lux++; ???????????????????lux=?lux%10000; ???????????????????light.msgid?=?cn_app_light; ???????????????????light.intensity?=?htons(lux); ???????????????????oc_lwm2m_report((char?*)&light,sizeof(light),1000);?///
oc_dtls_lwm2m_demo.c位于 LiteOS-iot_link/demos。
查看設備狀態
登錄IoT平臺的開發者中心,在“設備管理”界面的設備列表中,選擇上報數據的設備,查看“歷史數據”,驗證設備數據上報的情況。
圖4.3-01 使用端云互通組件的IoT設備數據上報業務流程
圖4.3-02 查看數據上報結果
命令下發
命令下發一般分為兩種形式:立即下發和緩存下發。
立即下發:?IoT平臺立即發送收到的命令,如果設備不在線或者設備沒收到指令則下發失敗。立即下發適合對命令實時性有要求的場景,比如路燈開關燈,燃氣表開關閥。使用立即下發時,應用服務器需要自己保證命令下發的時機。
圖4.3-03 命令立即下發流程
緩存下發:?平臺收到命令后放入隊列。在設備上線的時候,平臺依次下發命令隊列中的命令。緩存下發適合對命令實時性要求不高的場景,比如配置水表的參數。緩存下發平臺根據設備的省電模式進行不同處理。
圖4.3-04命令緩存下發流程
應用服務器向IoT平臺下發命令時,攜帶參數expireTime(簡稱TTL,表示最大緩存時間)。如果不帶expireTime,則默認expireTime為48小時。
expireTime=0:命令立即下發。
expireTime>0:命令緩存下發。
端云互通組件場景命令下發的調測過程,命令下發步驟如下:
(1)登錄IoT平臺的開發者中心。開發者中心的賬號和密碼需要向IoT平臺服務商申請。
(2)在“設備管理”界面的設備列表中,點擊接收命令的設備,點擊“調試產品”。在彈出應用模擬器界面中選擇“命令發送”,配置下發給設備的命令參數。
圖4.3-05 命令下發
在“設備管理”界面的設備列表中,點擊接收命令的設備->“歷史命令”,查看“狀態”欄的顯示。
圖4.3-06 命令下發狀態
狀態說明如下:
超期:?表示命令在IoT平臺緩存時間超期,未向設備下發。
成功:?表示IoT平臺已經將命令下發給設備,且收到設備上報的命令執行結果。
失敗:?表示編解碼插件解析為空,或執行結果響應里面有“ERROR CODE”等。
超時:?表示IoT平臺等待ACK響應超時。
取消:?表示應用側已經取消命令下發。
等待:?表示命令在IoT平臺緩存,還未下發給設備。
已發送:?表示IoT平臺已經將命令下發給設備。
已送達:?表示IoT平臺已經將命令下發給設備,且收到設備返回的ACK消息。
IoT LiteOS 物聯網
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。