116 lines
4.2 KiB
YAML
116 lines
4.2 KiB
YAML
#:########################################################################################:#
|
|
# Low Battery Device Summary Package #
|
|
#:########################################################################################:#
|
|
#
|
|
# TITLE:
|
|
# Low Battery Device Summary
|
|
#
|
|
# FILE:
|
|
# packages/low_battery_device_quantity.yaml
|
|
#
|
|
# VERSION:
|
|
# V1.1 2026-07-20
|
|
#
|
|
# VERSION HISTORY:
|
|
# V1.1 2026-07-20
|
|
# - Changed the low-battery threshold from 97% to 20%.
|
|
# - Added structured documentation for scope, exclusions, and outputs.
|
|
#
|
|
# V1.0
|
|
# - Initial low-battery count and list sensors.
|
|
#
|
|
# PURPOSE:
|
|
# Finds numeric sensor entities with device_class battery whose value is 20%
|
|
# or lower, then exposes a count and a human-readable device list.
|
|
#
|
|
# SCOPE AND EXCLUSIONS:
|
|
# - Only entities in the sensor domain with device_class battery are checked.
|
|
# - Unknown, unavailable, non-numeric, and "Ok" states are excluded.
|
|
# - Battery entities in other domains are not included.
|
|
#
|
|
# OUTPUTS:
|
|
# - sensor.devices_with_low_battery reports the number of matching sensors.
|
|
# - sensor.devices_with_low_battery_list reports names and percentages.
|
|
# - The list sensor also exposes count, entities, and names attributes.
|
|
#
|
|
#:########################################################################################:#
|
|
|
|
template:
|
|
- sensor:
|
|
- name: "Devices with low battery"
|
|
unique_id: devices_with_low_battery_count
|
|
unit_of_measurement: "devices"
|
|
state: >
|
|
{% set ns = namespace(c=0) %}
|
|
{% for s in states.sensor %}
|
|
{% if s.attributes.device_class == 'battery' %}
|
|
{% set st = s.state %}
|
|
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
|
|
{% if st | int(-1) != -1 and (st | int(0)) <= 20 %}
|
|
{% set ns.c = ns.c + 1 %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{{ ns.c }}
|
|
icon: >
|
|
{% if this.state | int(0) == 0 %}
|
|
mdi:check-circle
|
|
{% else %}
|
|
mdi:battery-alert
|
|
{% endif %}
|
|
|
|
- name: "Devices with low battery list"
|
|
unique_id: devices_with_low_battery_list
|
|
icon: >
|
|
{% if states('sensor.devices_with_low_battery') | int(0) == 0 %}
|
|
mdi:check-circle
|
|
{% else %}
|
|
mdi:battery-alert
|
|
{% endif %}
|
|
state: >
|
|
{% set ns = namespace(names=[]) %}
|
|
{% for s in states.sensor %}
|
|
{% if s.attributes.device_class == 'battery' %}
|
|
{% set st = s.state %}
|
|
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
|
|
{% if st | int(-1) != -1 and (st | int(0)) <= 20 %}
|
|
{% set ns.names = ns.names + [s.name ~ ' (' ~ (st | int(0)) ~ '%)'] %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if ns.names | length == 0 %}
|
|
None
|
|
{% else %}
|
|
{{ ns.names | join(', ') }}
|
|
{% endif %}
|
|
attributes:
|
|
count: "{{ states('sensor.devices_with_low_battery') | int(0) }}"
|
|
entities: >
|
|
{% set ns = namespace(e=[]) %}
|
|
{% for s in states.sensor %}
|
|
{% if s.attributes.device_class == 'battery' %}
|
|
{% set st = s.state %}
|
|
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
|
|
{% if st | int(-1) != -1 and (st | int(0)) <= 20 %}
|
|
{% set ns.e = ns.e + [s.entity_id] %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{{ ns.e }}
|
|
names: >
|
|
{% set ns = namespace(n=[]) %}
|
|
{% for s in states.sensor %}
|
|
{% if s.attributes.device_class == 'battery' %}
|
|
{% set st = s.state %}
|
|
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
|
|
{% if st | int(-1) != -1 and (st | int(0)) <= 20 %}
|
|
{% set ns.n = ns.n + [s.name] %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{{ ns.n }}
|