前序系列文章>>>
09【涂鴉物聯網足跡】涂鴉云平臺標準指令集
開放訊息平臺主要通過 Pulsar 主動推送各種事件資料給外部合作伙伴,以滿足合作伙伴對訊息實時性和訊息持久化的要求,
一、Pulsar
對于Pulsar的介紹,大家可以看一下這位大佬的簡單介紹>>>pulsar-介紹,簡單來說,Pulsar最初由雅虎開發,現在由 Apache 軟體基金會管理,是一個支持多租戶、高性能的服務器到服務器之間訊息通訊的解決方案,
涂鴉智能基于開源的 Pulsar 系統進行了定制改進,按照涂鴉智能提供的 Pulsar SDK 可完成訊息接入,
? Pulsar 作為訊息代理采用了Pub/Sub(發布訂閱)的設計模式,該設計模式中,生產者將訊息發布到主題,然后消費者可以訂閱這些主題,處理傳入訊息,并在處理完成時發送確認,當訂閱被創建時(即使訊息處理設備已斷開連接)所有的訊息都將被 Pulsar 保留,只有在訊息處理設備確認訊息被成功處理后,保留下來的訊息才會被丟棄,
? 此外,一個主題可以由多個消費者訂閱,并且當消費者成功處理訊息時,它需要向代理發送確認,以便代理可以丟棄該訊息,涂鴉智能的 Pulsar 訊息分發器(Broker)為每個主題分配了多個磁區,Pulsar 訊息分發器將根據磁區和消費者分發訊息,
二、相關說明
安全:
- 認證安全:涂鴉智能 Pulsar 訊息系統針對身份認證進行了深度定制以滿足高安全性要求,涂鴉智能采用動態令牌機制增強安全,開發者可忽略實作細節,基于涂鴉智能提供的 SDK 完成認證,
- 資料安全:
- 傳輸安全:涂鴉智能 Pulsar 訊息推送系統基于 SSL 傳輸資料,
- 業務安全:業務資料均采用 AES-128 加密,請求均附上簽名,
請求方式:
具體參考 ConsumerExample 代碼,接入時需要提供以下三部分資料:
- username:填寫云開發平臺中 API 授權密鑰的 Access ID,
- password:填寫云開發平臺中 API 授權密鑰的 Access Secret,
- url:根據呼叫的區域進行選擇,
- 中國區:
pulsar+ssl://mqe.tuyacn.com:7285/ - 美國區:
pulsar+ssl://mqe.tuyaus.com:7285/ - 歐洲區:
pulsar+ssl://mqe.tuyaeu.com:7285/ - 印度區:
pulsar+ssl://mqe.tuyain.com:7285/
- 中國區:
開通方式:
1. 登錄 IoT 作業臺 > 云開發,
2. 創建專案,
3. 在專案中的訊息訂閱模塊,開通訊息訂閱功能,
代碼示例:
String url = "";
String accessId = "";
String accessKey = "";
MqConsumer mqConsumer = MqConsumer.build()
.serviceUrl(url)
.accessId(accessId)
.accessKey(accessKey)
.maxRedeliverCount(3)
.messageListener(new MqConsumer.IMessageListener() {
@Override
public void onMessageArrived(Message message) throws Exception {
//write your own message processing logic
}
});
mqConsumer.start();
資料格式:
| 引數名 | 資料型別 | 描述 |
| protocol | Integer | 協議號 |
| pv | String | 通訊協議版本號 |
| t | Long | 時間戳 |
| sign | String | 簽名 |
| data | String | 資料體 |
{
"protocol": 4,
"pv": "2.0",
"t": 146052438362,
"data":"4FDEE3FE59FCD76E260F7115011D65C7FD2AF59BFA4DC29E5DDF3FDA6BD5447E02F679052C34BBAAB7BB0EFEED62C760FD2AF59BFA4DC29E5DDF3FDA6BD5447EC660C816075824E004EC0123DE4FD1B638BB633A478EB2C2004EF4289276****",
"sign": "58285279b5b5790c7d917de88b3e****"
}
資料簽名:
在獲得真正的data資料前,可以設定防篡改 MD5 簽名校驗,簽名演算法執行步驟如下:
- 將收到的 JSON 格式的每個引數(除sign和值為空外)格式化為key=val,
- 進行組裝(使用key升序),組裝后的字串格式示例:k1=v1||k2=v2,
- 添加密鑰,例如:k1=v1||k2=v2...kn=vn||key,
- 進行整串字串的 MD5 簽名,
- 如果 MD5 值和收到資料的 sign 一致,則表明資料沒有被篡改;否則視為被篡改,
簽名校驗通過后,對資料進行解密:
- 先對資料進行 Base64 解碼,
- 通過 AES (ECB 模式)對 accessKey 的中間 16 位代碼進行解密 ,從而得到真正的設備狀態資料,
解密后資料格式如下:
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"dataId":"1459168450ddfdfoiopiopi****",//全域唯一 ID, 資料上報唯一標識 ID
"status": [
{
"code":"switch",
"value":false,
"mode":"rw",
"t":146052438362
},
{
"code":"work_mode",
"value":"colour",
"mode":"rw",
"t":146052438362
}
]
}
三、業務資料
協議號:
協議號(不同協議號代表了不同的功能),
| 協議號 | 描述 |
| 4 | 設備資料上報事件 |
| 20 | 其它事件 |
設備資料上報事件:
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"dataId": "1459168450ddfdfoiopiopi****",
"status": [
{
"資料點編碼1(產品定義時對應的資料點編碼)": "資料點對應的值",
"t": 1540615024283 // 資料點狀態發生時間
},
{
"資料點編碼2(產品定義時對應的資料點編碼)": "資料點對應的值",
"t": 1540615024283 // 資料點狀態發生時間
}
]
}
其他事件:
| bizCode | 描述 |
| online | 設備上線 |
| offline | 設備離線 |
| nameUpdate | 修改設備名稱 |
| dpNameUpdate | 修改設備功能點名稱 |
| bindUser | 設備系結用戶 |
| delete | 洗掉設備 |
| upgradeStatus | 設備升級狀態 |
- 設備上線:
bizData 說明
| code | 資料型別 | 描述 |
| devId | String | 設備 ID |
| name | String | 設備名稱 |
資料示例
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"bizCode": "online",
"bizData": {
"time": 146052438362
}
}
- 設備離線:
bizData說明
| code | 資料型別 | 描述 |
| time | Long | 時間戳 |
資料示例
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"bizCode": "offline",
"bizData": {
"time": 146052438362
}
}
- 設備名變更
bizData 說明
| code | 資料型別 | 描述 |
| devId | String | 設備 ID |
| name | String | 設備名稱 |
資料示例
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"bizCode": "nameUpdate",
"bizData": {
"devId": "002dj00118fe34d9****",
"name": "new name"
}
}
- 設備 DP 名變更
bizData 說明
| code | 資料型別 | 描述 |
| devId | String | 設備 ID |
| name | String | DP 名稱 |
| dpId | String | 功能點 ID |
資料示例
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"bizCode": "dpNameUpdate",
"bizData": {
"devId": "002dj00118fe34d9****",
"name": "new name",
"dpId": "dpId"
}
}
- 設備系結
bizData 說明
| code | 資料型別 | 描述 |
| devId | String | 設備 ID |
| uuid | String | 設備硬體唯一標識 |
| uid | String | 設備系結人 |
| token | String | 設備配網 Token |
資料示例
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"bizCode": "bindUser",
"bizData": {
"devId": "002dj00118fe34d9****",
"uuid": "06200043b4e618c1****",
"uid":"ay1529485403390****",
"token": "IIpQ****"
}
}
- 設備移除
bizData 說明
| code | 資料型別 | 描述 |
| devId | String | 設備 ID |
| uid | String | 設備系結人 |
資料示例
{
"devId": "002dj00118fe34d9****",
"productKey": "開發者平臺定義產品對應的產品 Key",
"bizCode": "delete",
"bizData": {
"devId": "002dj00118fe34d9****",
"uid":"ay1529485403390S****"
}
}
- 設備升級狀態
bizData 說明
| code | 資料型別 | 描述 |
| devId | String | 設備 ID |
| moduleType | Int | 模塊型別:
|
| upgradeStatus | Int | 升級狀態:
|
| description | String | 升級描述 |
| oldVersion | String | 舊版韌體 |
| newVersion | String | 升級韌體 |
資料示例
{
"bizCode":"upgradeStatus",
"bizData": {
"devId":"6ca8756d*****1b4ewsdn",
"moduleType":0,
"upgradeStatus":2,
"description":"升級測驗",
"oldVersion": "1.0.1",
"newVersion": "1.0.2"
},
"devId":"6ca8756d*****1b4ewsdn",
"productKey":"vFHpaEFwu8UD****",
"ts":1562232522192
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225433.html
標籤:其他
下一篇:常用寶藏網站
