MQTT.fx客户端MQTT接入阿里云物联网平台,登录、订阅、发布消息

目录

1. 准备

2. MQTT.fx 设置登录名、密码

3. MQTT.fx 接入阿里云,订阅Topic

4. 阿里云下发数据给 MQTT.fx

5. MQTT.fx 发布消息给服务器

相关链接:MQTT协议


1. 准备

阿里云物联网,创建产品、设备、三元组证书获取:阿里云物联网创建产品、设备、三元组证书

MQTT.fx 下载地址:MQTT.fx下载

阅读本篇文章,不需要了解 MQTT协议和通信帧的格式,只要创建好阿里云的产品和设备,即可使用 MQTT.fx 接入调试。关于 MQTT协议部分的详解见本篇末尾的链接。

 

提前 注册并登陆阿里云物联网平台,参考上面链接,创建产品、设备,获取到设备三元组证书

下载并安装 MQTT.fx。

 

2. MQTT.fx 设置登录名、密码

 

打开 MQTT.fx,点击 小齿轮图标

 

配置四项信息:设备服务器地址客户端ID用户名密码

 

设备服务器地址客户端ID用户名密码 的合成方法:

设备服务器地址#.iot-as-mqtt.cn-shanghai.aliyuncs.com#为ProductKey
客户端ID*|securemode=3,signmethod=hmacsha1|*为设备名称
用户名*&#*为设备名称,#是ProductKey
密码用DeviceSecret做为秘钥对clientId*deviceName*productKey#进行hmacsha1加密后的结果*为设备名称,#是ProductKey

在线 HmacSHA1 加密算法计算器:HmacSHA1在线加密计算

我博客中,使用的设备证书三元组为:(此设备不会更改和注销,以便各位测试使用)

{
  "ProductKey": "a1wFylTxYeD",
  "DeviceName": "co_0001",
  "DeviceSecret": "7ab0c4b3532b5783df5fdc58a2895d7a"
}

最终根据我设备的三元组证书,合成出 设备服务器地址客户端ID用户名密码 为:

设备服务器地址a1wFylTxYeD.iot-as-mqtt.cn-shanghai.aliyuncs.com
客户端IDco_0001|securemode=3,signmethod=hmacsha1|
用户名co_0001&a1wFylTxYeD
密码e782b5e55b37655c27812a60c307b0a7575d8f6d

 

依次填入后,点击右下方 OK。

 

3. MQTT.fx 接入阿里云,订阅Topic

 

点击 Connect,连接服务器。右上角的指示灯会变为 绿色,表示连接成功。

 

点击上方的 Subscribe ,进入订阅界面。

填入/sys/a1wFylTxYeD/co_0001/thing/service/property/set,点击右侧 Subscribe。使用QoS0 订阅这个主题。

 

阿里云物联网控制界面,刷新。

显示设备在线。已订阅 Topic 列表中,存在刚才订阅的主题。

 

 

阿里云物联网平台中,会使用到的 Topic,为这两项:(每个人的都不一样,不同产品、设备都会不一样)

/sys/a1wFylTxYeD/co_0001/thing/service/property/set(用于服务器下发消息给设备)

/sys/a1wFylTxYeD/co_0001/thing/event/property/post(用于设备上报消息给服务器)

设备只需订阅 set那一条Topic,不用订阅 post也可以进行发布上报。

 

 

4. 阿里云下发数据给 MQTT.fx

 

阿里云物联网平台,进入 设备 - 在线调试,选择产品、设备,设置调试功能、方法。

点击下方 发送指令。

 

MQTT.fx 会收到服务器发布的消息。消息有效内容一致。

 

消息信息也可以在 Log日志中查看。

 

 

5. MQTT.fx 发布消息给服务器

点击 MQTT.fx 上方的 Publish ,进入发布消息界面。

发布消息,需要用到主题/sys/a1wFylTxYeD/co_0001/thing/event/property/post

将上一条服务器发来的消息复制过来,进行一下改动:

{"method":"thing.service.property.set","id":"1100426949","params":{"PowerSwitch_1":0},"version":"1.0.0"}

修改后为:

{"method":"thing.event.property.post","id":"200831114643","params":{"PowerSwitch_1":1},"version":"1.0.0"}

其中,改动了方法、消息ID、开关值。

消息ID,可自行用户定义,不会对属性的值造成影响,只用来标识传输的消息帧。我用的时间戳。

 

阿里云物联网 - 设备 - 物模型数据,打开实时刷新。

点击Publish,可观察到开关值的变化。上发消息到服务器成功。

 

!!!阿里云服务器仅支持Qos=0的post。Qos=1/2 不支持,发送Qos=1会有错误。

MQTT协议规定,PUBACK 是对 Qos=1时的 PUBLISH的发布消息确认。也就是说Qos=1 才有 PUBACK,但阿里云服务器仅支持 Qos=0的POST,所以压根就不会有PUBACK。而用户强行发送Qos=1的PUBLISH,会返回错误:40 02 7B 22 ,并且不会对本帧的内容进行处理,开关状态也不会得到更新。

 

 

相关链接:MQTT协议

MQTT 协议详解:MQTT 协议详解

MQTT 报文帧格式详解:MQTT 报文帧格式详解

使用电脑网络调试助手,MQTT接入阿里云物联网平台:网络调试助手接入阿里云

 

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值