使用MQTT.fx接入物联网平台
MQTT.fx是一个多平台的MQTT协议客户端,本文以Windows系统为例,介绍使用MQTT.fx模拟物联网设备接入阿里云物联网平台,并体验物联网平台的核心功能。
前提条件
-
已创建产品和设备,并获取MQTT连接参数。具体操作,请参见创建产品与设备和获取MQTT签名参数值。
本示例获取的设备证书和MQTT连接参数值如下表,参数详细说明,请参见MQTT-TLS连接通信。
参数
值
ProductKey
a1***DeviceName
device1DeviceSecret
f35***d9eclientId
a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000|username
device1&a1***passwd
86761***21dmqttHostUrl
a1***.iot-as-mqtt.cn-shanghai.aliyuncs.comport
1883 -
已定义物模型属性,用于测试设备使用物模型通信Topic进行上下通信。具体操作,请参见为产品定义物模型。
本示例定义的属性包括:
LightCurrent(工作电流,float单精度浮点型,取值范围0~9)和LightSwitch(主灯开关,bool布尔型,1表示打开、0表示关闭)。
MQTT.fx模拟的在线设备,仅支持非透传消息通信。如需实现透传信息通信,您可以使用真实设备或SDK进行测试。
视频演示
配置MQTT.fx接入
-
下载并安装MQTT.fx软件。MQTT.fx软件安装和使用说明,请参见MQTT.fx。
本文操作以mqttfx-5.2.0-windows-x64版本为例演示具体操作。由于第三方软件不定期更新,建议您以实际页面为准。
说明使用MQTT.fx工具所需的License,请自行申请。
-
打开MQTT.fx软件,单击菜单栏中的Extras,选择Edit Connection Profiles。
-
在Edit Connection Profiles页面,完成以下参数的设置。
-
设置基本信息。
参数
说明
Profile Name
输入您的自定义名称iot connection。
Profile Type
MQTT服务器连接,选择MQTT Broker。
Broker Address
MQTT接入域名,对应《前提条件》中已获取的mqttHostUrl值:a1***.iot-as-mqtt.cn-shanghai.aliyuncs.com。
-
a1***为本示例产品的ProductKey。
-
cn-shanghai为本示例所在地域。
此处仅输入域名,无需携带端口号。
Broker Port
设置为1883。
Client ID
MQTT的协议字段。
固定格式:
${ClientId}|securemode=${Mode},signmethod=${SignMethod}|timestamp=${timestamp}|。输入《前提条件》中已获取的clientId值:a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000|。
参数说明:
-
${ClientId}:设备、App或Web等场景下的Client ID信息。
重要该值需自定义,长度在64个字符以内。若为设备的ID信息,建议使用您设备的MAC地址或SN码,方便您识别区分不同的设备。
-
${Mode}:安全模式。可选值有2(TLS直连模式,需要设置SSL/TLS信息)和3(TCP直连模式,无需设置SSL/TLS信息)。
-
${SignMethod}:算法类型,支持hmacsha256、hmacmd5和hmacsha1。
-
${timestamp}:表示当前时间毫秒值,可以不传递timestamp。
物联网平台提供的连接参数中${ClientId}默认为
${ProductKey} + '.' + ${DeviceName}组成的字符串,${Mode}默认为2,${SignMethod}默认为hmacsha256,您可根据需要修改。重要-
MQTT.fx的Client ID和设备的${ClientId},切勿混淆。
-
不要遗漏参数之间及最后的竖线(|)。
-
设置参数时,请确保参数值中或参数值的前后均没有空格。
-
输入Client ID信息后,请勿单击Generate。
General
本示例使用默认值。您也可以根据实际场景需求设置。
-
-
单击User Credentials,选中Use Username/Password复选框,设置User Name和Password。
参数
参数说明
User Name
由设备名称DeviceName、and(&)和产品ProductKey组成,固定格式为
${DeviceName}&${ProductKey}。输入《前提条件》中已获取的username值:device1&a1***。
-
device1为设备的DeviceName。 -
a1***为设备的ProductKey。
Password
通过选择的加密方法,以设备的DeviceSecret为密钥,将参数和参数值拼接后,加密生成Password。
输入《前提条件》中已获取的passwd值:86761***21d。
重要-
如果您使用的MQTT.fx版本,在粘贴Password后不显示具体的字符串,只要光标已从输入框的前部移至了后部,则表示粘贴成功,请勿重复粘贴。
-
请注意参数和参数值中字母的大小写。
-
若您设置Client ID时,修改了已获取值中的${ClientId}、${SignMethod}的设置,必须保证加密参数的值与Client ID中对应参数值一致,需重新计算出Password。相关参数设置与计算方法,请参见使用网页工具计算和使用Node.js语言脚本计算。
-
-
TLS直连模式(即securemode=2)下,单击SSL/TLS,选中Enable SSL/TLS,设置Protocol为TLSv1.2。
重要TCP直连模式(即
securemode=3)下,无需设置SSL/TLS信息,直接进入下一步。
-
-
设置完成后,单击右下角的OK。
-
单击Connect。
右侧亮绿灯,表示连接成功。连接成功后,连接栏右侧的连接状态指示灯变为绿色,表示 MQTT.fx 已成功接入物联网平台。
您可在物联网平台控制台,在对应实例下,选择,选择产品,查看该设备状态,预期设备为在线状态。
下文通过测试自定义Topic、物模型通信Topic的上下行通信,验证MQTT.fx与物联网平台连接是否成功。若测试与本示例结果不符,表示通信连接失败,您需根据日志信息,进行修正。
使用自定义Topic通信
自定义Topic的详细信息,请参见使用自定义Topic通信。本示例使用物联网平台默认提供的自定义Topic:
|
Topic |
权限 |
说明 |
|
|
发布 |
上行通信:设备通过该Topic向物联网平台发送消息。 |
|
|
订阅 |
下行通信:设备通过订阅该Topic,获取从物联网平台下发的消息。 |
上行通信
-
在MQTT.fx上,单击Publish,在Publish文本框中,输入具有发布权限的Topic:
/a1***/device1/user/update/error。 -
在文本编辑页面,输入要发送的消息内容,然后单击Publish。
确认 QoS 已选择为 QoS 0,消息正文例如
This is a publish test.。 -
登录物联网平台控制台,在对应实例下的日志服务页面,查看设备到云消息日志消息。具体操作,请参见查询云端运行日志。
单击日志记录的查看链接,在查看详情对话框中可看到Topic为
/a[产品ProductKey]/device1/user/update/error,消息内容为This is a publish test.,表明设备消息已成功发布到云端。
下行通信
-
在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入具有订阅权限的Topic:
/a1***/device1/user/get。 -
单击Subscribe。
订阅成功后,该Topic会显示在列表中。
-
登录物联网平台控制台,在对应实例下,选择。
-
单击设备对应操作列的查看,进入设备详情页面。
-
单击Topic列表页签,单击已订阅Topic对应操作列的发布消息。
-
输入消息内容,例如This is a test .,单击确认。
-
回到MQTT.fx上,查看接收到的消息。
在 Subscribe 页签中,已订阅主题
/a{ProductKey}/device1/user/get成功接收到一条消息,消息内容为This is a test,QoS 为 0,Payload 使用 Plain Text Decoder 解码。
使用物模型通信Topic通信
物模型通信Topic的详细信息,请参见什么是Topic。本示例使用物模型通信Topic:
|
Topic |
权限 |
说明 |
|
|
发布 |
上行通信:设备通过该Topic向物联网平台上报属性数据。 |
|
|
订阅 |
下行通信:设备通过订阅该Topic,获取物联平台响应设备属性上报的消息。 |
|
|
订阅 |
下行通信:设备通过该订阅Topic,获取物联网平台下发的消息。 |
设备上报属性
-
在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入具有订阅权限的Topic:
/sys/a1****/device1/thing/event/property/post_reply。 -
在MQTT.fx上单击Publish,在Publish文本框中,输入具有发布权限的Topic:
/sys/a1****/device1/thing/event/property/post。 -
在文本编辑页面,输入要上报的属性数据,然后单击Publish。
设备上报属性数据的格式,需符合标准Alink JSON格式。具体说明,请参见设备上报属性。本示例上报属性LightCurrent和LightSwitch数据。Topic 设置为
/sys/${ProductKey}/device1/thing/event/property/post,Payload 为 JSON 格式,示例内容为{"method":"thing.event.property.post","id":"162277852","params":{"LightSwitch":1,"LightCurrent":1.4},"version":"1.0.0"}。 -
登录物联网平台控制台,在对应实例下,选择。
-
单击设备对应操作列的查看,在设备详情页面单击物模型数据,查看设备数据。
设置设备属性
-
在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入具有订阅权限的Topic:
/sys/a1****/device1/thing/service/property/set。 -
登录物联网平台控制台,在对应实例下,选择。
-
选择要调试的设备,然后在属性调试页签下,设置主灯开关为关闭-0。
-
单击设置,发送指令。
-
在MQTT.fx上的Subscribe页签下,查看设备接收的消息。
/sys/axxxxx/device1/thing/service/property/set {"method":"thing.service.property.set","id":"2016306076","params":{"LightSwitch":0},"version":"1.0.0"}
查看日志
-
登录物联网平台控制台,在对应实例下的日志服务页面,查看时间、TraceID和业务类型等运行日志消息。具体操作,请参见查询云端运行日志。
-
在MQTT.fx上,单击Log查看操作日志和错误提示日志。
INFO --- MqttFX ClientModel : messageArrived() with topic: /ext/error/axxx0/device1 INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1xxx/device1/user/get INFO --- MqttFX ClientModel : sucessfully published message test to topic /axxx/device1/user/g INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : sucessfully published message test to topic /axxx/device1/user/g INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : sucessfully published message test to topic /axxx/device1/user/g INFO --- BrokerConnectorController : onDisconnect INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Cancel script excution. INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Cancel script excution. INFO --- ScriptsController : Clear console. INFO --- ScriptsController : Cancel script excution. INFO --- BrokerConnectorController : onConnect INFO --- ScriptsController : Clear console. INFO --- MqttFX ClientModel : MqttClient with ID a1xxx0.device1|securemode=2,signmethod=hmacsha... INFO --- MqttFX ClientModel : session present: false INFO --- SubscribeController : onSubscribe INFO --- MqttFX ClientModel : rebuildMessagesList() INFO --- MqttFX ClientModel : attempt to addRecentSubscriptionTopic INFO --- MqttFX ClientModel : addRecentSubscriptionTopic : de.jensd.mqttfx.entities.Topixxx1 INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /axxx/device1/user/get INFO --- MqttFX ClientModel : sucessfully subscribed to topic /a1xxxSp0/device1/user/get (QoS 0) INFO --- MqttFX ClientModel : messageArrived() with topic: /a1Kucxxx/device1/user/get INFO --- MqttFX ClientModel : messageArrived() added: message #1 to topic '/axxx/device1/user/... INFO --- PublishController : publish INFO --- MqttFX ClientModel : attempt to add PublishTopic INFO --- MqttFX ClientModel : addPublishTopic : /a1xxx/device1/user/update/error INFO --- MqttFX ClientModel : sucessfully published message This is a publish test. to topic /a1Kuc5xxx/device1/user/get