阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:3. 订阅Topic与响应Topic
CZGL.AliIoTClient 将 Topic 分为五种
分别是:普通Topic、属性上报、属性下发、事件上报、服务调用,除了普通 Topic,每种 Topic 都有消息的发送、响应。
普通 Topic ,消息发送或,根据 MQTT 协议,SDK 严格保证消息能够到达另一端。
设备推送属性、事件等数据到服务器,则服务器要响应,
服务器推送(下发)数据到设备,则设备要响应。
当然,这些响应可有可无,无实质的影响。
每种、每个 Topic 都有特定的 MQTT 通讯地址,这些地址已经在 CZGL.AliIoTClient 中自动生成,你仅需填写普通 Topic 的通讯地址即可。
1) 订阅 Topic
订阅 Topic 前,需要在阿里云物联网定义相应的 Topic 以及设置 订阅
权限,
普通 Topic ,使用 string[] 包含列表,然后在调用连接方法时作为参数传入,亦可在连接服务器后,添加需要的订阅。
普通 Topic 可以动态添加,属于 热订阅 。
使用方法:
// 设置要订阅的Topic、运行接收内容的Topic string[] topics = new string[] { client.CombineHeadTopic("get"), "/a1xrkGSkb5R/mire/user/get1" }; client.ConnectIoT(topics,null,60);
Topic 地址比较长,你可以记录 .../user/
后的内容,使用 CombineHeadTopic()
可自动生成,
client.CombineHeadTopic("get")
2)响应
当你使用属性、事件、服务功能,对服务器进行数据传输时,服务器会做出响应,你可以选择接收响应,也可以不接收响应。
CZGL.AliIoTClient 默认不接收服务器的响应信息。实际上这些响应信息一般只在调测时需要。
响应方法 | 说明 |
---|---|
OpenEventPostReply() | 接收上报事件后服务器的响应 |
OpenPropertyPostReply() | 接收设备属性上传后服务器的响应 |
| |
OpenPropertyDownPost() | 允许服务器下发设置设备属性指令 |
注意,这些响应,必须在连接客户端前设置,并且在客户端已经连接后,不能再使用以上方法,否则会弹出异常。
已修复,你可以在程序的任意阶段打开接收功能,任意取消和打开。
查看这些功能是否打开:
public CZGL.AliIoTClient.OpenTopic getOpenTopic()
OpenTopic
具有 8 个属性,用于获取或设置是否打开某种功能的接收。
属性 | 说明 | 默认值 |
---|---|---|
CommonTopic | 是否接收普通Topic | 固定为true,不能更改 |
PropertyUpRawReplyTopic | 设备上传透传属性数据后服务器的响应 | false |
PropertyPostReplyTopic | 设备上传Alink json属性数据后服务器的响应 | false |
PropertyDownRaw | 服务器下发设置属性的命令,透传 | false |
PropertyDownPost | 服务器下发设置属性的命令,Alink json | false |
EventUpRawReply | 设备事件上报,接收服务器的响应,透传 | false |
EventPostReply | 设备事件上报,接收服务器的响应,Alink json | false |
ServiceDownRaw | 服务器调用服务,透传 | false |
ServicePostRaw | 服务器调用服务,Alink json | false |
由于区分 透传 和 Alink json,若是透传,设置上面的 Alink json 项,是无效的,反之亦然。
3)连接服务器后
在连接服务器后,你还可以增加要订阅的普通 Topic:
public void TopicAdd(string[] topics, [byte[] QOS = null])
示例:
client.TopicAdd(new string[]{ client.CombineHeadTopic("get") })
移除已经订阅的 Topic:
public void TopicRemove(string[] topics)
在连接服务器后,可以取消接收服务器的响应信息,但是不能再重新接收。
方法 | 说明 |
---|---|
CloseEventPostReply() | 不再接收设备上传事件后服务器的响应 |
ClosePropertyPostReply() | 不再接收设备上传属性后服务器的响应 |
| |
ClosePropertyDownPost() | 不允许服务器下发设置设备属性的指令 |
你可以在客户端连接服务器后,取消接收响应。但是,取消后,不能再订阅!
已修复,你可以在程序任意阶段取消后再打开接收。
4) Topic 说明
获取已经订阅的Topic列表:
public string[] GetSubedList { get; }
示例:
var topicList = client.GetSubedList;
服务器设置设备属性、调用服务等功能,由于采用 MQTT 通讯,是订阅/推送形式的,所以,无论什么功能的数据传输,本质还是Topic。
因此,那些设备属性上报、设置设备属性等,可以配置 Topic 属性。
CZGL.AliIoTClient 中,客户端可以订阅需要的 Topic,连接服务器后,服务器可以向所有 Topic 发送数据,但只有客户端指定订阅的 Topic,客户端才会接收到推送,不然无论在控制台怎么点击发送,客户端都是不会接收到的。
有个地方需要注意的是,对于普通Topic,是随客户端连接时的配置,决定服务器是否能够推送消息到客户端,动态的。
而属性、事件、服务这些功能,会保存上一次的配置。当你打开
client.OpenPropertyPostReply();
接收属性上传到服务器的响应后,在程序删除
client.OpenPropertyPostReply();
再次运行,依然会接收到响应,除非设置
client.ClosePropertyPostReply();
设备上传数据到服务器,服务器会做出响应,当然,服务器设置设备属性、调用设备服务时,客户端也可以做出响应。将在后面的章节讲述。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:2. IoT 客户端
1) 客户端连接 CZGL.AliIoTClient 中,有两个连接到阿里云物联网服务器的方法: public CZGL.AliIoTClient.ConnectCode ConnectIoT(string[] SubTopic, [byte[] QOS = null], [ushort keepAlivePeriod = 60]) public System.Threading.Tasks.Task<CZGL.AliIoTClient.ConnectCode> ConnectIoTAsync(string[] topics, [byte[] QOS = null], [ushort keepAlivePeriod = 60]) 参数说明及返回值: 参数名称 类型 说明 SubTopic string[] 要订阅的 Topic 列表,只有先订阅这个 Topic ,才会接收到服务器推送这个 Topic QOS byte[] 每个Topic都配置一个QOS,如果为空,将会为每个Topic设置 QOS=0x00,注意QOS只有0,1,2三种,因此使用byte最合适 keepAli...
- 下一篇
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性
设备自身 CPU 温度、电源输入电压、内存使用率等,以及接入到设备的传感器如温度传感器、光敏传感器等,这些硬件的数据输出即是 属性 。 设备将这些硬件的数据上传到阿里云物联网平台,实时显示这些设备的状态和实测数据,这个过程是 上传设备属性 。 1)定义物模型 在阿里云物联网控制台,点击 产品 -> 功能定义 -> 添加自定义功能 填入一下内容: 功能类型:属性 功能名称: CPU温度 标识符: cpu_temperature 数据类型: float (单精度浮点型) 取值范围:0-120 步长: 0.1 单位: 摄氏度 / °C 读写类型:只读 再定义一个属性: 功能类型:属性 功能名称: 格力空调温度 标识符: gree_temperature 数据类型: float (单精度浮点型) 取值范围:0-35 步长: 0.1 单位: 摄氏度 / °C 读写类型:读写 注意的是,表示符是区分大小写的,相当于 C# 中的变量,笔者这里建议统一使用小写,具体原因后面说明。 注意:读写类型,一个只读、一个读写。 2)编写模型 前面说过, Alink json 是阿里云定义具有一定格式...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- CentOS8安装Docker,最新的服务器搭配容器使用