天天看點

阿裡雲物聯網 .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])           


實際上,不需要做出響應。。。如果有需要的話,可以自定義方法,在方法裡面加上響應,綁定到委托裡,自動響應。

如何設定,請參考後面的章節。