002-STM32+ESP8266+AIR202基本控制方案-关于阿里云物联网平台上的自定义,物模型,基础通信Topic使用说明

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

Topic说明

一.点击产品,查看

二.阿里云提供了三种类型的Topic

先说一下自定义Topic

一.自定义Topic是说这个Topic可以自定义

而且消息格式也随意.

a1m7er1nJbQ 是产品的ProductKey

${deviceName} 是指让你用产品下设备的名字代替

后面的操作权限是告诉用户这个主题是用来发布的还是用来订阅

列如:

我上一节注册的设备的名字是 Mqtt

所以我这个设备发布的主题为:

/a1m7er1nJbQ/Mqtt/user/update

/a1m7er1nJbQ/Mqtt/user/update/error

我设备订阅的主题为:

/a1m7er1nJbQ/Mqtt/user/get

二.测试发布主题

 

三.测试订阅主题

四.注

用户只需要知道使用自定义的主题发布的消息可以随意,

在后面的章节会用到里面的消息.

物模型Topic(属性上报和设置)

一.平台提供了一个展示设备数据的页面

不过需要按照规定的协议上报数据

二.假设显示工作电压值(在产品的功能定义可以看到具体的定义)

提示:一个产品下面的所有设备都有这些功能,因为下面的设备隶属于这个产品嘛.

这是阿里云默认添加的功能,咱先看怎么使用.

三.显示Mqtt这个设备的电压值(ProductKey 和 deviceName 根据自己的修改)

发布的主题: /sys/a1m7er1nJbQ/${deviceName}/thing/event/property/post

消息: {"method":"thing.event.property.post","id":"1111","params":{"LightVolt":1},"version":"1.0"}

四.关于消息格式为啥那样写

参考阿里云文档

https://help.aliyun.com/document_detail/89301.html?spm=a2c4g.11186623.6.735.24096486HbmRhg

五.假设这个产品下的设备都需要个温度展示,自己添加个温度

1.编辑草稿

2.添加自定义功能

3.按照下面的填写

4.发布

六.测试(ProductKey 和 deviceName 根据自己的修改

发布的主题: /sys/a1m7er1nJbQ/${deviceName}/thing/event/property/post

消息: {"method":"thing.event.property.post","id":"1111","params":{"temp":25},"version":"1.0"}

 

七.再添加个湿度

八.同时上报温湿度数据(ProductKey 和 deviceName)根据自己的修改

发布的主题: /sys/a1m7er1nJbQ/${deviceName}/thing/event/property/post

消息: {"method":"thing.event.property.post","id":"1111","params":{"temp":25,"humi":60},"version":"1.0"}

九.订阅属性设置主题

1.(ProductKey 和 deviceName)根据自己的修改

/sys/${ProductKey}/${deviceName}/thing/service/property/set

2.订阅

3.找到在线调试,选择要调试的设备

4.随便找一个可以设置的功能

5.提示

如果是真实的设备,可以用作开灯和关灯.

6.可以设置温度

如果是真实的设备,可以用来设置温度的阈值,然后用来做温度报警

物模型Topic(事件上报)

一.现在看下这个

二,添加一个事件

1.编辑草稿

2.添加自定义功能

3.按照下图添加

4.发布

三,测试

发布的主题: /sys/{productKey}/{deviceName}/thing/event/{tsl.event.identifier}/post

发布的消息: {"method":"thing.event.{tsl.event.identifier}.post","id":"1111","params":{},"version":"1.0"}

替换自己的 productKey, deviceName, tsl.event.identifier(事件的标识符)

/sys/a1m7er1nJbQ/Mqtt/thing/event/tempH/post

{"method":"thing.event.tempH.post","id":"1111","params":{},"version":"1.0"}

注:

结合前面的那个设置属性,加上这个事件可以做一个设置阈值和报警的事情.

基础通信Topic(只简单介绍一下我已经使用过的)

一.基础通信Topic(OTA升级)

OTA升级的Topic是在设备运维里面的OTA升级使用

其实就是把固件放到服务器上,然后通过对应的Topic上报版本和获取固件版本,下载地址

咱在升级篇里面会使用到.

二,时钟同步

1.如果本身设备没有时钟,想获取时间戳,{productKey}/{deviceName}根据自己的修改

/ext/ntp/{productKey}/{deviceName}/request

发布的主题 : /ext/ntp/a1m7er1nJbQ/Mqtt/request

发布的消息: {"deviceSendTime":"0"}

提示:获取的时间戳是Ms ,误差10ms左右

 

2.获取精准时间

https://help.aliyun.com/document_detail/102509.html?spm=a2c4g.11186623.6.718.922d6486p633oV

注:其它参数都有,我只说一下这个 deviceRecvTime 是咋回事.

其实自己设备首先应该跑着时钟,不管你时钟跑的对不对,

你发送的数据其实是:  {"deviceSendTime":"获取设备时钟的时间戳"}

然后你接收到消息后再获取一下设备的当前的时钟的时间戳就是 deviceRecvTime

原文地址:https://www.cnblogs.com/yangfengwu/p/14230769.html