1. 程式人生 > >國內物聯網平臺初探(二) ——阿裏雲物聯網套件

國內物聯網平臺初探(二) ——阿裏雲物聯網套件

black pps 協議方法 size 20px 安全認證 合法性 時間 payload

架構

技術分享

數據通道

為設備和物聯網應用程序提供發布和接收消息的安全通道。數據通道目前支持CCP協議和MQTT協議。

  • 用戶可以基於CCP協議實現Pub/Sub異步通信,也可以使用遠程調用(RPC)的通信模式實現設備端與雲端的通信。
  • 用戶也可以基於開源協議MQTT協議連接阿裏雲IoT,實現Pub/Sub異步通信。

安全認證&權限策略

為每個設備頒發阿裏雲IoT的憑證,依賴憑證才能連接阿裏雲IoT。

  • 提供設備級的授權粒度,任何設備必須經過授權才能對某個Topic發布訂閱消息
  • 服務端也需要經過授權才能操作其他賬號下的Topic

設備共享平臺

  • 提供Topic跨賬號的授權,幫助用戶實現跨廠商的數據共享,進而實現更加豐富智能的場景。

規則引擎

  • 為用戶提供類SQL語言的規則引擎,幫助用戶過濾數據、處理數據,並能夠發送數據到阿裏雲其他服務,例如RDS,OTS,ONS等等,也能夠發送到數據到其他Topic。

設備快照(待上線)

  • 保存設備的最新狀態或者APP希望的最新狀態在雲端,然後當設備或APP連接上來時,同步狀態給設備或APP。

應用場景

  • 設備端實時請求雲端
    • 物聯網設備調用雲端服務需要返回結果給設備,方便設備作相應處理。例如用戶通過智能音箱調用雲端語音解析服務,設備可以實時得到解析結果做處理。
  • 雲端實時請求設備端
    • 開發者通過雲端控制設備時,需要知道控制有沒有成功,例如請求打開燈,用戶需要得知燈是否打開,這就需要設備端返回結果給雲端
  • 設備端與雲端的異步請求
    • 有很多物聯網設備之間有互聯互通的需求。例如家裏的門打開之後,燈和空調就打開。這種場景就可以基於阿裏雲物聯網套件實現,將門的打開這個消息Pub到某個Topic,然後燈以及空調Sub該Topic得到的門打開的消息作相應的處理。
  • 跨廠商設備互聯互通
    • 不同廠商的設備具有互聯互通的需求,例如A廠商的手環通過檢測用戶的身體狀態來控制B廠商的空氣凈化器以及C廠商的空調。

功能

  • 設備接入
    • 快速接入:提供設備端SDK,方便客戶快速連接阿裏雲IoT數據通道
    • 安全接入:提供設備端安全的認證方法,確保設備在雲端的安全以及合法性
  • 雲端服務
    • 消息轉發:消息路由轉發,實現M2M、端到雲、雲到端等多樣化消息互通場景
    • 設備授權:提供設備級的權限粒度,保證消息的安全性
    • 規則引擎:提供規則引擎,與其它阿裏雲產品無縫銜接,快捷的構建IoT應用
  • 互聯互通
    • 提供Topic跨賬號的授權,幫助廠商實現與不同廠商的設備互聯互通,開發豐富多彩的IoT應用

名詞解釋

概念

描述

產品

同類設備的集合,方便管理設備

AppKey

阿裏雲IoT為產品頒發的唯一標識

AppSecret

阿裏雲IoT為產品頒發的產品密鑰,和AppKey成對出現

設備ID

對應的英文名稱:DeviceId。阿裏雲IoT為設備頒發的唯一標識

設備秘鑰

對應的英文名稱:DeviceSecret。阿裏雲IoT為設備頒發的設備秘鑰,和設備ID成對出現

RPC

設備端向雲端發送數據協議,這只適用CCP協議接入的設備

RRPC

由雲端發起,但是期望設備端響應的數據交互協議,這只適用CCP協議接入的設備

Topic

用作消息的路由轉發,例如設備A將消息發布到Topic:123中,設備B可以訂閱Topic:123得到消息。CCP協議和MQT協議都支持

發布

對應的英文名稱:Pub。設備端的發布協議,操作Topic的權限,意思是具有往Topic中發布消息的權限

訂閱

對應的英文名稱:Sub。設備端的訂閱協議,操作Topic的權限,意思是具有從Topic中訂閱消息的權限

阿裏雲物聯網套件限制

限制類別

描述

產品個數

目前限制產品個數上限是10個

添加設備

目前只能在控制臺上添加設備,而且單次操作添加不能5萬,單個產品不能超過1億

設備數據上報地址

目前只能支持本賬號下的ECS或SLB的IP地址訪問以及ACE的域名訪問

Topic的長度

不能超過128字節

CCP協議包大小

不能超過256K

MQTT協議包大小

不能超過256K

設備授權操作

不能超過50個

授權操作

1.單個設備端不能對帶有通配符的Topic進行發布或者訂閱消息;2.服務端不能對帶有通配符的Topic進行發布消息

規則引擎

同一個賬號不超過100個規則

規則引擎

數據格式必須是JSON才能使用規則引擎

規則引擎

一條規則中轉發數據的操作不能超過10個

設備接入雲端的協議

  • 基於CCP接入(MQTT協議的精簡版)
    • 協議本身具備安全算法,不依賴TLS算法
    • 協議大小更精簡,包頭,payload占用字節更少。例如header只有1個字節
    • 協議支持多種通信模式,相對於MQTT,不僅支持Pub/Sub,還支持RPC/RRPC
  • 基於MQTT接入
    • 被廣泛用在嵌入式設備的消息傳輸上
  • COAP(待上線)
    • CoAP是一種軟件協議旨在用於非常簡單的電子設備,讓他們通過互聯網交互通信。詳情請訪問COAP
  • HTTP(待上線)
    • 數據通道支持設備通過HTTP協議用REST API的方式連接阿裏雲IoT。設備可以通過POST方式實現Pub消息到某個Topic。

全鏈路加密

整個通信鏈鋸以RSA,AES加密,保證數據傳輸的安全。

消息實時到達

當設備與阿裏雲IoT建立數據通道後,阿裏雲IoT會與設備保持長連接,減少握手時間,保證消息的實時到達。

支持數據透傳

設備數據可以基於數據通道以二進制方式透傳的方式傳到自己的服務器上(只支持在阿裏雲上購買的產品),阿裏雲IoT不會保存設備業務數據,從而保證用戶對數據的安全可控性。

支持多種通信模式

數據通道支持RPC/RRPC以及Pub/Sub兩種通信模式,滿足用戶不同的應用場景。

設備接入雲端的協議 – 基於CCP接入

技術分享

基於CCP接入雲端,主要包含兩大流程:

  • 設備的認證
  • 設備接入數據通道

A:設備使用控制臺申請的密鑰進行簽名請求授權,簽名使用 hmacmd5算法(可選 hmacsha1),簽名內容=devieceid+appkey,使用key=appSecret+deviceSecret

B:服務器驗證簽名合法,並返回pubkey證書

C:設備生成隨機密鑰seedkey,使用pubkey RSA加密傳輸給服務器

D:服務器確認返回令牌 sid ,同時返回簽名sign,簽名內容=sid,簽名的key=appSecret+deviceSecret,同時返回動態負載的接入服務器ip供設備連接

E:客戶端使用私鑰seedkey解密令牌,進行數據通信,客戶端可選協議模式支持ccp\mqtt\coap...

設備接入雲端的協議 – 基於MQTT接入

技術分享

基於MQTT接入雲端,主要包含兩大流程:

  • 設備獲取證書
  • 設備接入數據通道

A:設備使用控制臺申請的密鑰進行簽名請求授權,簽名使用 hmacmd5算法(可選 hmacsha1、md5),簽名內容=devieceid+appkey,使用key=appSecret+deviceSecret

B:服務器驗證簽名合法,並返回pubkey證書(X.509格式base64)

C:設備使用pubkey證書TLS協議連接MQTT

通信模式

IoT Hub支持兩種通信模式:

  • RPC/Revert-RPC
  • Pub/Sub

通信模式 - RPC/Revert-RPC

RPC/Revert-RPC(CCP協議具有的通信模式)

  • RPC是將用戶的設備數據通過阿裏雲轉發到用戶自己的業務系統,比如可以用戶可以將自己設備上報的服務註冊到阿裏雲IoT上,然後設備直接可以調用該服務,完成數據上報;
  • R-RPC是用戶的業務系統遠程調用客戶端並等待客戶端得到一個回執結果,比如遠程調用開關並得到開關的狀態信息。

技術分享

通信模式 - Pub/Sub

Pub/Sub(CCP協議和MQTT都支持)

  • Pub/Sub是基於Topic進行消息的路由轉發,讓設備端或者服務端可以發布訂閱消息,實現異步的通信。適用的場景有M2M(設備與設備間通信),也可以實現設備端與雲端的異步通信。
  • IoT Hub維護所有Topic的發布訂閱用戶列表。當消息發送到Topic,IoT Hub會檢查該Topic的所有訂閱用戶,然後將消息轉發給所有具有訂閱該Topic權限的客戶端或者服務端。

技術分享

身份和安全

  • 每個設備需要具備阿裏雲IoT頒發的憑證才能連接阿裏雲IoT;
  • 設備與雲端通信采用AES、RSA算法加密,從而保證數據傳輸安全;
  • 為了安全地基於數據通道傳輸數據,設備有責任保持他們的憑證安全;
  • 數據到達阿裏雲IoT之後,阿裏雲IoT通過權限機制保障數據安全轉發到其他阿裏雲服務或者其他設備。

設備身份

為設備頒發憑證,包括產品證書和設備證書,設備證書與設備是一對一的關系,確保設備的唯一合法性。設備通過CCP協議或者MQTT協議接入數據通道之前,都需要進行設備認證,設備認證需要攜帶產品證書和設備證書進行認證。

通信安全

采用RSA-512bit、AES算法來保證數據通道的傳輸安全。

授權

提供設備級的授權粒度。

對於設備端,設備必須具有權限,才可以往某個Topic發布訂閱消息,這讓用戶可以完全控制Topic的消息轉發,幫助用戶控制數據的安全性;

對於服務端,服務端基於阿裏雲AK默認具有該賬號下Topic的操作權限,但是如果想要操作其他賬號下的Topic需要相應的權限。

規則引擎

  • SQL表達式:把一條規則抽象為一條sql表達

技術分享

例子:

SELECT crypto(userId,‘SHA1‘) md2, (a+1) al, color c, config.flag flag, deviceId(),CASE col.a WHEN 1 THEN ‘Y‘ ELSE ‘N‘ END flagFROM"/12345/#"WHEREc is not null and b<0

select參數和where條件可以使用消息的payload屬性作為列,不支持子查詢。

規則引擎

1 - FROM "topic"

當有符合topic規則的消息到達時,消息的payload數據以json形式被上下文環境使用(如果消息格式不合法,將忽略此消息),您可以使用topic()函數引用具體的topic值。

2- SELECT

select的屬性來源於消息的payload,可以使用json表達式形式引用,也可以來源於函數比如deviceId()。

3- WHERE

規則觸發條件,條件表達式。當符合topic的消息到達時,這條消息觸發規則的條件。

4- json表達式

select和where可以直接使用json表達式。 json表達式支持屬性,也支持數組。如果payload數據解析出錯將會導致規則運行失敗。 轉發數據action中的表達式需要使用 ${表達式} 來使用。

平臺功能與界面 – 創建產品

技術分享

平臺功能與界面 – 產品信息

技術分享

平臺功能與界面 – 添加設備

技術分享

平臺功能與界面 – 設備信息

技術分享

平臺功能與界面 – 設備授權

技術分享

平臺功能與界面 – 批量下載設備ID

技術分享

平臺功能與界面 – 服務配置

技術分享

服務配置的所有功能目前只支持CCP協議接入的設備,MQTT協議接入的設備不能使用該功能

平臺功能與界面 – Topic管理

技術分享

CCP協議和MQTT協議都支持Pub/Sub的通信方式,Pub/Sub是基於Topic路由轉發消息的。Topic是動態創建的,用戶可以通過服務端調用OpenAPI或者設備端調用協議方法往某個Topic中發布消息,雲端自動判斷該Topic是否存在,不存在即創建。

平臺功能與界面 – Topic信息

技術分享

消息內容將會轉換成二進制分發給訂閱者。所以如果發布的是JSON格式的消息,訂閱者只能拿到轉碼過後的二進制數據,如果想要拿到JSON數據,需要再進行UTF-8轉換成JSON。

阿裏雲物聯網套件OPEN API

阿裏雲物聯網套件Open API分為以下3類:

  • 控制指令接口
    • 推送數據給設備並得到響應
    • 推送數據給設備不需要得到響應
  • 設備互聯接口
    • 發消息到指定的Topic
    • 訂閱指定Topic
    • 取消訂閱指定Topic
  • 授權相關接口
    • 指定設備授權
    • 通過ID撤銷設備權限
    • 通過Topic撤銷設備權限
    • 修改設備權限
    • 列出設備的權限

控制指令接口只適用CCP協議接入的設備;

設備互聯接口和授權相關接口適用於CCP或者MQTT協議接入的設備。

阿裏雲物聯網套件OPEN API

調用方式

通過向API的服務端地址發送HTTP GET請求,並按照接口說明在請求中加入相應請求參數來完成的;根據請求的處理情況,系統會返回處理結果。

請求結構

  • Iot API的服務接入地址為:iot.aliyuncs.com
  • 通信協議:支持通過HTTP或HTTPS通道進行請求通信。為了獲得更高的安全性,推薦您使用HTTPS通道發送請求。
  • 請求方法:支持HTTP GET方法發送請求,這種方式下請求參數需要包含在請求的URL中。
  • 請求參數:每個請求都需要指定要執行的操作,即Action參數(例如Sub),以及每個操作都需要包含的公共請求參數和指定操作所特有的請求參數。
  • 字符編碼:請求及返回結果都使用UTF-8字符集進行編碼。

阿裏雲物聯網套件OPEN API

簽名機制

IOT服務會對每個訪問的請求進行身份驗證,所以無論使用HTTP還是HTTPS協議提交請求,都需要在請求中包含簽名(Signature)信息。

IOT服務通過使用Access Key ID和Access Key Secret進行對稱加密的方法來驗證請求的發送者身份。

Access Key ID和Access Key Secret由阿裏雲官方頒發給訪問者(可以通過阿裏雲官方網站申請和管理),

其中Access Key ID用於標識訪問者的身份;Access Key Secret是用於加密簽名字符串和服務器端驗證簽名字符串的密鑰,必須嚴格保密,只有阿裏雲和用戶知道。

物聯網IOT服務端SDK

目前僅支持Java SDK和PHP SDK

API列表

API名稱

說明

SubRequest

[設備互聯] 服務端訂閱某些Topic(Topic規則)

PubRequest

[設備互聯] 服務端發布消息到某個Topic

UnsubRequest

[設備互聯] 服務端取消訂閱某個Topic

RevertRpcRequest

[控制指令] 推送數據到設備並得到設備的回執消息

PushByteMessageRequest

[控制指令] 推送數據到設備不需要得到設備返回數據

物聯網IOT服務端SDK示例(以Java為例)

1、引入SDK

<dependency>

<groupId>com.aliyun</groupId>

<artifactId>aliyun-java-sdk-iot</artifactId>

<version>2.0.1</version>

</dependency>

2、初始化

String accessKey = "<your accessKey>";

String accessSecret = "<your accessSecret>";

IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",accessKey, accessSecret);

DefaultAcsClient client = new DefaultAcsClient(profile);//初始化SDK客戶端

3、發起調用(以推送數據到設備為例)

RevertRpcRequest rpcRequest = new RevertRpcRequest();

rpcRequest.setDeviceId("11a936267d2a4b6eb7b4cb8549fc1fa7");//設備接入時候得到ID

rpcRequest.setAppKey(appKey);//設備接入時候填寫的appKey

rpcRequest.setTimeOut(5000); //超時時間,單位毫秒.如果超過這個時間設備沒反應則返回"TIMEOUT"

rpcRequest.setRpcContent("aGVsbG8gd29ybGQ=");//推送給設備的數據.數據要求二進制數據做一次BASE64編碼.(示例裏面是"helloworld"編碼後的值)

RevertRpcResponse rpcResponse = client.getAcsResponse(rpcRequest);

System.out.println(rpcResponse.getResponseContent());//得到設備返回的數據信息.

System.out.println(rpcResponse.getRpcCode());//對應的響應碼( TIMEOUT/SUCCESS/OFFLINE等)

國內物聯網平臺初探(二) ——阿裏雲物聯網套件