zoukankan      html  css  js  c++  java
  • 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:5. 设置设备属性

    文档目录:


    在上一章,格力空调温度 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)下发命令

    打开阿里云物联网控制台,进入 在线调试 ,然后选择前面已经创建的产品、设备。
    你也可以直接打开: https://iot.console.aliyun.com/lk/monitor/debug 进行如下设置:

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

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

    {
      "gree_temperature": 20
    }
    

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

    get topic message,Date: 16:52:55
    topic: /sys/a1A6VVt72pD/json/thing/service/property/set
    get 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 做出响应。

    // 返回消息ID
    public 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>(TModel model, [bool isToLower = True])
    

    
实际上,不需要做出响应。。。如果有需要的话,可以自定义方法,在方法里面加上响应,绑定到委托里,自动响应。
    如何设置,请参考后面的章节。

  • 相关阅读:
    Oracle 12C 物理Standby 主备切换switchover
    Oracle 性能之 Enq: CF
    dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
    OGG 从Oracle备库同步数据至kafka
    WARNING: inbound connection timed out (ORA-3136)
    11G 新特性之 密码延迟认证
    org-mode 写 cnblogs 博客
    inner join, left join, right join, full outer join的区别
    Emacs 浏览网页
    服务器被攻击后当作矿机,高WIO
  • 原文地址:https://www.cnblogs.com/whuanle/p/10994701.html
Copyright © 2011-2022 走看看