|
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 |
Hi, thanks for checking out this blueprint. I am curious what the benefit of having an include list would be as all devices are automatically included and you just set the exclude list for ones you don't want.. or is it somehow missing a device? Or maybe you only want to monitor a couple devices maybe and don't want to have to select a bunch to exclude? Is that what your doing? I just figured people would want to monitor all battery based devices.