-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlow-battery.yaml
88 lines (88 loc) · 2.96 KB
/
low-battery.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
---
# SPDX-License-Identifier: MIT
#
# Original code from:
# https://gist.github.com/sbyx/1f6f434f0903b872b84c4302637d0890
blueprint:
name: Low battery level detection & notification for all battery sensors
description: v1.2 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:
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: Battery sensors (e.g. smartphone) to exclude from detection.
Only entities are supported, devices must be expanded!
# yamllint disable rule:braces
default: { entity_id: [] }
# yamllint enable rule:braces
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: {}
# yamllint disable-line rule:line-length
source_url: https://raw.githubusercontent.com/tykeal/homeassistant-blueprints/master/low-battery.yaml
variables:
day: !input "day"
threshold: !input "threshold"
exclude: !input "exclude"
# yamllint disable rule:line-length
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(', ')}}
# yamlline enable
trigger:
- platform: time
at: !input "time"
condition:
- "{{ sensors != '' and (day | int == 0 or day | int == now().isoweekday()) }}"
action:
- choose: []
default: !input "actions"
mode: single