使用MQTT.fx接入物联网平台

MQTT.fx是一个多平台的MQTT协议客户端,本文以Windows系统为例,介绍使用MQTT.fx模拟物联网设备接入阿里云物联网平台,并体验物联网平台的核心功能。

前提条件

  • 已创建产品和设备,并获取MQTT连接参数。具体操作,请参见创建产品与设备获取MQTT签名参数值

    本示例获取的设备证书和MQTT连接参数值如下表,参数详细说明,请参见MQTT-TLS连接通信

    参数

    ProductKey

    a1***

    DeviceName

    device1

    DeviceSecret

    f35***d9e

    clientId

    a1***.device1|securemode=2,signmethod=hmacsha256,timestamp=2524608000000|

    username

    device1&a1***

    passwd

    86761***21d

    mqttHostUrl

    a1***.iot-as-mqtt.cn-shanghai.aliyuncs.com

    port

    1883

  • 已定义物模型属性,用于测试设备使用物模型通信Topic进行上下通信。具体操作,请参见为产品定义物模型

    本示例定义物模型如下图所示:物模型

重要

MQTT.fx模拟的在线设备,仅支持非透传消息通信。如需实现透传信息通信,您可以使用真实设备或SDK进行测试。

视频演示

使用MQTT.fx,模拟设备接入物联网平台的操作如下。

配置MQTT.fx接入

  1. 下载并安装MQTT.fx软件。MQTT.fx软件安装和使用说明,请参见MQTT.fx

    本文操作以mqttfx-5.2.0-windows-x64版本为例演示具体操作。由于第三方软件不定期更新,建议您以实际页面为准。

    说明

    使用MQTT.fx工具所需的License,请自行申请。

  2. 打开MQTT.fx软件,单击菜单栏中的Extras,选择Edit Connection Profiles

    Edit Connection Profiles

  3. Edit Connection Profiles页面,完成以下参数的设置。

    1. 设置基本信息。

      参数

      说明

      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}:算法类型,支持hmacsha256hmacmd5hmacsha1

      • ${timestamp}:表示当前时间毫秒值,可以不传递timestamp

      物联网平台提供的连接参数中${ClientId}默认为${ProductKey} + '.' + ${DeviceName}组成的字符串,${Mode}默认为2${SignMethod}默认为hmacsha256,您可根据需要修改。

      重要
      • MQTT.fx的Client ID和设备的${ClientId},切勿混淆。

      • 不要遗漏参数之间及最后的竖线(|)。

      • 设置参数时,请确保参数值中或参数值的前后均没有空格。

      • 输入Client ID信息后,请勿单击Generate

      General

      本示例使用默认值。您也可以根据实际场景需求设置。

    2. 单击User Credentials,选中Use Username/Password复选框,设置User NamePassword

      设置mqtt.fx的User Credentials

      参数

      参数说明

      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语言脚本计算

    3. TLS直连模式(即securemode=2)下,单击SSL/TLS,选中Enable SSL/TLS,设置ProtocolTLSv1.2

      重要

      TCP直连模式(即securemode=3)下,无需设置SSL/TLS信息,直接进入下一步。

      Enable SSL/TLS

  4. 设置完成后,单击右下角的OK

  5. 单击Connect

    右侧亮绿灯,表示连接成功。Connect

    您可在物联网平台控制台,在对应实例下,选择设备管理 > 设备,选择产品,查看该设备状态,预期设备为在线状态。

    在线

下文通过测试自定义Topic、物模型通信Topic的上下行通信,验证MQTT.fx与物联网平台连接是否成功。若测试与本示例结果不符,表示通信连接失败,您需根据日志信息,进行修正。

使用自定义Topic通信

自定义Topic的详细信息,请参见使用自定义Topic通信。本示例使用物联网平台默认提供的自定义Topic:

Topic

权限

说明

/a1***/device1/user/update/error

发布

上行通信:设备通过该Topic向物联网平台发送消息。

/a1***/device1/user/get

订阅

下行通信:设备通过订阅该Topic,获取从物联网平台下发的消息。

上行通信

  1. 在MQTT.fx上,单击Publish,在Publish文本框中,输入具有发布权限的Topic:/a1***/device1/user/update/error

  2. 在文本编辑页面,输入要发送的消息内容,然后单击Publish

    在mqtt.fx发布消息

  3. 登录物联网平台控制台,在对应实例下的日志服务页面,查看设备到云消息日志消息。具体操作,请参见查询云端运行日志

    查看mqtt.fx发布到物联网平台的消息

下行通信

  1. 在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入具有订阅权限的Topic:/a1***/device1/user/get

  2. 单击Subscribe

    订阅成功后,该Topic会显示在列表中。

    自定义Topic显示在mqtt.fx订阅列表中

  3. 登录物联网平台控制台,在对应实例下,选择设备管理 > 设备

  4. 单击设备对应操作列的查看,进入设备详情页面。

  5. 单击Topic列表页签,单击已订阅Topic对应操作列的发布消息

  6. 输入消息内容,例如This is a test .,单击确认

  7. 回到MQTT.fx上,查看接收到的消息。

    接收消息

使用物模型通信Topic通信

物模型通信Topic的详细信息,请参见什么是Topic。本示例使用物模型通信Topic:

Topic

权限

说明

/sys/a1****/device1/thing/event/property/post

发布

上行通信:设备通过该Topic向物联网平台上报属性数据。

/sys/a1****/device1/thing/event/property/post_reply

订阅

下行通信:设备通过订阅该Topic,获取物联平台响应设备属性上报的消息。

/sys/a1****/device1/thing/service/property/set

订阅

下行通信:设备通过该订阅Topic,获取物联网平台下发的消息。

设备上报属性

  1. 在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入具有订阅权限的Topic:/sys/a1****/device1/thing/event/property/post_reply

  2. 在MQTT.fx上单击Publish,在Publish文本框中,输入具有发布权限的Topic:/sys/a1****/device1/thing/event/property/post

  3. 在文本编辑页面,输入要上报的属性数据,然后单击Publish

    设备上报属性数据的格式,需符合标准Alink JSON格式。具体说明,请参见设备上报属性。本示例上报属性LightCurrentLightSwitch数据。物模型属性

  4. 在MQTT.fx上单击Subscribe,查看物联网平台返回给设备的响应消息。

    如下图所示,设备上报属性成功。响应消息

  5. 登录物联网平台控制台,在对应实例下,选择设备管理 > 设备

  6. 单击设备对应操作列的查看,在设备详情页面单击物模型数据,查看设备数据。

设置设备属性

  1. 在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入具有订阅权限的Topic:/sys/a1****/device1/thing/service/property/set

  2. 登录物联网平台控制台,在对应实例下,选择监控运维 > 在线调试

  3. 选择要调试的设备,然后在属性调试页签下,设置主灯开关关闭-0

  4. 单击设置,发送指令。

  5. 在MQTT.fx上的Subscribe页签下,查看设备接收的消息。

    属性设置

查看日志

  • 登录物联网平台控制台,在对应实例下的日志服务页面,查看时间、TraceID和业务类型等运行日志消息。具体操作,请参见查询云端运行日志

  • 在MQTT.fx上,单击Log查看操作日志和错误提示日志。查看mqtt.fx的log

相关文档

  • MQTT 协议因为适合于弱网、资源有限的环境,被广泛用于物联网行业。关于阿里云物联网的MQTT协议支持详情,请参见MQTT协议规范

  • 将设备接入物联网平台的流程,请参见设备接入引导

  • 在MQTT协议中,消息发布和订阅的中介是Topic,设备可通过Topic实现消息的发送和接收,Topic的概念和定义,请参见什么是Topic