1.MQTT協議連接IOT平臺
使用阿里物聯網平臺的第一步是在雲端創建產品和對應設備,獲取設備證書(ProductKey、DeviceName和DeviceSecret)。具體在阿里雲平臺的創建步驟詳解上述提供的官方文檔鏈接中的創建產品與設備。
創建產品中的功能定義具備自定義和根據主題,標準生成。
根據主題(如城市智能井蓋監測),標準生成如下信息:
自定義配置(具備屬性,服務,事件三種類型):實現屬性上報(如上報設備狀態)、事件上報(上報設備異常或錯誤)和服務調用(通過雲端調用設備提供的服務):
注意:標識符非常重要,是JSON裏傳遞的屬性!而且要區分大小寫
1.1連接平臺的入口信息
在阿里物聯網平臺控制檯創建完產品和設備後,可獲得以下阿里雲連接的設備三元組:
①ProductKey:阿里雲頒發的產品唯一標識,11位長度的英文數字隨機組合
②DeviceName:用戶註冊設備生成的設備唯一編號,支持系統自動生成,也可支持添加自定義編號,產品維度內唯一
③DeviceSecret:設備密鑰,與DeviceName成對出現,可用於一機一密的認證方案
如創建生成的例子:
{
"ProductKey": "a13AWUxqJIg",
"DeviceName": "ali_mqtt",
"DeviceSecret": "ArHWERFLSjJQMuSPYXnCVTJ1X4FumU05"
}
1.2第三方軟件以MQTT協議接入物聯網平臺
獲取設備三元組信息後,再根據平臺的生成規則,可形成如下MQTT協議接入平臺的信息:
● MQTT用戶名
● MQTT 密碼
● 客戶端ID
● 屬性發布主題
● 屬性訂閱主題
MQTT用戶名生成規則:
如上例的"DeviceName": "ali_mqtt" 和 "ProductKey": "a13AWUxqJIg", 可得到MQTT用戶名(字符串): "ali_mqtt&a13AWUxqJIg"
客戶端ID生成規則:
這裏的設備ID,可選用DeviceName,如上例的"DeviceName": "ali_mqtt",這裏選擇hmacsha1算法,可得到客戶端ID(字符串):"ali_mqtt|securemode=3,signmethod=hmacsha1|"
MQTT密碼生成規則:
Password生成小工具詳解附件鏈接“阿里IOT password生成小工具”,程序中可通過添加hmacsha1或hmacmd5算法來生成對應的密碼,常用hmacsha1算法爲多。
這裏以password生成小工具舉例說明,上述中的客戶端ID生成採用hmacsha1算法,這裏的method也得選用hmacsha1算法,填上對應的信息,可生成如下MQTT密碼(字符串):"2EB0B4FEEBCA4DF344C26D7AC30DC9CF9CAE09EF"
屬性發布和訂閱主題生成規則:
創建產品和設備後,在物聯網平臺控制檯中,該設備的設備詳情頁,Topic列表下可以查看生成的主題,也可自定義主題。
自定義Topic規則:
1.3 阿里IOT平臺的IP地址和端口號
NB通訊模塊需要通過IP地址和端口號來跟平臺建立TCP連接。
IP地址生成規則:
假設設備的物聯網平臺所在地域爲華東2號,即region爲”cn-shanghai”. 上例中"ProductKey": "a13AWUxqJIg" ,則連接域名爲:”a13AWUxqJIg.iot-as-mqtt.cn-shanghai.aliyuncs.com” 。也可通過ping該域名解析出ip地址來連接。
端口號生成規則:
端口號固定爲:1883
2. 軟件程序實現
使用宏定義和其他方式,來實現這些要素信息靈活配置生成:
hmacsha1算法實現詳見附件:
3.設備上報payload格式詳解
3.1上報主題pub topic 格式:/sys/{productKey}/{deviceName}/thing/event/property/post
設備上報payload格式:
{
"id": 3536123,
"version": "1.0",
"params": {
"屬性key1": "屬性value1",
"屬性key2": "屬性value2"
},
"method": "thing.event.property.post"
}
IoT雲端響應replyTopic
1.replyTopic: /sys/{productKey}/{deviceName}/thing/event/property/post_reply
2.雲端響應payload格式
{
"id": 3536123,
"code": 200,
"data": {}
}
3.2 雲端設置設備屬性
設備訂閱subTopic
/sys/{productKey}/{deviceName}/thing/service/property/set
IoT雲端下行的payload格式
{
"id": 3536123,
"version": "1.0",
"params": {
"屬性key1": "屬性value1",
"屬性key2": "屬性value2"
},
"method": "thing.service.property.set"
}
設備響應replyTopic
/sys/{productKey}/{deviceName}/thing/service/property/set_reply
設備響應payload格式
{
"id": 3536123,
"code": 200,
"data": {}
}