總的來說:
相同點:
四個大廠,基本的架構相同:用戶側通過IoT SDK或者MQTT、CoAP、HTTP接口接入,IoT雲提供消息的路由轉發、計算存儲等。安全方案則通過TLS+用戶鑑權(用戶名、密碼,Acess Token等),協議數據的Payload部分均採用Json字符串,華爲同時還支持二進制。
不同點:
阿里的功能更完善,用戶鑑權部分最複雜,騰訊次之,華爲偏重於硬件,小米的產品更像只供內部使用的一個原型 。阿里和華爲的Topic命名以“/”開頭,違反的業界的最佳實踐。從公開的資料看,小米只支持HTTP接口的調用方式。
名詞 |
描述 |
產品 |
設備的集合,通常指一組具有相同功能的設備。物聯網平臺爲每個產品頒發全局唯一的ProductKey。每個產品下最多可以包含50萬個設備。 |
設備 |
歸屬於某個產品下的具體設備。物聯網平臺爲設備頒發產品內唯一的證書DeviceName。設備可以直接連接物聯網平臺,也可以作爲子設備通過網關連接物聯網平臺。 |
分組 |
物聯網平臺支持建立設備分組,分組中可包含不同產品下的設備。通過設備組來進行跨產品管理設備。 |
網關 |
能夠直接連接物聯網平臺的設備,且具有子設備管理功能,能夠代理子設備連接雲端。 |
子設備 |
本質上也是設備。子設備不能直接連接物聯網平臺,只能通過網關連接。 |
設備證書 |
設備證書指ProductKey、DeviceName、DeviceSecret。
|
ProductSecret |
由物聯網平臺頒發的產品密鑰,通常與ProductKey成對出現,可用於一型一密的認證方案。該參數很重要,需要您保管好,不能泄露。 |
設備X.509證書 |
物聯網平臺支持設備使用X.509數字證書進行身份驗證。您創建認證方式爲X.509證書的設備後,物聯網平臺爲設備頒發對應的X.509證書,證書信息包括:X.509數字證書(Certificate)、X.509證書ID(CertSN)和X.509證書密鑰(PrivateKey)。 |
Topic |
Topic是UTF-8字符串,是發佈(Pub)/訂閱(Sub)消息的傳輸中介。可以向Topic發佈或者訂閱消息。 |
Topic類 |
同一產品下不同設備的Topic集合,用${productkey}和${deviceName}通配一個唯一的設備,一個Topic類對一個ProductKey下所有設備通用。 |
發佈 |
操作Topic的權限類型,對應的英文名稱爲Pub。可以往此類Topic中發佈消息。 |
訂閱 |
操作Topic的權限類型,對應的英文名稱爲Sub。可以從此類Topic中訂閱消息。 |
RRPC |
全稱:Revert-RPC。RPC(Remote 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)隊列。 |
設備連接物聯網平臺,與物聯網平臺進行數據通信。物聯網平臺可將設備數據流轉到其他阿里雲產品中進行存儲和處理。這是構建物聯網應用的基礎。
物聯網平臺提供IoT SDK,設備集成SDK後,即可安全接入物聯網平臺,使用設備管理、數據分析、數據流轉等功能。
只有支持TCP/IP協議的設備可以集成IoT SDK。
邊緣計算能力允許您在最靠近設備的地方構建邊緣計算節點,過濾清洗設備數據,並將處理後的數據上傳至雲平臺。
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協議接入物聯網平臺。
數據分析服務包括流數據分析和空間可視化。流數據分析用於設置數據處理任務,空間可視化可以將設備數據實時在二維地圖或三維模型上展示出來。
物聯網平臺爲您提供功能豐富的設備管理服務,包括:生命週期、設備分組、設備影子、物模型、數據解析、數據存儲、在線調試、固件升級、遠程配置、實時監控等。具體請參見相關功能文檔。
當設備基於Topic進行通信時,您可以編寫SQL對Topic中的數據進行處理,然後配置轉發規則將數據轉發到其他Topic或阿里雲服務上進行存儲和處理。例如:
- 轉發到雲數據庫RDS、表格存儲(Table Store)和時序時空數據庫(TSDB)中進行存儲。
- 轉發到DataHub中,進而使用實時計算進行計算,使用MaxCompute進行大規模離線計算。
- 轉發到函數計算(FC)中,進行事件計算。
- 轉發到消息隊列(RocketMQ)或消息服務(MNS)中,實現高可靠消費數據。
- 轉發到另一個Topic中實現M2M通信。
-
- 安全認證&權限策略
-
安全是IoT的重要話題。阿里雲物聯網平臺提供多重防護保障設備雲端安全。
- 物聯網平臺爲每個設備頒發唯一證書,設備使用證書進行身份驗證連接物聯網平臺。
- 針對不同安全等級和產線燒錄的要求,物聯網平臺爲開發者提供了多種設備認證方式。
- 授權粒度精確到設備級別,任何設備只能對自己的Topic發佈、訂閱消息。服務端憑藉阿里雲AccessKey對賬號下所屬的Topic進行操作。
接入側提供物聯網SDK接入阿里雲IoT。設備連接、消息路由可以由MQTT的Broker完成,設備認證、安全權限和設備管理由運動在IoT平臺的服務程序完成。
物聯網平臺中,服務端和設備端通過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一般以 |
自定義Topic |
您可以根據業務需求,自定義。 |
-
-
- M2M通訊
-
以智能燈和手機App連接爲例,基於物聯網平臺的Topic消息路由服務,構建一個M2M設備間通信架構。智能燈控制流程如下圖:
操作步驟
本示例中,智能燈的ProductKey爲al123456789;DeviceName爲light。
- 開發智能燈設備端。
本示例中,設備與物聯網平臺間的通信協議爲MQTT。
- 在物聯網平臺,爲手機App註冊產品和設備。
上圖示例中,手機App的ProductKey爲al987654321;DeviceName爲ControlApp。
當手機App用戶註冊登錄時,服務器將App設備信息發送給手機App。手機App可以作爲一個設備連接到物聯網平臺。
- 使用服務器,調用雲端接口CreateTopicRouteTable,創建App Topic與智能燈Topic之間的消息路由關係。
- 將入參SrcTopic指定爲App的Topic:
/al987654321/ControlApp/user/update
。 - 將入參DstTopics指定爲智能燈的Topic:
/al123456789/light/user/set
。
- 將入參SrcTopic指定爲App的Topic:
- 開發手機App。
本示例中,手機App與物聯網平臺間的通信協議爲HTTPS。
手機App發送的智能燈控制指令payload數據格式如下:
{
"TargetDevice"
:
"light",
"Switch"
:
"off",
"Timestamp"
:
1557750407000
}
- 手機App用戶通過掃碼,將App與智能燈綁定。
當App向服務器發送綁定設備的請求後,服務器將返回綁定成功的智能燈設備名稱deviceName。本示例中,智能燈設備名稱爲light。
- 通過App發送控制指令。
- 手機App發送指令到Topic:
/al987654321/ControlApp/user/update
。指令爲JSON格式的數據。 - 物聯網平臺根據已定義的Topic路由關係,將指令信息路由到智能燈設備的Topic:/al123456789/light/user/set。
- 智能燈設備接收到指令後,執行相關操作。
- 手機App發送指令到Topic:
物聯網平臺支持廣播通信,即向產品下的所有設備發送消息。設備僅需訂閱廣播Topic,即可收到服務器發送的廣播消息。本文介紹廣播通信的具體配置流程。
廠家有多個溫度計接入物聯網平臺,現在需要服務器向全部溫度計發送一條相同的精度指令。
設備端訂閱相同的廣播Topic,服務器調用PubBroadcast向該Topic發佈消息。
-
-
- OTA升級
-
在物聯網平臺控制檯上,創建新固件,上傳固件文件包,完成固件驗證,將固件推送給指定設備用於升級。
前提條件:
- 設備端已配置OTA升級功能。
只有設備端已支持OTA服務,才能上報固件版本,接收雲端推送的升級消息,下載固件,進行升級等OTA升級操作。
- 已根據業務需要,編輯好新的固件文件。本示例的固件文件,請參見配置設備端OTA升級中的附錄章節。
操作步驟
- 登錄物聯網平臺控制檯。
- 在左側導航欄,選擇監控運維 > 固件升級。
- 在固件升級頁,單擊新增固件。
- 在添加固件對話框中,輸入固件信息,上傳固件文件。
傳入的固件文件是上一步配置設備端OTA升級中生成的.bin文件。
- 在固件列表中,單擊固件對應的驗證固件按鈕,使用測試設備進行固件驗證。
測試設備升級成功後,驗證通過。批量升級功能顯示爲可用狀態。
物聯網平臺支持使用雲監控進行事件監控報警和閾值監控報警。事件監控報警基於物聯網平臺系統限流進行監控和報警;閾值監控報警基於您設置的業務指標數值進行監控和報警。
RAM 和 STS 是阿里雲提供的權限管理系統。
RAM 的主要作用是控制賬號系統的權限。通過使用 RAM,創建、管理子賬號,並通過給子賬號授予不同的權限,控制子賬號對資源的操作權限。
STS 是一個安全憑證(Token)的管理系統,爲阿里雲子賬號(RAM 用戶)提供短期訪問權限管理。通過 STS 來完成對臨時用戶的訪問授權。
RAM 和 STS 解決的一個核心問題是如何在不暴露主賬號的 AccessKey 的情況下,安全地授權他人訪問。因爲一旦主賬號的 AccessKey 被泄露,會帶來極大的安全風險:獲得該賬號 AccessKey 的人可任意操作該賬號下所有的資源,盜取重要信息等。
RAM 提供的是一種長期有效的權限控制機制。通過創建子賬號,並授予子賬號相應的權限,將不同的權限分給不同的用戶。子賬號的 AccessKey 也不能泄露。即使子賬號泄露也不會造成全局的信息泄露。一般情況下,子賬號長期有效。
相對於 RAM 提供的長效控制機制,STS 提供的是一種臨時訪問授權。通過調用 STS,獲得臨時的 AccessKey 和 Token。可以將臨時 AccessKey 和 Token 發給臨時用戶,用來訪問相應的資源。從 STS 獲取的權限會受到更加嚴格的限制,並且具有時間限制。因此,即使出現信息泄露的情況,影響相對較小。
使用 RAM 和 STS 涉及以下基本概念:
- 子賬號:在 RAM 控制檯中,創建的用戶,每個用戶即一個子賬號。創建時或創建成功後,均可爲子賬號生成獨立的 AccessKey。創建後,需爲子賬號配置密碼和權限。使用子賬號,可以進行已獲授權的操作。子賬號可以理解爲具有某種權限的用戶,可以被認爲是一個具有某些權限的操作發起者。
- 角色(Role):表示某種操作權限的虛擬概念,但是沒有獨立的登錄密碼和 AccessKey。子賬號可以扮演角色。扮演角色時,子賬號擁有的權限是該角色的權限。
- 授權策略(Policy):用來定義權限的規則,如允許子賬號用戶讀取或者寫入某些資源。
- 資源(Resource):代表子賬號用戶可訪問的雲資源,如表格存儲所有的 Instance、某個 Instance 或者某個 Instance 下面的某個 Table 等。
子賬號和角色可以類比爲個人和其身份的關係。如,某人在公司的角色是員工,在家裏的角色是父親。同一人在不同的場景扮演不同的角色。在扮演不同角色的時候,擁有對應角色的權限。角色本身並不是一個操作的實體,只有用戶扮演了該角色之後纔是一個完整的操作實體。並且,一個角色可以被多個不同的用戶同時扮演。
爲避免阿里雲賬號的 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 的請求中指定)。將這個憑證發給需要訪問的用戶,該用戶就可以獲得訪問物聯網平臺接口的臨時權限。
雖然 RAM 和 STS 的概念和使用比較複雜,但這是爲了賬號的安全性和權限控制的靈活性而犧牲了部分易用性。
將子賬號和角色分開,主要是爲了將執行操作的實體和代表權限集合的虛擬實體分開。如果某用戶需要使用多種權限,如讀/寫權限,但是實際上每次操作只需要其中的一部分權限,那麼就可以創建兩個角色。這兩個角色分別具有讀或寫權限。然後,創建一個可以扮演這兩個角色的用戶子賬號。當用戶需要讀權限的時候,就可以扮演其中擁有讀權限的角色;使用寫權限的時候同理。這樣可以降低每次操作中權限泄露的風險。而且,通過扮演角色,可以將角色權限授予其他用戶,更加方便了協同使用。
STS 對權限的控制更加靈活。如按照實際需求設置有效時長。但是,如果需要一個長期有效的臨時訪問憑證,則可以只適用 RAM 子賬號管理功能,而無需使用 STS。
MQTT協議是基於PUB/SUB的異步通信模式,不適用於服務端同步控制設備端返回結果的場景。物聯網平臺基於MQTT協議制定了一套請求和響應的同步機制,無需改動MQTT協議即可實現同步通信。物聯網平臺提供API給服務端,設備端只需要按照固定的格式回覆PUB消息,服務端使用API,即可同步獲取設備端的響應結果。
- RRPC:Revert-RPC。RPC(Remote Procedure Call)採用客戶機/服務器模式,用戶不需要了解底層技術協議,即可遠程請求服務。RRPC則可以實現由服務端請求設備端並能夠使設備端響應的功能。
- RRPC 請求消息:雲端下發給設備端的消息。
- RRPC 響應消息:設備端回覆給雲端的消息。
- RRPC 消息ID:雲端爲每次RRPC調用生成的唯一消息ID。
- RRPC 訂閱Topic:設備端訂閱RRPC消息時傳遞的Topic,含有通配符。
-
- RRPC原理
-
- 物聯網平臺收到來自用戶服務器的RRPC調用,下發一條RRPC請求消息給設備。消息體爲用戶傳入的數據,Topic爲物聯網平臺定義的Topic,其中含有唯一的RRPC消息ID。
- 設備收到下行消息後,按照指定Topic格式(包含之前雲端下發的唯一的RRPC消息ID)回覆一條RRPC響應消息給雲端,雲端提取出Topic中的消息ID,和之前的RRPC請求消息匹配上,然後回覆給用戶服務器。
- 如果調用時設備不在線,雲端會給用戶服務器返回設備離線的錯誤;如果設備沒有在超時時間內(8秒內)回覆RRPC響應消息,雲端會給用戶服務器返回超時錯誤。
使用規則引擎,您需要基於Topic編寫SQL處理數據。自定義Topic中數據格式由您自己定義,物聯網平臺不做處理。系統Topic中數據格式由物聯網平臺定義,此時您需要根據平臺定義的數據格式處理數據。本文講述了系統Topic中的數據格式。
通過該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。 |
通過該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 |
數據流轉消息產生時間。 |
通過該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 |
數據流轉消息產生時間。 |
通過該Topic獲得設備創建、刪除、禁用、啓用等消息。
Topic:/sys/{productKey}/{deviceName}/thing/lifecycle
數據格式:
{
"action"
:
"create|delete|enable|disable",
"iotId"
:
"4z819VQHk6VSLmmxxxxxxxxxxee200",
"productKey"
:
"X5eCxxxxEH7",
"deviceName"
:
"5gJtxDVeGAkaEztpisjX",
"deviceSecret"
:
"",
"messageCreateTime"
:
1510292739881
}
參數說明:
參數 |
類型 |
說明 |
action |
String |
|
iotId |
String |
設備在平臺內的唯一標識。 |
productKey |
String |
產品的唯一標識。 |
deviceName |
String |
設備名稱。 |
deviceSecret |
String |
設備密鑰,僅在action爲create時包含。 |
messageCreateTime |
Integer |
消息產生時間戳,單位毫秒。 |
通過該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 |
|
gwIotId |
String |
網關設備在平臺內的唯一標識。 |
gwProductKey |
String |
網關產品的唯一標識。 |
gwDeviceName |
String |
網關設備名稱。 |
devices |
Object |
變更的子設備列表。 |
iotId |
String |
子設備在平臺內的唯一標識。 |
productKey |
String |
子設備產品的唯一標識。 |
deviceName |
String |
子設備名稱 |
messageCreateTime |
Integer |
消息產生時間戳,單位毫秒。 |
在一些場景中網關能夠檢測到子設備,並將檢測到的子設備信息上報。此時可以通過該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 |
子設備名稱。 |
通過該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 |
請求被禁止,由於欠費導致。 |
名詞 |
解釋 |
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)旨在提供一個安全、穩定、高效的連接平臺,幫助開發者低成本、快速地實現“設備-設備”、“設備-用戶應用”、“設備-雲服務”之間可靠、高併發的數據通信。不僅可以實現設備之間的互動、設備的數據上報和配置下發,還可以基於規則引擎和騰訊雲產品打通,方便快捷地實現海量設備數據的存儲、計算以及智能分析。
生命週期管理
支持控制檯對設備進行註冊生產、刪除銷燬等管理能力。還可通過 SDK 工具包,快速操作,提高效率。當前支持 Python、PHP、JAVA 工具包。
設備狀態
全程對設備狀態監控、有效實時獲取狀態變更通知。
分組管理
支持對不同產品下的設備進行分組管理,滿足不同業務場景下對於不同品類設備多級管理的需求。
日誌採集
支持對設備上下行通信日誌、設備消息內容日誌以及設備端調試 SDK 日誌進行採集上報,滿足客戶多業務場景的查詢需求。
設備能發佈和訂閱的 topic 受到權限控制管理,一個產品下的所有設備具備相同的 topic 類權限。對於 MQTT 協議傳輸,支持 QoS=0 和 QoS=1 等消息特性。支持離線消息存儲。藉助規則引擎,可以實現設備之間的快速消息通信能力。
設備影子本質上是一份在服務器端緩存的設備數據(JSON 形式),主要用於保存:
- 設備的當前配置
- 設備的當前狀態
作爲中介,設備影子可以有效實現設備和用戶應用之間的數據雙向同步:
- 對於設備配置,用戶應用不需要直接修改設備,只需要修改服務器端的設備影子,由設備影子同步到設備。即使當時設備不在線,設備上線後仍能從設備影子同步到最新配置。
- 對於設備狀態,設備將狀態上報到設備影子,用戶應用查詢時,只需查詢設備影子即可。這樣可以有效減少設備和服務器端的網絡交互,尤其是低功耗設備。
一個騰訊雲賬號下,最多可以創建2000個產品,每個產品下最多創建200000個設備。一個設備只能隸屬於一個產品。產品名和設備名在同一雲賬號下唯一。
在騰訊物聯網通信,設備能夠發佈和訂閱的 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。
對於 MQTT 的數據傳輸,騰訊物聯網通信支持 QoS=0 或 1,但不支持 QoS=2。基於 MQTT 協議。設備消息支持離線存儲。
設備影子本質上是一份在服務器端緩存的設備數據(JSON 形式),主要用於保存:
- 設備的當前配置
- 設備的當前狀態
作爲中介,設備影子可以有效實現設備和用戶應用之間的數據雙向同步:
- 對於設備配置,用戶應用不需要直接修改設備,只需要修改服務器端的設備影子,由設備影子同步到設備。即使當時設備不在線,設備上線後仍能從設備影子同步到最新配置。
- 對於設備狀態,設備將狀態上報到設備影子,用戶應用查詢時,只需查詢設備影子即可。這樣可以有效減少設備和服務器端的網絡交互,尤其是低功耗設備。
-
-
- OTA升級
-
支持 OTA 固件升級服務,當設備固件有安全隱患或者功能漏洞時,物聯網服務端支持通過 OTA 升級,消除隱患,降低安全風險。
-
-
-
- 實現原理
-
-
固件升級的過程中,需要設備訂閱下面兩個 Topic 來實現與雲端的通信,如下圖所示:
示例:
$ota/report/${productID}/${deviceName}
用於發佈(上行)消息,設備上報版本號及下載、升級進度到雲端
$ota/update/${productID}/${deviceName}
用於訂閱(下行)消息,設備接收雲端的升級消息
-
-
-
- 操作流程
-
-
以 MQTT 爲例,設備的升級流程如下所示:
- 設備上報當前版本號。設備端通過 MQTT 協議發佈一條消息到 Topic
$ota/report/${productID/${deviceName}
,進行版本號的上報,消息爲 json 格式,內容如下:
{
"type": "report_version",
"report":{
"version": "0.1"
}
}
// type
:消息類型
// version
:上報的版本號
- 然後您可以在控制檯上傳固件。
- 在控制檯將指定的設備升級到指定的版本。
- 觸發固件升級操作後,設備端會通過訂閱的 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
:固件大小,單位爲字節
- 設備在收到固件升級的消息後,根據 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
:當前下載進度,百分比
- 當設備下載完固件,設備需要通過 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}
上報升級成功消息,內容如下:
- 設備固件升級完成後,再向 Topic
{
"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 即可 |
騰訊雲 API 的所有接口均通過 HTTPS 進行通信,提供高安全性的通信通道。
支持的 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 請求的請求包大小不得超過32KB。POST 請求使用簽名方法爲 HmacSHA1、HmacSHA256 時不得超過1MB。POST 請求使用簽名方法爲 TC3-HMAC-SHA256 時支持10MB。
均使用UTF-8
編碼。
設備屬性
被如下接口引用:CreateDevice。
名稱 |
類型 |
必選 |
描述 |
Tags |
Array of DeviceTag |
否 |
屬性列表 |
批量發消息請求
被如下接口引用:CreateTask。
名稱 |
類型 |
必選 |
描述 |
Topic |
String |
是 |
消息發往的主題。爲 Topic 權限中去除 ProductID 和 DeviceName 的部分,如 “event” |
Payload |
String |
是 |
消息內容 |
批量更新設備影子任務
名稱 |
類型 |
必選 |
描述 |
Desired |
String |
是 |
設備影子的期望狀態,格式爲 Json 對象序列化之後的字符串 |
代理訂閱信息
名稱 |
類型 |
必選 |
描述 |
ProductId |
String |
是 |
產品ID |
DeviceName |
String |
是 |
設備名 |
設備詳細信息
名稱 |
類型 |
描述 |
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 |
首次上線時間 |
LastOfflineTime |
Integer |
最近下線時間 |
CreateTime |
Integer |
設備創建時間 |
LogLevel |
Integer |
設備日誌級別 |
CertState |
Integer |
設備證書獲取狀態, 1 已獲取過設備密鑰,0 未獲取過設備密鑰 |
EnableState |
Integer |
設備可用狀態,0禁用,1啓用 |
設備屬性
名稱 |
類型 |
必選 |
描述 |
Tag |
String |
是 |
屬性名稱 |
Type |
Integer |
是 |
屬性值的類型,1 int,2 string |
Value |
String |
是 |
屬性的值 |
描述鍵值對過濾器,用於條件過濾查詢。例如過濾ID、名稱、狀態等
名稱 |
類型 |
必選 |
描述 |
Name |
String |
是 |
過濾鍵的名稱 |
Values |
Array of String |
是 |
一個或者多個過濾值 |
創建設備時返回的設備信息
名稱 |
類型 |
描述 |
DeviceName |
String |
設備名 |
DevicePsk |
String |
對稱加密密鑰,base64 編碼,採用對稱加密時返回該參數 |
DeviceCert |
String |
設備證書,採用非對稱加密時返回該參數 |
DevicePrivateKey |
String |
設備私鑰,採用非對稱加密時返回該參數,騰訊云爲用戶緩存起來,其生命週期與任務生命週期一致 |
Result |
Integer |
錯誤碼 |
ErrMsg |
String |
錯誤信息 |
產品詳細信息
名稱 |
類型 |
描述 |
ProductId |
String |
產品ID |
ProductName |
String |
產品名 |
ProductMetadata |
產品元數據 |
|
ProductProperties |
產品屬性 |
產品元數據
名稱 |
類型 |
描述 |
CreationDate |
Integer |
產品創建時間 |
產品屬性
名稱 |
類型 |
必選 |
描述 |
ProductDescription |
String |
否 |
產品描述 |
EncryptionType |
String |
否 |
加密類型,1表示證書認證,2表示簽名認證。如不填寫,默認值是1 |
Region |
String |
否 |
產品所屬區域,目前只支持廣州(gz) |
ProductType |
Integer |
否 |
產品類型,各個類型值代表的節點-類型如下: |
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 |
否 |
RegisterType爲2時,設備動態創建的限制數量 |
任務描述細節
名稱 |
類型 |
必選 |
描述 |
UpdateShadowTask |
否 |
批量更新影子任務的描述細節,當 taskType 取值爲 “UpdateShadow” 時,此字段必填。描述見下 BatchUpdateShadow |
|
PublishMessageTask |
否 |
批量下發消息任務的描述細節,當 taskType 取值爲 “PublishMessage” 時,此字段必填。描述見下 BatchPublishMessage |
任務列表詳細信息
名稱 |
類型 |
描述 |
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 |
返回的錯誤信息 |
創建規則請求包體
名稱 |
類型 |
必選 |
描述 |
Sql |
String |
是 |
規則的SQL語句,如: SELECT * FROM 'pid/dname/event',然後對其進行base64編碼,得:U0VMRUNUICogRlJPTSAncGlkL2RuYW1lL2V2ZW50Jw== |
Actions |
String |
否 |
行爲的JSON字符串,大部分種類舉例如下: |
Description |
String |
否 |
規則描述 |
RuleDisabled |
Boolean |
否 |
是否禁用規則 |
名詞 |
描述 |
開發中心 |
是基於設備管理服務提供的物聯網一站式開發工具,幫助開發者快速進行Profile(產品模型)和編解碼插件的開發,同時提供在線自助測試、產品發佈等多種能力,端到端指引物聯網開發,幫助開發者提升集成開發效率、縮短物聯網解決方案建設週期。 |
產品中心 |
產品中心爲客戶展示通過華爲IoT生態認證的解決方案、終端產品、模組等商用產品,並與全球IoT商用平臺聯網,實現產品一點接入,全球可達,幫助客戶縮短商業變現週期,降低商業風險。 |
項目 |
指物聯網平臺的資源空間。開發者在基於開發者中心進行物聯網開發時,需要根據行業屬性創建獨立的項目,並在該項目空間內建設物聯網產品和應用。 |
產品 |
某一類具有相同能力或特徵的設備的集合稱爲一款產品。除了設備實體,產品還包含該類設備在物聯網能力建設中產生的產品信息、產品模型(Profile)、插件、測試報告等資源。 |
產品模型 |
產品模型(也稱Profile)用於描述設備具備的能力和特性。開發者通過定義Profile,在物聯網平臺構建一款設備的抽象模型,使平臺理解該款設備支持的服務、屬性、命令等信息。 |
服務 |
產品模型的一部分,描述設備具備的業務能力。將設備業務能力拆分成若干個服務後,再定義每個服務具備的屬性、命令以及命令的參數。 |
屬性 |
產品模型的一部分,一般用於描述設備運行時的狀態,如環境監測設備所讀取的當前環境溫度等。 |
編解碼插件 |
物聯網平臺和應用服務器使用JSON格式進行通信,所以當設備使用二進制格式上報數據時,開發者需要在物聯網平臺上開發編解碼插件,幫助物聯網平臺完成二進制格式和JSON格式的轉換。 |
應用 |
物聯網平臺中,應用包括用戶在物聯網平臺上創建的應用和用戶自行開發的應用服務器。
|
設備 |
歸屬於某個產品下的設備實體,每個設備具有一個唯一的標識碼。設備可以是直連物聯網平臺的設備,也可以是代理子設備連接物聯網平臺的網關。 |
網關 |
具有子設備管理功能,並代理子設備連接物聯網平臺的設備實體。 |
子設備 |
不與IoT平臺直連,通過網關連接物聯網平臺的設備實體。 |
邊緣節點 |
是物聯網的邊緣“小腦”,在靠近物或數據源頭的邊緣側,融合網絡、計算、存儲、應用核心能力的開放平臺,就近提供計算和智能服務,滿足行業在實時業務、應用智能、安全與隱私保護等方面的基本需求。 |
模組 |
又稱通信模組,由若干個顯示模塊、驅動電路、控制電路、芯片以及相應的結構件構成的一個獨立的顯示單元,設備通過通信模組具備與物聯網平臺的通信能力。當前模組廠商主要提供Wifi、NB-IoT、2/3/4/5G等通信模組。 |
固件 |
固件(Firmware)一般是指設備硬件的底層“驅動程序”,承擔着一個系統最基礎最底層工作的軟件,比如計算機主板上的基本輸入/輸出系統BIOS(Basic Input/output System)。 固件升級又稱爲FOTA(Firmware Over The Air),是指用戶可以通過OTA的方式對支持LWM2M協議的設備進行固件升級,升級協議爲LWM2M協議。 |
軟件 |
軟件(Software)一般分爲系統軟件和應用軟件,系統軟件實現設備最基本的功能,比如編譯工具、系統文件管理等;應用軟件可以根據設備的特點,提供不同的功能,比如採集數據、數據分析處理等。 軟件升級又稱爲SOTA(SoftWare Over The Air),是指用戶可以通過OTA的方式支持對LWM2M協議的設備進行軟件升級,升級協議爲PCP協議。 |
PCP協議 |
平臺升級協議(PCP協議)規定了設備和平臺之間升級的通信內容與格式,用於實現設備的升級。 |
nodeId |
設備唯一物理標識,如IMEI、MAC地址等,用於設備在接入物聯網平臺時攜帶該標識信息完成註冊鑑權。 |
deviceId |
設備ID,用於唯一標識一個設備,在註冊設備時由物聯網平臺分配獲得,是設備在IoT平臺上的內部標識,用於設備註冊鑑權,及後續在網絡中通過deviceId進行消息傳遞。 |
預置密鑰 |
當NB-IoT設備、集成Agent Lite SDK的設備接入時,預置密鑰用於設備和物聯網平臺之間的傳輸通道安全加密。 |
密鑰 |
用於設備採用原生MQTT協議接入物聯網平臺時的鑑權認證。 |
數字證書 |
由國際知名的證書機構VeriSign、Symantec和GlobalSign等CA(Certification Authority)機構進行簽發,用於HTTPS建鏈時服務端和客戶端之間的身份合法性驗證。 |
token |
鑑權參數,訪問物聯網平臺API接口的憑證。應用服務器首次訪問物聯網平臺的開放API時,需調用鑑權接口完成認證鑑權,獲取accessToken。 |
羣組 |
羣組是一系列設備的集合,用戶可以對應用下所有設備,根據區域、類型等不同規則進行分類建立羣組,以便處理對海量設備的批量管理和操作。 |
標籤 |
物聯網平臺支持定義不同的標籤,並對設備打標籤,通過標籤,可以快速篩選設備。 |
訂閱推送 |
訂閱:是指應用服務器通過調用物聯網平臺的API接口,向平臺獲取發生變更的設備業務信息(如設備註冊、設備數據上報、設備狀態等)和管理信息(軟固件升級狀態和升級結果)。 推送:是指訂閱成功後,物聯網平臺根據應用服務器訂閱的數據類型,將對應的變更信息推送給指定的URL地址。 |
Topic |
Topic是UTF-8字符串,是發佈/訂閱(Pub/Sub)消息的傳輸中介。可以向Topic發佈或者訂閱消息。 |
設備影子 |
設備影子是一個JSON文件,用於存儲設備的在線狀態、設備最近一次上報的設備屬性、應用服務器期望下發的配置(期望值)。每個設備有且只有一個設備影子,設備可以獲取和設置設備影子以此來同步狀態,這個同步可以是影子同步給設備,也可以是設備同步給影子。 |
規則引擎 |
物聯網平臺根據用戶設置的規則和設備上報的數據,當設備滿足設置的條件時,即觸發對應動作,給設備下發命令或將數據轉發給公有云其他服務進行進一步整合利用。包含設備聯動和數據轉發兩種類型。 |
NB-IoT |
窄帶物聯網(Narrow Band Internet of Things, NB-IoT)是IoT領域的一個重要技術。NB-IoT構建於蜂窩網絡,只消耗大約180kHz的帶寬,可直接部署於GSM網絡、UMTS網絡或LTE網絡,以降低部署成本、實現平滑升級。其具有覆蓋廣、連接多、速率低、成本低、功耗低、架構優等特點,可以廣泛應用於多種垂直行業,如遠程抄表、智慧農業等。 |
MQTT |
MQTT(Message Queue Telemetry Transport)是一個物聯網傳輸協議,被設計用於輕量級的發佈/訂閱式消息傳輸,旨在爲低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。 MQTTS指MQTT+SSL/TLS,在MQTTS中使用SSL/TLS協議進行加密傳輸。 |
CoAP |
受約束的應用協議CoAP(Constrained Application Protocol)是一種軟件協議,旨在使非常簡單的電子設備能夠在互聯網上進行交互式通信。 CoAPS指CoAP over DTLS,在CoAPS中使用DTLS協議進行加密傳輸。 |
LWM2M |
LWM2M(lightweight Machine to Machine)是由OMA(Open Mobile Alliance)定義的物聯網協議,主要使用在資源受限(包括存儲、功耗等)的NB-IoT終端。 |
華爲OceanConnect 物聯網平臺(簡稱物聯網平臺)提供海量設備的接入和管理,配合華爲雲其他產品同時使用,幫助快速構築物聯網應用。
當用戶在開通設備管理服務時,系統默認一起開通設備接入服務,即用戶在使用設備管理服務時,包含設備接入服務的能力。
物聯網平臺支持終端設備直接接入,也可以通過工業網關或者家庭網關接入;支持多網絡接入、多協議接入、系列化Agent接入,解決設備接入複雜多樣化和碎片化難題;提供基礎的設備管理功能,實現設備的快速接入。
功能 |
簡介 |
多網絡接入 |
支持有線和無線的接入方式,如固定寬帶、2G/3G/4G/5G、NB-IoT、Z-Wave、ZigBee、eLTE等。詳細請參見設備集成引導。 |
多協議接入 |
支持設備通過LWM2M、CoAP、MQTT(S)等協議接入。詳細請參見設備集成引導。 |
系列化Agent接入 |
支持Agent Lite和Agent Tiny,覆蓋的語言包括C、Java、Android。Agent與海思、高通主流芯片、模組預集成,縮短TTM。詳細請參見設備集成引導。 |
設備雙向通信 |
物聯網平臺提供設備數據採集功能,例如設備業務數據、設備告警,同時支持應用對設備數據的訂閱。詳細請參見訂閱推送。 支持通過應用服務器或控制檯以下發命令的方式,將命令下發到設備,達到平臺對設備遠程控制的效果。詳細請參見命令下發。 |
應用對接 |
物聯網平臺開放了海量的API接口和SDK,幫助開發者快速孵化行業應用。詳細查看應用對接指引。 |
設備影子 |
設備影子是一個JSON文檔,用於存儲設備的狀態、設備最近一次上報的設備屬性、應用服務器期望下發的配置。每個設備有且只有一個設備影子,設備可以獲取和設置設備影子以此來同步狀態,這個同步可以是影子同步給設備,也可以是設備同步給影子。詳細請參見設備影子。 |
數據轉發規則 |
數據轉發規則是規則引擎的一種,用於將物聯網平臺接收的設備數據,轉發到華爲公有云的其它服務進行數據分析、存儲等。詳細請參見規則引擎。 |
設備實時狀態監控 |
物聯網平臺實時監控設備的狀態,包括在線、離線、未激活,實時獲取狀態變更通知。詳細請參見設備監控。 |
審計日誌 |
控制檯對所有物聯網平臺的使用人員的操作日誌、安全日誌(登錄、登出、密碼修改等)進行記錄,便於日誌分析和故障定位。詳細請參見設備監控。 |
設備管理在設備接入基礎上,提供了更豐富完備的設備管理能力,簡化海量設備管理複雜性,節省人工操作,提升管理效率。
功能 |
簡介 |
產品模型定義 |
用於定義一款接入設備所具備的屬性(如顏色、大小、採集的數據、可識別的指令或者設備上報的事件等信息),然後通過廠家、設備類型和設備型號,唯一標識一款設備,便於平臺識別。產品模型可通過開發中心進行無碼化開發。詳細請參見產品模型。 |
設備訪問授權 |
支持將設備的管理權限授權給其他應用,便於同一個用戶管理多個應用的設備。詳情請參見授權訪問。 |
數據持久化存儲 |
提供設備上報數據的存儲,可按照時、天等維度查看設備上報的歷史數據。歷史數據最多存儲7天。詳情請參見數據上報。 |
設備聯動規則 |
設備聯動規則是規則引擎的一種,通過設置一個規則的觸發條件(如溫度閾值、時間等),在滿足觸發條件時,物聯網平臺會觸發一個指令來使設備執行一個操作(如上報信息、打開設備開關、上報告警等)。詳細請參見規則引擎。 |
告警管理 |
支持管理通過規則引擎裏定義觸發的設備告警,包括查看告警詳情和恢復告警。詳細請參見設備監控。 |
設備分組及標籤 |
支持對設備進行羣組和標籤管理,通過有效分組和批量管理,減輕設備管理成本。詳細請參見羣組與標籤。 |
設備批操作 |
|
設備遠程診斷 |
支持遠程進行設備的運行日誌收集、重啓模組操作。詳細請參見遠程診斷。 |
設備配置更新 |
支持通過應用服務器或控制檯以下發命令的方式,對設備的屬性值進行更新。詳細請參見設備配置更新。 |
設備OTA升級 |
支持通過OTA(Over the Air)的方式,對終端設備進行軟件、硬件的升級操作,並通過軟固件升級策略管理(羣組、升級時間、併發數控制等),有效提升升級靈活性。詳細請參見固件升級、軟件升級。 |
報表統計 |
在控制檯上提供了豐富的報表功能,方便用戶查看應用和設備的使用情況。詳細請參見設備監控。 |
- 物聯網平臺作爲消息接收方時,已默認訂閱了相關Topic,設備只要向對應Topic發送消息,物聯網平臺就可以接收。
- 設備作爲消息接收方時,需要先訂閱相關Topic,這樣物聯網平臺向對應Topic發送消息時,設備才能接收到。設備需要根據具體實現的業務來決定訂閱哪些Topic。
Topic |
消息發送方 (Publisher) |
消息接收方 (Subscriber) |
說明 |
/huawei/v1/devices/{deviceId}/data/{codecMode} |
設備 |
物聯網平臺 |
設備向物聯網平臺上報數據。
|
/huawei/v1/devices/{deviceId}/command/{codecMode} |
物聯網平臺 |
設備 |
設備接收物聯網平臺下發的命令。
|
當設備完成和物聯網平臺對接後,一旦設備上電,設備基於在設備上定義的業務邏輯進行數據採集和上報,可以是基於週期或者事件觸發。數據上報到物聯網平臺後,設備接入服務和設備管理服務提供的能力有區別,如下:
- 僅開通設備接入服務:對設備上報的數據不進行解析和存儲,通過數據轉發規則轉發到華爲雲其他雲服務上進行存儲和處理(若設備採用二進制上報數據,則平臺進行碼流base64封裝後再轉發),然後通過其他雲服務的控制檯或者API接口進行進一步的數據處理。
- 設備管理服務(默認開通設備接入服務):
- 如果數據上報格式爲二進制碼流,則平臺通過編解碼插件對設備數據進行解析(如果是JSON格式,則無需編解碼插件),解析後的數據上報給設備管理服務。
- 根據在控制檯上創建應用時的配置來定義是否存儲歷史數據,如果設置爲存儲,則平臺最長存儲7天。應用服務器可以通過調用北向接口訂閱設備相關的數據,物聯網平臺也可以通過數據轉發規則轉發到華爲雲其他雲服務上進行存儲和處理。然後通過其他雲服務的控制檯或者API接口進行進一步的數據處理。
- 對於採用LWM2M協議的設備,設備上報的設備的在線狀態、設備最近一次上報的設備屬性值會存儲在設備影子裏,應用服務器只需要查詢設備影子中存儲的數據,即可獲取設備最新上報的設備數據和設備狀態。
-
-
- 命令下發
- 概述
- 命令下發
-
爲能有效地對設備進行管理,設備的產品模型中定義了物聯網平臺可向設備下發的命令,應用服務器可以調用物聯網平臺開放的API接口向單個設備或批量設備下發命令,或者用戶通過物聯網平臺直接向單個設備下發命令,以實現對設備的遠程控制。
物聯網平臺有兩種命令下發機制,如下表所示。
命令下發機制 |
定義 |
適用場景 |
LWM2M/CoAP協議設備 |
集成Agent Lite SDK設備/原生MQTT設備 |
立即下發 |
不管設備是否在線,平臺收到命令後立即下發給設備。如果設備不在線或者設備沒收到指令則下發失敗。支持給本應用的設備和被授予權限的其它應用的設備下發命令。 |
立即下發適合對命令實時性有要求的場景,比如路燈開關燈,燃氣表開關閥。使用立即下發時,命令下發的時機需要由應用服務器來保證。 |
建議用戶使用緩存下發模式,工作模式設置爲PSM模式(系統默認值)。 如需使用立即下發模式(工作模式設置爲DRX或eDRX模式),需要在設備上報數據後立即下發命令才能成功。 |
適用 |
緩存下發 |
物聯網平臺在收到命令後先緩存,等設備上線或者設備上報數據時再下發給設備,如果單個設備存在多條緩存命令,則進行排隊串行下發。支持給本應用的設備和被授予權限的其它應用的設備下發命令。 |
緩存下發適合對命令實時性要求不高的場景,比如配置水錶的參數。 |
適用。工作模式設置爲PSM模式(系統默認值)。 |
不適用 |
-
-
-
- 業務流程
-
-
LWM2M/CoAP協議設備場景
物聯網平臺提供立即下發和緩存下發兩種機制。應用服務器向物聯網平臺下發命令時,攜帶參數expireTime(簡稱TTL,表示最大緩存時間)。如果不帶expireTime,則默認expireTime爲48小時。
- expireTime=0:命令立即下發。
- expireTime>0:命令緩存下發。
圖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
}
- 物聯網平臺調用編解碼插件對命令請求進行編碼後,會通過LWM2M協議定義的設備管理和服務實現接口的Execute操作下發命令,消息體爲二進制格式。
- 物聯網平臺嚮應用返回201 Created,攜帶命令狀態爲SENT。(如果設備不在線或者設備沒收到指令則下發失敗,命令狀態爲FAIL)
- 設備收到命令後返回ACK響應。
- 若應用下發命令時攜帶了"callbackUrl",物聯網平臺通過命令狀態變化通知接口推送消息給應用,攜帶命令狀態爲DELIVERED。消息樣例如下:
Method: POST
request:
Body:
{
"deviceId": "6543214c-72bb-4131-9e14-fad974123456",
"commandId": "108a9c71462a48e09426e06e844d47ba3",
"result": {
"resultCode": "DELIVERED",
"resultDetail": null
}
}
- 設備執行命令後通過205 Content響應返回命令執行結果。
- 若應用下發命令時攜帶了"callbackUrl",物聯網平臺會調用編解碼插件對設備響應進行解碼,然後通過命令狀態變化通知接口推送消息給應用,攜帶命令狀態爲SUCCESSFUL。消息樣例如下:
Method: POST
request:
Body:
{
"deviceId": "6543214c-72bb-4131-9e14-fad974123456",
"commandId": "108a9c71462a48e09426e06e844d47ba",
"result": {
"resultCode": "SUCCESSFUL",
"resultDetail": null
}
}
物聯網平臺提供設備配置更新功能,即用戶可通過控制檯對單個設備或批量設備的設備屬性值進行修改,滿足用戶頻繁、快捷、方便的管理設備的訴求。比如,某路燈最初設置溫度屬性達到A攝氏度時上報告警,用戶需要修改該屬性值爲B攝氏度,即可修改其配置文件,然後通過控制檯上傳到物聯網平臺,以實現配置更新。
- 針對LWM2M協議設備的設備配置更新,物聯網平臺提供了設備影子功能,將修改設備的屬性信息存儲在設備影子中,待設備上線或上報數據時,將修改的設備屬性值同步給設備,從而完成設備屬性的修改。
- 針對原生MQTT協議接入或集成Agent Lite SDK的設備,物聯網平臺直接配置更新下發,修改設備的設備屬性值。
物聯網平臺支持創建設備的“影子”。設備影子是一個JSON文件,用於存儲設備的在線狀態、設備最近一次上報的設備屬性值、應用服務器期望下發的配置。每個設備有且只有一個設備影子,設備可以獲取和設置設備影子以此來同步設備屬性值,這個同步可以是影子同步給設備,也可以是設備同步給影子。
設備影子上有desired區和report區。
- desired區用於存儲對設備屬性的配置,即期望值。當需要修改設備的服務屬性值時,可修改設備影子的desired屬性值,設備在線時,desired屬性值立即同步到設備。如果設備不在線,待設備上線或上報數據時,desired屬性值同步到設備。
- report區用於存儲設備最新上報的設備屬性值,即上報值。當設備上報數據時,平臺刷新report屬性值爲設備上報的設備屬性值。
-
-
- OTA升級
-
固件(Firmware)一般是指設備硬件的底層“驅動程序”,承擔着一個系統最基礎最底層工作的軟件,比如計算機主板上的基本輸入/輸出系統BIOS(Basic Input/output System)。
固件升級又稱爲FOTA(Firmware Over The Air),是指用戶可以通過OTA的方式對支持LWM2M協議的設備進行固件升級(基於MQTT協議的設備的固件升級能力即將上線,敬請期待),固件升級協議爲LWM2M協議。FOTA流程如下圖所示:
FOTA升級流程的詳細說明:
1~2. 用戶在設備管理服務的控制檯上傳固件包,並在控制檯或者應用服務器上創建固件升級任務。
3. NB-IoT設備上報數據,平臺感知設備上線,觸發升級協商流程。
4~5. 物聯網平臺向設備下發查詢設備固件版本的命令,查詢成功後,物聯網平臺根據升級的目標版本判斷設備是否需要升級。
- 如果返回的固件版本信息與升級的目標版本信息相同,則升級流程結束,不做升級處理。
- 如果返回的固件版本信息與升級的目標版本信息不同,則繼續進行下一步的升級處理。
6~7. 物聯網平臺查詢終端設備所在的無線信號覆蓋情況,獲取小區ID、RSRP(Reference Signal Received Power,參考信號接收功率)和SINR(Signal 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個相同情況的設備進行固件升級。
- 如果查詢失敗:則升級失敗。
10~11. 物聯網平臺向設備下發下載固件包的URL地址,通知設備下載固件包。終端設備根據該URL地址下載固件包,固件包的下載支持分片下載,下載完成後,設備知會物聯網平臺固件包已下載完畢。
12~13. 物聯網平臺向設備下發升級的命令,終端設備進行升級操作,升級完成後終端設備向物聯網平臺反饋升級結束。
14~16. 物聯網平臺下發命令查詢固件升級的結果,獲取升級結果後,向終端設備取消訂閱升級狀態通知,並向控制檯應用服務器通知升級的結果。
設備註冊鑑權是指物聯網平臺對接入平臺的設備進行註冊鑑權。對於不同接入方式的設備,註冊鑑權方式不同。
接入類型 |
註冊鑑權方式 |
使用LWM2M/CoAP協議接入的設備 |
在設備接入物聯網平臺前,用戶通過應用服務器調用註冊設備(驗證碼方式)接口或通過控制檯在物聯網平臺註冊設備,並把設備的唯一標識碼nodeId(如IMEI)設置爲設備接入平臺的驗證碼。在設備接入物聯網平臺時攜帶設備唯一標識,完成設備的接入鑑權。 當採用DTLS/DTLS+傳輸層安全協議接入時,即設備爲安全設備時,通過預置密鑰進行設備和物聯網平臺之間的傳輸通道安全加密。如圖所示。 |
集成Agent Lite SDK的設備 |
在設備接入物聯網平臺前,用戶通過應用服務器調用註冊設備(驗證碼方式)接口或通過控制檯在物聯網平臺註冊設備,並把設備的唯一標識碼nodeId(如IMEI)設置爲設備接入平臺的驗證碼,平臺返回設備ID。當設備上電時,攜帶nodeId等進行平臺綁定,並返回設備ID和密鑰。當綁定後設備重新登錄時,攜帶設備ID和密鑰完成網關的接入鑑權。如圖所示。 如果設備是網關,網關下有子設備,則當網關接入物聯網平臺後,在網關上通過調用Agent Lite的添加非直連設備接口,完成子設備的接入,具體請參見網關與子設備。 |
使用原生MQTT協議接入的設備 |
在設備接入物聯網平臺前,用戶通過應用服務調用註冊設備(密碼方式)接口或通過控制檯在物聯網平臺註冊設備,獲取設備ID和密鑰,並把設備ID和密鑰燒錄到設備中。在設備接入物聯網平臺時攜帶設備ID和密鑰、或者nodeId和密鑰,通過一機一密的方式,完成設備的接入鑑權。 |
-
-
- 設備上報數據
- 接口說明
- 設備上報數據
-
設備向物聯網平臺上報數據。
-
-
-
- Topic
-
-
Topic |
/huawei/v1/devices/{deviceId}/data/{codecMode} |
消息發送方 |
設備 |
消息接收方 |
物聯網平臺 |
-
-
-
- 參數說明
-
-
參數 |
必選/可選 |
類型 |
描述 |
msgType |
必選 |
String |
固定值“deviceReq”,表示設備上報數據。 |
data |
必選 |
List<ServiceData> |
要上報的設備數據。 |
參數 |
必選/可選 |
類型 |
描述 |
serviceId |
必選 |
String |
設備服務的ID。 |
serviceData |
必選 |
ObjectNode |
一個服務下的屬性數據,具體字段在設備的產品模型中定義。 |
eventTime |
可選 |
String |
設備採集數據的UTC時間(格式:yyyyMMddTHHmmssZ),如:20161219T114920Z。 設備上報數據不帶該參數或參數格式錯誤時,則數據上報時間以物聯網平臺時間爲準。 |
-
-
-
- 示例
-
-
設備向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"
}
]
}
-
-
- 設備接收命令
- 接口說明
- 設備接收命令
-
設備接收物聯網平臺下發的控制命令。
-
-
-
- Topic
-
-
Topic |
/huawei/v1/devices/{deviceId}/command/{codecMode} |
消息發送方 |
物聯網平臺 |
消息接收方 |
設備 |
-
-
-
- 參數說明
-
-
參數 |
必選/可選 |
類型 |
描述 |
msgType |
必選 |
String |
固定值“cloudReq”,表示平臺下發的請求。 |
serviceId |
必選 |
String |
設備服務的ID。 |
cmd |
必選 |
String |
命令名稱,在設備的產品模型中定義。 |
paras |
必選 |
ObjectNode |
命令參數,具體字段在設備的產品模型中定義。 |
mid |
必選 |
Integer |
命令ID,物聯網平臺內部分配(範圍1-65535),設備響應平臺命令時,需要返回該值。 |
-
-
-
- 示例
-
-
設備先訂閱Topic後才能收到命令推送,設備接收到的payload:
{
"msgType": "cloudReq",
"serviceId": "******",
"mid": 1,
"cmd": "LEVEL",
"paras": {
"value": 4
}
}
-
-
- 設備響應命令
- 接口說明
- 設備響應命令
-
設備對物聯網平臺控制命令的應答。
-
-
-
- Topic
-
-
Topic |
/huawei/v1/devices/{deviceId}/data/{codecMode} |
消息發送方 |
設備 |
消息接收方 |
物聯網平臺 |
-
-
-
- 參數說明
-
-
參數 |
必選/可選 |
類型 |
描述 |
msgType |
必選 |
String |
固定值“deviceRsp”,表示設備的應答消息。 |
mid |
必選 |
Integer |
命令ID,把物聯網平臺下發命令時攜帶的“mid”返回給平臺。 |
errcode |
必選 |
Integer |
命令執行的結果碼。
|
body |
可選 |
ObjectNode |
命令的應答,具體字段在設備的產品模型中定義。 |
-
-
-
- 示例
-
-
設備向Topic發送的payload:
{
"msgType": "deviceRsp",
"mid": 1,
"errcode": 0,
"body": {
"result": 0
}
}
名詞 |
解釋 |
產品 |
產品是開發者在平臺註冊創建的智能硬件型號,比如“小米空氣淨化器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技術、新零售渠道等小米特色優質資源,與合作伙伴一起打造極致的物聯網體驗。
智能硬件直連接入,是指通過對設備硬件的開發來接入小米IoT開發者平臺的接入方式。
智能硬件直連接入有兩種具體的方式,包括硬件中嵌入小米智能模組和硬件中集成設備SDK。
硬件中嵌入小米智能模組:適合於自帶MCU的、控制功能相對簡單的智能硬件。小米智能模組中已內置標準的設備SDK,且將功能接口封裝爲串口通信指令格式,開發者可直接將MCU和小米智能模組對接,MCU按照標準格式通過串口向模組上報或拉取數據。
硬件中集成設備SDK:適合於帶操作系統的、控制功能相對複雜的智能硬件;也適合無MCU、直接在模組中開發功能的智能硬件。設備SDK中包含多種基本功能,開發者只需調用接口並實現硬件自身的功能邏輯即可。
-
-
- 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-level)type依舊不變(這是一個在版本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
企業在正式使用平臺前,建議先行了解平臺上與企業相關的兩類角色:
個人開發者:用小米賬號登錄,賬號在平臺進行郵箱驗證和用戶個人信息登記後,即可成爲平臺的個人開發者。
企業開發組:企業需要在平臺以企業身份註冊並經平臺審覈通過後,即可成爲平臺的企業開發組。
個人開發者是平臺上的操作主體,但需要創建企業開發組或被企業開發組添加爲成員,纔可有權限操作平臺各項功能。
企業開發組由某個個人開發者發起申請,申請通過後,負責申請的個人開發者即成爲該企業開發者的擁有者,其他個人開發者可以被添加到該企業開發組的成員中,進行協助管理、開發、運營等操作。
接口:
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}]}
“推送開關”功能實現相關接口:
設置插件推送開關的狀態值
接口: /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",
}