聊聊如何在華為雲IoT平台進行產品開發

摘要:華為雲物聯網平台承載着南北向數據互通的功能職責。

本文分享自華為雲社區《如何基於華為雲IoT物聯網平台進行產品開發》,作者: Super.雯 。

華為雲物聯網平台承載着南北向數據互通的功能職責。在華為雲物聯網平台基礎上實現端到端物聯網業務的過程中,開發者需要基於該平台進行二次開發。本文先跟大家一起聊一聊產品開發。

產品開發

在物聯網平台集成解決方案中,物聯網平台作為承上啟下的中間部分,嚮應用服務器開放API接口,向各種協議的設備提供API對接。為了提供更加豐富的設備管理能力,物聯網平台需要理解接入設備具備的能力以及設備上報數據的消息格式,因此,用戶需要在控制台上完成產品模型和編解碼插件的開發。基於IoT平台去實現一個物聯網解決方案時,需完成的詳細操作如下表所示:

開通設備接入服務後,使用設備接入服務的完整流程主要分為產品開發、應用側開發、設備側開發和日常管理。

產品開發:開發者在進行設備接入前,基於控制台進行相應的開發工作,包括創建產品、創建設備、在線開發產品模型、在線開發插件、在線調試、自助測試和發佈產品。

設備側開發:設備側可以通過集成SDK、模組或者原生協議接入物聯網平台。

應用側開發:通過API的形式對外開放物聯網平台豐富的設備管理能力,應用開發人員基於API接口開發所需的行業應用,如智慧城市、智慧園區、智慧工業、車聯網等行業應用,滿足不同行業的需求

日常管理:真實設備接入後,基於控制台或者API接口,進行日常的設備管理。

產品模型介紹

產品模型又稱Profile,用於定義一款接入設備所具備的屬性(如顏色、大小、採集的數據、可識別的指令或者設備上報的事件等信息),然後通過廠家、設備類型和設備型號,唯一標識一款設備,便於平台識別。產品模型可以在設備接入控制台進行無碼化開發。

產品模型是用來描述一款設備「是什麼」、「能做什麼」以及「如何控制該設備」的文件。開發者通過定義產品模型,在物聯網平台構建一款設備的抽象模型,使平台理解該款設備支持的服務、屬性、命令等信息,如顏色、開關等。當定義完一款產品模型後,在進行註冊設備時,就可以使用在控制台上定義的產品模型。

在華為雲物聯網平台中,產品模型是設備接入的關鍵內容,裏面包含了這個設備所提供的能力與服務,同時還包含了設備上下行的數據格式。例如,在設備上報數據到平台時,平台會根據上報數據的關鍵字進行產品模型匹配,並將數據格式與匹配上的產品模型文件進行校驗,只有匹配成功的數據才會在平台上保存。如果匹配不成功,物聯網平台會將上報的數據作為非法數據進行拋棄。

產品信息:描述一款設備的基本信息,包括廠商ID、廠商名稱、設備類型、協議類型。例如:水表的廠商名稱為「HZYB」,廠商ID為「TestUtf8ManuId」,設備類型為「WaterMeter」,協議類型為「CoAP」。

服務能力:描述設備具備的業務能力。將設備業務能力拆分成若干個服務後,再定義每個服務具備的屬性、命令以及命令的參數。以水表為例,水表具有多種能力,如上報水流、告警、電量、連接等各種數據,並且能夠接受服務器下發的各種命令。產品模型文件在描述水表的能力時,可以將水表的能力劃分五個服務,每個服務都需要定義各自的上報屬性或命令。

產品模型案例:智能水表

華為雲物聯網平台提供了多種定義產品模型的方法,開發者可以根據自己需求,選擇對應的方法定義產品模型:

  • 導入庫模型(平台預置產品模型)
  • 上傳模型文件(離線開發)
  • Excel導入
  • 自定義功能(在線開發)

設備編解碼插件

編解碼插件簡介

什麼是編解碼插件?

編解碼插件能夠將終端上報的數據(二進制格式)解碼為應用服務器所能「閱讀」的數據(JSON格式),將服務器端下行命令數據(JSON格式)編碼為終端設備所能「理解執行」的數據(二進制格式)。

為什麼要使用編解碼插件?

NB-IoT設備採用二進制格式或者tlv格式數據。

NB-IoT設備和IoT平台之間採用的是CoAP協議通訊,CoAP消息的payload為應用層協議數據,應用層數據的格式由設備自行定義。鑒於NB-IoT設備一般對省電要求較高,所以應用層數據一般不採用JSON格式數據。

應用服務器端並不理解二進制格式或者tlv格式數據。

如何開發編解碼插件?

編解碼插件的開發手段有圖形化開發、離線開發和腳本化開發三種,由於插件離線開發較為複雜,且耗時比較長,推薦使用圖形化開發編解碼插件。

圖形化開發是指在設備接入控制台,通過可視化的方式快速開發一款產品的編解碼插件。

離線開發是指使用編解碼插件的Java代碼Demo進行二次開發,實現編解碼功能、完成插件打包和質檢等。

腳本化開發是指使用JavaScript腳本實現編解碼的功能。

華為雲物聯網平台圖形化編解碼插件開發採用了將原有的插件開發代碼進行抽象封裝技術,開發者無需了解java編程語言,只需在開發界面將設備碼流的格式完成定義,並將碼流與profile中的屬性關係通過拖拽的方式完成映射,點擊部署後Portal會根據開發者的設計自動生成插件並打包部署到物聯網平台。

對於設備發來的上行消息,首先解析CoAP報文得到應用層數據,然後調用設備廠商提供的插件解碼,從而將消息發送到應用平台;對於來自應用平台的下行消息,需要調用設備廠商提供的編解碼插件,組裝CoAP消息發送到設備,如下圖所示。此外編解碼插件還負責對平台下發命令和對上報數據的響應進行編碼。

數據上報

消息處理流程包括數據上報處理流程和命令下發處理流程,數據上報處理流程如下圖所示。

當設備和物聯網平台完成對接後,一旦設備上電,設備基於在設備上定義的業務邏輯進行數據採集和上報,可以是基於周期或者事件觸發。設備可通過以下方式發送數據到物聯網平台:

設備消息上報:設備可以通過消息上報接口將設備的自定義數據上報到平台,平台對設備上報的消息不進行解析和存儲,通過數據轉發規則轉發到華為雲其他雲服務上進行存儲和處理,然後通過其他雲服務的控制台或者API接口進行進一步的數據處理。

設備原始數據(二進制)上報:設備可以通過二進制上報接口上報設備的原始碼流,平台通過編解碼插件將設備原始數據解析為產品模型定義的JSON格式,解析後的數據上報給設備接入服務進行相關業務處理。

設備屬性上報:設備通過屬性上報接口,將產品模型中定義的屬性數據上報給平台,平台解析後的數據上報給設備接入服務進行相關業務處理。

網關批量屬性上報:網關設備將批量設備的數據一次性上報到平台,平台解析後的數據上報給設備接入服務進行相關業務處理。

在數據上報處理流程中,有兩處需要用到編解碼插件。

  1. 將設備上報的二進制碼流的數據解碼成JSON格式的數據,發送給應用服務器。
  2. 將應用服務器響應的JSON格式數據編碼成二進制碼流格式的數據,下發給設備。

命令下發

命令下發是指平台將命令下發到設備,設備響應並執行命令,從而達到平台到設備遠程控制的效果。

這裡分別列舉了LwM2M/CoAP和MQTT這兩種協議的立即下發和緩存下發的流程,如圖所示。

應用下發命令到物聯網平台,平台會根據對應的產品信息找到對應的編解碼插件,對命令請求進行編碼,將命令下發給設備;下發命令成功或失敗,會根據下髮結果更新命令狀態,若設備對命令做出了響應,會將命令狀態更新為「執行成功」或「執行失敗」。

由於使用MQTT是不需要編解碼插件的,直接使用透傳的形式,當命令立即下發時,應用下發命令到物聯網平台,平台將命令下發至設備,返回執行結果,消息執行結果通知。

應用緩存下發命令,當設備不在線時,將命令寫入緩存隊列,更新消息狀態,直到設備上報數據,設備上線,訂閱消息下發Topic,消息下發,更新消息狀態。

設備編解碼插件示例:

更多學習內容,請[關注IoT物聯網社區]

添加華為雲IoT小助手微信號(hwc-iot),回復「閱讀」獲取更多資訊

 

點擊關注,第一時間了解華為雲新鮮技術~