2024年11月24日星期日 上午4:07:51

homebridge正确的使用方法

8 个月 前
#29607 引用
homebridge设备未响应问题原因及解决方案


https://bbs.hassbian.com/thread-1344-1-1.html
0
8 个月 前
#29608 引用
.苹果官方HomeKit认证的设备
既然提到HomeKit,自然先看一下正版苹果官方经过HomeKit认证的设备是怎么工作的。

首先要给设备做上电等操作,一切准备就绪后,打开苹果“家庭”app,点击“添加配件”,扫描或者手动搜索设备的Pin码,之后添加设备成功。这个过程和添加HomeBridge的过程一样,那么我们添加了N个设备之后,架构便是如图这样的。


                              

                              


当用户打开家庭app时,HomeKit会分别读取各个设备的状态。当然,读取状态是需要通过网络的,经过网络就会有延迟,可能快至1ms,也可能慢至几秒,甚至说可能某个设备断了电他将永远不会响应了。

比如说,风扇设备需要10ms响应,而空净需要10s响应,或者说空净断了电。但是都没关系,响应的设备会在响应后将状态由“正在更新”变为当前的状态,并且用户已经可以控制他了,而没响应的设备他会继续保持“正在更新”的状态,直到响应,或是说超过一个超时时间,变为未响应状态。

当你打开家庭app的时候,可能不到1秒钟风扇的状态就读到了,你就可以控制他了,而空净可能需要5秒钟才会读到状态才能控制,但是不管空净多久读到状态,甚至是未响应,这都不会影响用户对风扇的操作。
0
8 个月 前
#29609 引用
架构1

这样的架构来看,HomeKit会认为虚线内的是一个HomeKit设备。家庭app打开后会像这个虚线设备要这个设备的当前状态。到了HomeBridge这里,HomeBridge会像小米风扇,小米空净等去要当前状态。

那么,如果说小米风扇1秒内就会给HomeBridge状态,此时HomeBridge也不能返回状态给HomeKit,因为空净的状态他还不知道,所以HomeBridge要等空净的状态返回,才能给HomeKit响应虚线设备的状态。也就是说,如果空净获取状态可能需要5s,那么虽然风扇1s就返回了当前状态,但是在HomeKit看来他并不知道,所以在HomeBridge整体没有返回状态的时候,风扇插件还是“正在更新”的状态,你依然无法去控制他。这也就导致了如果一个设备响应慢,会卡住整个HomeBridge。甚至说,如果某个HomeBridge插件代码逻辑有问题,那么将会影响整个HomeBridge的使用。简单的测试方法就是在某个插件的’get’事件的代码中,你不去调用callback,那么整个HomeBridge下插件都会显示“正在更新”。
0
8 个月 前
#29610 引用
架构2

既然我们普遍用的架构有这个缺陷,那么可不可以想办法去优化他呢。这个答案苹果官方就告诉我们了。是的,我们将架构设计成官方HomeKit认证设备那样,自然会解决这个问题。那么架构如下:



这样一来,小米风扇1秒内响应给HomeBridge,HomeBridge就会1秒内响应给HomeKit了,用户也就能在1秒内就控制小米风扇了。空净不管几秒给HomeBridge响应,都不会影响小米风扇。

0