玩转 ESP32 + Arduino (十三) 通过MQTTs协议上传数据至OneNet云平台

如题所述

这里我们使用了一个库: PubSubClient

创建产品

创建新设备

(1). 产品ID, 用户ID,和登录key

(2). 设备名称, ID和 设备key

OneNet MQTTS用携带token的方式进行鉴权

访问者(可以为应用或者设备)固化访问密钥于软件中,在需要进行服务访问时,通过密钥计算临时token,通过临时token进行服务访问认证

访问者首先通过访问管理者获取临时访问token,访问管理者可根据需要自定义该token的访问有效期(即过期时间),访问者获取该token后方才能访问OneNET

访问管理者直接将密钥授权给访问者(例如,直接为设备烧写key),访问者通过密钥生成token进行访问

计算方法: https://open.iot.10086.cn/doc/mqtt/book/manual/auth/token.html
token生成工具: https://open.iot.10086.cn/doc/mqtt/book/manual/auth/tool.html

根据软件界面, 我们应提供 res et key method

格式为: products/产品ID/devices/设备名

以我们刚刚创建的产品和设备为例:

时间戳 (也叫:格林威治时间戳,或者UNIX时间戳)
计算地址:
https://tool.lu/timestamp/

我直接计算到了 2099年

设备的key (不是产品的access key)

相关文档: https://open.iot.10086.cn/doc/mqtt/book/device-develop/topics/introduce.html

MQTTS物联网套件中设备相关服务(存储、命令等)的面向设备的接口,均以 topic 的形式提供,设备可以通过 publish 消息到系统 topic 调用服务接口,也可以订阅系统 topic 用于接收服务消息通知,服务提供的系统 topic 的集合形成了 topic 簇

MQTTS物联网套件目前包含:数据点topic簇、命令topic簇、子设备topic簇、设备影子topic簇,如下图所示:

数据点topic簇

设备可以通过数据点 topic 簇上传数据存储并即时获取数据存储结果

簇中topic 以 $sys/{pid}/{device-name}/dp 开头
通过publish上传数据时,payload需要满足平台约定数据格式
支持一次上报多条数据,支持设备自带时间戳上报
即时通知数据处理结果(需订阅)

MQTT物联网套件支持用户以 数据流-数据点 模型( 模型详情 )将数据上传至平台并进行存储,设备可以通过数据点 topic 簇调用数据点存储服务存储数据,可以通过订阅系统 topic 获取数据处理结果通知,如下图所示:

对于本文中的例子, 应如下订阅:

上传的JSON数据必须采用以下规则

MQTT物联网套件支持应用通过API直接向设备发送单播命令,设备可以通过设备命令 topic 簇获取消息并进行消息应答

设备命令交互流程见下图:

topic中{cmdid}为变量,为每条命令的唯一id,可通过通配符的方式进行订阅,比如: $sys/{pid}/{device-name}/cmd/request/+ ,或者 $sys/{pid}/{device-name}/cmd/#

对于本位中 的例子,应如下订阅:

本连接实现了设备模拟上传温湿度数据, 设备接收平台下发的命令
(但没有给平台回复收到命令的消息)

老样子,写个小点灯.

温馨提示:答案为网友推荐,仅供参考
相似回答