阿里云物联网平台设备端响应物模型属性更新-阿里云开发者社区

开发者社区> AIot_胡洋> 正文

阿里云物联网平台设备端响应物模型属性更新

简介: 在使用云端API SetDeviceProperty、iot studio设置设备属性、物联网平台控制台在线调试功能时,会出现物模型属性没有更新的情况。 以上功能中都是在调用SetDeviceProperty接口去更新物模型属性。 因为云端下发属性设置命令和设备收到并执行该命令是异步的,所以调用该接口时,返回的成功结果只表示云端下发属性设置的请求成功,不能保证设备端收到并执行了该请求。需设备端SDK成功响应云端设置设备属性值的请求,设备属性值才能真正设置成功。
+关注继续查看

链路:

  1. 调用云端API
  2. 设备端监听并响应
  3. 查看结果

云端API SetDeviceProperty示例 :

一.OpenAPi 调用 云端API SetDeviceProperty ,将物模型属性更新请求信息发送到设备端

image.png

二. 设备端接收到请求信息

方法一 : 物模型开发

Node.js SDK示例:

device.onProps方法监听云端设置属性服务消息,并调用device.postProps响应物模型属性更新。

image.png

  // 监听云端设置属性服务消息
  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 通知用户

image.png

    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通讯

Node.js SDK示例:

device.on方法监听云端设置属性服务消息,并调用device.publish以发布物模型属性数据消息方式响应物模型属性更新。

image.png

// 监听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

image.png

/*
* 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

image.png

2.设备物模型数据是否更新

image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8643 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10468 0
阿里云物联网平台iot studio实现展示设备运行状态
物联网平台iot studio只能展示设备属性,不能直接展示设备在线状态,需要使用公共实例下的业务逻辑实现
426 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
12291 0
阿里云物联网平台设备端开发样例
阿里云物联网平台设备端开发样例:MQTT客户端发送消息至物联网平台设备端,并通过规则引擎转至消息队列。
2045 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11435 0
阿里云物联网平台设备影子功能演示
物联网平台提供设备影子功能,用于缓存设备状态。设备在线时,可以直接获取云端指令;设备离线时,上线后可以主动拉取云端指令。设备影子是一个 JSON 文档,用于存储设备上报状态、应用程序期望状态信息。每个设备有且只有一个设备影子,设备可以通过MQTT获取和设置设备影子来同步状态,该同步可以是影子同步给设备,也可以是设备同步给影子。
2146 0
HaaS轻应用(Python):连接物联网平台并控制设备硬件
今天要介绍的是HaaS100如何使用micropython ,连接阿里云的物联网平台,并通过云端来控制设备的LED 灯。
124 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6628 0
+关注
8
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载