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