MQTT.fx 标准协议接入示例

更新时间:2024-03-05 10:05:47下载pdf

涂鸦提供云端 TuyaLink 标准(MQTT)开放协议,方便您接入硬件设备。本文以一款常见的 MQTT 客户端 MQTT.fx 为例,模拟设备使用涂鸦开放的 MQTT 协议接入云端。

环境准备

涂鸦 IoT 开发平台 创建产品,获取如下参数值。详细创建产品的过程,参考 选品类创建产品

MQTT.fx 标准协议接入示例 MQTT.fx 标准协议接入示例
参数名称 参数说明
ProductID 产品 ID
DeviceID 设备的身份信息,用于连接云端授权和通信使用
DeviceSecret 设备的密码信息,用于连接云端授权使用

接入示例

配置 MQTT.fx 接入文件

  1. 下载 并安装相应操作系统版本的 MQTT.fx 客户端。

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

    MQTT.fx 标准协议接入示例
  3. Edit Connection Profiles 页面,填写相关参数。

    MQTT.fx 标准协议接入示例
    参数名称 参数说明
    Profile Name 输入您的自定义名称
    Profile Type MQTT 服务器连接,选择 MQTT Broker
    Broker Address MQTT 接入域名,对应 MQTT 协议中的域名,此处以中国区域名 m1.tuyacn.com 为例
    Broker Port 通信端口号,设置为 8883
    Client ID MQTT 协议字段,格式为 tuyalink_{$deviceid}
    General 使用默认值即可
  4. 选择 User Credentials 并填写相关参数。

    MQTT.fx 标准协议接入示例
    参数名称 参数说明
    User Name ${deviceId}|signMethod=hmacSha256,timestamp=${当前 10 位时间戳},secureMode=1,accessType=1
    例如:6c828cba434ff40c074wF2|signMethod=hmacSha256,timestamp=1607837283,secureMode=1,accessType=1
    Password hmacSha256(content, deviceSecret)content 的值"deviceId=6c828cba434ff40c074wF2,timestamp=1607635284,secureMode=1,accessType=1",按照 deviceIdtimestampsecureModeaccessType 这个顺序组装明文内容。64 位字符的 16 进制数,不足 64 位时前面需要补零。
    • 此处涉及到的 DeviceIDDeviceSercet 信息在 IoT 平台注册设备时生成,可参考 环境准备 章节找到相应参数。
    • Password 加密信息:打开在线 Python 环境 1 或在线 Python 环境 2,复制下方代码,并修改设备的 DeviceIDDeviceSecret,然后点击运行,即可获得结果。

    示例如下:

    MQTT.fx 标准协议接入示例

    # 从产品开发平台获取设备相关信息
    DeviceID = '6cae4****b285b5t0d2'
    DeviceSecret = 'f9df8***bbaddc941'
    
    # 默认配置
    Address='m1.tuyacn.com'
    Port = 8883
    
    # 计算 Client ID
    ClientID = 'tuyalink_'+DeviceID
    
    # 计算用户名
    import time
    T = int(time.time())
    UserName= f'''{DeviceID}|signMethod=hmacSha256,timestamp={T},secureMode=1,accessType=1'''
    
    # 计算密码
    import hmac
    from hashlib import sha256
    
    data = f'''deviceId={DeviceID},timestamp={T},secureMode=1,accessType=1'''.encode('utf-8')  #  加密数据
    appsecret = DeviceSecret.encode('utf-8')  #  秘钥
    
    Password = hmac.new(appsecret, data, digestmod=sha256).hexdigest()
    
    # 打印MQTT连接所需的参数
    print('-'*20)
    print('Client ID:',ClientID)
    print('服务器地址:',Address)
    print('端口:',Port)
    print('*用户名:',UserName)
    print('*密码:',Password)
    
    print('SSL/TLS: true\n证书类型: CA signed server\nSSL安全: 开启')
    print('-'*20)
    
  5. 选择 SSL/TLS,选中 Enable SSL/TLS 并设置 ProtocolTLSv1.2

    MQTT.fx 标准协议接入示例
  6. 单击右下角 OK 完成设置,再去主页面单击 Connect
    等待右侧指示灯变绿,表示连接成功。

    MQTT.fx 标准协议接入示例

测试通信

上行通信

  1. Publish 页面输入发布的 topic,并填写 payload 信息,单击 Publish。此处以 tylink/6c855a6e81c40a91e9k5gx/thing/property/report topic 为例进行介绍。

    MQTT.fx 标准协议接入示例 MQTT.fx 标准协议接入示例
  2. 进入涂鸦 IoT 开发平台的 设备日志 页面,输入 DeviceID 信息,可以看到刚才发布的消息,证明上行通信已经成功。

    MQTT.fx 标准协议接入示例

下行通信

  1. Subscribe 页面输入 topic,单击 Subscribe,客户端会出现一条订阅的信息。此处以 tylink/6c855a6e81c40a91e9k5gx/thing/model/get_response topic 为例进行介绍。

    MQTT.fx 标准协议接入示例
  2. 进入 Publish 页面,输入与订阅对应的 topic 信息,并单击 Publish 发布。

    MQTT.fx 标准协议接入示例
  3. 返回到 Subscribe 页面,可以看到刚才订阅的 topic 收到了云端的信息。

    MQTT.fx 标准协议接入示例