我通过执行SYNC
,EXECUTE
和DISCONNECT
操作来实现了基本的智能家居服务。在SYNC
操作中,所有设备都将willReportState
设置为false
。
但是,我在https://developers.google.com/actions/smarthome/report-state上读到,我们必须自己报告状态更改。这意味着所有设备都必须将willReportState
设置为true
,
我的主要问题是,如果最后报告的状态与现实不同步会发生什么?
例如,假设我们在5分钟前报告某个设备(具有OnOff
特征)已关闭电源。几秒钟前,客户通过按开机按钮手动为设备供电。假设尚未向Smart Home Graph报告或知道此事实。
如果客户问助手:关闭我的设备,现在会发生什么?该请求是否会被拒绝?也就是说,即使Graph Home服务认为设备已关闭电源,履行服务也将接收此后端吗?
此外,如果我们实现了报告状态,我们还必须执行QUERY
动作吗?还是都需要?
在旁注中,该文档也没有真正解决必须报告状态更改的频率。在其他地方有记录吗?
答案 0 :(得分:2)
是的,您需要支持ReportState并返回willReportState:对于具有traits状态的设备为true。有关特征需要报告的状态,请参阅特征文档。
关于主要问题,您需要能够报告OnOff特性的变化(例如用户打开设备),包括从其他表面(例如硬件开关或任何其他智能家居平台)触发的状态变化。如果命令依赖于状态,则当用户尝试执行命令时,未能报告最新状态可能会导致错误。在此示例中,尝试关闭灯光将起作用(因为开/关与状态无关),但是任何其他与状态有关的命令(例如变暗或变亮)都可能失败。
您仍然需要实施QUERY,因为Google随时可以查询您的实现网址,而不使用所报告的状态。
最后,关于频率,您需要在状态发生变化时立即报告状态。如果发生一系列快速的状态变化而导致终端状态变化,例如调节调光器开关直到达到所需的亮度,则可以等到终端状态出现。