Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Ryther/f9bd384feb439dff42076b20440a2498 to your computer and use it in GitHub Desktop.
Save Ryther/f9bd384feb439dff42076b20440a2498 to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Low battery level detection & notification for all battery sensors
blueprint:
name: Low battery level detection & notification for all battery sensors
description:
Regularly test all sensors with 'battery' device-class for crossing
a certain battery level threshold and if so execute an action.
domain: automation
input:
threshold_min:
name: Minimum battery threshold to evaluate
description: Battery sensors below threshold will not be included
default: 0
selector:
number:
min: 0.0
max: 95.0
unit_of_measurement: "%"
mode: slider
step: 5.0
threshold_max:
name: Maximum battery threshold to evaluate
description:
Battery sensors below threshold are assumed to be low-battery (as
well as binary battery sensors with value 'on').
default: 20
selector:
number:
min: 5.0
max: 100.0
unit_of_measurement: "%"
mode: slider
step: 5.0
time:
name: Time to test on
description: Test is run at configured time
default: "10:00:00"
selector:
time: {}
day:
name: Weekday to test on
description:
"Test is run at configured time either everyday (0) or on a given
weekday (1: Monday ... 7: Sunday)"
default: 0
selector:
number:
min: 0.0
max: 7.0
mode: slider
step: 1.0
exclude:
name: Excluded Sensors
description:
Battery sensors (e.g. smartphone) to exclude from detection. Only
entities are supported, devices must be expanded!
default:
entity_id: []
selector:
target:
entity:
- device_class:
- battery
actions:
name: Actions
description:
Notifications or similar to be run. {{sensors}} is replaced with
the names of sensors being low on battery.
selector:
action: {}
source_url: https://gist.github.com/Ryther/f9bd384feb439dff42076b20440a2498
variables:
day: !input day
threshold_min: !input threshold_min
threshold_max: !input threshold_max
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_max | int and not state.entity_id in exclude.entity_id %}
{% if 0 <= state.state | int(-1) > threshold_min | int %}
{% set result.sensors = result.sensors + [state.name ~ ' (' ~ state.state ~ ' %)'] %}
{% endif %}
{% 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 %}
{% if result.sensors %}
- {{result.sensors|join('\n- ')}}
{% endif %}
trigger:
- platform: time
at: !input time
condition:
- "{{ sensors != '' and (day | int == 0 or day | int == now().isoweekday()) }}"
action:
- choose: []
default: !input actions
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment