通过MQTT连接及收发消息
IoT Core 支持通过 MQTT 协议( v3.1、v3.1.1、v5.0)使用。当前支持QoS0和1的消息。
获取 MQTT 连接信息
在设备详情页,连接信息栏目,找到「DeviceSecret」字段,点击右侧小眼睛图标,查看连接信息,包含IoTCoreId、DeviceKey 和 DeviceSecret 或证书。
生成 MQTT 用户名及密码(设备密钥认证)
若创建设备时选的密钥认证,则需通过拼接获得 MQTT 连接用户名,并通过加密算法生成 MQTT 连接所需密码。
打开 连接信息生成器 ,使用拿到的 IoTCoreId、DeviceKey 和 DeviceSecret,生成 MQTT 连接所需的用户名及密码。
具体拼接及计算方式如下。
用户名拼接:
用户名拼接方式为 {adp_type}@{IoTCoreId}|{DeviceKey}|{timestamp}|{algorithm_type},其中:
| 字段 | 说明 |
|---|---|
| adp_type | 认证方式类型,当前仅支持取值“thingidp” |
| IoTCoreId | 对应 IoT Core 的 ID |
| device_key | 设备标识,一般为设备名称 |
| timestamp | 生成签名时的时间戳,以秒为单位,长整数。可以不用传入。 |
| algorithm_type | 字符串签名算法类型,取值 MD5 或 SHA256,不传入则默认为 MD5 |
计算密码:
1、组合加密字符串:{device_key}&{timestamp}&{algorithm_type}{device_secret},其中:
| 字段 | 说明 |
|---|---|
| device_key | 设备标识,一般为设备名称 |
| timestamp | 生成签名时的时间戳,以秒为单位,长整数。时间戳会与服务器时间判比,最大误差允许10min;若无法保证时间准确性,计算时需传入0进行占位 |
| algorithm_type | 字符串签名算法类型,取值 MD5 或 SHA256 |
| device_secret | 平台提供的密钥 |
2、进行加密
使用MD5或者SHA256,对加密字符串进行加密。具体过程如下:
获取加密字符串的UTF-8字符集比特数组,按选定的加密方式,对1中得到比特数组使用MD5或者SHA256进行加密,并将结果转换为小写形式。
示例
一个设备的连接信息为
1IoTCoreId: abcd123
2DeviceKey: mydevice
3DeviceSecret: ImSeCrEt0I1M2jkl
4时间戳: 1583826857
则当其选择 MD5 加密情况下
| 用户名 | 待加密字符串 | 密码 | 时间戳 |
|---|---|---|---|
thingidp@abcd123|mydevice|1583826857|MD5 |
mydevice&1583826857&MD5ImSeCrEt0I1M2jkl |
7f0e63d2c6e122100edde19e34e7df5b |
使用 |
thingidp@abcd123|mydevice 或thingidp@abcd123|mydevice|0|MD5 |
mydevice&0&MD5ImSeCrEt0I1M2jkl |
22bc75231495220c7a2202fe15f7d286 |
不使用 |
初始化 MQTT 证书(设备证书认证)
设备创建后,证书仅可下载一次,下载后需妥善保管。若丢失可进行重置,但无法恢复或者获取此前证书。
下载后可使用文本编辑器打开,根据特定 MQTT client 的使用方式,粘贴至代码中或分别存储成证书文件调用。
特别注意:证书及云端根证书均有有效期,实际使用请保证设备具备更新证书的能力。
获取 MQTT Broker 地址
在 IoT Core 详情页可以查看。也可通过 IoTCoreId+ .iot.+Region+.baidubce.com 拼接出来,其中 Region 即地域,在创建 IoT Core 时当前可选广州gz 。
获取 MQTT Broker 端口号
MQTT 连接可以使用 TCP 、TLS/SSL、WSS 三种方式,对应端口如下:
| 协议 | 端口 | 描述 |
|---|---|---|
| TCP | 1883 | 非加密 MQTT 连接 |
| TLS/SSL | 1884 | 基于 TLS 加密的 MQTT 连接 |
| WSS | 443 | 基于 WebSocket 及 TLS 的 MQTT 连接 |
使用时可根据实际场景进行选择。
MQTT 模拟器
可通过 MQTT 模拟器进行连接,如 MQTT.fx 、MQTTBox 等。其中 MQTT.fx 的示例可查看「快速入门」中的内容。
MQTT 开源 SDK
可通过开源的 MQTT Client SDK,如 Paho、MQTT.js 及各模组厂商自带 MQTT Client 进行连接。连接信息同上。
支持的MQTT 5.0特性
IoTCore服务中,新增支持的MQTT 5.0的部分特性如下:
- 在CONNACK、PUBACK、SUBACK、UNSUBACK报文中支持结果返回码,便于客户端定位请求状态及问题。
- 服务端主动断开时发送Disconnect报文,便于客户端定位连接异常。
- 支持PUBLISH Properties转发,包括Response Topic、Correlation Data、Payload Format Indicator、Content Type、User Property,便于用户实现类似HTTP的请求和响应交互。
- 支持共享订阅,见共享订阅。
-
支持CleanStart,暂不支持客户端自定义的Session Expiry Interval:
- CleanStart设为true,同MQTTv3中的CleanSession=true,连接时清理之前的会话,断开时不保留当前会话;
- CleanStart设为false,同MQTTv3中的CleanSession=false,连接时不清理之前的会话,断开时保留当前会话,保留时间为系统内置固定时间。
