全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云物联网套件

设备影子介绍

更新时间:2017-06-07 13:26:11

设备影子

设备影子是一个 JSON 文档,用于存储设备上报状态、应用程序期望状态信息。每个设备有且只有一个设备影子,设备可以通过 MQTT获取和设置设备影子以此来同步状态,这个同步可以是影子同步给设备,也可以是设备同步给影子;应用程序也可以通过阿里云POP API获取和设置设备影子以此来获取设备最新状态或者下发期望状态给设备。

应用场景

场景一:

  • 由于网络的不稳定,设备频繁的上下线。应用程序想获取一下当前的设备状态,当请求发出时,正好这个时候设备掉线,无法获得设备状态,可是下一秒这个设备又连上来了,这时候应用程序就蒙圈了,因为他不知道该什么时候请求?

  • 当有设备影子这个机制时,这个问题就很好解决。因为影子会存储设备最新状态,一旦设备状态有变化,设备就会把状态同步到影子。这样应用程序在请求设备当前状态时,只需要获取影子中的状态即可,不需要关心设备是否在线,随时随地请求。

场景二:

  • 假如设备网络稳定,有很多应用程序来请求设备状态,那就意味着设备需要根据这些请求响应多次,哪怕这些响应的结果都是一样的,这样做根本就是没有必要的,而且设备本身处理能力有限,可能根本负载这种被请求多次的情况。

  • 当有设备影子这个机制时,这个问题就比较好解。设备只需要主动同步状态一次给设备影子,然后多个应用程序只需要请求设备影子即可获取设备最新状态,这就做到了应用程序和设备的解耦,设备的能力得到了解放。

场景三:

  • 假设设备网络不稳定(这种情况在无线通信环境下太普遍了),设备频繁的上下线。这时候应用程序发送控制指令给设备,而设备刚好这时候掉线,那就意味着指令无法下达到设备,而且这种情况是大概率事件,这种情况对于大部分用户是不可接受的。当然这种场景也可以通过QoS=1或者2来实现,但是这种方式对于服务端的压力比较大,一般不建议使用。

  • 当有设备影子这个机制时,这个问题就比较好解。应用程序不需要care设备是否在线,只需要发送指令,指令会带着时间戳保存在设备影子,当设备掉线重连时就获取指令,并根据时间戳来确定是否执行,当设备判断指令过期可以选择不执行指令。因为也有很多场景并不是因为无线通信的不稳定造成的,设备并不是那种频繁上下线的场景,而是真的掉线了,这种场景指令失败那是正常的,而不应该出现设备再上线突然执行过期指令的场景,这个设备影子也预防了这种情况,就是通过指令附带时间戳来解决。

本文导读目录