鍊路:
- 調用雲端API
- 裝置端監聽并響應
- 檢視結果
雲端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進行響應處理,其他根據官方文檔操作即可。
- 需要從雲端控制台下載下傳物模型檔案,該檔案需要內建到應用工程中,這樣對應的topic才能正确的接收和發送消息
- 服務端發送設定屬性消息後,SDK通過設定的回調函數on_thing_prop_changed通知使用者,回調函數中params為包含屬性名與值的字典對象,使用者需要對接收到的新屬性進行處理
- 通過thing_post_property上報屬性
- 裝置端的響應結果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 :
- 通過IConnectNotifyListener監聽服務端物模型屬性更新請求
- 調用MqttPublishRequest處理裝置端響應
- 裝置端響應結果也是通過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);
}
三. 檢視結果
- 控制台日志服務 : 物模型check狀态碼200
2.裝置物模型資料是否更新