基于MQTT-TCP协议建立连接

MQTT协议(Message Queuing Telemetry Transport),叫做遥信消息队列传输。MQTT是一个基于TCP的发布订阅协议,对于有限的内存设备和网络带宽很低的网络不可靠的通信MQTT是比较理想的选择,非常适合物联网通信。

MQTT连接注意事项

  • 支持最高协议版本MQTT3.1,不支持MQTT5.0;
  • 不支持will、retain 消息;
  • 不支持QoS2;
  • 支持clean session;
  • 支持基于TCP创建连接;
  • 同一注册凭证(产品序列号设备序列号设备密码)同时只能有一个设备在线,其它会被踢下线;
  • 支持TLSV1.2 版本的协议来建立安全连接,安全级别高;
  • MQTT client不能跨Topic订阅或发布消息,只能在自己的所属Topic上订阅或发布消息;

具体流程:

MQTT-TCP连接需要先了解设备注册中提到的静态注册和动态注册,获取 ClientIDUserNamePassword

1. MQTT-TCP如需使用TLS加密传输,需要下载根证书

2. 基于C-SDK进行开发,其他语言可以参考开源MQTT客户端进行开发,MQTT协议详解可以参考MQTT官网

3. MQTT连接

参数详解
连接域名 mqtt-cn-sh2.iot.ucloud.cn (不同区域连接域名不同,目前仅在上海Region开放)
端口号 18838883(使用TLS)
可变报头(variable header):Keep Alive Connect指令中需包含Keep Alive(保活时间)。 取值范围为30至1200秒。如取值不在此区间,平台拒绝连接。建议取值300秒以上,如网络不稳定,设置高一些。
MQTT的Connect报文参数参考静态注册动态注册 以静态注册为例:ClientID:${ProductSN}.${DeviceSN} UserName:${ProductSN}|${DeviceSN}|${authmode} authmode: 静态注册为1;动态注册为2 Password:${DeviceSecret}

4. 连接成功后需要定期发送心跳包保活,设备端在保活时间间隔内,至少需要发送一次报文,如果物联网平台在该间隔内无法收到任何报文,物联网平台会断开连接,设备端需要进行重连。

消息上行及下行

设备连接成功后即可订阅或发布消息,物联网平台支持