MQTT协议接入

大约 2 分钟

MQTT协议接入

MQTT(英语:Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布 (Publish)/订阅 (Subscribe)范式的消息协议,它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,广泛被应用于物联网领域

协议规范

  • 完整支持 MQTT v3.1、v3.1.1 和 v5.0 协议规范,支持MQTT的PUB、SUB、PING、PONG、CONNECT、DISCONNECT和UNSUB等报文
  • QoS 0、QoS 1 消息支持,不支持QoS 2
  • 不支持保留消息(Retained Message),遗嘱消息(Will Message)

安全等级

支持TCP通道TLS直连模式(安全级别高),TCP直连模式(数据不加密,不安全)

Topic规范

详见消息通信Topic

连接参数

域名:在实例详情页面查看物联网平台实例域名

MQTT的CONNECT参数

变量说明

对于MQTT连接认证,有三个重要参数需要作为变量参与到签名认证过程中,分别是设备的ProductId, DeviceIdDeviceSecret

mqttClientId: clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
mqttUsername: deviceId+"&"+productId
mqttPassword: sign_hmac(deviceSecret,content)
变量名说明
mqttClientId格式中||内为扩展参数
clientId表示客户端ID,可自定义,长度不可超过64个字符。建议使用设备的MAC地址或SN码,方便您识别区分不同的客户端
securemode表示目前安全模式,可选值有2(TLS直连模式)和3(TCP直连模式)
signmethod表示签名算法类型。支持hmacmd5,hmacsha1和hmacsha256,默认为hmacmd5
timestamp表示当前时间毫秒值,可以不传递
mqttPasswordsign签名需把提交给服务器的参数按字典排序后,根据signmethod加签
content提交给服务器的参数(productIddeviceIdtimestampclientId),按照参数名称首字母字典排序, 然后将参数值依次拼接

变量说明

此处productIddeviceId为必填参数,timestampclientId为可选参数。若传入timestampclientId,必须与mqttClientId中的设置相同。

示例:

假设clientId = 12345,deviceId = device, productId = pk, timestamp = 789,signmethod=hmacsha1,deviceSecret=secret,那么使用TCP方式提交给MQTT的参数如下:

mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
mqttUsername=device&pk
mqttPassword=hmacsha1("secret","clientId12345deviceIddeviceproductIdpktimestamp789").toHexString(); 

加密后的Password为二进制转16制字符串,示例结果为:

dc8f8498a1a115b58f6a3afd526bc62a1665****