【问题标题】:Can a HomeKit device directly see states/changes of other devices?HomeKit 设备可以直接看到其他设备的状态/变化吗?
【发布时间】:2018-11-08 15:18:50
【问题描述】:

一段时间以来,我一直在开发自己的“虚拟” HomeKit 配件——有一个软件桥,其中包含几个用 Scala 实现的配件(使用 Java HomeKit 配件库)。有了这个,我可以打开/关闭电视或条形音箱(使用一些不同的 API)。作为一个具体的例子,我已经实现了一个 HomeKit 电源开关设备,它允许我(通过 HomeKit)打开/关闭电视。

我的问题是:我的配件可以直接从我家读取另一个配件的状态(并监听变化)吗?

愚蠢的例子:我在客厅里有一盏飞利浦 Hue 灯。如果我关了灯,我想让电视知道灯现在已经关了,并决定它是否也应该关掉。

如果我只想在任何时候灯关闭时关闭电视,这很容易:我会设置一个自动化家庭应用程序,它会随时将“电视开关”设置为关闭灯熄灭。但这太简单了。想象一下,您想要决定不同设备的多个参数和多个状态。

目前,我正在通过在我的网桥上安装一些人工开关来模拟这一点,并在真实设备上使用自动化来设置它们的开启和关闭。再举一个例子:我有一个名为“Living room light state”的程序开关,并且有两个自动化 - 每当 Hue 灯打开时,打开状态;每当 Hue 灯关闭时,关闭状态。有了这个,我将了解 Hue 灯的当前状态到我的应用程序(虚拟桥)。

我可以直接读取状态并监听 Hue 灯的变化吗?或者 HomeKit 协议是否真的只用于配件/桥接器和知道家庭设置的 iOS 应用程序之间的通信?

我有时会读到“HomeKit 是配件之间通信的协议”,但老实说,我从未见过任何示例,我还没有找到一种方法,如何让我的配件/桥接器在我的配件中找到其他配件回家听听它的变化。

编辑: 为什么我需要这个更好的例子:我有一个温度计和一个光照水平传感器,它们没有一些二进制或枚举状态——它们的当前状态“状态”基本上是数字(分别为摄氏度和勒克斯)。我还没有找到如何阅读这些数字的方法。对于这个用例,与上述情况相比,我什至没有任何解决方法。

【问题讨论】:

    标签: architecture homekit


    【解决方案1】:

    我不知道这是否仍然与您相关,但我想我可以给您一些答案和正确方向的提示。

    不,AFAIK 两个配件无法通过 HomeKit 进行通信。

    但是,我认为您的要求并没有超出 HomeKit 的可能性。您这么认为的原因是 Home 应用几乎不支持 HomeKit 的所有功能。

    您想要的自动化类型是HMEventTrigger。 此自动化由HMEvent 触发。你对HMCharacteristicEvents特别感兴趣。 支持属于 L 个不同服务/附件的 M 个特征的 N 个触发器。

    一旦触发自动化,就会评估predicate。这个predicateNSPredicate,所以你真的可以用它做很多事情......看看文档。之后,如果 predicate 确实评估为 true,则执行自动化。

    正如我所提到的,问题在于 Home 应用程序不支持 HomeKit 的所有(大部分)功能。您可以尝试使用第三方应用程序可以走多远。 Eve App 非常好(我认为它支持用于自动化的布尔、枚举和数字特征),或者您可以尝试一些非制造商特定的付费 HomeKit 应用程序(我自己没有尝试过) )。最后一种选择是自己编写一个适合您需求的应用程序。

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多