代码之家  ›  专栏  ›  技术社区  ›  Andrew Eers

智能家居和报告状态:如果当前已知状态与现实不同步,会发生什么?

  •  15
  • Andrew Eers  · 技术社区  · 6 年前

    我通过实施 SYNC , EXECUTE DISCONNECT 行动。在 同步 动作,所有设备都有 willReportState 设置为 false .

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

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

    例如,假设我们5分钟前报告了某个设备 OnOff 特性)断电。几秒钟前,客户按下开机按钮手动为设备供电。让我们假设这个事实还没有报告给智能家庭图,也没有被智能家庭图知道。

    如果客户向助理询问,现在会发生什么情况: 关闭我的设备 ?此请求是否将被拒绝?也就是说,即使graph home服务认为设备已经关闭,Fulfillment服务是否会收到这个后端?

    另外,我们还必须执行 QUERY 执行报告状态时的操作?或者两者都需要?

    另一方面,本文档也没有真正说明必须报告状态更改的频率。是否在其他地方记录?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Murat    6 年前

    是的,您需要支持ReportState并返回WillReportState:true,用于具有 traits 有州。有关特性需要报告的状态,请参阅特性文档。

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

    您仍然需要实现查询,因为任何时候Google都可以查询您的实现URL,而不是使用报告的状态。

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