本文介绍:
Azure IoT Hub 对MQTT的支持;
使用MQTT 而不用Azure IoT Hub Device SDK 连接IoT Hub并双向通讯;
使用Azure IoT Hub 的 Device SDK时,SDK封装了常见的 设备到云的消息,从云端控制设备,设备孪生属性等相关操作, 无需关注MQTT中的主题订阅。
IoT Hub必须使用TLS/SSL,因此IoT Hub不支持端口1883通讯,默认采用8883。
IoT Hub 不是完整的MQTT 服务,并没有支持MQTT 3.1.1规范中的所有行为。
IoT Hub 的设备SDK默认使用 Qos 1与IoT Hub交换消息, CleanSession标志默认为0;
SDK中的默认超时时间及其是否可配置:
语言默认的 keep-alive 时间间隔可配置性
Node.js
180 秒
否
Java
230 秒
否
C
240 秒
C#
300 秒
Python
60 秒
否
Azure IoT Hub 的特有限制:IoT 中心将服务器端最大超时限制为 29.45 分钟(1767 秒),可设置的客户端最大 keep-alive 值为 1767 / 1.5 = 1177 秒。 任何流量都将重置 keep-alive。 例如,成功的 SAS 令牌刷新会重置 keep-alive
重点图文步骤:
案例:使用MQTTX https://github.com/emqx/MQTTX 和 VS Code 测试Azure IoT Hub
下载并安装MQTTX客户端工具;
一. 在MQTTX中连接Azure IoT Hub:
1.点击1添加按钮;
2.名称随意输入,此处表示连接的名称,不重复即可。
3.ClientID 填写 IoT Hub中Device ID:
4. 服务器地址为 mqtts,后边地址为IoT Hub的主机名:
5.端口8883
6.用户名
“用户名”字段使用 {iothubhostname}/{device_id}/?api-version=2018-06-30,其中 {iothubhostname} 是 IoT 中心的完整 CName。
例如,如果 IoT 中心的名称为 sean-iot-hub.azure-devices.net,设备的名称为 Device001,则完整“用户名”字段应包含:
sean-iot-hub.azure-devices.net/Device001/?api-version=2018-06-30
7.密码:
“密码”字段使用 SAS 令牌。 对于 HTTPS 和 AMQP 协议,SAS 令牌的格式是相同的:
SharedAccessSignature sig={signature-string}&se={expiry}&sr={URL-encoded-resourceURI}
在VS Code中,右键设备,生成sas,输入sas有效期,即可在下方的output窗口中出现sas token。
8.SSL/TLS:true
9.证书类型:CA signed server
其余值保持默认即可。
二. 开始向指定的主题发送设备到云的遥测消息
成功建立连接后,设备可以使用 devices/{device_id}/messages/events/ 作为主题名称将消息发送到IoT Hub:
可在VS Code中 start monitoring built-in event endpoint 开始监控设备到云的消息:
三.开始订阅 从云到设备的主题,接受云端消息:
若要从 IoT 中心接收消息,设备应使用 devices/{device_id}/messages/devicebound/# 作为 主题筛选器 来进行订阅。
尝试从 VS Code 发送 C2D的消息,选择 send c2d message to device:
在上方输入message内容并按回车:
MQTTX 客户端接收到消息:
声明:
点击可查阅本站文章目录《文章分类目录》
本站所有内容仅代表个人观点,如与官文档冲突,请以官方文档为准。
可在本页面下方留言或通过下方联系方式联系我:
欢迎关注公众号“云计算实战”,接收最新文章推送。