Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Tahutipai/971bf0e07e50ce6190e0dacd73262e2e to your computer and use it in GitHub Desktop.
Save Tahutipai/971bf0e07e50ce6190e0dacd73262e2e to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Low battery level detection & notification for all battery sensors
blueprint:
name: Report offline zigbee/zwave/battery/smart plug devices
description: Works with Smart Plugs, ZWave, Zigbee etc (Works with ZHA & Z2M)
#By Tahutipai 2024-02-21
#Originally Based on the work of Sybx @ https://community.home-assistant.io/t/low-battery-level-detection-notification-for-all-battery-sensors/258664
#Note: This has been upgraded to report only the Device that is offline, not multiple individual sensors within one Device
domain: automation
input:
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!
default: {entity_id: []}
selector:
target:
entity:
device_class:
- battery
- switch
actions:
name: Actions
description: Call your notification here. {{offline_devices}} will replaced with the name of any offline devices
selector:
action: {}
source_url: https://gist.github.com/Tahutipai/971bf0e07e50ce6190e0dacd73262e2e
variables:
day: !input 'day'
exclude: !input 'exclude'
offline_devices: >-
{% set result = namespace(offline_devices=[]) %}
{% for sensor in states.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', '==', 'battery') %}
{% if "unavailable" in sensor | string and not sensor.entity_id in exclude.entity_id %}
{% set result.offline_devices = result.offline_devices + [device_attr(device_id(sensor.entity_id), "name")] %}
{% endif %}
{% endfor %}
{% for binary_sensor in states.binary_sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', '==', 'battery') %}
{% if "unavailable" in binary_sensor | string and not binary_sensor.entity_id in exclude.entity_id %}
{% set result.offline_devices = result.offline_devices + [device_attr(device_id(binary_sensor.entity_id), "name")] %}
{% endif %}
{% endfor %}
{% for switch in states.switch | selectattr('state','eq','unavailable') %}
{% if switch.entity_id not in exclude.entity_id %}
{% set result.offline_devices = result.offline_devices + [device_attr(device_id(switch.entity_id), "name")] %}
{% endif %}
{% endfor %}
{{result.offline_devices|sort|unique|join('\n')}}
trigger:
- platform: time
at: !input 'time'
condition:
- '{{ offline_devices != '''' and (day | int == 0 or day | int == now().isoweekday()) }}'
action:
- choose: []
default: !input 'actions'
mode: single
@xbmcnut
Copy link

xbmcnut commented Jan 6, 2025

I'm using labels to exclude a couple of labs devices (nspanel01, Double Aqara Switch) that have been offline for a while along with the two plant sensors and the exclude does not work as shown by the screenshot.

alias: Report offline zigbee/zwave/battery/smart plug devices
description: ""
use_blueprint:
  path: Tahutipai/report_zigbee_zwave_devices_gone_offline.yaml
  input:
    actions:
      - action: notify.mobile_app_pete_s_pixel_7
        metadata: {}
        data:
          title: Offline Devices Summary
          message: The following devices are offline > {{offline_devices}}
    time: "10:00:10"
    exclude:
      entity_id: []
      label_id: excludenotify
      device_id:
        - 16d556e1da99872fe9e4976889b1de55
        - 1021fe40cce7cc64e60f3f7f004b858f

image

@Sireone
Copy link

Sireone commented Jan 8, 2025

Same here. Alexa devices/entities doesn't seem to work as it should. Label exclusion doesn't work either.

@bigthrilla
Copy link

Labels are....kind of working? Tuya devices are showing up that are mains powered as well.

@Ltek
Copy link

Ltek commented Mar 13, 2025

I made a fork here... https://gist.github.com/Ltek/0c9cecf632b9c32915130680d834bcf7

Updates are...

  • Excludes are working
  • According to my testing, its also a lot faster execution.

@marcopaganini
Copy link

I noticed that on line 57, if I don't add | selectattr('attributes.device_class', 'defined'), it will alert me for some wired devices I own. Funnily, I cannot exclude them (they don't show in the list)... Not sure if it's a bug or something with my installation.

@Ltek
Copy link

Ltek commented Sep 13, 2025

I noticed that on line 57, if I don't add | selectattr('attributes.device_class', 'defined'), it will alert me for some wired devices I own. Funnily, I cannot exclude them (they don't show in the list)... Not sure if it's a bug or something with my installation.

my version above has more capabilities and filtering available.

@marcopaganini
Copy link

I noticed that on line 57, if I don't add | selectattr('attributes.device_class', 'defined'), it will alert me for some wired devices I own. Funnily, I cannot exclude them (they don't show in the list)... Not sure if it's a bug or something with my installation.

my version above has more capabilities and filtering available.

Oh yes, I just found it and I'm already using it, thanks! I now discovered I have a device that, for some reason, will always report "unknown" in the battery... But that's another story.

Thanks for your version!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment