本帖最后由 bugensui 于 2026-8-16 02:51 编辑
Home Assistant 电池传感器低电量自动监测与通知攻略,解决换电焦虑
随着全屋智能部署完成并投入使用一两年,许多小伙伴可能会发现一个让人头疼的问题:家里那几十个电池供电的传感器(如:门窗传感器、温湿度计、无线按钮、动静贴等)开始陆续“罢工”了。
这种“罢工”往往是悄无声息的。有时候你会发现自动化失效了,半天找不出原因,最后才发现原来是某个传感器没电了。我们不可能每天盯着上百个实体的电量看,这违背了“自动化”的初衷。尤其是像我家里,布置了 30 多个电池类传感器,涵盖了温湿度、门窗感应、无线开关、动静贴以及至关重要的漏水检测类。如果漏水传感器因为没电而停工,一旦发生漏水事故,后果简直不堪设想。
为了解决这个行业痛点,前几年我在逛 HA 社区时,偶然发现了一位名叫 sbyx 的大佬分享的一个低电量检测并通知的蓝图(Blueprint)。链接我先放在这里:https://gist.github.com/sbyx/1f6f434f0903b872b84c4302637d0890。
这个蓝图我已经稳定使用了三四年,效果非常出色。今天我特意把这份好物整理并进行了汉化分享给大家,希望能帮大家彻底告别传感器换电焦虑。
1. 核心逻辑解析
这个蓝图的逻辑设计得非常精妙且实用:
- 周期性检测:你可以设定一个固定的时间(比如每天早上 10 点),系统会自动扫描所有传感器。
- 多维识别:它会自动筛选出带有
battery 属性的所有实体。
- 自定义阈值:电量低于多少才报警?你可以自己定(我推荐设为 10% 或 20%)。
- 智能排除:这是最赞的一点。有些接入 HA 的设备(比如手机、平板)每天都会充电,我们并不需要它们参与通知。蓝图支持排除特定的设备实体。
- 多样化通知:你可以通过邮件、Home Assistant App 消息推送,甚至是持久化通知(Persistent Notification)来接收预警。
2. 完整 YAML 代码(汉化版)
为了方便国内玩家,我对原蓝图进行了汉化处理,使用起来更加直观友好。
blueprint:
name: 所有电池传感器的低电量检测和通知
description: 定期检测所有具有“电池”设备类别的传感器是否超过某个电池电量阈值,如果是,则执行操作。
domain: automation
input:
threshold:
name: 电池警告级别阈值
description: 低于阈值的电池传感器被认为是低电池(以及值为“on”的二进制电池传感器)。
default: 20
selector:
number:
min: 5.0
max: 100.0
unit_of_measurement: '%'
mode: slider
step: 5.0
time:
name: 监测时间
description: 测试在配置的时间运行
default: '10:00:00'
selector:
time: {}
day:
name: 测试工作日
description: '测试在配置的时间,每天(0)或给定的工作日(1:星期一…7:星期日)运行'
default: 0
selector:
number:
min: 0.0
max: 7.0
mode: slider
step: 1.0
exclude:
name: 排除的传感器
description: 将电池传感器(如智能手机)排除在检测之外。只支持实体,必须扩展设备!
default:
entity_id: []
selector:
target:
entity:
- device_class:
- battery
actions:
name: 动作
description: 要运行的通知或类似通知。{{sensors}}被替换为电池电量低的传感器名称。
selector:
action: {}
source_url: https://gist.github.com/sbyx/1f6f434f0903b872b84c4302637d0890
variables:
day: !input day
threshold: !input threshold
exclude: !input exclude
sensors: "{% set result = namespace(sensors=[]) %} {% for state in states.sensor
| selectattr('attributes.device_class', '==', 'battery') %}
{% if 0 <= state.state
| int(-1) < threshold | int and not state.entity_id in exclude.entity_id %}
{% set result.sensors = result.sensors + [state.name ~ ' (' ~ state.state
~ ' %)'] %}
{% endif %}
{% endfor %} {% for state in states.binary_sensor
| selectattr('attributes.device_class', '==', 'battery') | selectattr('state',
'==', 'on') %}
{% if not state.entity_id in exclude.entity_id %}
{% set
result.sensors = result.sensors + [state.name] %}
{% endif %}
{% endfor %}
{{result.sensors|join(', ')}}"
trigger:
- platform: time
at: !input time
condition:
- '{{ sensors != '''' and (day | int == 0 or day | int == now().isoweekday()) }}'
action:
- choose: []
default: !input actions
mode: single
3. 如何在 Home Assistant 中使用?
导入并配置这个蓝图非常简单,只需以下几步:
- 保存文件:将上面的完整代码复制下来,保存为
battery.yaml。
- 存放路径:通过 Samba、FTP 或 File Editor 插件,将该文件放入 HA 配置目录下的
blueprints/automation/sbyx/ 文件夹内(如果没有 sbyx 文件夹,手动新建一个即可,方便管理)。
- 生效配置:回到 HA 界面,点击“设置” -> “工具” ,点击“重载自动化”或者“重载所有 YAML 配置”。如果你不放心,直接重启 HA 也可以。
- 创建自动化:进入“设置” -> “自动化与场景” -> “蓝图”,你应该能看到“所有电池传感器的低电量检测和通知”这一项。
- 配置参数:
- 监测时间:我个人习惯设为每天早上,开启一天的元气满满(坏消息也早点知道)。
- 排除实体:在这里选上你的手机、iPad 等不需要通知的设备。
- 动作:这是最关键的一步。在“动作”里选择你的通知渠道(比如
notify.mobile_app_your_phone 或者邮件服务)。在通知内容中,可以使用 {{sensors}} 变量,它会自动替换为当前所有低电量的传感器名称。
4. 什么是 Home Assistant 蓝图(Blueprint)?
对于刚入坑的朋友,这里简单科普下什么是“蓝图”。
在传统的 HA 自动化中,我们需要编写复杂的 YAML 代码。而蓝图就像是一个“模版”。开发者写好了一套通用的自动化逻辑,普通用户只需要像填空题一样,把自己的实体名、触发时间、通知渠道填进去,就能实现极其复杂的功能。
蓝图极大地降低了 HA 的使用门槛,也让分享变得异常简单。通过这个蓝图,你不需要理解背后的模板语言(Jinja2)是如何筛选电池实体的,只需要会复制粘贴文件即可享受稳定、高效的低电量预警服务。
总结
智能家居的本质应该是提升幸福感,而不是增加我们的维护负担。通过这套低电量检测系统,你可以放心地让那几十个小传感器在角落里默默工作,只有在它们真正需要你的时候(没电前夕),才会通过手机告诉你。
希望这篇文章能帮你解决全屋智能的最后一块短板!
|