本帖最后由 sephrioth 于 2020-12-21 10:05 编辑
我也来分享一个判断回家离家的自动化, 和前辈们的方案相比, 主要是非常简单,硬件上只需要一个门窗传感器,而且可用性非常高。
Step0
先在HA中虚拟出几个个开关
input_boolean.a 用户A
input_boolean.b 用户B (需要的话可以继续增加, 暂时先拿2个做例子)
input_boolean.nearby 是否有用户在附近, 有附近为on,不在为off
input_boolean.at_home 是否有用户在家,在家为on,不在家为off
下面就是自动化, 为了让大家都能看懂,故意都用的是最简单的写法, 老手们可以自行优化
Step1
当用户A或者B回家/离家时(也就是zone的区域为home时), 将对应的 input_boolean 设置为 on/off (如果你是iOS用户,可以直接在Home App里面做这个自动化, 不需要下面的代码)
- alias: 'User A Location '
trigger:
- platform: state
entity_id: person.a
action:
- service_template: >
{% if states.person.a == 'home' %}
input_boolean.turn_on
{% else %}
input_boolean.turn_off
{% endif %}
entity_id: input_boolean.a
Step2
A或B只要有一个在家附近, 则 input_boolean.nearby 为 on ;同时只有A和B都离家后, input_boolean.nearby为 off
- alias: 'Detect People Nearby'
trigger:
- platform: state
entity_id:
- input_boolean.a
- input_boolean.b
to: 'on'
action:
- service: input_boolean.turn_on
entity_id: input_boolean.nearby
Step3
如果用户是从外回家, 首先这时 input_boolean.at_home 是 off 的, 然后 nearby 如果变为 on, 则说明肯定有人马上从外面快到家了,当下如果门窗检测器检测到了开门事件, 则判断为有人回家,并将input_boolean.at_home 设置为 on, 具体是谁回家可以看 input_boolean.a 和 input_boolean.b 的状态。
该自动化执行后这时 input_boolean.at_home 状态已经为 on 了, 所以再次开门就不会再次触发该自动化。
- alias: 'Welcome Home'
trigger:
entity_id:
- binary_sensor.door_window_sensor_158d0002e2135c #门窗传感器, 其实动作传感器也可以,如果你家没有宠物的话...
platform: state
to: 'on'
condition:
- condition: state
entity_id: input_boolean.people_at_home #之前家里没人
state: 'off'
- condition: state
entity_id: input_boolean.nearby #但是已经有人在附近了
state: 'on'
action:
- service: script.welcomehome #你想怎么欢迎就怎么欢迎了
如果用户是离家, 则可以直接参考 Step2 的 'Detect People Leave', 所有人离家后将input_boolean.nearby 和 input_boolean.at_home都设置为 off。所以离家状态的更新理论上会晚2-3分钟, 但是这是没有影响的。
---------------------------------------
我自己用这个自动化已经超过2年的时间, 非常完美且精确, 因为到家的状态改变其实只需要依赖开门状态, 所以响应完全是瞬间的。
其实这个模型实际上是简化过的, 大家可以根据自己的需求进行丰富,比如当 nearby 为 on 的时候, 开启家里的灯光和空调, 进门的时候进行播报等等。
还有一种理论上的极端情况, 虽然我认为不可能发生,但是我可以说下, 就是如果用户从外已经到了家附近,但是还没进门,也就是 nearby 已经为on了, 但是at_home 还是off, 假如正好在这时间差内(大概2-3分钟)有非a或者b的用户进门, 就会破坏掉这个自动化。
大家如果有任何问题, 欢迎提问和沟通, 我尽量解答~~
|