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规范
连接参数
MQTT的CONNECT参数:
:::danger
使用设备端CA证书鉴权时,请参考文档X.509证书认证
:::
::: caution 变量说明
对于MQTT连接认证,有三个重要参数需要作为变量参与到签名认证过程中,分别是设备的ProductId
, DeviceId
和DeviceSecret
,在平台依次完成创建产品,创建设备步骤,在设备管理-设备详情页面即可查看这三个参数,另外MQTT Broker连接地址,端口号等信息也可以在设备管理-设备详情页面通过MQTT连接参数获取按钮获取
:::
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 | 表示当前时间毫秒值,可以不传递 |
mqttPassword | sign签名需把提交给服务器的参数按字典排序后,根据signmethod加签 |
content | 提交给服务器的参数(productId、deviceId、timestamp和clientId),按照参数名称首字母字典排序, 然后将参数值依次拼接 |
::: caution 变量说明
此处productId和deviceId为必填参数,timestamp和clientId为可选参数。若传入timestamp或clientId,必须与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****
最后修改时间: 1 年前