Warnung sobald eine Batterie Entität fast leer ist

Hallo,

ich habe zahlreiche Taster und Sensoren, die über Batterie laufen. Gibt es eine Möglichkeit, dass HA mir auf dem Dashboard eine Nachricht anzeigt, sobald eine dieser Entitäten nur noch wenig Batterie hat?

So etwa wie hier?

https://community.simon42.com/t/gesamtzustand-der-fenster-und-tueren-ueber-entitaeten-filter-anzeigen/85676/24

Danke Euch!

Hi,
ungeprüft antwortet google KI dazu:

1. Dashboard: Alle Batteriestände anzeigen (Markdown-Karte)Fügen Sie diese Karte zu Ihrem Dashboard hinzu. Sie listet alle Batterien sortiert nach Ladestand auf und hebt Batterien unter 10 % fett und rot hervor.yamltype: markdown
title: "🔋 Batteriestände"
content: >

  | Gerät | Zustand |
  | :--- | :---: |
  {%- for state in states.sensor 
    | selectattr('attributes.device_class', 'defined') 
    | selectattr('attributes.device_class', 'eq', 'battery') 
    | sort(attribute='state', reverse=false) %}
    {%- set level = state.state | int(-1) %}
    {%- if level != -1 %}

      | {{ state.name }} | {% if level <= 10 %}**<span style="color: red;">{{ level }} %</span>**{% else %}{{ level }} %{% endif %} |
    {%- endif %}
  {%- endfor %}

  1. Automation: Warnung, wenn eine Batterie unter 10 % fällt

Diese Automation löst aus, sobald irgendein Batteriesensor unter 10 % fällt. Sie schickt eine Benachrichtigung an Ihr Smartphone und listet im Text genau den Namen des betroffenen Geräts sowie dessen aktuellen Ladestand auf.

Erstellen Sie eine neue leere Automation, klicken Sie oben rechts auf die drei Punkte, wählen Sie “Als YAML bearbeiten” und fügen Sie folgenden Code ein:

yaml

alias: "Warnung: Batterie unter 10%"
description: "Sendet eine Benachrichtigung, wenn eine Batterie schwach ist."
trigger:
  - platform: numeric_state
    entity_id: [] # Bleibt leer, da wir über das Template alle Batterien überwachen
    value_template: >-
      {{ states.sensor 
        | selectattr('attributes.device_class', 'defined') 
        | selectattr('attributes.device_class', 'eq', 'battery') 

        | map(attribute='state') | map('int') | min }}
    below: 10
condition: []
action:
  - service: notify.notify
    metadata: {}
    data:
      title: "🪫 Batterie schwach!"
      message: >-
        Folgende Batterien müssen getauscht werden:
        {%- for state in states.sensor 
          | selectattr('attributes.device_class', 'defined') 
          | selectattr('attributes.device_class', 'eq', 'battery') %}
          {%- if state.state | int(100) <= 10 %}
          - {{ state.name }}: {{ state.state }}%
          {%- endif %}
        {%- endfor %}
mode: single
💡 Profi-Tipps zum Code:notify.notify: Schickt die Nachricht an alle angemeldeten Smartphones. Wenn Sie die Nachricht nur an ein bestimmtes Gerät senden möchten, ersetzen Sie dies durch z.B. notify.mobile_app_ihr_handy.Voraussetzung: Ihre Geräte müssen in Home Assistant korrekt als Batterie erkannt werden (Standard bei fast allen Zigbee-, Homematic- oder Shelly-Geräten). Das wird über das Attribut device_class: battery im Hintergrund geregelt.

Vlt. ein Ansatzpunkt, die Google KI ist nicht so toll wie Claude aber schon brauchbar, nur muss man immer schauen, ob die Ausgabe Sinn macht, manchmal werden Dinge nur halb ausgeschrieben, was zu Fehlern führen kann

Die Markdown Karte funktioniert, sieht nicht schön aus aber funktional.

Cheers Franky

Hi, ich hab mal noch etwas Google gequält :laughing:

Das sit der YAML Code, einfach kopieren und in eine Markdown Karte einfügen, das Ergebnis siehst du dann unten auf dem Bild


  {%- set low_batteries = states.sensor 
    | selectattr('attributes.device_class', 'defined') 
    | selectattr('attributes.device_class', 'eq', 'battery') 
    | rejectattr('state', 'in', ['unavailable', 'unknown']) %}
  
  {%- set filtered_low = namespace(devices=[]) %}
  {%- for state in low_batteries %}
    {%- if state.state | int(-1) <= 10 and state.state | int(-1) >= 0 %}
      {%- set filtered_low.devices = filtered_low.devices + [state.name ~ ' (' ~ state.state ~ '%)'] %}
    {%- endif %}
  {%- endfor %}

  {%- if filtered_low.devices | length > 0 %}
  ### 🪫 WARNUNG: Kritische Batterien (< 10%)!
  {%- for device in filtered_low.devices %}
  * **⚠️ {{ device }}**
  {%- endfor %}
  ***
  {%- endif %}

  | Gerät | Zustand |
  | :--- | :---: |
  {%- for state in states.sensor 
    | selectattr('attributes.device_class', 'defined') 
    | selectattr('attributes.device_class', 'eq', 'battery') 
    | sort(attribute='state', reverse=false) %}
    {%- set level = state.state | int(-1) %}
    {%- if level != -1 %}

    | {{ state.name }} | {% if level <= 10 %}**⚠️ {{ level }} %**{% else %}{{ level }} %{% endif %} |
    {%- endif %}
  {%- endfor %}


Veil Vergnügen, beim Rumbasteln 

:grin:

Hier wird auch noch der Bereich mit ausgegeben, falls du mehrere gleichnamige Geräte hast

{%- set low_batteries = states.sensor
| selectattr(‘attributes.device_class’, ‘defined’)
| selectattr(‘attributes.device_class’, ‘eq’, ‘battery’)
| rejectattr(‘state’, ‘in’, [‘unavailable’, ‘unknown’]) %}

{%- set filtered_low = namespace(devices=
) %}
{%- for state in low_batteries %}
{%- if state.state | int(-1) <= 10 and state.state | int(-1) >= 0 %}
{%- set area = area_name(state.entity_id) | default(‘Kein Bereich’, true) %}
{%- set filtered_low.devices = filtered_low.devices + [state.name ~ ’ [’ ~ area ~ ‘] (’ ~ state.state ~ ‘%)’] %}
{%- endif %}
{%- endfor %}

{%- if filtered_low.devices | length > 0 %}

🪫 WARNUNG: Kritische Batterien (< 10%)!

{%- for device in filtered_low.devices %}

⚠️ {{ device }}
{%- endfor %}




{%- endif %}

Bereich

Gerät

Zustand

{%- for state in states.sensor





| selectattr('attributes.device_class', 'defined') 
| selectattr('attributes.device_class', 'eq', 'battery') 
| sort(attribute='state', reverse=false) %}
{%- set level = state.state | int(-1) %}
{%- if level != -1 %}
  {%- set area = area_name(state.entity_id) | default('Kein Bereich', true) %}

  | {{ area }} | {{ state.name }} | {% if level <= 10 %}**⚠️ {{ level }} %**{% else %}{{ level }} %{% endif %} |
{%- endif %}

{%- endfor %}

So, viel Vergnügen, beim Rumspielen und gestalten der Anzeigen :upside_down_face:

Wenn du was nettes hast, wäre es schön das Ergebnis hier zu posten,

Danke und Grüße Franky

P.S.: oder du schaust dir mal das Strategie Dashboard von Simon an:

:crayon:by HarryP: Zusammenführung Mehrfachpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen), oder noch besser die “Editier-Funktion” nutzen und nur den aktuellen Code einstellen.

Ich habe den Code noch so angepasst, dass die Karte nur angezeigt wird, wenn eine Batterie unter 10% ist, ansonsten ist die Karte ausgeblendet:

{%- set low_batteries = states.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | rejectattr('state', 'in', ['unavailable', 'unknown']) %} 
{%- set filtered_low = namespace(devices=[]) %} 
{%- for state in low_batteries %} 
  {%- if state.state | int(-1) <= 10 and state.state | int(-1) >= 0 %} 
    {%- set filtered_low.devices = filtered_low.devices + [state.name ~ ' (' ~ state.state ~ '%)'] %} 
  {%- endif %} 
{%- endfor %} 

{# Die gesamte Karte wird nur generiert, wenn kritische Batterien existieren #}
{%- if filtered_low.devices | length > 0 %} 
### ⚠️ WARNUNG: Kritische Batterien (< 10%)! 
{%- for device in filtered_low.devices %} 
* ⚠️ {{ device }}
{%- endfor %} 
*** 

| Gerät | Zustand |
| :--- | :---: |
{%- set ns = namespace(all=[]) %}
{%- for state in states.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | rejectattr('state', 'in', ['unavailable', 'unknown']) %}
  {%- set ns.all = ns.all + [ {"name": state.name, "level": state.state | int(-1)} ] %}
{%- endfor %}
{%- for item in ns.all | sort(attribute='level') %}

| {{ item.name }} | {% if item.level <= 10 %}**⚠️ {{ item.level }} %**{% else %}{{ item.level }} %{% endif %} |
{%- endfor %}
{%- endif %}

Habe vor zwei Wochen auf folgende HACS Integration umgestellt.
Funktioniert Super.
Status Meldungen verschiedener Art.
usw.

1 „Gefällt mir“

Vielen Dank für Eure Idee. Der letzte Vorschlag von nfloyd gefällt mir, da hier nicht permanent alles angezeigt wird.

Vielleicht hat jemand noch eine Idee, wie man es hinbekommt, dass ganze per Button Card bzw. Stapel Karte so zu gestalten:

In der von mir oben zitierten Lösung gab es eine solche Darstellung für meine Fenster, bei der nur die aktuell offnen Fenster gelistet werden und ansonsten ein grünes Fenster mit Alles geschlossen erscheint.

Ich nutze dafür die status-card aus HACS. Die nehme ich auch für offene Fenster, Türen, angeschaltete Lichter, Rollladen, Updates usw. und auch wenn ein Akku unter 30% fällt.

Hast Du dazu vielleicht ein Skript oder eine Anleitung?

Bei den Fenstern musste ich vorher einige Helfer definieren.

Hinweis dazu: Ein Teil der Geräte ist von Homematic und liest dort den Batteriestatus aus.

Hier ist mein Code für die status-card. Kannst du ja mal probieren, ob es dir so zusagt oder evtl. noch anpassen. Helfer sind dafür nicht nötig.

content:
  - Akku
  - RM-Akku
  - Unerreichbar
  - alarm_control_panel
  - light
  - binary_sensor - door
  - binary_sensor - window
  - cover - shutter
  - binary_sensor - moisture
  - binary_sensor - motion
  - update
type: custom:status-card
columns: 3
hide_person: true
list_mode: false
hide_content_name: false
customization:
  - type: cover - shutter
    invert_state: 'false'
    invert: true
    icon_color: indigo
  - type: binary_sensor - window
    invert_state: 'false'
    icon: mdi:window-closed-variant
    hold_action:
      action: more-info
    double_tap_action:
      action: more-info
  - type: binary_sensor - door
    invert_state: 'false'
    show_total_entities: false
    badge_mode: false
  - type: light
    invert_state: 'false'
    name: Licht
  - type: alarm_control_panel
    invert_state: 'false'
    icon_color: red
    name: Alarmanlage
  - type: binary_sensor - moisture
    invert_state: 'false'
    icon_color: blue
  - type: update
    invert_state: 'false'
    icon_color: teal
  - type: binary_sensor - motion
    invert_state: 'false'
    icon_color: orange
filter: area
label_filter: false
popup_sort: state
rulesets:
  - group_id: Akku
    group_icon: mdi:battery-30
    group_status: Niedrig
    attributes:
      device_class: battery
    state: <30
  - group_id: RM-Akku
    group_icon: mdi:smoke-detector-variant-alert
    group_status: Niedrig
    attributes:
      device_class: battery
    state: 'on'
  - group_id: Unerreichbar
    group_icon: mdi:cancel
    group_status: Unerreichbar
    state: unavailable
    area: sensoren
multiple_areas: false
show_total_number: false
show_total_entities: false
square: true
no_scroll: true
hide_card_if_empty: true
badge_mode: false
no_background: false
color: amber
styles:
  card:
    border-color: rgb(50, 50, 50);
  icon:
    background-color: rgba(0, 0, 0, 0)
content_layout: horizontal
grid_options:
  columns: 12
  rows: auto
extra_entities: []
hide_filter: entity
background_color:
  - 30
  - 30
  - 30

Update: Ich habe meine status-card Code angepasst um auch den Binärsensor von den Rauchmeldern zu erfassen. Der heisst bei mir “RM-Akku” … sollte dann auch für deine Binärsensoren von Homematic funktionieren (Namen dann vielleicht noch anpassen)

1 „Gefällt mir“

Ich habe es noch weiter für mich optimiert:

  • Es werden nur Batterielevels unter 50% angezeigt (if level < 50 )
  • Ich hbae die Tablet, Smartwatch ud Mobiles ausgeschlossen (ignored_entities)

Das ganze sieht nun so aus:

{%- set ignored_entities = [
  'sensor.lenovo_tb125fu_battery_level',
  'sensor.iphone_heidi_battery_level',
  'sensor.s23_home_battery_level',
  'sensor.galaxy_watch5_pro_b8ml_battery_level'
] %}

{%- set low_batteries = states.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | rejectattr('state', 'in', ['unavailable', 'unknown']) %} 
{%- set filtered_low = namespace(devices=[]) %} 
{%- for state in low_batteries %} 
  {# Filtert alle IDs aus der Ignorier-Liste aus #}
  {%- if state.entity_id not in ignored_entities %}
    {%- if state.state | int(-1) <= 10 and state.state | int(-1) >= 0 %} 
      {%- set filtered_low.devices = filtered_low.devices + [state.name ~ ' (' ~ state.state ~ '%)'] %} 
    {%- endif %} 
  {%- endif %} 
{%- endfor %} 

{# Karte wird nur generiert, wenn mindestens eine Batterie unter 10% ist #}
{%- if filtered_low.devices | length > 0 %} 
### ⚠️ WARNUNG: Kritische Batterien (< 10%)! 
{%- for device in filtered_low.devices %} 
* ⚠️ {{ device }}
{%- endfor %} 
*** 

| Gerät | Zustand |
| :--- | :---: |
{%- set ns = namespace(all=[]) %}
{%- for state in states.sensor | selectattr('attributes.device_class', 'defined') | selectattr('attributes.device_class', 'eq', 'battery') | rejectattr('state', 'in', ['unavailable', 'unknown']) %}
  {%- set level = state.state | int(-1) %}
  {# Zeigt nur Batterien unter 50% an und ignoriert die IDs aus der Liste #}
  {%- if level < 50 and state.entity_id not in ignored_entities and level != -1 %}
    {%- set ns.all = ns.all + [ {"name": state.name, "level": level} ] %}
  {%- endif %}
{%- endfor %}
{%- for item in ns.all | sort(attribute='level') %}

| {{ item.name }} | {% if item.level <= 10 %}**⚠️ {{ item.level }} %**{% else %}{{ item.level }} %{% endif %} |
{%- endfor %}
{%- endif %}

Sehr nice,

sieht schöner aus, als mein Vorschlag, nehme ich auch gerne :grin:

Dankeschön

Ich nutze dafür die custom:battery-state-card

type: custom:battery-state-card
secondary_info: '{attributes.battery_type_and_quantity}'
round: 0
filter:
  include:
    - and:
        - name: attributes.device_class
          value: battery
        - not:
            name: device.labels
            operator: contains
            value: no_battery_info
  exclude:
    - name: state
      value: 'Off'
    - name: state
      value: 10
      operator: '>'
    - name: state
      value: unavailable
bulk_rename:
  - from: Batterie+
  - from: Battery
sort:
  by: state
  desc: false
grid_options:
  columns: full

Ich nutze zusätzlich Battery-Notes

Oh man! So viele Vorschläge! Super! Da ist der Abend ja gerettet!

Homematic verwendet ja einen binary_sensor, der wohl keine Prozentwerte ausgibt. Gehen Eure Lösungen dann auch?

Also mit der status-card könnte man da sicher was basteln für nen Binärsensor. So wie ich es jetzt habe, werden nur Prozentwerte ausgewertet. Geht der auf 1 wenn die Batterie leer ist oder 0 wenn leer ?
Da fällt mir ein, ich brauche das auch noch für meine Rauchmelder-Batterien (X-Sense).. Die haben auch nur einen Binärsensor (steht im Moment auf “Normal”)

Update: Ich habe meine status-card Code angepasst um auch den Binärsensor von den Rauchmeldern zu erfassen. Der heisst bei mir “RM-Akku” … sollte dann auch für deine Binärsensoren von Homematic funktionieren (Namen dann vielleicht noch anpassen)

Das sollte funktionieren. Einfach mit exclude bzw. include arbeiten.

Habe heute selber mal gebastelt.

Es gibt eine Helfergruppe mit den Homematic Binärsensoren.

Dann habe ich das Skript für die offenen Fenster dubliziert und auf die Batterien angepasst.

Rausgekommen ist das:

type: vertical-stack
cards:
  - type: custom:auto-entities
    card:
      type: entities
      title: Batteriezustände
      show_header_toggle: false
      card_mod:
        style: |
          ha-card {
            background: rgba(255, 140, 0, 1) !important;
          }
          .card-header {
            color: #000000;
            font-weight: 600;
            font-size: 14px;
          }
    filter:
      include:
        - options:
            card_mod:
              style:
                hui-generic-entity-row $: |
                  .info {
                    color:#000000 !important;
                    font-weight:600;
                    font-size:12px;
                  }
                  state-badge {
                    color:#000000 !important;
                  }
                  .state {
                    color: #000000 !important;
                    font-weight:600;
                    font-size:14px;
                  }
          domain: binary_sensor
          attributes:
            device_class: battery
          state: 'on'
    show_empty: false
grid_options:
  rows: auto

Normal ist nichts auf dem Dashboard zu sehen. Hoffe, dass bei einer leeren Batterie eine Meldung kommt.

Zum Test habe ich dann mal den State auf off gesetzt und es wurden alle Batterien mit Zustand Normal (so heißt das bei Homematic) angezeigt.

Hinweis: Ich habe keine Ahnung von YAML, kann mir nur mit Basteln und Rückschlüssen helfen.

Jetzt wäre es noch Klasse, wenn man das Skript dahingehend erweitern kann, wenn sonstige Battrien bei einem Stand unter 20 % angezeigt werden. Die Batterien würde ich in einem Helfer sammeln. Aber dann ???