概述
设备影子(Device Shadow)是物联网平台为每个设备在云端维护的JSON文档,包含期望状态(desired)与上报状态(reported)。它解决了物联网场景中的核心矛盾:设备常处于离线、休眠或弱网状态,应用无法实时与设备通信;但应用又需要"设置设备状态"或"获取设备最新状态"。设备影子通过"云端镜像"机制,让应用可随时读写设备状态,设备上线后自动同步,实现应用与设备的解耦。AWS IoT、阿里云IoT、腾讯云IoT等主流平台均提供设备影子能力。
设备影子的典型流程:①应用下发期望状态(如"开关=开")到影子;②设备上线后订阅影子Topic或主动拉取,获取delta(期望与上报的差异);③设备执行并上报新状态;④影子更新reported,delta清空。若设备一直离线,期望状态会保留在影子中,设备下次上线时仍能获取并执行。
核心机制
期望状态(desired)
应用下发的目标状态,表示"希望设备变成什么样"。设备上线后拉取,与reported对比得到delta,按delta执行。支持部分更新(只更新某几个属性),支持清除(将某属性设为null表示删除)。
上报状态(reported)
设备实际上报的当前状态,表示"设备现在是什么样"。设备每次上报属性时更新。应用可直接读取reported获取设备最新状态,无需轮询设备。
delta与版本控制
delta=desired-reported(差异部分),驱动设备执行。版本号(version)用于乐观锁,避免并发更新冲突。设备执行完delta后上报,reported与desired一致,delta为空。
物联网典型应用
智能家居:用户通过APP设置"离家模式",期望状态下发到所有设备影子;设备(如空调、灯光)上线后拉取并执行关闭。即使用户操作时部分设备离线,上线后仍能自动同步。
工业设备:远程配置PLC参数、变频器频率。参数下发到影子,设备下次连接时拉取并应用。支持批量设备统一配置。
智慧农业:灌溉阀门、卷帘机的远程开关。田间设备可能因网络或省电策略间歇在线,影子确保指令不丢失。
车联网:远程锁车、空调预开启。车辆可能在地库无信号,驶出后连接网络时拉取影子中的待执行指令。
实现要点
影子存储可采用文档数据库(MongoDB)或键值存储,Key为设备ID。需支持高并发读写、版本冲突检测。与MQTT Topic集成时,设备订阅shadow/update/delta,平台在desired变更时发布delta到该Topic。与缓存配合,热点设备的影子可缓存,减少存储压力。