中国移动OneNet平台使用MQTT.fx通过MQTT/MQTTS接入流程

需要C语言接入OneNET/DMP/阿里云/百度云等源码可以联系我

1 OneNet介绍

中国移动物联网开放平台是中移物联网有限公司基于物联网技术和产业特点打造的开放平台和生态环境,适配各种网络环境和协议类型,支持各类传感器和智能硬件的快速接入和大数据服务,提供丰富的API和应用模板以支持各类行业应用和智能硬件的开发,能够有效降低物联网应用开发和部署成本,满足物联网领域设备连接、协议适配、数据存储、数据安全、大数据分析等平台级服务需求。
OneNet主页

2 接入OneNet流程

2.1 准备工作

2.1.1注册账号

首先需要在onenet平台注册自己的账号,然后实名认证(可以不实名认证,不过创建的产品和设备个数会受限),具体如下;
认证等级对应的权限

2.1.2 创建产品设备

使用OneNET账号,登录开发者中心,点击MQTT物联网套件,选择创建产品,根据需要的信息填写后创建。
进入MQTT物联网套件
创建好产品后如下,获取产品ID,可以点击产品名进入产品详情,创建设备
产品页
在此点击设备列表进入设备详情页
设备列表页面

在设备列表页面选择创建设备,输入设备名称(此项为设备唯一标识,可以用IMEI号等唯一参数填入)。
设备列表页面
设备详情页
创建好设备之后进入设备详情页面,得到设备key,我们现在总共得到三项参数 ProductID、DeviceName、DeviceKey,可以尝试接入OneNet了。
调试可以使用MQTT.fx接入OneNet,官网已经找不到MQTT.fx1.7.1的下载链接了,下面带有下载链接 https://download.csdn.net/download/qq_38721267/86724165?spm=1001.2014.3001.5503

2.2 用MQTT.fx接入OneNet

2.2.1 注意事项

OneNet只支持标准 MQTT 3.1.1版本
报文支持

平台支持connect、subscribe、publish、ping、unsubscribe、disconnect 等报文
不支持 pubrec、pubrel、pubcomp 报文

特性支持
平台对 topic 约定如下:

暂不支持用户自定义 topic,仅限使用系统 topic

系统topic均为 $ 开头

用户可以使用相关系统 topic 访问接入套件中的存储、命令等服务,详情请见topic簇

设备使用 系统 topic 时暂仅限订阅与发布消息至自己相关的 topic,不能跨设备/产品订阅与发布

topic非法使用

设备订阅非法 topic 时,平台通过MQTT publish ack返回订阅失败

设备发布消息到非法topic时,平台会断开设备连接

通配符:平台支持通配符 + 与 #

说明:使用 系统topic 时支持的通配符仅支持从 topic 第四级目录开始

支持 $sys/{pid}/{device-name}/#、$sys/{pid}/{device-name}/cmd/#、
		$sys/{pid}/{device-name}/cmd/request/+等订阅方式
不支持 $sys/{pid}/#、$sys/#、# 等订阅方式

设备可以按照如下方式进行消息订阅:
topic簇族

服务器地址是 mqtts.heclouds.com
端口号为1883或8883,如果使用MQTTS接入端口号就填8883。
ClientID为DeviceName
UserName为ProductID
Password为几个参数拼接计算而成,具体算法如下:

2.2.2 Password计算方法

计算Password需要如下几个参数
expireTime 本次会话过期时间时间戳,时间到了就会踢出客户端,我目前调试写的都是当前时间加十年
ProductID、DeviceName、DeviceKey 这三个参数就不赘述了
AuthVersion 鉴权版本,当前固定为 2018-10-31,
signMode 签名方法 支持md5、sha1、sha256三种

2.2.2.1 先拼接用于签名的字符串

signBuf={expireTime}\n/signMode\n/products/{ProductID}/devices/{DeviceName}\n/{AuthVersion } (注:有三个\n换行符不要忽略)

2.2.2.2 再用base64解码对DeviceKey进行解码

2.2.2.3 用解码后的DeviceKey对signBuf进行签名,根据传入的signMode使用不同的签名方法

2.2.2.4 对签名后得到的值进行base64编码

编码后得到的字符串即为Password.
token计算工具链接
MQTT.fx链接配置页

2.2.3 登录

配置完之后就可以登录了,如果需要使用MQTTS接入,端口号要配置为8883,并且需要在SSl/TLS配置页面配置CA证书路径,CA证书链接
CA证书配置

2.2.4 发布、订阅和响应

登录后可以在云端设备列表页面看到设备已在线,然后就可以和云端进行上下行通信了
在线展示
在云端点击下发指令可以给设备下发命令,设备端需要订阅$sys/{ProductID}/{DeviceName}/cmd/request/+主题,(ProductID和DeviceName按照具体信息填入即可)
下发命令菜单
具体下发命令
设备端收到下发消息
在这里插入图片描述
设备回应消息 向 $sys/{ProductID}/{DeviceName}/cmd/response/{commandID} 发送响应(ProductID和DeviceName按照具体信息填入即可,commandID为下发主题request之后的ID,此例中为f17499开头282a结尾的字符串)
回复服务端命令
如果需要发布具体的数据流,则需要发送到主题 $sys/{ProductID}/{DeviceName}/dp/post/json,
数据格式如下

{
    
    
    "id\: 123, //随机数
    "dp":
    {
    
    "IMEI":    //上报的属性名
        [
            {
    
    
                "v": "123456789",  //属性值
                "t": 456789        // 时间戳
            }
        ]
    }
}

云端收到会回复 $sys/{ProductID}/{DeviceName}/dp/post/json/accepted 或者 $sys/{ProductID}/{DeviceName}/dp/post/json/rejected主题表示发布成功/失败,发布成功在数据流展示页面可以看到上报的数据
数据流展示页面

3 总结

大概交互流程就是这样,接入和通信还是建立在MQTT协议基础上做了些数据包格式的封装。

猜你喜欢

转载自blog.csdn.net/qq_38721267/article/details/127118296