链路:
- 调用云端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 通知用户
defon_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通讯
Node.js SDK示例:
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) { varreplace_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); } });
- 通过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","设备端响应"); Stringreplace_payload=newString((byte[]) aMessage.data).replace("thing.service.property.set", "thing.event.property.post"); CustomTopic.getPublish(POST, replace_payload, 1); }
三. 查看结果
- 控制台日志服务 : 物模型check状态码200
2.设备物模型数据是否更新