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": {}
}