With some more help from AI, here’s a code snippet to copy-paste into a Markdown card to place somewhere on your dashboard to give you a nice health status of online vs offline devices on your Zigbee network broken down by room so you can easily find the culprits to fix. It also in effect shows you a ratio of routers to battery devices in each room as a byproduct 
{%- set zha_devices = integration_entities('zha') | map('device_id') | unique | list -%}
{%- set ns = namespace(
bat_tot=0, bat_on=0, bat_off=0,
main_tot=0, main_on=0, main_off=0,
rows=[],
offline_list=[]
) -%}
{#- --- PROCESS DEVICES (Silent Loop) --- -#}
{%- for device in zha_devices -%}
{%- set entities = device_entities(device) -%}
{#- FILTER: Only look at 'Real' controls. Ignore buttons/updates. -#}
{%- set real_entities = entities | select('match', '^(light|switch|sensor|binary_sensor|lock|cover|climate|fan)\..*') | list -%}
{%- set check_list = real_entities if real_entities | count > 0 else entities -%}
{#- OFFLINE LOGIC: If ANY primary entity is unavailable, the device is Offline. -#}
{%- set offline_entities = check_list | select('is_state', 'unavailable') | list -%}
{%- set is_offline = offline_entities | count > 0 -%}
{#- BATTERY CHECK -#}
{%- set is_battery = entities | select('is_state_attr', 'device_class', 'battery') | list | count > 0 -%}
{#- DATA PREP -#}
{%- set area = area_name(device) | default('Unassigned', true) -%}
{%- set dev_name = device_attr(device, 'name_by_user') | default(device_attr(device, 'name'), true) -%}
{%- set type_str = "Bat" if is_battery else "Pwr" -%}
{#- Update Counters -#}
{%- if is_battery -%}
{%- set ns.bat_tot = ns.bat_tot + 1 -%}
{%- if is_offline -%}
{%- set ns.bat_off = ns.bat_off + 1 -%}
{%- else -%}
{%- set ns.bat_on = ns.bat_on + 1 -%}
{%- endif -%}
{%- else -%}
{%- set ns.main_tot = ns.main_tot + 1 -%}
{%- if is_offline -%}
{%- set ns.main_off = ns.main_off + 1 -%}
{%- else -%}
{%- set ns.main_on = ns.main_on + 1 -%}
{%- endif -%}
{%- endif -%}
{#- Add to row list for Summary -#}
{%- set status_str = "OFF" if is_offline else " OK" -%}
{%- set ns.rows = ns.rows + [{'area': area, 'type': type_str, 'status': status_str}] -%}
{#- Add to Offline List if dead -#}
{%- if is_offline -%}
{%- set ns.offline_list = ns.offline_list + [{'name': dev_name, 'area': area, 'type': type_str}] -%}
{%- endif -%}
{%- endfor -%}
{#- --- RENDER OUTPUT --- -#}
## 📡 Zigbee Network Health
```text
SUMMARY
---------------------------------
TYPE | TOTAL | OK | OFF
---------------------------------
Mains(Pwr)| {{ '%-5d' % ns.main_tot }}| {{ '%-5d' % ns.main_on }}| {{ ns.main_off }}
Battery | {{ '%-5d' % ns.bat_tot }}| {{ '%-5d' % ns.bat_on }}| {{ ns.bat_off }}
---------------------------------
DETAILS (Offline/Online count)
---------------------------------
ROOM | PWR (OK/OFF) | BAT (OK/OFF)
---------------------------------
{% for area in ns.rows | map(attribute='area') | unique | sort %}
{%- set area_devices = ns.rows | selectattr('area', 'eq', area) | list -%}
{%- set pwr_ok = area_devices | selectattr('type','eq','Pwr') | selectattr('status','eq',' OK') | list | count -%}
{%- set pwr_off = area_devices | selectattr('type','eq','Pwr') | selectattr('status','eq','OFF') | list | count -%}
{%- set bat_ok = area_devices | selectattr('type','eq','Bat') | selectattr('status','eq',' OK') | list | count -%}
{%- set bat_off = area_devices | selectattr('type','eq','Bat') | selectattr('status','eq','OFF') | list | count -%}
{%- set area_print = (area[:12] + '..') if area|length > 14 else area -%}
{{ '%-14s' % area_print }}| {{ '%2d' % pwr_ok }} / {{ '%-2d' % pwr_off }} | {{ '%2d' % bat_ok }} / {{ '%-2d' % bat_off }}
{% endfor %}
```
### 💀 Offline Devices
{% if ns.offline_list | count > 0 %}
```text
{{ '%-25s' % 'DEVICE NAME' }} | {{ '%-25s' % 'ROOM' }} | TYPE
---------------------------------------------------------------
{% for dev in ns.offline_list | sort(attribute='area') %}
{#- Truncate name to 23 chars to fit column -#}
{%- set name_print = (dev.name[:23] + '..') if dev.name|length > 25 else dev.name -%}
{#- Truncate area to 23 chars to fit column -#}
{%- set area_print = (dev.area[:23] + '..') if dev.area|length > 25 else dev.area -%}
{{ '%-25s' % name_print }} | {{ '%-25s' % area_print }} | {{ dev.type }}
{% endfor %}
```
{% else %}
🎉 **All devices are online!**
{% endif %}
Example of what this looks like: