这个教程是关于如何使用自动化功能在家庭助理中实现低电量检测和通知的。自动化是一种让家庭助理根据触发器和条件执行动作的方式。这个自动化可以定期检测所有设备类为“电池”的传感器,如果它们的电量低于一个阈值或者处于“开”状态(表示低电量的二进制传感器),就执行一个动作,比如发送通知或者播放声音。
要使用这个自动化,你需要有以下条件:
- 家庭助理核心版本2021.3或更高
- 一个或多个设备类为“电池”的传感器,它们的状态表示电量百分比或者低电量状态
- 一个或多个要执行的动作,比如通知服务或者媒体播放器
要创建这个自动化,你可以在配置文件中添加以下代码:
alias: Low battery level detection & notification for all battery sensors
description: ''
trigger:
- platform: time
at: '08:00:00'
days:
- mon
condition: []
action:
- variables:
sensors: >-
{%- set ns = namespace(sensors=[]) -%} {%- for state in states -
%} {%- if state.attributes.device_class == 'battery' and (state.state | int <
states('input_number.battery_warning_level') | int or state.state == 'on')
-%} {%- set ns.sensors = ns.sensors + [state.name] -%} {%- endif -%} {%- endfor
-%} {{ ns.sensors | join(', ') }}
- choose:
- conditions:
- condition: template
value_template: '{{ sensors != "" }}'
sequence:
- service: notify.notify
data:
message: 'Low battery warning for: {{ sensors }}'
title: Home Assistant
mode: single
其中,你可以根据你的需要修改以下参数:
- at:在什么时间进行检测。默认值是早上8点。
- days:在哪些天进行检测。默认值是每周一。
- input_number.battery_warning_level:电池警告级别阈值。当电量传感器低于这个百分比时,触发动作。默认值是20%。你需要在配置文件中创建一个input_number实体来存储这个值,比如:
input_number:
battery_warning_level:
name: Battery warning level threshold
min: 0
max: 100
step: 1
unit_of_measurement: '%'
- notify.notify:要执行的动作。默认值是发送通知到所有已注册的通知服务。你可以根据你的需要修改为其他服务或者设备。在动作中,你可以使用{{sensors}}模板变量来引用低电量传感器的名称,比如:
message: '低电量警告:{{sensors}}'
有些通知服务(比如Telegram)需要消息是有效的Markdown格式。你可能需要替换掉下划线字符,比如使用{{sensors|replace(“_”," ")}}代替{{sensors}}。
创建好自动化后,你就可以保存并重启家庭助理。然后,在每次检测时间到来时 如果你想排除某些传感器,不让它们被检测,你可以在自动化的条件部分添加一个模板条件,比如:
condition:
- condition: template
value_template: >-
{{ trigger.to_state.entity_id not in
['sensor.pv_batterie_status', 'sensor.phone_battery_level'] }}
这样,就可以排除sensor.pv_batterie_status和sensor.phone_battery_level这两个传感器。你可以根据你的需要修改为其他传感器的实体ID。
另外,你也可以使用家庭助理的自定义功能,来修改传感器的设备类属性,让它们不被检测。比如,你可以在配置文件中添加以下代码:
homeassistant:
customize:
sensor.phone_battery_level:
device_class: none
这样,就可以把sensor.phone_battery_level的设备类改为none,而不是battery。这样,它就不会被检测。
这个教程到此结束了。希望对你有帮助!