MQTT协议云网关设备使用MQTT.fx接入

本文以Windows系统下MQTT.fx为例,介绍如何将MQTT协议云网关设备模拟接入物联网平台,并上报数据。

前提条件

已完成以下操作:

  • 购买企业版实例:本示例购买华东2(上海)地域的尊享型实例。

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

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

  • 自定义证书。

    本文示例需自定义证书包含:根证书root-ca.crt、服务端证书私钥server.key和服务端证书server.crt

    您可以使用OpenSSL工具生成自定义证书,制作方法,请参见生成自定义证书

背景信息

MQTT.fx是一款基于Eclipse Paho使用Java语言编写的MQTT客户端,支持Windows、Mac和Linux操作系统,可用于验证设备是否可与物联网平台正常连接,并通过Topic通信。

MQTT协议云网关提供一方认证和三方认证两种认证方式,设备可选择任一认证方式,使用自定义证书、服务端认证和自定义Topic通信等能力,实现与物联网平台连接并进行通信。

MQTT协议云网关设备认证和通信说明,请参见MQTT协议云网关概述

设备使用MQTT.fx接入(一方认证)

步骤一:创建云网关产品和设备

  1. 创建云网关产品(MQTT):配置如下图所示,服务端证书私钥server.key服务端证书server.crt

    image
  2. 在云网关列表,复制网关URL保存。

    image
  3. 批量添加设备:本示例添加一个设备,MQTT Usernamedevice_01MQTT Passwordhello123

步骤二:配置MQTT.fx接入

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

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

    1. 设置以下基本信息,其他参数使用默认值。

      参数

      说明

      Profile Name

      输入您的自定义名称。

      Profile Type

      MQTT服务器连接,选择MQTT Broker

      Broker Address

      MQTT云网关接入地域,即已创建云网关产品的网关URL中域名。

      Broker Port

      设置为自定义端口号,默认为1883

      Client ID

      (可选)客户端ID,需自定义,长度不可超过64个字符。建议使用设备的MAC地址或SN码,方便您识别区分不同的客户端。

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

      User NamePassword分别对应已添加云网关设备的MQTT UsernameMQTT Password

    3. 单击SSL/TLS,选中Enable SSL/TLS,设置ProtocolTLSv1.2

    4. 选中CA certificate file,然后选择根证书文件root-ca.crt的路径。image

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

  4. 单击Connect

    右侧亮绿灯,表示连接成功。在物联网平台控制台实例下的设备管理 > 设备页面,设备device_01状态显示为在线image

设备使用MQTT.fx接入(三方认证)

步骤一:创建设备认证的FC函数

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数

  2. 在顶部菜单栏,选择华东2(上海)地域,然后在服务列表页面,单击创建服务

  3. 创建服务面板,填写服务名称,例如:IoT_Service,然后单击确定。

  4. 函数管理页面,单击创建函数

  5. 创建函数页面,配置以下配置项,然后单击创建

    image
  6. 函数详情页面,将示例代码替换为以下代码,单击部署代码

    认证函数将UserName作为deviceName返回。

    # -*- coding: utf-8 -*-
    import logging
    import json
    import time
    import enum
    import random
    import string
    
    class Request:
        def __init__(self, json_str):
            self.clientId = None
            self.username = None
            self.password = None
            self.certificateCommonName = None
    
            for key, value in json.loads(json_str).items():
                setattr(self, key, value)
    
    class Response:
        def __init__(self):
            self.deviceName = None
            self.result = 'true'
            self.message = 'success'
    
        def handler(self, request):
            # 按照业务需求验证UserName和Password的合法性
        
            self.deviceName = request.username
            
            
            return json.dumps(self.__dict__)
    
    def handler(event, context):
        request = Request(event)
        return Response().handler(request)

步骤二:创建云网关产品

  1. 创建云网关产品(MQTT):配置如下图所示,其中服务端证书私钥server.key服务端证书server.crt,设备认证FC服务和设备认证FC函数,选择为已添加的IoT_Servicethree_part_auth

    image
  2. 在云网关列表,复制网关URL保存。

    image

步骤三:配置MQTT.fx接入

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

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

    1. 设置以下基本信息,其他参数使用默认值。

      参数

      说明

      Profile Name

      输入您的自定义名称。

      Profile Type

      MQTT服务器连接,选择MQTT Broker

      Broker Address

      MQTT云网关接入地域,即已创建云网关产品的网关URL中域名。

      Broker Port

      设置为自定义端口号,默认为1883

      Client ID

      (可选)客户端ID,需自定义,长度不可超过64个字符。建议使用设备的MAC地址或SN码,方便您识别区分不同的客户端。

    2. 单击User Credentials,选中Use Username/Password复选框,设置User Name(例如:threeParty_device_001Password

      说明
      • User Name支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~32个字符。User Name在产品维度下不可重复。

      • Password支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为1~32个字符。

    3. 单击SSL/TLS,选中Enable SSL/TLS,设置ProtocolTLSv1.2

    4. 选中CA certificate file,然后选择根证书文件root-ca.crt的路径。image

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

  4. 单击Connect

    右侧亮绿灯,表示连接成功。通过FC认证函数返回的deviceNamethreeParty_device_001会作为物联平台设备的DeviceName,在物联网平台控制台实例下的设备管理 > 设备页面,自动创建设备threeParty_device_001,设备状态显示为在线image

设备使用自定义Topic上报数据

  1. 在MQTT.fx上,单击Publish,在Publish文本框中,输入自定义Topic:/home/garden/fountain

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

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