天天看點

阿裡雲物聯網平台裝置端響應物模型屬性更新

鍊路:

  1. 調用雲端API
  2. 裝置端監聽并響應
  3. 檢視結果

雲端API SetDeviceProperty示例 :

一.

OpenAPi

調用 雲端API

SetDeviceProperty

,将物模型屬性更新請求資訊發送到裝置端

阿裡雲物聯網平台裝置端響應物模型屬性更新

二. 裝置端接收到請求資訊

方法一 : 物模型開發

Node.js SDK

示例:

device.onProps方法監聽雲端設定屬性服務消息,并調用device.postProps響應物模型屬性更新。

阿裡雲物聯網平台裝置端響應物模型屬性更新
// 監聽雲端設定屬性服務消息
  device.onProps((cmd)=>{
    console.log("接收到消息--------->\n",cmd);
    // 物模型屬性上報
    device.postProps(cmd.params);
  })      
python SDK

示例:SDK隻需對on_thing_prop_changed進行響應處理,其他根據官方文檔操作即可。

  1. 需要從雲端控制台下載下傳物模型檔案,該檔案需要內建到應用工程中,這樣對應的topic才能正确的接收和發送消息
  2. 服務端發送設定屬性消息後,SDK通過設定的回調函數on_thing_prop_changed通知使用者,回調函數中params為包含屬性名與值的字典對象,使用者需要對接收到的新屬性進行處理
  3. 通過thing_post_property上報屬性
  4. 裝置端的響應結果SDK通過on_thing_prop_post 通知使用者
阿裡雲物聯網平台裝置端響應物模型屬性更新
def on_thing_prop_changed(self, params, userdata):
        print("接收到物模型屬性更新消息_on_thing_prop_changed" + str(params))
        prop_data = params
        # 裝置端響應
        rc, request_id = self.__linkkit.thing_post_property(prop_data)      

方法二 : 自定義MQTT Topic通訊

示例:

device.on方法監聽雲端設定屬性服務消息,并調用device.publish以釋出物模型屬性資料消息方式響應物模型屬性更新。

阿裡雲物聯網平台裝置端響應物模型屬性更新
// 監聽message事件
device.on('message', (topic, payload) => {
  console.log("監聽消息topic----->",topic);
  console.log("監聽消息payload--------->",payload.toString());
  
  //判斷是否是雲端設定屬性服務消息
  if (topic.indexOf("property/set") != -1) {
      var  replace_payload = payload.toString().replace("thing.service.property.set","thing.event.property.post");
      console.log("響應物模型更新--------->");
      device.publish('/sys/yourProductKey/yourDeviceName/thing/event/property/post', replace_payload);
  }

});       
Android SDK

  1. 通過IConnectNotifyListener監聽服務端物模型屬性更新請求
  2. 調用MqttPublishRequest處理裝置端響應
  3. 裝置端響應結果也是通過IConnectNotifyListener告知使用者,需要訂閱/sys/yourProductKey/yourDeviceName/thing/event/property/post_reply
阿裡雲物聯網平台裝置端響應物模型屬性更新
/*
* SET:/sys/yourProductKey/yourDeviceName/thing/service/property/set
* POST:/sys/yourProductKey/yourDeviceName/thing/event/property/post
* */
if (topic.equals(SET)) {
        Log.i("TAG","裝置端響應");
        String replace_payload = new String((byte[]) aMessage.data).replace("thing.service.property.set", "thing.event.property.post");
        CustomTopic.getPublish(POST, replace_payload, 1);
}      

三. 檢視結果

  1. 控制台日志服務 : 物模型check狀态碼200
阿裡雲物聯網平台裝置端響應物模型屬性更新

2.裝置物模型資料是否更新

阿裡雲物聯網平台裝置端響應物模型屬性更新

繼續閱讀