博客
关于我
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:5. 设置设备属性
阅读量:453 次
发布时间:2019-03-06

本文共 2212 字,大约阅读时间需要 7 分钟。


 

在上一章,格力空调温度 gree_temperature 设置了 读写 权限,因为空调的输出温度是可以被设置的。

CPU 温度是根据实际情况进行采集,而 空调温度 是遥控器设置的,服务器可以或者这个温度数据,同时也可以设置这个数据。
读写权限表示服务器有权限下发指令设置设备的属性。

注意的是,只有 读/读写 两种情况,没有 写 。


1)允许服务器设置设备属性

通讯就是 订阅/推送 、数据上下传输,本身没有这么复杂,无论 是属性、事件、服务,本质还是 Topic。

CZGL.AliIoTClient 作了细致的划分(快夸笔者),里面设置了很多参数,这样更自由、方便。

第3章已经说到如何打开和取消响应和其它功能,这里就不再解释。

以下为初始代码,将会在此基础上进行说明(请修改 DeviceOptions 的信息):

static AliIoTClientJson client;        static void Main(string[] args) { // 创建客户端 client = new AliIoTClientJson(new DeviceOptions { ProductKey = "a1A6VVt72pD", DeviceName = "json", DeviceSecret = "7QrjTptQYCdepjbQvSoqkuygic2051zM", RegionId = "cn-shanghai" }); client.OpenPropertyDownPost(); // 设置要订阅的Topic、运行接收内容的Topic string[] topics = new string[] { client.CombineHeadTopic("get") }; // 使用默认事件 client.UseDefaultEventHandler(); // 连接服务器 client.ConnectIoT(topics, null, 60); Console.ReadKey(); }

在 Console.ReadKey() 前加一行代码,运行服务器下发属性设置命令:

client.OpenPropertyDownPost();

运行程序。


2)下发命令

打开阿里云物联网控制台,进入 在线调试 ,然后选择前面已经创建的产品、设备。

你也可以直接打开:  进行如下设置:

调试设备:调试真实设备功能:    格力空调温度(gree_temperature)方法:    设置

然后将输入框里的数值改为 20.0 ,点击 发送指令

{  "gree_temperature": 20}

然后你可以看到控制台程序收到了指令:

get topic message,Date: 16:52:55topic: /sys/a1A6VVt72pD/json/thing/service/property/setget messgae :{"method":"thing.service.property.set","id":"666237842","params":{"gree_temperature":20},"version":"1.0.0"}

由于使用 Alink json,所以服务器下发的指令实际上是这样的:

{"method":"thing.service.property.set","id":"666237842","params":{"gree_temperature":20},"version":"1.0.0"}

那为什么会输出其它东西呢?这是因为 CZGL.AliIoTClient 种设置了多个默认的事件方法,

它会输出收到的消息内容(message)等信息,你可以自定义方法来处理。

将 字符串格式化后:

{	"method": "thing.service.property.set",	"id": "666237842",	"params": { "gree_temperature": 20 }, "version": "1.0.0"}

但是目前只能收到服务器下发的命令,还没有写如何处理这些命令的方法,这需要你编写相应的方法绑定到委托事件中。

当收到属性消息时,会触发这些方法。如何设置,请参考后面的章节。


3)做出响应

当你收到服务器下发的指令时,你可以对这条 Topic 做出响应。

// 返回消息IDpublic int Thing_Property_set(CZGL.AliIoTClient.PropertyDownModel model, [bool isToLower = True])public int Thing_Property_set(CZGL.AliIoTClient.PropertyDownModel model, [bool isToLower = True], [System.Text.Encoding encoding = null])public int Thing_Property_set
(TModel model, [bool isToLower = True])


实际上,不需要做出响应。。。如果有需要的话,可以自定义方法,在方法里面加上响应,绑定到委托里,自动响应。

如何设置,请参考后面的章节。

转载地址:http://ucybz.baihongyu.com/

你可能感兴趣的文章
网站状态码
查看>>
数据库优化
查看>>
elasticsearch安装01
查看>>
[备忘]21个演示展示强大的jQuery特效
查看>>
[备忘]域用户登陆出现“此工作站和主域间的信任关系失败”错误解决方法
查看>>
stout代码分析之二:None类
查看>>
hadoop压缩和解压
查看>>
Hyper和Vmware冲突,Device/Credential Guard 不兼容
查看>>
关于开箱即用的文档静态网站生成器VuePress
查看>>
xmake v2.3.2 发布, 带来和ninja一样快的构建速度
查看>>
继续聊WPF——用Blend自定义Listview控件的列表头
查看>>
Windows Phone开发(8):关于导航的小技巧
查看>>
【WPF】制作自定义的列表项面板
查看>>
【.net 深呼吸】启动一个进程并实时获取状态信息
查看>>
【.net 深呼吸】项目中是否有必要删去多余的引用
查看>>
【ASP.NET Core】浅说目录浏览
查看>>
OO_Unit2 多线程电梯总结
查看>>
mybatis源码分析:Mapper接口是什么
查看>>
mybatis源码配置文件解析之五:解析mappers标签(解析class属性)
查看>>
java面试一日一题:mysql事务是如何实现的
查看>>