|
blueprint: |
|
name: Low Battery and Device Unavailable Check |
|
description: Regularly test all sensors with 'battery' device-class for crossing |
|
a certain battery level threshold as well as if it is unavailable. |
|
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 |
|
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: Removed Battery only selection to select any entity like switches. Only entities are supported, devices must be expanded! |
|
default: {entity_id: []} |
|
selector: |
|
target: |
|
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.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', '==', 'battery') %} |
|
{% if "unavailable" in state | string 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 %} |
|
{% for state in states.binary_sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', '==', 'battery') %} |
|
{% if "unavailable" in state | string and not state.entity_id in exclude.entity_id %} |
|
{% set result.sensors = result.sensors + [ state.name ~ ' (' ~ state.state ~ ')'] %} |
|
{% endif %} |
|
{% endfor %} |
|
{% for state in states.switch | selectattr('state','eq','unavailable') %} |
|
{% if state.entity_id not in exclude.entity_id %} |
|
{% set result.sensors = result.sensors + [ state.name ~ ' (' ~ state.state ~ ')'] %} |
|
{% 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 |
Thanks for this - it works great and saved me a ton of time!