16

我通过实现SYNC,EXECUTEDISCONNECT动作实现了一个基本的智能家居服务。在SYNC操作中,所有设备都willReportState设置为false

但是,在https://developers.google.com/actions/smarthome/report-state上,我读到我们需要自己报告状态变化。这意味着所有设备都必须willReportState设置为true,我假设?

我的主要问题是如果最后报告的状态与现实不同步会发生什么?

例如,假设我们在 5 分钟前报告了某个设备(具有该OnOff特征)已关闭电源。几秒钟前,客户通过按下开机按钮手动为设备供电。让我们假设 Smart Home Graph 尚未报告或知道这一事实。

如果客户问助手:关闭我的设备,现在会发生什么?这个请求会被拒绝吗?也就是说,即使 Graph Home 服务认为设备已经断电,履行服务是否会接收到这个后端?

QUERY另外,如果我们实施报告状态,我们是否还必须实施行动?还是两者都需要?

在旁注中,该文档也没有真正解决必须报告状态更改的频率。它是否记录在其他地方?

4

1 回答 1

2

是的,您需要支持 ReportState 并返回 willReportState: true 对于具有状态特征的设备。有关特征需要报告的状态,请参阅特征文档。

关于您的主要问题,您需要能够报告 OnOff 特征的变化(例如用户打开设备),包括从其他表面(例如硬件开关或任何其他智能家居平台)触发的状态变化。如果命令是状态相关的,则当用户尝试执行命令时,未能报告最新状态可能会导致错误。在此示例中,尝试关闭灯会起作用(因为开/关不依赖于状态),但任何其他依赖于状态的命令(例如调光或变亮)可能会失败。

您仍然需要实施 QUERY,因为 Google 可能随时查询您的履行网址,而不是使用报告的状态。

最后,关于频率,您需要在状态发生变化时立即报告状态。如果有一系列快速的状态变化导致终端状态,例如调整调光开关直到达到所需的亮度,您可以等到达到终端状态。

于 2018-07-25T17:34:56.387 回答