Forked from lymbada/low-battery-level-detection-notification-for-all-battery-sensors-with-time-pattern.yaml
Last active
April 6, 2023 20:35
-
-
Save tpott/bbbafc6bacddee3d0c93ba9689d5e31f to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Low battery level detection & notification for all battery sensors with Time Pattern
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
blueprint: | |
name: Low battery level detection & notification for all battery sensors with Time Pattern Detection | |
description: Regularly test all sensors with 'battery' device-class for crossing | |
a certain battery level threshold and if so execute an action. Modified version to allow for Time-Pattern based detection. | |
domain: automation | |
input: | |
threshold: | |
name: Battery warning level threshold | |
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 | |
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 | |
hours: | |
name: Hour (time pattern) | |
description: When to trigger, '*' for any hour, 0-23 for the specific hour of the day. (or other time-pattern) | |
default: '*' | |
selector: | |
text: | |
minutes: | |
name: Minute (time pattern) | |
description: When to trigger, '*' for any hour, 0-59 for the specific minute of the hour. (or other time-pattern) | |
default: '0' | |
selector: | |
text: | |
seconds: | |
name: Second (time pattern) | |
description: When to trigger, '*' for any hour, 0-59 for the specific second of the minute. (or other time-pattern) | |
default: '0' | |
selector: | |
text: | |
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/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_pattern | |
hours: !input 'hours' | |
minutes: !input 'minutes' | |
seconds: !input 'seconds' | |
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