92 lines
3.7 KiB
Nix
92 lines
3.7 KiB
Nix
{
|
|
services.home-assistant.config = {
|
|
sensor = [
|
|
{
|
|
platform = "template";
|
|
sensors = {
|
|
sensors_lowest_battery_level = {
|
|
friendly_name = "Lowest battery level (Sensors)";
|
|
entity_id = "sun.sun";
|
|
device_class = "battery";
|
|
unit_of_measurement = "%";
|
|
value_template = ''
|
|
{% set domains = ['sensor', 'battery'] %}
|
|
{% set ns = namespace(min_batt=100, entities=[]) %}
|
|
{%- set exclude_sensors = ['sensor.sensors_lowest_battery_level','sensor.dominiks_iphone_battery_level'] -%}
|
|
{% for domain in domains %}
|
|
{% set ns.entities = states[domain] %}
|
|
{% for sensor in exclude_sensors %}
|
|
{% set ns.entities = ns.entities | rejectattr('entity_id', 'equalto', sensor) %}
|
|
{% endfor %}
|
|
{% set batt_sensors = ns.entities | selectattr('attributes.device_class','equalto','battery') | map(attribute='state') | reject('equalto', 'unknown') | reject('equalto', 'None') | map('int') | reject('equalto', 0) | list %}
|
|
{% set batt_attrs = ns.entities | selectattr('attributes.battery_level','defined') | map(attribute='attributes.battery_level') | reject('equalto', 'unknown') | reject('equalto', 'None') | map('int') | reject('equalto', 0) | list %}
|
|
{% set batt_lvls = batt_sensors + batt_attrs %}
|
|
{% if batt_lvls|length > 0 %}
|
|
{% set _min = batt_lvls|min %}
|
|
{% if _min < ns.min_batt %}
|
|
{% set ns.min_batt = _min %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{{ ns.min_batt }}
|
|
'';
|
|
};
|
|
};
|
|
}
|
|
];
|
|
binary_sensor = [
|
|
{
|
|
platform = "template";
|
|
sensors = {
|
|
sensor_low_battery = {
|
|
value_template = "{{ states('sensor.sensors_lowest_battery_level')|int <= 30 }}";
|
|
friendly_name = "A sensor has low battery";
|
|
device_class = "problem";
|
|
};
|
|
};
|
|
}
|
|
];
|
|
alert = {
|
|
sensor_low_battery = {
|
|
name = "Sensor has low battery!";
|
|
message = ''
|
|
{% set domains = ['sensor', 'battery'] %}
|
|
{% set threshold = 30 %}
|
|
{%- set exclude_entities = ['sensor.sensors_lowest_battery_level','sensor.dominiks_iphone_battery_level','sensor.roborock_s8_pro_ultra_battery'] -%}
|
|
Sensors are below 50% battery:
|
|
{% for domain in domains %}
|
|
{% for item in states[domain] %}
|
|
{% if item.entity_id not in exclude_entities %}
|
|
{% if item.attributes.battery_level is defined %}
|
|
{% set level = item.attributes.battery_level|int %}
|
|
{% if level > 0 and level < threshold %}
|
|
- {{ item.attributes.friendly_name }} ({{ item.attributes['battery_level']|int}}%)
|
|
{%- endif -%}
|
|
{% endif %}
|
|
{% if item.attributes.device_class is defined and item.attributes.device_class == 'battery' %}
|
|
{% set level = item.state|int %}
|
|
{% if level > 0 and level <= threshold %}
|
|
- {{ item.attributes.friendly_name }} ({{ item.state|int }}%)
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
'';
|
|
entity_id = "binary_sensor.sensor_low_battery";
|
|
state = "on";
|
|
repeat = [
|
|
5
|
|
60
|
|
360
|
|
];
|
|
skip_first = true;
|
|
can_acknowledge = true;
|
|
notifiers = [
|
|
"NotificationGroup"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|