Forked from sbyx/low-battery-level-detection-notification-for-all-battery-sensors.yaml
Last active
April 6, 2023 20:33
-
-
Save lymbada/078c0e5228a3e5219313e8683217e39f 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 | |
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: | |
minuites: | |
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: '*' | |
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: '1' | |
selector: | |
text: | |
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/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 'minuites' | |
seconds: !input 'seconds' | |
condition: | |
- '{{ sensors != '''' and (day | int == 0 or day | int == now().isoweekday()) }}' | |
action: | |
- choose: [] | |
default: !input 'actions' | |
mode: single |
Hi Matt,
Noticed one more thing - When I load the blueprint into Studio Code Server for editing, an error is reported on line 61. The {}'s are not required after "action:"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Matt,
The blueprint I’m using came from git yesterday. It matches what I see posted today. I see there is a default of 1 for seconds. Perhaps the blueprint shouldn’t allow “*” to be utilized for seconds? Only allow 0-59. Now that I understand how time works, I don’t see a situation where the wildcard would/could be used. Eliminating the wildcard choice would eliminate the problem I (and you) saw earlier.
As for descriptions; the minutes and second description still read in part "When to trigger, ‘*’ for any hour , 0-59 for the specific ". In the case of minutes, should the word hour not be replaced with minute , and in the case of seconds , should it not be replaced with seconds ?