大廠物聯網技術彙總

總的來說:

相同點:

四個大廠,基本的架構相同:用戶側通過IoT SDK或者MQTT、CoAP、HTTP接口接入,IoT雲提供消息的路由轉發、計算存儲等。安全方案則通過TLS+用戶鑑權(用戶名、密碼,Acess Token等),協議數據的Payload部分均採用Json字符串,華爲同時還支持二進制。

不同點:

阿里的功能更完善,用戶鑑權部分最複雜,騰訊次之,華爲偏重於硬件,小米的產品更像只供內部使用的一個原型 。阿里和華爲的Topic命名以“/”開頭,違反的業界的最佳實踐。從公開的資料看,小米只支持HTTP接口的調用方式。

 

  1. 阿里IoT

名詞

描述

產品

設備的集合,通常指一組具有相同功能的設備。物聯網平臺爲每個產品頒發全局唯一的ProductKey。每個產品下最多可以包含50萬個設備。

設備

歸屬於某個產品下的具體設備。物聯網平臺爲設備頒發產品內唯一的證書DeviceName。設備可以直接連接物聯網平臺,也可以作爲子設備通過網關連接物聯網平臺。

分組

物聯網平臺支持建立設備分組,分組中可包含不同產品下的設備。通過設備組來進行跨產品管理設備。

網關

能夠直接連接物聯網平臺的設備,且具有子設備管理功能,能夠代理子設備連接雲端。

子設備

本質上也是設備。子設備不能直接連接物聯網平臺,只能通過網關連接。

設備證書

設備證書指ProductKeyDeviceNameDeviceSecret

  • ProductKey:是物聯網平臺爲產品頒發的全局唯一標識。該參數很重要,在設備認證以及通信中都會用到,因此需要您保管好。
  • DeviceName:在註冊設備時,自定義的或系統生成的設備名稱,具備產品維度內的唯一性。該參數很重要,在設備認證以及通信中都會用到,因此需要您保管好。
  • DeviceSecret:物聯網平臺爲設備頒發的設備密鑰,和DeviceName成對出現。該參數很重要,在設備認證時會用到,因此需要您保管好並且不能泄露。

ProductSecret

由物聯網平臺頒發的產品密鑰,通常與ProductKey成對出現,可用於一型一密的認證方案。該參數很重要,需要您保管好,不能泄露。

設備X.509證書

物聯網平臺支持設備使用X.509數字證書進行身份驗證。您創建認證方式爲X.509證書的設備後,物聯網平臺爲設備頒發對應的X.509證書,證書信息包括:X.509數字證書(Certificate)、X.509證書IDCertSN)和X.509證書密鑰(PrivateKey)。

Topic

TopicUTF-8字符串,是發佈(Pub/訂閱(Sub)消息的傳輸中介。可以向Topic發佈或者訂閱消息。

Topic

同一產品下不同設備的Topic集合,用${productkey}${deviceName}通配一個唯一的設備,一個Topic類對一個ProductKey下所有設備通用。

發佈

操作Topic的權限類型,對應的英文名稱爲Pub。可以往此類Topic中發佈消息。

訂閱

操作Topic的權限類型,對應的英文名稱爲Sub。可以從此類Topic中訂閱消息。

RRPC

全稱:Revert-RPCRPCRemote Procedure Call)採用客戶機/服務器模式,用戶不需要了解底層技術協議,即可遠程請求服務。RRPC則可以實現由服務端請求設備端,並能夠使設備端響應的功能。

標籤

標籤分爲產品標籤、設備標籤和分組標籤。

  • 產品標籤:描述同一個產品下,所有設備所具有的共性信息。
  • 設備標籤:通常根據設備的特性爲設備添加的特有標記,您可以自定義標籤內容。
  • 分組標籤:描述同一個分組下,所有設備所具有的共性信息。

Alink協議

阿里雲定義的設備與雲端之間的通信協議。

物模型

是對設備在雲端的功能描述,包括設備的屬性、服務和事件。物聯網平臺通過定義一種物的描述語言來描述物模型,稱之爲 TSL(即 Thing Specification Language),採用JSON格式,您可以根據TSL組裝上報設備的數據。

屬性

設備的功能模型之一,一般用於描述設備運行時的狀態,如環境監測設備所讀取的當前環境溫度等。屬性支持 GET SET 請求方式。應用系統可發起對屬性的讀取和設置請求。

服務

設備的功能模型之一,設備可被外部調用的能力或方法,可設置輸入參數和輸出參數。相比於屬性,服務可通過一條指令實現更復雜的業務邏輯,如執行某項特定的任務。

事件

設備的功能模型之一,設備運行時的事件。事件一般包含需要被外部感知和處理的通知信息,可包含多個輸出參數。例如,某項任務完成的信息,或者設備發生故障或告警時的溫度等,事件可以被訂閱和推送。

數據解析腳本

針對採用透傳格式/自定義數據格式的設備,需要在雲端編寫數據解析腳本,將設備上報的二進制數據或自定義的JSON數據,轉換爲物聯網平臺支持的Alink JSON數據格式;將平臺下發的Alink JSON格式數據,轉換爲設備支持的格式。

設備影子

是一個JSON文檔,用於存儲設備或者應用的當前狀態信息。每個設備都會在雲端有唯一的設備影子。無論該設備是否連接到Internet,您都可以使用設備影子通過MQTT協議或HTTP協議獲取和設置設備的狀態。

規則引擎

通過創建、配置規則,以實現數據流轉和場景聯動。

數據流轉

物聯網平臺規則引擎的數據流轉功能,可將Topic中的數據轉發至其他Topic或其他阿里雲服務進行存儲或處理。

場景聯動

場景聯動是一種開發自動化業務邏輯的可視化編程方式。您可以通過可視化的方式定義設備之間聯動規則,並將規則部署至雲端或者邊緣端。

服務端訂閱

服務端訂閱產品下所有類型的消息:設備上報消息、設備狀態變化通知、網關發現子設備上報消息、設備生命週期變更消息和設備拓撲關係變更消息。目前支持兩種方式實現服務端訂閱:HTTP/2 SDK和消息服務(MNS)隊列。

 

設備連接物聯網平臺,與物聯網平臺進行數據通信。物聯網平臺可將設備數據流轉到其他阿里雲產品中進行存儲和處理。這是構建物聯網應用的基礎。

      1. IoT SDK

物聯網平臺提供IoT SDK,設備集成SDK後,即可安全接入物聯網平臺,使用設備管理、數據分析、數據流轉等功能。

只有支持TCP/IP協議的設備可以集成IoT SDK。

      1. 邊緣計算

邊緣計算能力允許您在最靠近設備的地方構建邊緣計算節點,過濾清洗設備數據,並將處理後的數據上傳至雲平臺。

      1. IoT Hub

IoT Hub幫助設備連接阿里雲物聯網平臺服務,是設備與雲端安全通信的數據通道。IoT Hub支持PUB/SUB與RRPC兩種通信方式,其中PUB/SUB是基於Topic進行的消息路由。

IoT Hub具有下列特性:

  • 高性能擴展:支持線性動態擴展,可以支撐十億設備同時連接。
  • 全鏈路加密:整個通信鏈路以RSA,AES加密,保證數據傳輸的安全。
  • 消息實時到達:當設備與IoT Hub成功建立數據通道後,兩者間將保持長連接,以減少握手時間,保證消息實時到達。
  • 支持數據透傳: IoT Hub支持將數據以二進制透傳的方式傳到自己的服務器上,不保存設備數據,從而保證數據的安全可控性。
  • 支持多種通信模式:IoT Hub支持RRPC和PUB/SUB兩種通信模式,以滿足您在不同場景下的需求。
  • 支持多種設備接入協議:支持設備使用CoAP、MQTT、HTTPS協議接入物聯網平臺。
      1. 數據分析

數據分析服務包括流數據分析和空間可視化。流數據分析用於設置數據處理任務,空間可視化可以將設備數據實時在二維地圖或三維模型上展示出來。

      1. 設備管理

物聯網平臺爲您提供功能豐富的設備管理服務,包括:生命週期、設備分組設備影子物模型數據解析數據存儲在線調試固件升級遠程配置、實時監控等。具體請參見相關功能文檔。

      1. 數據流轉

當設備基於Topic進行通信時,您可以編寫SQL對Topic中的數據進行處理,然後配置轉發規則將數據轉發到其他Topic或阿里雲服務上進行存儲和處理。例如:

  • 轉發到雲數據庫RDS、表格存儲(Table Store)和時序時空數據庫(TSDB)中進行存儲。
  • 轉發到DataHub中,進而使用實時計算進行計算,使用MaxCompute進行大規模離線計算。
  • 轉發到函數計算(FC)中,進行事件計算。
  • 轉發到消息隊列(RocketMQ)或消息服務(MNS)中,實現高可靠消費數據。
  • 轉發到另一個Topic中實現M2M通信。
      1. 安全認證&權限策略

安全是IoT的重要話題。阿里雲物聯網平臺提供多重防護保障設備雲端安全。

  • 物聯網平臺爲每個設備頒發唯一證書,設備使用證書進行身份驗證連接物聯網平臺。
  • 針對不同安全等級和產線燒錄的要求,物聯網平臺爲開發者提供了多種設備認證方式。
  • 授權粒度精確到設備級別,任何設備只能對自己的Topic發佈、訂閱消息。服務端憑藉阿里雲AccessKey對賬號下所屬的Topic進行操作。

 

接入側提供物聯網SDK接入阿里雲IoT。設備連接、消息路由可以由MQTT的Broker完成,設備認證、安全權限和設備管理由運動在IoT平臺的服務程序完成。

 

 

      1. Topic

物聯網平臺中,服務端和設備端通過Topic來實現消息通信。Topic是針對設備的概念,Topic類是針對產品的概念。產品的Topic類會自動映射到產品下的所有設備中,生成用於消息通信的具體設備Topic

爲了方便海量設備基於海量Topic進行通信,簡化授權操作,物聯網平臺增加了產品Topic類的概念。Topic類是一類Topic的集合。例如,產品的自定義Topic/${YourProductKey}/${YourDeviceName}/user/update是具體Topic/${YourProductKey}/device1/user/update/${YourProductKey}/device2/user/update的集合。

您創建設備後,產品的所有Topic類會自動映射到設備上。您無需單獨爲每個設備創建Topic

 

 

關於Topic類的說明:

  • Topic類中,以正斜線(/)進行分層,區分每個類目。其中,有兩個類目爲既定類目:${YourProductKey}表示產品的標識符ProductKey${YourDeviceName}表示設備名稱。
  • 類目命名只能包含字母,數字和下劃線(_)。每級類目不能爲空。
  • 設備操作權限:發佈表示設備可以往該Topic發佈消息;訂閱表示設備可以訂閱該Topic獲取消息。
  • Topic類是一個Topic模版配置,編輯更新某個Topic類後,可能對產品下所有設備使用該類Topic通信產生影響。建議在設備研發階段設計好,設備上線後不再變更Topic類。
  • 產品Topic類的訂閱操作權限是定義產品(所有設備)對此類Topic是否有發起訂閱指令(SUB)的權限。 訂閱(SUB)和取消訂閱(UNSUB)都需由設備發起。設備發送SUB指令訂閱某個Topic後,該訂閱永久生效;僅在設備發起UNSUB指令取消訂閱該Topic後,訂閱纔會被取消。

如果您需要管控單個設備的消息收發,請在控制檯的設備列表頁或服務端調用DisableThing接口,禁用該設備;或在業務上管控發送給設備的消息。

產品的Topic類不用於通信,只是定義Topic。用於消息通信的是具體的設備Topic

  • Topic格式和Topic類格式一致。區別在於Topic類中的變量${YourDeviceName},在Topic中是具體的設備名稱。
  • 設備對應的Topic是從產品Topic類映射出來,根據設備名稱而動態創建的。設備的具體Topic中帶有設備名稱(即DeviceName),只能被該設備用於消息通信。例如,Topic/${YourProductKey}/device1/user/update歸屬於設備名爲device1的設備,所以只能被設備device1用於發佈或訂閱消息,而不能被設備device2用於發佈或訂閱消息。

物聯網平臺有兩類Topic

類別

說明

系統Topic

物聯網平臺預定義的Topic

系統Topic包含展示在控制檯產品、設備詳情頁下的Topic和各功能使用的Topic。具體功能使用的Topic請在對應功能的文檔中查看。

例如,物模型相關的Topic一般以/sys/開頭;固件升級相關的Topic/ota/開頭;設備影子的Topic/shadow/開頭。

自定義Topic

您可以根據業務需求,自定義。

      1. M2M通訊

以智能燈和手機App連接爲例,基於物聯網平臺的Topic消息路由服務,構建一個M2M設備間通信架構。智能燈控制流程如下圖:

 

操作步驟

  1. 在物聯網平臺,爲智能燈設備創建產品和設備,定義功能等。請參見文檔創建產品批量創建設備新增物模型

本示例中,智能燈的ProductKeyal123456789DeviceNamelight

  1. 開發智能燈設備端。

本示例中,設備與物聯網平臺間的通信協議爲MQTT

  1. 在物聯網平臺,爲手機App註冊產品和設備。

上圖示例中,手機AppProductKeyal987654321DeviceNameControlApp

當手機App用戶註冊登錄時,服務器將App設備信息發送給手機App。手機App可以作爲一個設備連接到物聯網平臺。

  1. 使用服務器,調用雲端接口CreateTopicRouteTable,創建App Topic與智能燈Topic之間的消息路由關係。
    • 將入參SrcTopic指定爲AppTopic/al987654321/ControlApp/user/update
    • 將入參DstTopics指定爲智能燈的Topic/al123456789/light/user/set
  2. 開發手機App

本示例中,手機App與物聯網平臺間的通信協議爲HTTPS

手機App發送的智能燈控制指令payload數據格式如下:

{
    "TargetDevice": "light", 
    "Switch": "off", 
    "Timestamp": 1557750407000
}
  1. 手機App用戶通過掃碼,將App與智能燈綁定。

App向服務器發送綁定設備的請求後,服務器將返回綁定成功的智能燈設備名稱deviceName。本示例中,智能燈設備名稱爲light

  1. 通過App發送控制指令。
    1. 手機App發送指令到Topic/al987654321/ControlApp/user/update。指令爲JSON格式的數據。
    2. 物聯網平臺根據已定義的Topic路由關係,將指令信息路由到智能燈設備的Topic/al123456789/light/user/set
    3. 智能燈設備接收到指令後,執行相關操作。
      1. 廣播通訊

物聯網平臺支持廣播通信,即向產品下的所有設備發送消息。設備僅需訂閱廣播Topic,即可收到服務器發送的廣播消息。本文介紹廣播通信的具體配置流程。

廠家有多個溫度計接入物聯網平臺,現在需要服務器向全部溫度計發送一條相同的精度指令。

設備端訂閱相同的廣播Topic,服務器調用PubBroadcast向該Topic發佈消息。

 

      1. OTA升級

在物聯網平臺控制檯上,創建新固件,上傳固件文件包,完成固件驗證,將固件推送給指定設備用於升級。

前提條件:

只有設備端已支持OTA服務,才能上報固件版本,接收雲端推送的升級消息,下載固件,進行升級等OTA升級操作。

  • 已根據業務需要,編輯好新的固件文件。本示例的固件文件,請參見配置設備端OTA升級中的附錄章節。

操作步驟

  1. 登錄物聯網平臺控制檯
  2. 在左側導航欄,選擇監控運維 > 固件升級
  3. 固件升級頁,單擊新增固件
  4. 添加固件對話框中,輸入固件信息,上傳固件文件。

傳入的固件文件是上一步配置設備端OTA升級中生成的.bin文件。

 

  1. 在固件列表中,單擊固件對應的驗證固件按鈕,使用測試設備進行固件驗證。

測試設備升級成功後,驗證通過。批量升級功能顯示爲可用狀態。

 

      1. 報警

物聯網平臺支持使用雲監控進行事件監控報警和閾值監控報警。事件監控報警基於物聯網平臺系統限流進行監控和報警;閾值監控報警基於您設置的業務指標數值進行監控和報警。

RAM STS 是阿里雲提供的權限管理系統。

RAM 的主要作用是控制賬號系統的權限。通過使用 RAM,創建、管理子賬號,並通過給子賬號授予不同的權限,控制子賬號對資源的操作權限。

STS 是一個安全憑證(Token)的管理系統,爲阿里雲子賬號(RAM 用戶)提供短期訪問權限管理。通過 STS 來完成對臨時用戶的訪問授權。

      1. 背景介紹

RAM 和 STS 解決的一個核心問題是如何在不暴露主賬號的 AccessKey 的情況下,安全地授權他人訪問。因爲一旦主賬號的 AccessKey 被泄露,會帶來極大的安全風險:獲得該賬號 AccessKey 的人可任意操作該賬號下所有的資源,盜取重要信息等。

RAM 提供的是一種長期有效的權限控制機制。通過創建子賬號,並授予子賬號相應的權限,將不同的權限分給不同的用戶。子賬號的 AccessKey 也不能泄露。即使子賬號泄露也不會造成全局的信息泄露。一般情況下,子賬號長期有效。

相對於 RAM 提供的長效控制機制,STS 提供的是一種臨時訪問授權。通過調用 STS,獲得臨時的 AccessKey 和 Token。可以將臨時 AccessKey 和 Token 發給臨時用戶,用來訪問相應的資源。從 STS 獲取的權限會受到更加嚴格的限制,並且具有時間限制。因此,即使出現信息泄露的情況,影響相對較小。

      1. 基本概念

使用 RAM 和 STS 涉及以下基本概念:

  • 子賬號:在 RAM 控制檯中,創建的用戶,每個用戶即一個子賬號。創建時或創建成功後,均可爲子賬號生成獨立的 AccessKey。創建後,需爲子賬號配置密碼和權限。使用子賬號,可以進行已獲授權的操作。子賬號可以理解爲具有某種權限的用戶,可以被認爲是一個具有某些權限的操作發起者。
  • 角色(Role):表示某種操作權限的虛擬概念,但是沒有獨立的登錄密碼和 AccessKey。子賬號可以扮演角色。扮演角色時,子賬號擁有的權限是該角色的權限。
  • 授權策略(Policy):用來定義權限的規則,如允許子賬號用戶讀取或者寫入某些資源。
  • 資源(Resource):代表子賬號用戶可訪問的雲資源,如表格存儲所有的 Instance、某個 Instance 或者某個 Instance 下面的某個 Table 等。

子賬號和角色可以類比爲個人和其身份的關係。如,某人在公司的角色是員工,在家裏的角色是父親。同一人在不同的場景扮演不同的角色。在扮演不同角色的時候,擁有對應角色的權限。角色本身並不是一個操作的實體,只有用戶扮演了該角色之後纔是一個完整的操作實體。並且,一個角色可以被多個不同的用戶同時扮演。

      1. 使用示例

爲避免阿里雲賬號的 AccessKey 泄露而導致安全風險,某阿里雲賬號管理員使用 RAM 創建了兩個子賬號,分別命名爲 A 和 B ,併爲 A 和 B 生成獨立的 AccessKey。A 擁有讀權限,B 擁有寫權限。 管理員可以隨時在 RAM 控制檯取消子賬號用戶的權限。

現在因爲某些原因,需要授權給其他人臨時訪問物聯網平臺接口的權限。這種情況下,不能直接把 A 的 AccessKey 透露出去,而應該新建一個角色 C,並給這個角色授予讀取物聯網平臺接口的權限。但請注意,目前角色 C 還無法直接使用。因爲並不存在對應角色 C 的 AccessKey,角色 C 僅是一個擁有訪問物聯網平臺接口權限的虛擬實體。

需調用 STS 的 AssumeRole 接口,獲取訪問物聯網平臺接口的臨時授權。在調用 STS 的請求中,RoleArn 的值需爲角色 C 的 Arn。如果調用成功,STS 會返回臨時的 AccessKeyId、AccessKeySecret和 SecurityToken 作爲訪問憑證(憑證的過期時間,在調用 AssumeRole 的請求中指定)。將這個憑證發給需要訪問的用戶,該用戶就可以獲得訪問物聯網平臺接口的臨時權限。

      1. 使用複雜

雖然 RAM 和 STS 的概念和使用比較複雜,但這是爲了賬號的安全性和權限控制的靈活性而犧牲了部分易用性。

將子賬號和角色分開,主要是爲了將執行操作的實體和代表權限集合的虛擬實體分開。如果某用戶需要使用多種權限,如讀/寫權限,但是實際上每次操作只需要其中的一部分權限,那麼就可以創建兩個角色。這兩個角色分別具有讀或寫權限。然後,創建一個可以扮演這兩個角色的用戶子賬號。當用戶需要讀權限的時候,就可以扮演其中擁有讀權限的角色;使用寫權限的時候同理。這樣可以降低每次操作中權限泄露的風險。而且,通過扮演角色,可以將角色權限授予其他用戶,更加方便了協同使用。

STS 對權限的控制更加靈活。如按照實際需求設置有效時長。但是,如果需要一個長期有效的臨時訪問憑證,則可以只適用 RAM 子賬號管理功能,而無需使用 STS。

MQTT協議是基於PUB/SUB的異步通信模式,不適用於服務端同步控制設備端返回結果的場景。物聯網平臺基於MQTT協議制定了一套請求和響應的同步機制,無需改動MQTT協議即可實現同步通信。物聯網平臺提供API給服務端,設備端只需要按照固定的格式回覆PUB消息,服務端使用API,即可同步獲取設備端的響應結果。

      1. 名詞解釋
  • RRPC:Revert-RPC。RPC(Remote Procedure Call)採用客戶機/服務器模式,用戶不需要了解底層技術協議,即可遠程請求服務。RRPC則可以實現由服務端請求設備端並能夠使設備端響應的功能。
  • RRPC 請求消息:雲端下發給設備端的消息。
  • RRPC 響應消息:設備端回覆給雲端的消息。
  • RRPC 消息ID:雲端爲每次RRPC調用生成的唯一消息ID。
  • RRPC 訂閱Topic:設備端訂閱RRPC消息時傳遞的Topic,含有通配符。
      1. RRPC原理



 

  1. 物聯網平臺收到來自用戶服務器的RRPC調用,下發一條RRPC請求消息給設備。消息體爲用戶傳入的數據,Topic爲物聯網平臺定義的Topic,其中含有唯一的RRPC消息ID。
  2. 設備收到下行消息後,按照指定Topic格式(包含之前雲端下發的唯一的RRPC消息ID)回覆一條RRPC響應消息給雲端,雲端提取出Topic中的消息ID,和之前的RRPC請求消息匹配上,然後回覆給用戶服務器。
  3. 如果調用時設備不在線,雲端會給用戶服務器返回設備離線的錯誤;如果設備沒有在超時時間內(8秒內)回覆RRPC響應消息,雲端會給用戶服務器返回超時錯誤。

使用規則引擎,您需要基於Topic編寫SQL處理數據。自定義Topic中數據格式由您自己定義,物聯網平臺不做處理。系統Topic中數據格式由物聯網平臺定義,此時您需要根據平臺定義的數據格式處理數據。本文講述了系統Topic中的數據格式。

      1. 設備上下線狀態

通過該Topic獲取設備的上下線狀態。

數據流轉Topic:/as/mqtt/status/{productKey}/{deviceName}

數據格式:

{
    "status":"online|offline",
    "productKey":"12345565569",
    "deviceName":"deviceName1234",
    "time":"2018-08-31 15:32:28.205",
    "utcTime":"2018-08-31T07:32:28.205Z",
    "lastTime":"2018-08-31 15:32:28.195",
    "utcLastTime":"2018-08-31T07:32:28.195Z",
    "clientIp":"123.123.123.123"
}

參數說明:

參數

類型

說明

status

String

設備狀態,online:上線;offline:離線。

productKey

String

設備所屬產品的唯一標識。

deviceName

String

設備名稱。

time

String

發送通知的時間點。

utcTime

String

發送通知的UTC時間點。

lastTime

String

狀態變更前最後一次通信的時間。

說明 爲避免消息時序紊亂造成影響,建議您根據lastTime來維護最終設備狀態。

utcLastTime

String

狀態變更前最後一次通信的UTC時間。

clientIp

String

設備公網出口IP。

      1. 設備屬性上報

通過該Topic獲取設備上報的屬性信息。

Topic:/sys/{productKey}/{deviceName}/thing/event/property/post

數據格式:

{
    "iotId":"4z819VQHk6VSLmmBJfrf00107ee200",
    "productKey":"1234556554",
    "deviceName":"deviceName1234",
    "gmtCreate":1510799670074,
    "deviceType":"Ammeter",
    "items":{
        "Power":{
            "value":"on",
            "time":1510799670074
        },
        "Position":{
            "time":1510292697470,
            "value":{
                "latitude":39.9,
                "longitude":116.38
            }
        }
    }
}

參數說明:

參數

類型

說明

iotId

String

設備在平臺內的唯一標識。

productKey

String

設備所屬產品的唯一標識。

deviceName

String

設備名稱。

deviceType

String

設備類型。

items

Object

設備數據。

Power

String

屬性名稱。產品所具有的屬性名稱請參見產品的TSL描述。

Position

String

屬性名稱。產品所具有的屬性名稱請參見產品的TSL描述。

value

根據TSL定義

屬性值。

time

Long

屬性產生時間,如果設備沒有上報默認採用雲端生成時間。

gmtCreate

Long

數據流轉消息產生時間。

      1. 設備事件上報

通過該topic獲取設備上報的事件信息。

Topic:/sys/{productKey}/{deviceName}/thing/event/{tsl.event.identifier}/post

數據格式:

{
    "identifier":"BrokenInfo",
    "name":"損壞率上報",
    "type":"info",
    "iotId":"4z819VQHk6VSLmmBJfrf00107ee200",
    "productKey":"X5eCzh6fEH7",
    "deviceName":"5gJtxDVeGAkaEztpisjX",
    "gmtCreate":1510799670074,
    "value":{
        "Power":"on",
        "Position":{
            "latitude":39.9,
            "longitude":116.38
        }
    },
    "time":1510799670074
}

參數說明:

參數

類型

說明

iotId

String

設備在平臺內的唯一標識。

productKey

String

設備所屬產品的唯一標識。

deviceName

String

設備名稱。

type

String

事件類型,事件類型參見產品的TSL描述。

value

Object

事件的參數。

Power

String

事件參數名稱。

Position

String

事件參數名稱。

time

Long

事件產生時間,如果設備沒有上報默認採用遠端時間。

gmtCreate

Long

數據流轉消息產生時間。

      1. 設備生命週期變更

通過該Topic獲得設備創建、刪除、禁用、啓用等消息。

Topic:/sys/{productKey}/{deviceName}/thing/lifecycle

數據格式:

{
    "action" : "create|delete|enable|disable",
    "iotId" : "4z819VQHk6VSLmmxxxxxxxxxxee200",
    "productKey" : "X5eCxxxxEH7",
    "deviceName" : "5gJtxDVeGAkaEztpisjX",
    "deviceSecret" : "", 
    "messageCreateTime": 1510292739881 
}

參數說明:

參數

類型

說明

action

String

  • create:創建設備。
  • delete:刪除設備。
  • enable:啓用設備。
  • disable:禁用設備。

iotId

String

設備在平臺內的唯一標識。

productKey

String

產品的唯一標識。

deviceName

String

設備名稱。

deviceSecret

String

設備密鑰,僅在actioncreate時包含。

messageCreateTime

Integer

消息產生時間戳,單位毫秒。

      1. 設備拓撲關係變更

通過該Topic獲得子設備和網關之間拓撲關係建立和解除信息。

Topic:/sys/{productKey}/{deviceName}/thing/topo/lifecycle

數據格式:

{
    "action" : "add|remove|enable|disable",
    "gwIotId": "4z819VQHk6VSLmmBJfrf00107ee200",
    "gwProductKey": "1234556554",
    "gwDeviceName": "deviceName1234",
    "devices": [ 
        {
          "iotId": "4z819VQHk6VSLmmxxxxxxxxxxee201",
          "productKey": "1234xxxx569",
          "deviceName": "deviceName1234"
       }
    ],

 
    "messageCreateTime": 1510292739881 
}

參數說明:

參數

類型

說明

action

String

  • add:新增拓撲關係。
  • remove:移除拓撲關係。
  • enable:啓用拓撲關係。
  • disable:禁用拓撲關係。

gwIotId

String

網關設備在平臺內的唯一標識。

gwProductKey

String

網關產品的唯一標識。

gwDeviceName

String

網關設備名稱。

devices

Object

變更的子設備列表。

iotId

String

子設備在平臺內的唯一標識。

productKey

String

子設備產品的唯一標識。

deviceName

String

子設備名稱

messageCreateTime

Integer

消息產生時間戳,單位毫秒。

      1. 網關發現子設備

在一些場景中網關能夠檢測到子設備,並將檢測到的子設備信息上報。此時可以通過該Topic獲取到上報的信息。

Topic:/sys/{productKey}/{deviceName}/thing/list/found

數據格式:

{
    "gwIotId":"4z819VQHk6VSLmmBJfrf00107ee200",
    "gwProductKey":"1234556554",
    "gwDeviceName":"deviceName1234",
    "devices":[
        {
            "iotId":"4z819VQHk6VSLmmxxxxxxxxxxee201",
            "productKey":"1234xxxx569",
            "deviceName":"deviceName1234"
        }
    ]
}

參數說明:

參數

類型

說明

gwIotId

String

網關設備在平臺內的唯一標識。

gwProductKey

String

網關產品的唯一標識。

gwDeviceName

String

網關設備名稱。

devices

Object

發現的子設備列表。

iotId

String

子設備在平臺內的唯一標識。

productKey

String

子設備產品的唯一標識。

deviceName

String

子設備名稱。

      1. 設備下行指令結果

通過該Topic可以獲取,通過異步方式下發指令給設備,設備進行處理後返回的結果信息。如果下發指令過程中出現錯誤,也可以通過該Topic得到指令下發的錯誤信息。

Topic:/sys/{productKey}/{deviceName}/thing/downlink/reply/message

數據格式:

{
    "gmtCreate":1510292739881,
    "iotId":"4z819VQHk6VSLmmxxxxxxxxxxee200",
    "productKey":"123xxxx554",
    "deviceName":"deviceName1234",
    "requestId":1234,
    "code":200,
    "message":"success",
    "topic":"/sys/123xxxx554/deviceName1234/thing/service/property/set",
    "data":{

 
    }
}

參數說明:

參數

類型

說明

gmtCreate

Long

UTC時間戳。

iotId

String

設備在平臺內的唯一標識。

productKey

String

設備所屬產品的唯一標識。

deviceName

String

設備名稱。

requestId

Long

阿里雲產生和設備通信的信息ID

code

Integer

調用的結果信息。

message

String

結果信息說明。

data

Object

設備返回的結果。Alink格式數據直接返回設備處理結果,透傳格式數據則需要經過腳本轉換。

返回信息:

參數

類型

說明

200

success

請求成功。

400

request error

內部服務錯誤, 處理時發生內部錯誤。

460

request parameter error

請求參數錯誤, 設備入參校驗失敗。

429

too many requests

請求過於頻繁。

9200

device not actived

設備沒有激活。

9201

device offline

設備不在線。

403

request forbidden

請求被禁止,由於欠費導致。

 

 

 

 

 

  1. 騰訊IoT

名詞

解釋

APPEUI

LoRA網絡中的設備應用標識碼,由雲分配或客戶在創建產品時註冊,全網唯一,用於標識該設備所屬應用組,僅支持16位長度的16進制數(由數字0 - 9及字母a - f組合)。

產品

某一類設備的集合,通常指一組具有相同功能的設備。物聯網通信爲每個產品頒發全局唯一的 ProductID,每個產品下可以創建多個設備。

產品 ID  平臺爲產品分配的唯一標識,方便產品檢索,並用於設備與平臺建立連接時的身份認證。

產品類型

在物聯網通信中,根據實際連接物聯網通信平臺的設備通信方式選擇,針對 NB 與 LoRa 類的產品,平臺會對數據傳輸鏈路做針對性處理。

在物聯網開發平臺中,根據不同的應用場景,定義了各種硬件產品在不同應用領域進行的分類

DevEUI

LoRA設備的唯一標識,用於標記 LoRA 設備的硬件地址,全網唯一;客戶可以從供應商或設備上找到該標識,也可以使用由雲端分配的局部唯一標識地址,僅支持16位長度的小寫字母(a - f)與數字(0 - 9)組合。

訂閱 操作 Topic 的權限類型,對應的英文名稱爲 Sub,具有從 Topic 中訂閱消息的權限。

 

節點類型

根據實際連接物聯網通信平臺的設備類型選擇,分爲設備類型與網關類型。

ProductSecret

產品級密鑰,用於設備動態註冊請求時計算設備端簽名,換取設備級密鑰或證書+私鑰

認證方式

設備連接認證支持證書認證(基於 TLS 非對稱加密認證、適用高安全要求場景)和密鑰認證(對稱加密驗證、適用資源受限設備)方式,設備級粒度身份認證,保證雲到設備和設備到雲的消息的保密性。同時,平臺爲無法給每個設備燒錄不同固件的場景設計了動態註冊功能,支持通過產品級密鑰註冊獲取設備密鑰(或證書+私鑰),再進行連接認證,增強了接入的靈活性

設備密鑰

創建密鑰認證類型的設備時平臺爲設備頒發的唯一密鑰,用於簽名計算 connect password,設備建立連接時物聯網通信平臺會強校驗設備端密鑰,確保身份合法

設備影子

本質上是一份在服務端緩存的設備數據(JSON 文檔形式),主要用於保存設備的當前狀態與設備的期望配置

設備證書

創建證書認證類型的設備時平臺爲設備頒發的唯一證書文件,設備建立連接時物聯網通信平臺會強校驗設備端證書文件,確保身份合法

 

騰訊雲物聯網通信(Internet of Things Hub, IoT Hub)旨在提供一個安全、穩定、高效的連接平臺,幫助開發者低成本、快速地實現“設備-設備”、“設備-用戶應用”、“設備-雲服務”之間可靠、高併發的數據通信。不僅可以實現設備之間的互動、設備的數據上報和配置下發,還可以基於規則引擎和騰訊雲產品打通,方便快捷地實現海量設備數據的存儲、計算以及智能分析。

 

      1. 設備管理

生命週期管理

支持控制檯對設備進行註冊生產、刪除銷燬等管理能力。還可通過 SDK 工具包,快速操作,提高效率。當前支持 Python、PHP、JAVA 工具包。

設備狀態

全程對設備狀態監控、有效實時獲取狀態變更通知。

分組管理

支持對不同產品下的設備進行分組管理,滿足不同業務場景下對於不同品類設備多級管理的需求。

日誌採集

支持對設備上下行通信日誌、設備消息內容日誌以及設備端調試 SDK 日誌進行採集上報,滿足客戶多業務場景的查詢需求。

      1. 設備通信

設備能發佈和訂閱的 topic 受到權限控制管理,一個產品下的所有設備具備相同的 topic 類權限。對於 MQTT 協議傳輸,支持 QoS=0 和 QoS=1 等消息特性。支持離線消息存儲。藉助規則引擎,可以實現設備之間的快速消息通信能力。

      1. 設備影子

設備影子本質上是一份在服務器端緩存的設備數據(JSON 形式),主要用於保存:

  • 設備的當前配置
  • 設備的當前狀態

作爲中介,設備影子可以有效實現設備和用戶應用之間的數據雙向同步:

  • 對於設備配置,用戶應用不需要直接修改設備,只需要修改服務器端的設備影子,由設備影子同步到設備。即使當時設備不在線,設備上線後仍能從設備影子同步到最新配置。
  • 對於設備狀態,設備將狀態上報到設備影子,用戶應用查詢時,只需查詢設備影子即可。這樣可以有效減少設備和服務器端的網絡交互,尤其是低功耗設備。

 

 

一個騰訊雲賬號下,最多可以創建2000個產品,每個產品下最多創建200000個設備。一個設備只能隸屬於一個產品。產品名和設備名在同一雲賬號下唯一。

      1. 權限管理

在騰訊物聯網通信,設備能夠發佈和訂閱的 Topic 受到嚴格管理。一個產品下的所有設備具備相同的 Topic 類 權限,默認包括:

Topic

說明

${productId}/${deviceName}/event

發佈權限,用於設備上報數據

${productId}/${deviceName}/control

訂閱權限,用於設備獲取後臺下發的數據

上述$符包含的 productId、deviceName,針對具體創建的設備,將映射爲具體的產品 Id 和設備名字。舉例,一個產品名字爲 pro 的產品(假設產品Id是“pro_id”)下有2個設備(假設設備名字分別爲 “dev_1”、“dev_2”),那麼 dev_1 可以發佈的 Topic 包括 pro_id/dev_1/event,可以訂閱的 topic 包括 pro_id/dev_1/control,但是不可以發佈 pro_id/dev_2/event,不可以訂閱 pro_id/dev_2/control。

用戶可以通過控制檯進行 Topic 權限的編輯修改、增刪產品的 Topic 類權限。

爲了方便設備 SDK 訂閱批量的 Topic ,設備進行訂閱和取消訂閱時可以使用通配符來表示多個符合的 Topic。

      1. 消息管理

 

對於 MQTT 的數據傳輸,騰訊物聯網通信支持 QoS=0 或 1,但不支持 QoS=2。基於 MQTT 協議。設備消息支持離線存儲

      1. 設備影子

設備影子本質上是一份在服務器端緩存的設備數據(JSON 形式),主要用於保存:

  • 設備的當前配置
  • 設備的當前狀態

作爲中介,設備影子可以有效實現設備和用戶應用之間的數據雙向同步:

  • 對於設備配置,用戶應用不需要直接修改設備,只需要修改服務器端的設備影子,由設備影子同步到設備。即使當時設備不在線,設備上線後仍能從設備影子同步到最新配置。
  • 對於設備狀態,設備將狀態上報到設備影子,用戶應用查詢時,只需查詢設備影子即可。這樣可以有效減少設備和服務器端的網絡交互,尤其是低功耗設備。

 

      1. OTA升級

支持 OTA 固件升級服務,當設備固件有安全隱患或者功能漏洞時,物聯網服務端支持通過 OTA 升級,消除隱患,降低安全風險。

        1. 實現原理

固件升級的過程中,需要設備訂閱下面兩個 Topic 來實現與雲端的通信,如下圖所示:


示例:

  •  
$ota/report/${productID}/${deviceName}
用於發佈(上行)消息,設備上報版本號及下載、升級進度到雲端
$ota/update/${productID}/${deviceName}
用於訂閱(下行)消息,設備接收雲端的升級消息
        1. 操作流程

以 MQTT 爲例,設備的升級流程如下所示:

 

  1. 設備上報當前版本號。設備端通過 MQTT 協議發佈一條消息到 Topic $ota/report/${productID/${deviceName},進行版本號的上報,消息爲 json 格式,內容如下:
{
"type": "report_version",
 "report":{
     "version": "0.1"
 }
}
// type:消息類型
// version:上報的版本號
  1. 然後您可以在控制檯上傳固件。
  2. 在控制檯將指定的設備升級到指定的版本。
  3. 觸發固件升級操作後,設備端會通過訂閱的 Topic $ota/update/${productID}/${deviceName} 收到固件升級的消息,內容如下:

 

{
"file_size": 708482,
 "md5sum": "36eb5951179db14a631463a37a9322a2",
 "type": "update_firmware",
 "url": "https://ota-1255858890.cos.ap-guangzhou.myqcloud.com",
 "version": "0.2"
}
// type:消息類型爲update_firmware
// version:升級版本
// url:下載固件的url
// md5asum:固件的MD5
// file_size:固件大小,單位爲字節
  1. 設備在收到固件升級的消息後,根據 URL 下載固件,下載的過程中設備 SDK 會通過 Topic $ota/report/${productID}/${deviceName}不斷的上報下載進度,上報的內容如下:

 

{
 "type": "report_progress",
 "report":{
     "progress":{
            "state":"downloading",
              "percent":"10",
            "result_code":"0",
            "result_msg":""
     },
     "version": "0.2"
 }
}
// type:消息類型
// state:狀態爲正在下載中
// percent:當前下載進度,百分比
  1. 當設備下載完固件,設備需要通過 Topic $ota/report/${productID}/${deviceName}上報一條開始升級的消息,內容如下:
{
 "type": "report_progress",
 "report":{
     "progress":{
            "state":"burning",
            "result_code":"0",
            "result_msg":""
     },
     "version": "0.2"
 }
}
// type:消息類型
// state:狀態爲燒製中
    • 設備固件升級完成後,再向 Topic $ota/report/${productID}/${deviceName}上報升級成功消息,內容如下:
{
 "type": "report_progress",
 "report":{
     "progress":{
            "state":"done",
            "result_code":"0",
            "result_msg":""
     },
     "version": "0.2"
 }
}
// type:消息類型
// state:狀態爲已完成

注意:

在下載固件或升級固件的過程中,如果失敗,則通過 Topic $ota/report/${productID}/${deviceName}上報升級失敗消息,內容如下:

  •  
{
    "type": "report_progress",
    "report":{
        "progress":{
               "state":"fail",
               "result_code":"-1",
               "result_msg":"time_out"
        },
        "version": "0.2"
    }
}
// state:狀態爲失敗
// result_code:錯誤碼,-1:下載超時;-2:文件不存在;-3:簽名過期;-4:MD5不匹配;-5:更新固件失敗
// result_msg:錯誤消息

 

物聯網通信平臺爲每個創建的產品分配唯一標識 ProductID,用戶可以自定義 Devicename 標識設備,用產品標識 + 設備標識 + 設備證書/密鑰來驗證設備的合法性。用戶在創建產品時需要選擇設備認證方式,在設備接入時需要根據指定的方式上報產品、設備信息與對應的密鑰信息,認證通過後才能連接物聯網通信平臺。由於不同用戶的設備端資源、安全等級要求都不同,平臺提供了多種認證方案,以滿足不同的使用場景。

物聯網通信平臺提供以下三種認證方案:

  • 證書認證(設備級):爲每臺設備分配證書 + 私鑰,使用非對稱加密認證接入,用戶需要爲每臺設備燒錄不同的配置信息。
  • 密鑰認證(設備級):爲每臺設備分配設備密鑰,使用對稱加密認證接入,用戶需要爲每臺設備燒錄不同的配置信息。
  • 動態註冊認證(產品級):爲同一產品下的所有設備分配統一密鑰,設備通過註冊請求獲取設備證書/密鑰後認證接入,用戶可以爲同一批設備燒錄相同的配置信息。

三種方案在易用性、安全性和對設備資源要求上各有優劣,您可以根據自己的業務場景綜合評估選擇。方案對比如下:

特性

證書認證

密鑰認證

動態註冊認證

設備燒錄信息

ProductId、Devicename、
設備證書、設備私鑰

ProductId、Devicename、設備密鑰

ProductId、Devicename、ProductSecret

是否需要提前創建設備

必須

必須

支持根據註冊請求中攜帶的 Devicename 自動創建

安全性

一般

一般

使用限制

單產品下最多創建20萬設備

單產品下最多創建20萬設備

單產品下最多創建20萬設備,用戶可自定義通過註冊請求自動創建的設備數上限

設備資源要求

較高,需要支持 TLS

較低

較低,支持 AES 即可

 

      1. 通信協議

騰訊雲 API 的所有接口均通過 HTTPS 進行通信,提供高安全性的通信通道。

      1. 請求方法

支持的 HTTP 請求方法:

  • POST(推薦)
  • GET

POST 請求支持的 Content-Type 類型:

  • application/json(推薦),必須使用 TC3-HMAC-SHA256 簽名方法。
  • application/x-www-form-urlencoded,必須使用 HmacSHA1 HmacSHA256 簽名方法。
  • multipart/form-data(僅部分接口支持),必須使用 TC3-HMAC-SHA256 簽名方法。

GET 請求的請求包大小不得超過32KBPOST 請求使用簽名方法爲 HmacSHA1HmacSHA256 時不得超過1MBPOST 請求使用簽名方法爲 TC3-HMAC-SHA256 時支持10MB

      1. 字符編碼

均使用UTF-8編碼。

      1. Attribute

設備屬性

被如下接口引用:CreateDevice。

名稱

類型

必選

描述

Tags

Array of DeviceTag

屬性列表

      1. BatchPublishMessage

批量發消息請求

被如下接口引用:CreateTask。

名稱

類型

必選

描述

Topic

String

消息發往的主題。爲 Topic 權限中去除 ProductID DeviceName 的部分,如 “event”

Payload

String

消息內容

      1. BatchUpdateShadow

批量更新設備影子任務

名稱

類型

必選

描述

Desired

String

設備影子的期望狀態,格式爲 Json 對象序列化之後的字符串

      1. BrokerSubscribe

代理訂閱信息

名稱

類型

必選

描述

ProductId

String

產品ID

DeviceName

String

設備名

      1. DeviceInfo

設備詳細信息

名稱

類型

描述

DeviceName

String

設備名

Online

Integer

設備是否在線,0不在線,1在線

LoginTime

Integer

設備登錄時間

Version

String

設備版本

DeviceCert

String

設備證書,證書加密的設備返回

DevicePsk

String

設備密鑰,密鑰加密的設備返回

Tags

Array of DeviceTag

設備屬性

DeviceType

Integer

設備類型

Imei

String

IMEI

Isp

Integer

運營商類型

NbiotDeviceID

String

NB IOT運營商處的DeviceID

ConnIP

Integer

IP地址

LastUpdateTime

Integer

設備最後更新時間

LoraDevEui

String

LoRa設備的dev eui

LoraMoteType

Integer

LoRa設備的Mote type

FirstOnlineTime

Integer

首次上線時間
注意:此字段可能返回 null,表示取不到有效值。

LastOfflineTime

Integer

最近下線時間
注意:此字段可能返回 null,表示取不到有效值。

CreateTime

Integer

設備創建時間
注意:此字段可能返回 null,表示取不到有效值。

LogLevel

Integer

設備日誌級別
注意:此字段可能返回 null,表示取不到有效值。

CertState

Integer

設備證書獲取狀態, 1 已獲取過設備密鑰,0 未獲取過設備密鑰
注意:此字段可能返回 null,表示取不到有效值。

EnableState

Integer

設備可用狀態,0禁用,1啓用
注意:此字段可能返回 null,表示取不到有效值。

      1. DeviceTag

設備屬性

名稱

類型

必選

描述

Tag

String

屬性名稱

Type

Integer

屬性值的類型,1 int2 string

Value

String

屬性的值

      1. Filter

描述鍵值對過濾器,用於條件過濾查詢。例如過濾ID、名稱、狀態等

名稱

類型

必選

描述

Name

String

過濾鍵的名稱

Values

Array of String

一個或者多個過濾值

      1. MultiDevicesInfo

創建設備時返回的設備信息

名稱

類型

描述

DeviceName

String

設備名

DevicePsk

String

對稱加密密鑰,base64 編碼,採用對稱加密時返回該參數

DeviceCert

String

設備證書,採用非對稱加密時返回該參數

DevicePrivateKey

String

設備私鑰,採用非對稱加密時返回該參數,騰訊云爲用戶緩存起來,其生命週期與任務生命週期一致

Result

Integer

錯誤碼

ErrMsg

String

錯誤信息

      1. ProductInfo

產品詳細信息

名稱

類型

描述

ProductId

String

產品ID

ProductName

String

產品名

ProductMetadata

ProductMetadata

產品元數據

ProductProperties

ProductProperties

產品屬性

      1. ProductMetadata

產品元數據

名稱

類型

描述

CreationDate

Integer

產品創建時間

      1. ProductProperties

產品屬性

名稱

類型

必選

描述

ProductDescription

String

產品描述

EncryptionType

String

加密類型,1表示證書認證,2表示簽名認證。如不填寫,默認值是1

Region

String

產品所屬區域,目前只支持廣州(gz

ProductType

Integer

產品類型,各個類型值代表的節點-類型如下:
0 普通產品,2 NB-IoT產品,4 LoRa產品,3 LoRa網關產品,5 普通網關產品 默認值是0

Format

String

數據格式,取值爲json或者custom,默認值是json

Platform

String

產品所屬平臺,默認值是0

Appeui

String

LoRa產品運營側APPEUI,只有LoRa產品需要填寫

ModelId

String

產品綁定的物模型ID-1表示不綁定

ModelName

String

產品綁定的物模型名稱

ProductKey

String

產品密鑰,suite產品纔會有

RegisterType

Integer

動態註冊類型 0-關閉, 1-預定義設備名 2-動態定義設備名

ProductSecret

String

動態註冊產品祕鑰

RegisterLimit

Integer

RegisterType2時,設備動態創建的限制數量

      1. Task

任務描述細節

名稱

類型

必選

描述

UpdateShadowTask

BatchUpdateShadow

批量更新影子任務的描述細節,當 taskType 取值爲 “UpdateShadow” 時,此字段必填。描述見下 BatchUpdateShadow

PublishMessageTask

BatchPublishMessage

批量下發消息任務的描述細節,當 taskType 取值爲 “PublishMessage” 時,此字段必填。描述見下 BatchPublishMessage

      1. TaskInfo

任務列表詳細信息

名稱

類型

描述

Type

String

任務類型,目前取值爲 “UpdateShadow” 或者 “PublishMessage”

Id

String

任務 ID

ProductId

String

產品 ID

Status

Integer

狀態。1表示等待處理,2表示調度處理中,3表示已完成,4表示失敗,5表示已取消

CreateTime

Integer

任務創建時間,Unix 時間戳

UpdateTime

Integer

最後任務更新時間,Unix 時間戳

RetCode

Integer

返回的錯誤碼

ErrMsg

String

返回的錯誤信息

      1. TopicRulePayload

創建規則請求包體

名稱

類型

必選

描述

Sql

String

規則的SQL語句,如: SELECT * FROM 'pid/dname/event',然後對其進行base64編碼,得:U0VMRUNUICogRlJPTSAncGlkL2RuYW1lL2V2ZW50Jw==

Actions

String

行爲的JSON字符串,大部分種類舉例如下:
[{"republish":{"topic":"TEST/test"}},{"forward":{"api":"http://127.0.0.1:8080"}},{"ckafka":{"instance":{"id":"ckafka-test","name":""},"topic":{"id":"topic-test","name":"test"},"region":"gz"}},{"cmqqueue":{"queuename":"queue-test-TEST","region":"gz"}},{"mysql":{"instanceid":"cdb-test","region":"gz","username":"test","userpwd":"*****","dbname":"d_mqtt","tablename":"t_test","fieldpairs":[{"field":"test","value":"test"}],"devicetype":"CUSTOM"}}]

Description

String

規則描述

RuleDisabled

Boolean

是否禁用規則

 

  1. 華爲IoT

名詞

描述

開發中心

是基於設備管理服務提供的物聯網一站式開發工具,幫助開發者快速進行Profile(產品模型)和編解碼插件的開發,同時提供在線自助測試、產品發佈等多種能力,端到端指引物聯網開發,幫助開發者提升集成開發效率、縮短物聯網解決方案建設週期。

產品中心

產品中心爲客戶展示通過華爲IoT生態認證的解決方案、終端產品、模組等商用產品,並與全球IoT商用平臺聯網,實現產品一點接入,全球可達,幫助客戶縮短商業變現週期,降低商業風險。

項目

指物聯網平臺的資源空間。開發者在基於開發者中心進行物聯網開發時,需要根據行業屬性創建獨立的項目,並在該項目空間內建設物聯網產品和應用。

產品

某一類具有相同能力或特徵的設備的集合稱爲一款產品。除了設備實體,產品還包含該類設備在物聯網能力建設中產生的產品信息、產品模型(Profile)、插件、測試報告等資源。

產品模型

產品模型(也稱Profile)用於描述設備具備的能力和特性。開發者通過定義Profile,在物聯網平臺構建一款設備的抽象模型,使平臺理解該款設備支持的服務、屬性、命令等信息。

服務

產品模型的一部分,描述設備具備的業務能力。將設備業務能力拆分成若干個服務後,再定義每個服務具備的屬性、命令以及命令的參數。

屬性

產品模型的一部分,一般用於描述設備運行時的狀態,如環境監測設備所讀取的當前環境溫度等。

編解碼插件

物聯網平臺和應用服務器使用JSON格式進行通信,所以當設備使用二進制格式上報數據時,開發者需要在物聯網平臺上開發編解碼插件,幫助物聯網平臺完成二進制格式和JSON格式的轉換。

應用

物聯網平臺中,應用包括用戶在物聯網平臺上創建的應用和用戶自行開發的應用服務器。

  • 應用是用戶在物聯網平臺中爲用戶的業務劃分一個項目空間,每個項目空間會分配一個應用ID和應用密鑰,用於將開發完的應用服務器與真實設備接入到這個項目空間中,實現設備的數據採集和設備管理。
  • 應用服務器是用戶基於物聯網平臺開放的API接口或者SDK進行自行開發的物聯網應用,可接入物聯網平臺進行設備的管理。

設備

歸屬於某個產品下的設備實體,每個設備具有一個唯一的標識碼。設備可以是直連物聯網平臺的設備,也可以是代理子設備連接物聯網平臺的網關。

網關

具有子設備管理功能,並代理子設備連接物聯網平臺的設備實體。

子設備

不與IoT平臺直連,通過網關連接物聯網平臺的設備實體。

邊緣節點

是物聯網的邊緣小腦,在靠近物或數據源頭的邊緣側,融合網絡、計算、存儲、應用核心能力的開放平臺,就近提供計算和智能服務,滿足行業在實時業務、應用智能、安全與隱私保護等方面的基本需求。

模組

又稱通信模組,由若干個顯示模塊、驅動電路、控制電路、芯片以及相應的結構件構成的一個獨立的顯示單元,設備通過通信模組具備與物聯網平臺的通信能力。當前模組廠商主要提供WifiNB-IoT2/3/4/5G等通信模組。

固件

固件(Firmware)一般是指設備硬件的底層驅動程序,承擔着一個系統最基礎最底層工作的軟件,比如計算機主板上的基本輸入/輸出系統BIOSBasic Input/output System)

固件升級又稱爲FOTAFirmware Over The Air),是指用戶可以通過OTA的方式對支持LWM2M協議的設備進行固件升級,升級協議爲LWM2M協議。

軟件

軟件(Software)一般分爲系統軟件和應用軟件,系統軟件實現設備最基本的功能,比如編譯工具、系統文件管理等;應用軟件可以根據設備的特點,提供不同的功能,比如採集數據、數據分析處理等。

軟件升級又稱爲SOTASoftWare Over The Air),是指用戶可以通過OTA的方式支持對LWM2M協議的設備進行軟件升級,升級協議爲PCP協議。

PCP協議

平臺升級協議(PCP協議)規定了設備和平臺之間升級的通信內容與格式,用於實現設備的升級。

nodeId

設備唯一物理標識,如IMEIMAC地址等,用於設備在接入物聯網平臺時攜帶該標識信息完成註冊鑑權。

deviceId

設備ID,用於唯一標識一個設備,在註冊設備時由物聯網平臺分配獲得,是設備在IoT平臺上的內部標識,用於設備註冊鑑權,及後續在網絡中通過deviceId進行消息傳遞。

預置密鑰

NB-IoT設備、集成Agent Lite SDK的設備接入時,預置密鑰用於設備和物聯網平臺之間的傳輸通道安全加密。

密鑰

用於設備採用原生MQTT協議接入物聯網平臺時的鑑權認證。

數字證書

由國際知名的證書機構VeriSignSymantecGlobalSignCACertification Authority)機構進行簽發,用於HTTPS建鏈時服務端和客戶端之間的身份合法性驗證。

token

鑑權參數,訪問物聯網平臺API接口的憑證。應用服務器首次訪問物聯網平臺的開放API時,需調用鑑權接口完成認證鑑權,獲取accessToken

羣組

羣組是一系列設備的集合,用戶可以對應用下所有設備,根據區域、類型等不同規則進行分類建立羣組,以便處理對海量設備的批量管理和操作。

標籤

物聯網平臺支持定義不同的標籤,並對設備打標籤,通過標籤,可以快速篩選設備。

訂閱推送

訂閱:是指應用服務器通過調用物聯網平臺的API接口,向平臺獲取發生變更的設備業務信息(如設備註冊、設備數據上報、設備狀態等)和管理信息(軟固件升級狀態和升級結果)。

推送:是指訂閱成功後,物聯網平臺根據應用服務器訂閱的數據類型,將對應的變更信息推送給指定的URL地址。

Topic

TopicUTF-8字符串,是發佈/訂閱(Pub/Sub)消息的傳輸中介。可以向Topic發佈或者訂閱消息。

設備影子

設備影子是一個JSON文件,用於存儲設備的在線狀態、設備最近一次上報的設備屬性、應用服務器期望下發的配置(期望值)。每個設備有且只有一個設備影子,設備可以獲取和設置設備影子以此來同步狀態,這個同步可以是影子同步給設備,也可以是設備同步給影子。

規則引擎

物聯網平臺根據用戶設置的規則和設備上報的數據,當設備滿足設置的條件時,即觸發對應動作,給設備下發命令或將數據轉發給公有云其他服務進行進一步整合利用。包含設備聯動和數據轉發兩種類型。

NB-IoT

窄帶物聯網(Narrow Band Internet of Things, NB-IoT)是IoT領域的一個重要技術。NB-IoT構建於蜂窩網絡,只消耗大約180kHz的帶寬,可直接部署於GSM網絡、UMTS網絡或LTE網絡,以降低部署成本、實現平滑升級。其具有覆蓋廣、連接多、速率低、成本低、功耗低、架構優等特點,可以廣泛應用於多種垂直行業,如遠程抄表、智慧農業等。

MQTT

MQTTMessage Queue Telemetry Transport)是一個物聯網傳輸協議,被設計用於輕量級的發佈/訂閱式消息傳輸,旨在爲低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。

MQTTSMQTT+SSL/TLS,在MQTTS中使用SSL/TLS協議進行加密傳輸。

CoAP

受約束的應用協議CoAPConstrained Application Protocol)是一種軟件協議,旨在使非常簡單的電子設備能夠在互聯網上進行交互式通信。

CoAPSCoAP over DTLS,在CoAPS中使用DTLS協議進行加密傳輸。

LWM2M

LWM2Mlightweight Machine to Machine)是由OMAOpen Mobile Alliance)定義的物聯網協議,主要使用在資源受限(包括存儲、功耗等)NB-IoT終端。

 

華爲OceanConnect 物聯網平臺(簡稱物聯網平臺)提供海量設備的接入和管理,配合華爲雲其他產品同時使用,幫助快速構築物聯網應用。

當用戶在開通設備管理服務時,系統默認一起開通設備接入服務,即用戶在使用設備管理服務時,包含設備接入服務的能力。

 

https://support.huaweicloud.com/devg-IoT/figure/zh-cn_image_0188394297.png

https://support.huaweicloud.com/productdesc-IoT/figure/zh-cn_image_0193355351.png

      1. 設備接入

物聯網平臺支持終端設備直接接入,也可以通過工業網關或者家庭網關接入;支持多網絡接入、多協議接入、系列化Agent接入,解決設備接入複雜多樣化和碎片化難題;提供基礎的設備管理功能,實現設備的快速接入。

功能

簡介

多網絡接入

支持有線和無線的接入方式,如固定寬帶、2G/3G/4G/5GNB-IoTZ-WaveZigBeeeLTE等。詳細請參見設備集成引導

多協議接入

支持設備通過LWM2MCoAPMQTT(S)等協議接入。詳細請參見設備集成引導

系列化Agent接入

支持Agent LiteAgent Tiny,覆蓋的語言包括CJavaAndroidAgent與海思、高通主流芯片、模組預集成,縮短TTM。詳細請參見設備集成引導

設備雙向通信

物聯網平臺提供設備數據採集功能,例如設備業務數據、設備告警,同時支持應用對設備數據的訂閱。詳細請參見訂閱推送

支持通過應用服務器或控制檯以下發命令的方式,將命令下發到設備,達到平臺對設備遠程控制的效果。詳細請參見命令下發

應用對接

物聯網平臺開放了海量的API接口和SDK,幫助開發者快速孵化行業應用。詳細查看應用對接指引

設備影子

設備影子是一個JSON文檔,用於存儲設備的狀態、設備最近一次上報的設備屬性、應用服務器期望下發的配置。每個設備有且只有一個設備影子,設備可以獲取和設置設備影子以此來同步狀態,這個同步可以是影子同步給設備,也可以是設備同步給影子。詳細請參見設備影子

數據轉發規則

數據轉發規則是規則引擎的一種,用於將物聯網平臺接收的設備數據,轉發到華爲公有云的其它服務進行數據分析、存儲等。詳細請參見規則引擎

設備實時狀態監控

物聯網平臺實時監控設備的狀態,包括在線、離線、未激活,實時獲取狀態變更通知。詳細請參見設備監控

審計日誌

控制檯對所有物聯網平臺的使用人員的操作日誌、安全日誌(登錄、登出、密碼修改等)進行記錄,便於日誌分析和故障定位。詳細請參見設備監控

      1. 設備管理

設備管理在設備接入基礎上,提供了更豐富完備的設備管理能力,簡化海量設備管理複雜性,節省人工操作,提升管理效率。

功能

簡介

產品模型定義

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

設備訪問授權

支持將設備的管理權限授權給其他應用,便於同一個用戶管理多個應用的設備。詳情請參見授權訪問

數據持久化存儲

提供設備上報數據的存儲,可按照時、天等維度查看設備上報的歷史數據。歷史數據最多存儲7天。詳情請參見數據上報

設備聯動規則

設備聯動規則是規則引擎的一種,通過設置一個規則的觸發條件(如溫度閾值、時間等),在滿足觸發條件時,物聯網平臺會觸發一個指令來使設備執行一個操作(如上報信息、打開設備開關、上報告警等)。詳細請參見規則引擎

告警管理

支持管理通過規則引擎裏定義觸發的設備告警,包括查看告警詳情和恢復告警。詳細請參見設備監控

設備分組及標籤

支持對設備進行羣組和標籤管理,通過有效分組和批量管理,減輕設備管理成本。詳細請參見羣組與標籤

設備批操作

支持對設備的批量操作,包括:批量設備註冊批量配置更新批量命令下發批量固件升級批量軟件升級

設備遠程診斷

支持遠程進行設備的運行日誌收集、重啓模組操作。詳細請參見遠程診斷

設備配置更新

支持通過應用服務器或控制檯以下發命令的方式,對設備的屬性值進行更新。詳細請參見設備配置更新

設備OTA升級

支持通過OTAOver the Air)的方式,對終端設備進行軟件、硬件的升級操作,並通過軟固件升級策略管理(羣組、升級時間、併發數控制等),有效提升升級靈活性。詳細請參見固件升級軟件升級

報表統計

在控制檯上提供了豐富的報表功能,方便用戶查看應用和設備的使用情況。詳細請參見設備監控

 

 

      1. Topic
  • 物聯網平臺作爲消息接收方時,已默認訂閱了相關Topic,設備只要向對應Topic發送消息,物聯網平臺就可以接收。
  • 設備作爲消息接收方時,需要先訂閱相關Topic,這樣物聯網平臺向對應Topic發送消息時,設備才能接收到。設備需要根據具體實現的業務來決定訂閱哪些Topic

Topic

消息發送方

(Publisher)

消息接收方

(Subscriber)

說明

/huawei/v1/devices/{deviceId}/data/{codecMode}

設備

物聯網平臺

設備向物聯網平臺上報數據。

  • “codecMode”爲訂閱的編解碼類型,當用戶使用自身開發的編解碼插件時“codecMode”取值爲“binary”,沒有開發編解碼插件的“codecMode”取值爲“json”。
  • “deviceId”的值,對一機一密設備,使用deviceId接入時填寫爲設備註冊成功後返回的“deviceId”值;使用nodeId接入時填寫爲設備註冊成功時的“nodeId”值。

/huawei/v1/devices/{deviceId}/command/{codecMode}

物聯網平臺

設備

設備接收物聯網平臺下發的命令。

  • “codecMode”爲訂閱的編解碼類型,當用戶使用自身開發的編解碼插件時“codecMode”取值爲“binary”,沒有開發編解碼插件的“codecMode”取值爲“json”。
  • “deviceId”的值,對一機一密設備,使用deviceId接入時填寫爲設備註冊成功後返回的“deviceId”值;使用nodeId接入時填寫爲設備註冊成功時的“nodeId”值。

 

 

      1. 數據上報

當設備完成和物聯網平臺對接後,一旦設備上電,設備基於在設備上定義的業務邏輯進行數據採集和上報,可以是基於週期或者事件觸發。數據上報到物聯網平臺後,設備接入服務和設備管理服務提供的能力有區別,如下:

  • 僅開通設備接入服務:對設備上報的數據不進行解析和存儲,通過數據轉發規則轉發到華爲雲其他雲服務上進行存儲和處理(若設備採用二進制上報數據,則平臺進行碼流base64封裝後再轉發),然後通過其他雲服務的控制檯或者API接口進行進一步的數據處理。
  • 設備管理服務(默認開通設備接入服務):
    • 如果數據上報格式爲二進制碼流,則平臺通過編解碼插件對設備數據進行解析(如果是JSON格式,則無需編解碼插件),解析後的數據上報給設備管理服務。
    • 根據在控制檯上創建應用時的配置來定義是否存儲歷史數據,如果設置爲存儲,則平臺最長存儲7天。應用服務器可以通過調用北向接口訂閱設備相關的數據,物聯網平臺也可以通過數據轉發規則轉發到華爲雲其他雲服務上進行存儲和處理。然後通過其他雲服務的控制檯或者API接口進行進一步的數據處理。
    • 對於採用LWM2M協議的設備,設備上報的設備的在線狀態、設備最近一次上報的設備屬性值會存儲在設備影子裏,應用服務器只需要查詢設備影子中存儲的數據,即可獲取設備最新上報的設備數據和設備狀態。

https://support.huaweicloud.com/usermanual-IoT/figure/zh-cn_image_0189657774.png

 

      1. 命令下發
        1. 概述

爲能有效地對設備進行管理,設備的產品模型中定義了物聯網平臺可向設備下發的命令,應用服務器可以調用物聯網平臺開放的API接口向單個設備或批量設備下發命令,或者用戶通過物聯網平臺直接向單個設備下發命令,以實現對設備的遠程控制。

物聯網平臺有兩種命令下發機制,如下表所示。

命令下發機制

定義

適用場景

LWM2M/CoAP協議設備

集成Agent Lite SDK設備/原生MQTT設備

立即下發

不管設備是否在線,平臺收到命令後立即下發給設備。如果設備不在線或者設備沒收到指令則下發失敗。支持給本應用的設備和被授予權限的其它應用的設備下發命令。

立即下發適合對命令實時性有要求的場景,比如路燈開關燈,燃氣表開關閥。使用立即下發時,命令下發的時機需要由應用服務器來保證。

建議用戶使用緩存下發模式,工作模式設置爲PSM模式(系統默認值)。

如需使用立即下發模式(工作模式設置爲DRX或eDRX模式),需要在設備上報數據後立即下發命令才能成功。

適用

緩存下發

物聯網平臺在收到命令後先緩存,等設備上線或者設備上報數據時再下發給設備,如果單個設備存在多條緩存命令,則進行排隊串行下發。支持給本應用的設備和被授予權限的其它應用的設備下發命令。

緩存下發適合對命令實時性要求不高的場景,比如配置水錶的參數。

適用。工作模式設置爲PSM模式(系統默認值)。

不適用

        1. 業務流程

LWM2M/CoAP協議設備場景

物聯網平臺提供立即下發和緩存下發兩種機制。應用服務器向物聯網平臺下發命令時,攜帶參數expireTime(簡稱TTL,表示最大緩存時間)。如果不帶expireTime,則默認expireTime爲48小時。

  • expireTime=0:命令立即下發。
  • expireTime>0:命令緩存下發。

1 命令立即下發流程 https://support.huaweicloud.com/usermanual-IoT/figure/zh-cn_image_0192476984.png

  1. 應用調用創建設備命令接口,下發請求到物聯網平臺,攜帶expireTime參數爲0。消息樣例如下:
Method: POST
request: https://server:port/iocm/app/cmd/v1.4.0/deviceCommands
Header:
"app_key: ******"
"Authorization:Bearer******"
Content-Type:application/json
Body:
{
  "deviceId": "********",
"command": {
 "serviceId": "Brightness",
"method": "SET_DEVICE_LEVEL",
    "paras": {
     "value": "1",
 }
},
"callbackUrl": "http://127.0.0.1:9999/cmd/callbackUrl",
  "expireTime": 0,
  "maxRetransmit": 1
}
  1. 物聯網平臺調用編解碼插件對命令請求進行編碼後,會通過LWM2M協議定義的設備管理和服務實現接口的Execute操作下發命令,消息體爲二進制格式。
  2. 物聯網平臺嚮應用返回201 Created,攜帶命令狀態爲SENT。(如果設備不在線或者設備沒收到指令則下發失敗,命令狀態爲FAIL
  3. 設備收到命令後返回ACK響應。
  4. 若應用下發命令時攜帶了"callbackUrl",物聯網平臺通過命令狀態變化通知接口推送消息給應用,攜帶命令狀態爲DELIVERED。消息樣例如下:
Method: POST
request:
Body:
{
  "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
  "commandId": "108a9c71462a48e09426e06e844d47ba3",
  "result": {
    "resultCode": "DELIVERED",
    "resultDetail": null
  }
}
  1. 設備執行命令後通過205 Content響應返回命令執行結果。
  2. 若應用下發命令時攜帶了"callbackUrl",物聯網平臺會調用編解碼插件對設備響應進行解碼,然後通過命令狀態變化通知接口推送消息給應用,攜帶命令狀態爲SUCCESSFUL。消息樣例如下:
Method: POST
request:
Body:
{
  "deviceId": "6543214c-72bb-4131-9e14-fad974123456",
  "commandId": "108a9c71462a48e09426e06e844d47ba",
  "result": {
    "resultCode": "SUCCESSFUL",
    "resultDetail": null
  }
}
      1. 設備配置更新

物聯網平臺提供設備配置更新功能,即用戶可通過控制檯對單個設備或批量設備的設備屬性值進行修改,滿足用戶頻繁、快捷、方便的管理設備的訴求。比如,某路燈最初設置溫度屬性達到A攝氏度時上報告警,用戶需要修改該屬性值爲B攝氏度,即可修改其配置文件,然後通過控制檯上傳到物聯網平臺,以實現配置更新。

  • 針對LWM2M協議設備的設備配置更新,物聯網平臺提供了設備影子功能,將修改設備的屬性信息存儲在設備影子中,待設備上線或上報數據時,將修改的設備屬性值同步給設備,從而完成設備屬性的修改。
  • 針對原生MQTT協議接入或集成Agent Lite SDK的設備,物聯網平臺直接配置更新下發,修改設備的設備屬性值。

 

      1. 設備影子

物聯網平臺支持創建設備的“影子”。設備影子是一個JSON文件,用於存儲設備的在線狀態、設備最近一次上報的設備屬性值、應用服務器期望下發的配置。每個設備有且只有一個設備影子,設備可以獲取和設置設備影子以此來同步設備屬性值,這個同步可以是影子同步給設備,也可以是設備同步給影子。

設備影子上有desired區和report區。

  • desired區用於存儲對設備屬性的配置,即期望值。當需要修改設備的服務屬性值時,可修改設備影子的desired屬性值,設備在線時,desired屬性值立即同步到設備。如果設備不在線,待設備上線或上報數據時,desired屬性值同步到設備。
  • report區用於存儲設備最新上報的設備屬性值,即上報值。當設備上報數據時,平臺刷新report屬性值爲設備上報的設備屬性值。

https://support.huaweicloud.com/usermanual-IoT/figure/zh-cn_image_0190369166.png

      1. OTA升級

固件(Firmware)一般是指設備硬件的底層“驅動程序”,承擔着一個系統最基礎最底層工作的軟件,比如計算機主板上的基本輸入/輸出系統BIOS(Basic Input/output System)。

固件升級又稱爲FOTA(Firmware Over The Air),是指用戶可以通過OTA的方式對支持LWM2M協議的設備進行固件升級(基於MQTT協議的設備的固件升級能力即將上線,敬請期待),固件升級協議爲LWM2M協議。FOTA流程如下圖所示:

https://support.huaweicloud.com/usermanual-IoT/figure/zh-cn_image_0191481956.png

FOTA升級流程的詳細說明:

12. 用戶在設備管理服務的控制檯上傳固件包,並在控制檯或者應用服務器上創建固件升級任務。

3. NB-IoT設備上報數據,平臺感知設備上線,觸發升級協商流程。

45. 物聯網平臺向設備下發查詢設備固件版本的命令,查詢成功後,物聯網平臺根據升級的目標版本判斷設備是否需要升級。

  • 如果返回的固件版本信息與升級的目標版本信息相同,則升級流程結束,不做升級處理。
  • 如果返回的固件版本信息與升級的目標版本信息不同,則繼續進行下一步的升級處理。

67. 物聯網平臺查詢終端設備所在的無線信號覆蓋情況,獲取小區IDRSRPReference Signal Received Power,參考信號接收功率)和SINRSignal to Interference Plus Noise Ratio,信號干擾噪聲比)信息。

  • 查詢成功:則根據如下方式計算可同時升級的併發數計算,並按照步驟9進行處理。
    • 如下圖所示,如果設備的RSRP強度和SINR強度均落在等級“0”中,則同時可以對該小區的50個相同信號覆蓋區間的設備進行同時升級。
    • 如果設備的RSRP強度和SINR強度分別落在等級“0”“1”中,則以信號較弱的等級“1”爲準,則只能同時對該小區的10個設備進行升級。
    • 如果設備的RSRP強度和SINR強度分別落在等級“1”“2”中,則以信號較弱的等級“2”爲準,則只能同時對該小區的1個設備進行升級。
    • 如果設備的RSRP強度和SINR強度不在該3個等級範圍內,且均可以查詢到,則按照信號最弱覆蓋等級“2”處理,則只能同時對1個設備進行升級。
  • 查詢失敗:則按照流程步驟8進行處理。

8. 物聯網平臺繼續下發查詢小區ID信息的命令,獲取終端設備所在的小區ID信息。

  • 如果查詢成功:物聯網平臺支持同時對該小區的10個相同情況的設備進行固件升級。
  • 如果查詢失敗:則升級失敗。

9. 物聯網平臺向設備訂閱固件升級的狀態。

1011. 物聯網平臺向設備下發下載固件包的URL地址,通知設備下載固件包。終端設備根據該URL地址下載固件包,固件包的下載支持分片下載,下載完成後,設備知會物聯網平臺固件包已下載完畢。

1213. 物聯網平臺向設備下發升級的命令,終端設備進行升級操作,升級完成後終端設備向物聯網平臺反饋升級結束。

1416. 物聯網平臺下發命令查詢固件升級的結果,獲取升級結果後,向終端設備取消訂閱升級狀態通知,並向控制檯應用服務器通知升級的結果。

 

 

設備註冊鑑權是指物聯網平臺對接入平臺的設備進行註冊鑑權。對於不同接入方式的設備,註冊鑑權方式不同。

接入類型

註冊鑑權方式

使用LWM2M/CoAP協議接入的設備

在設備接入物聯網平臺前,用戶通過應用服務器調用註冊設備(驗證碼方式)接口或通過控制檯在物聯網平臺註冊設備,並把設備的唯一標識碼nodeId(如IMEI)設置爲設備接入平臺的驗證碼。在設備接入物聯網平臺時攜帶設備唯一標識,完成設備的接入鑑權。

當採用DTLS/DTLS+傳輸層安全協議接入時,即設備爲安全設備時,通過預置密鑰進行設備和物聯網平臺之間的傳輸通道安全加密。如圖所示。

集成Agent Lite SDK的設備

在設備接入物聯網平臺前,用戶通過應用服務器調用註冊設備(驗證碼方式)接口或通過控制檯在物聯網平臺註冊設備,並把設備的唯一標識碼nodeId(如IMEI)設置爲設備接入平臺的驗證碼,平臺返回設備ID。當設備上電時,攜帶nodeId等進行平臺綁定,並返回設備ID和密鑰。當綁定後設備重新登錄時,攜帶設備ID和密鑰完成網關的接入鑑權。如圖所示。

如果設備是網關,網關下有子設備,則當網關接入物聯網平臺後,在網關上通過調用Agent Lite的添加非直連設備接口,完成子設備的接入,具體請參見網關與子設備

使用原生MQTT協議接入的設備

在設備接入物聯網平臺前,用戶通過應用服務調用註冊設備(密碼方式)接口或通過控制檯在物聯網平臺註冊設備,獲取設備ID和密鑰,並把設備ID和密鑰燒錄到設備中。在設備接入物聯網平臺時攜帶設備ID和密鑰、或者nodeId和密鑰,通過一機一密的方式,完成設備的接入鑑權。

 

      1. 設備上報數據
        1. 接口說明

設備向物聯網平臺上報數據。

        1. Topic

Topic

/huawei/v1/devices/{deviceId}/data/{codecMode}

消息發送方

設備

消息接收方

物聯網平臺

        1. 參數說明

參數

必選/可選

類型

描述

msgType

必選

String

固定值“deviceReq”,表示設備上報數據。

data

必選

List<ServiceData>

要上報的設備數據。

ServiceData

參數

必選/可選

類型

描述

serviceId

必選

String

設備服務的ID。

serviceData

必選

ObjectNode

一個服務下的屬性數據,具體字段在設備的產品模型中定義。

eventTime

可選

String

設備採集數據的UTC時間(格式:yyyyMMddTHHmmssZ),如:20161219T114920Z。

設備上報數據不帶該參數或參數格式錯誤時,則數據上報時間以物聯網平臺時間爲準。

        1. 示例
設備向Topic發送的payload 
{ 
   "msgType":"deviceReq", 
   "data": [ 
   { 
      "serviceId":"******", 
      "serviceData":{ 
        "meterId":"******", 
        "dailyActivityTime": 120, 
        "flow": "565656", 
        "cellId":"5656", 
        "signalStrength":"99", 
        "batteryVoltage":"3.5" 
       },
      "eventTime":"20160503T121540Z" 
   },
   { 
      "serviceId": "Battery", 
      "serviceData": {
         "batteryLevel": 75
      }, 
      "eventTime":"20160503T121540Z" 
   }
   ] 
}

 

      1. 設備接收命令
        1. 接口說明

設備接收物聯網平臺下發的控制命令。

        1. Topic

Topic

/huawei/v1/devices/{deviceId}/command/{codecMode}

消息發送方

物聯網平臺

消息接收方

設備

        1. 參數說明

參數

必選/可選

類型

描述

msgType

必選

String

固定值“cloudReq”,表示平臺下發的請求。

serviceId

必選

String

設備服務的ID。

cmd

必選

String

命令名稱,在設備的產品模型中定義。

paras

必選

ObjectNode

命令參數,具體字段在設備的產品模型中定義。

mid

必選

Integer

命令ID,物聯網平臺內部分配(範圍1-65535),設備響應平臺命令時,需要返回該值。

        1. 示例
設備先訂閱Topic後才能收到命令推送,設備接收到的payload: 
{ 
   "msgType": "cloudReq", 
   "serviceId": "******", 
   "mid": 1, 
   "cmd": "LEVEL", 
   "paras": { 
     "value": 4 
   } 
}

 

      1. 設備響應命令
        1. 接口說明

設備對物聯網平臺控制命令的應答。

        1. Topic

Topic

/huawei/v1/devices/{deviceId}/data/{codecMode}

消息發送方

設備

消息接收方

物聯網平臺

        1. 參數說明

參數

必選/可選

類型

描述

msgType

必選

String

固定值“deviceRsp”,表示設備的應答消息。

mid

必選

Integer

命令ID,把物聯網平臺下發命令時攜帶的“mid”返回給平臺。

errcode

必選

Integer

命令執行的結果碼。

  • “0”表示執行成功。
  • “1”表示執行失敗。

body

可選

ObjectNode

命令的應答,具體字段在設備的產品模型中定義。

        1. 示例
設備向Topic發送的payload 
{ 
   "msgType": "deviceRsp", 
   "mid": 1, 
   "errcode": 0, 
   "body": { 
     "result": 0 
   } 
}

 

  1. 小米IoT

 

名詞

解釋

產品

產品是開發者在平臺註冊創建的智能硬件型號,比如“小米空氣淨化器2代”就是一款產品,對該產品的平臺配置將影響該型號下的所有設備。

產品Model

產品Model是在註冊創建產品時填寫的,作爲產品在平臺的唯一標識,是開發者在開發及上線後管理的重要參數。產品Model由“企業標識”、“設備類型標識”、“產品型號”三部分組成,其中“產品型號”由開發者自行定義、由小寫字母和數字組成。

PID

PID的全稱爲"Product ID",是產品在平臺的唯一標識,由平臺分配。

MIoT-Spec

MIoT Specification,小米IoT設備協議規範

 

device(設備)

是一個獨立的有意義的設備,比如:燈泡、插座、風扇

DID

DID的全稱爲“Device ID”,是設備在平臺中的唯一標識。DID由平臺分配

UID

UID的全稱爲“User ID”,即爲用戶的小米賬號,是用戶在平臺中的唯一標識

 

小米IoT開發者平臺面向智能家居、智能家電、健康可穿戴、出行車載等領域,開放智能硬件接入、智能硬件控制、自動化場景、AI技術、新零售渠道等小米特色優質資源,與合作伙伴一起打造極致的物聯網體驗。

 

      1. 直接接入

智能硬件直連接入,是指通過對設備硬件的開發來接入小米IoT開發者平臺的接入方式。

智能硬件直連接入有兩種具體的方式,包括硬件中嵌入小米智能模組和硬件中集成設備SDK

硬件中嵌入小米智能模組:適合於自帶MCU的、控制功能相對簡單的智能硬件。小米智能模組中已內置標準的設備SDK,且將功能接口封裝爲串口通信指令格式,開發者可直接將MCU和小米智能模組對接,MCU按照標準格式通過串口向模組上報或拉取數據。

硬件中集成設備SDK:適合於帶操作系統的、控制功能相對複雜的智能硬件;也適合無MCU、直接在模組中開發功能的智能硬件。設備SDK中包含多種基本功能,開發者只需調用接口並實現硬件自身的功能邏輯即可。

      1. OTA升級

物理設備的固件升級後,可能:

僅僅是修復內部bug

增加了設備功能。

對於第1種情況,我們不關心。

對於第2種情況,我們需要規定好升級方式。

比如一款風扇升級過N個固件,更改了3次功能,這3次升級都修改了設備實例的type

urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:1

urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:2

urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:3

1. 升級約定

升級版本號,需要向下兼容,即:

只能添加功能,不能刪除和修改舊功能。

如果更改了產品型號,則不需要考慮兼容。

絕大多數情況下,不建議升級產品型號。

2. 範例

初始版本定義

當一個設備剛被創建的時候,版本號是1,如:

{

    "type": "urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:1",

    "description": "Zhimi Fan",

    "services": [

        {

            "iid": 1,

            "type": "urn:miot-spec-v2:service:fan:00007808:zhimi-zxc:1",

            "description": "Fan",

            "properties": [

                {

                    "iid": 1,

                    "type": "urn:miot-spec-v2:property:on:00000006:zhimi-zxc:1",

                    "description": "Switch Status",

                    "format": "bool",

                    "access": ["read", "write", "notify"]

                },

                {

                    "iid": 2,

                    "type": "urn:miot-spec-v2:property:fan-level:00000016:zhimi-zxc:1",

                    "description": "Speed Level",

                    "format": "uint8",

                    "access": ["read", "write", "notify"],

                    "value-range": [1, 3, 1]

                }

            ]

        }

    ]

}

注意:

設備實例中的type

urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:1

風速被廠家修改了取值範圍,type

urn:miot-spec-v2:property:fan-level:00000016:zhimi-zxc:1

兩個type的後綴保持一致,都是:

zhimi-zxc:1

升級

過了一段時間,廠家覺得3檔太少,需要升級下固件,支持5個檔位。設備實例被修改成:

{

    "type": "urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:2",

    "description": "Zhimi Fan",

    "services": [

        {

            "iid": 1,

            "type": "urn:miot-spec-v2:service:fan:00007808:zhimi-zxc:1",

            "description": "Fan",

            "properties": [

                {

                    "iid": 1,

                    "type": "urn:miot-spec-v2:property:on:00000006:zhimi-zxc:1",

                    "description": "Switch Status",

                    "format": "bool",

                    "access": ["read", "write", "notify"]

                },

                {

                    "iid": 2,

                    "type": "urn:miot-spec-v2:property:fan-level:00000016:zhimi-zxc:1",

                    "description": "Speed Level",

                    "format": "uint8",

                    "access": ["read", "write", "notify"],

                    "value-range": [1, 3, 1]

                },

                {

                    "iid": 3,

                    "type": "urn:miot-spec-v2:property:fan-level:00000016:zhimi-zxc:2",

                    "description": "Speed Level",

                    "format": "uint8",

                    "access": ["read", "write", "notify"],

                    "value-range": [1, 5, 1]

                }

            ]

        }

    ]

}

注意:

設備實例中的type是(版本號變成了2):

urn:miot-spec-v2:device:fan:0000A005:zhimi-zxc:2

原有的風速(fan-leveltype依舊不變(這是一個在版本1時定義的風速)

urn:miot-spec-v2:property:fan-level:00000016:zhimi-zxc:1

新增加了一個風速(iid: 3,版本號是2),檔位被調整爲5檔,type:

urn:miot-spec-v2:property:fan-level:00000016:zhimi-zxc:2

 

企業在正式使用平臺前,建議先行了解平臺上與企業相關的兩類角色:

個人開發者:用小米賬號登錄,賬號在平臺進行郵箱驗證和用戶個人信息登記後,即可成爲平臺的個人開發者。

企業開發組:企業需要在平臺以企業身份註冊並經平臺審覈通過後,即可成爲平臺的企業開發組。

個人開發者是平臺上的操作主體,但需要創建企業開發組或被企業開發組添加爲成員,纔可有權限操作平臺各項功能。

企業開發組由某個個人開發者發起申請,申請通過後,負責申請的個人開發者即成爲該企業開發者的擁有者,其他個人開發者可以被添加到該企業開發組的成員中,進行協助管理、開發、運營等操作。

      1. 獲取設備屬性

接口:

https://api.io.mi.com/app/device/batchdevicedatas

輸入參數:

data=[

    {

        "did":"12345678", // 設備ID

        "props":[

            "prop.power",

            "prop.light"

        ]

    },

    {

        "did":"99999999",

        "props":["event.status"]

    }

]

返回值:

{

    "code":0,

    "message":"ok",

    "result":{

        "12345678":{

            "prop.power":"off",

            "prop.light":"false"

        },

        "99999999":{

            "event.status":"{\"state\":8}"

        }

    }

}

設備上報屬性格式:

{"method":"props","params":{"power":"off","light":"false"},"id":1234}

設備上報事件格式:

{"id":5678,"method":"event.status", "params":[{"state":8}]}

      1. 消息推送開關設置

“推送開關”功能實現相關接口:

設置插件推送開關的狀態值

 接口: /app/device/setsetting 

 參數:

 data={

    "did":xxx,

    "settings":

    {

        "push_enable_[ID]": "1"

    }

 }

 設置”push_enable_[ID]”爲1, 開啓推送,其他值爲關閉推送

獲取插件開關狀態

 接口:/app/device/getsetting

 參數:

 data={

     "did":xxx,

     "settings":["push_enable_[ID]"], // 如果settings爲空,取所有uid+did下的settings

     "prefix_filter": "xxxx" // 只返回以xxxx開頭的setting

 }

 返回:

 result={

     "push_enable_[ID]": "1",

 }

發佈了59 篇原創文章 · 獲贊 8 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章