已经有一段时间我正在开发自己的“虚拟”HomeKit配件 - 有一个带有几个附件的软件桥,它是用Scala实现的(使用Java HomeKit附件库)。有了这个,我就可以打开/关闭电视或条形音箱(使用一些不同的API)。作为一个具体的例子,我已经实现了HomeKit电源开关设备,允许我(通过HomeKit)打开/关闭电视。
我的问题是:我的配件可以直接读取我家中其他配件的状态(并听取更改)吗?
愚蠢的例子:客厅里有一台飞利浦Hue灯。如果我关掉灯泡,我想让电视机知道灯光现在已关闭,并决定它是否应该关闭。
如果我想随时关闭电视灯泡已关闭,那就很容易了:我会设置一个家庭自动化应用程序,可以随时将“电视开关”设置为关闭灯熄灭了。但那太简单了。想象一下,您想要决定不同设备的多个参数和多个状态。
目前,我通过在我的网桥上安装一些人工开关来模拟这一点,并使用真实设备上的自动设置来打开和关闭它们。再举一个例子:我有一个名为“客厅灯状态”的程序开关,有两个自动装置 - 只要Hue灯打开,打开状态;在Hue灯熄灭的任何时候,关闭状态。有了这个,我将了解Hue灯的当前状态到我的应用程序(虚拟桥)。
我可以直接阅读状态并听取Hue灯的变化吗?或者HomeKit协议是否真的只适用于附件/桥接器和知道家庭设置的iOS应用程序之间的通信?
我有时会读到“HomeKit是配件之间通信的协议”,但说实话,我从未见过任何一个例子,我也没有找到办法让我的配件/桥接器找到其他配件。回家并听取它的变化。
编辑: 更好的例子,为什么我需要这个:我有一个温度计和一个光级传感器,它没有一些二进制或枚举状态 - 他们现在的状态"基本上是数字(分别是摄氏度和勒克斯数)。我根本找不到如何阅读这些数字的方法。对于这个用例,与上述情况相比,我甚至没有任何解决方法。
答案 0 :(得分:0)
我不知道这是否仍然与您有关,但我想我可以给您一些答案,并向正确的方向提供提示。
否,AFAIK的两个附件无法通过HomeKit通讯。
但是,我认为您的要求不会超出HomeKit的可能性。您之所以这么认为,是因为Home应用程序几乎不支持HomeKit的所有功能。
所需的自动化类型为HMEventTrigger
。
此自动化由HMEvent
触发。您对HMCharacteristicEvent
s特别感兴趣。
支持属于L个不同服务/附件的M个特性的N个触发器。
一旦触发了自动化,将评估predicate
。 predicate
是NSPredicate
,因此您真的可以做很多事情...看一下文档。之后,如果predicate
的评估结果为true
,则会执行自动化操作。
正如我提到的,问题在于Home应用程序不支持HomeKit的全部(大部分)功能。您可以尝试使用第三方应用程序。 Eve App相当不错(我认为它支持在自动化中使用的布尔,枚举和数字特性),或者您可以尝试使用某些与制造商无关的付费HomeKit应用(没有尝试过)那些我自己)。最后一种选择是自己编写适合您需求的应用。