MQTT.fx是一款基于Eclipse Paho,使用Java语言编写的MQTT客户端,支持Windows、Mac和Linux操作系统,可用于验证设备是否可与物联网平台正常连接,并通过Topic订阅和发布消息。本文以Windows系统下MQTT.fx为例,介绍模拟设备以MQTT协议接入物联网平台。

前提条件

已在物联网平台控制台创建产品和设备,然后在设备详情页面,获取设备证书和MQTT连接参数的信息。具体操作,请参见:

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

参数
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
注意 MQTT.fx模拟的在线设备,仅支持非透传消息通信。如需实现透传信息通信,您可以使用真实设备或SDK进行测试。

配置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. 设置基本信息。
      编辑mqtt.fx的基本信息
      参数 说明
      Profile Name 输入您的自定义名称iot connection
      Profile Type MQTT服务器连接,选择MQTT Broker
      MQTT Broker Profile Settings
      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的上下行通信,验证MQTT.fx与物联网平台连接是否成功。若测试与本示例结果不符,表示通信连接失败,您需根据日志信息,进行修正。

测试下行通信

  1. 物联网平台控制台的产品详情页面,单击Topic类列表 > 自定义Topic,找到一个具有订阅权限的自定义Topic。
    本示例使用Topic:/a1***/${deviceName}/user/get,您需替换${deviceName}为设备名称device1

    更多信息,请参见自定义Topic

  2. 在MQTT.fx上单击Subscribe,在Subscribe文本框中,输入上一步的Topic,再单击Subscribe

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

    自定义Topic显示在mqtt.fx订阅列表中
  3. 返回物联网平台,进入该设备的设备详情页面,在Topic列表页签下,单击已订阅Topic对应的发布消息
    在mqtt.fx订阅的Topic下发布消息
  4. 输入消息内容,单击确认
    在mqtt.fx订阅的Topic下输入要发布的消息
  5. 回到MQTT.fx上,查看接收到的消息。
    接收消息
  6. 回到物联网平台,在设备详情页面,单击日志服务页签的前往查看,在日志服务页面,查看云到设备消息
    日志信息

测试上行通信

  1. 物联网平台控制台的产品详情页面,单击Topic类列表 > 自定义Topic,找到一个具有发布权限的自定义Topic。
    本示例使用Topic:/a1***/${deviceName}/user/update/error,您需替换${deviceName}为设备名称device1

    更多信息,请参见自定义Topic

  2. 在MQTT.fx上,单击Publish,在Publish文本框中,输入上一步的Topic。在文本编辑页面,输入要发送的消息内容,然后单击Publish
    在mqtt.fx发布消息
  3. 回到物联网平台,在设备详情页面,单击日志服务页签的前往查看,在日志服务页面,查看设备到云消息
    查看mqtt.fx发布到物联网平台的消息

查看日志

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

查看mqtt.fx的log