Meine kleine Sammlung an Template-Senosren

Hey liebe Community

Um einen guten Überblick über den Zustand der HA zu bekommen, habe ich verschiedene Sensoren erstellt. Vielleicht hilft das dem einen oder anderen. Wenn aktiv, werden sie bei mir im Header angezeigt.

Wenn ein neues OTA- oder HA-Update vorhanden ist:

sensor:
    - platform: template
      sensors:
         #Sensor der neue Updates prüft 
         new_update:
            friendly_name: 'Neue Update'
            unique_id: new_update
            unit_of_measurement: 'Update'
            value_template: "{{ states.update | selectattr('state', 'in', ['on']) | list | count }}"

Anzeige für ausgefallene Z-Wave-Aktoren. Sobald der Wert über eins ist, wird eine Ping-Automation ausgelöst.:

sensor:
    - platform: template
         # ZWaveJS Node Stats
         zwavejs_node_statistics:
          unique_id: zwavejs_node_statistics
          friendly_name: "ZwaveJS Node Statistics"
          icon_template: >-
            {%- if states.sensor | selectattr('entity_id', 'search', '_node_status') | selectattr('state', 'in', 'dead, unknown') | list | count > 0 -%}
              mdi:emoticon-sad
            {%- elif states.sensor | selectattr('entity_id', 'search', '_node_status') | rejectattr('state', 'in', 'alive, asleep, dead, unknown') | list | count > 0 -%}
              mdi:help-circle
            {%- else -%}
              mdi:z-wave
            {%- endif -%}
          value_template: "{{ states.sensor | selectattr('entity_id', 'search', '_node_status') | list | count }}"
          attribute_templates:
            Alive: "{{ states.sensor | selectattr('entity_id', 'search', '_node_status') | selectattr('state', 'in', 'alive, awake') | list | count }}"
            Sleeping: "{{ states.sensor | selectattr('entity_id', 'search', '_node_status') | selectattr('state', 'in', 'asleep') | list | count }}"
            Dead: "{{ states.sensor | selectattr('entity_id', 'search', '_node_status') | selectattr('state', 'in', 'dead, unknown') | list | count }}"
            
         zwavejs_node_statistics_alive:
            friendly_name: 'Zwave Alive'
            unique_id: zwavejs_node_statistics_alive
            unit_of_measurement: Entitäten
            value_template: "{{ (state_attr('sensor.zwavejs_node_statistics', 'Alive') ) }}"
            
         zwavejs_node_statistics_sleeping:
            friendly_name: 'Zwave Sleeping'
            unique_id: zwavejs_node_statistics_sleeping
            unit_of_measurement: Entitäten
            value_template: "{{ (state_attr('sensor.zwavejs_node_statistics', 'Sleeping') )}}"

         zwavejs_node_statistics_dead:
            friendly_name: 'Zwave Dead'
            unique_id: zwavejs_node_statistics_dead
            unit_of_measurement: Entitäten
            value_template: "{{ (state_attr('sensor.zwavejs_node_statistics', 'Dead') )}}"

Dieser Sensor zeigt alle Batterien mit einem Wert unter 10 % an.

sensor:
    - platform: template
         battery_alert:
            entity_id: sensor.date
            friendly_name: 'Batteriestand'
            unique_id: battery_alert
            value_template: >
              {% set ns = namespace(below=[]) %}
              {% for s in states.sensor 
                    if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
                {% set ns.below = ns.below + [ s ] %}
              {% endfor %}
              {{ ns.below | count }} 
            attribute_templates:
              battery_low: >
                {% set ns = namespace(below=[]) %}
                {% for s in states.sensor 
                        if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
                  {% set ns.below = ns.below + [ s.name ~ ' (' ~ s.state ~ '%)'] %}
                {% endfor %}
                {{ ns.below | join(', ') }}

Dieser Sensor berechnet die Tiefsttemperatur der nächsten drei Tage. Liegt dieser Wert über dem Helfer-Wert, wird die Heizung ausgeschaltet, liegt er darunter, wird die Heizung eingeschaltet.

template:
  - binary_sensor:
      #Automatische Heizungssteuerung nach Aussentemperatur
      - name: "Heizung ein/aus automatische Steuerung Aussentemperatur"
        unique_id: heizung_ein_aus_automatische_steuerung_aussentemperatur
        icon: mdi:heating-coil
        state: >
          {{ ((state_attr('weather.bern_zollikofen', 'forecast') [0] ['templow']  | float + state_attr('weather.bern_zollikofen', 'forecast') [1] ['templow'] + state_attr('weather.bern_zollikofen', 'forecast') [2] ['templow']) / 3) | round (2) | float <= states('input_number.heizung_ein_aus_aussenzieltemperatur') | float }}

Ich besitze ein NAS mit 8 Festplatten. Wenn eine Platte defekt ist, schickt mir HA eine Nachricht. Hier ist der entsprechende Sensor.

template:
  - binary_sensor:
      - name: "Zustand Laufwerk Netzwerkspeicher"
        unique_id: zustand_laufwerk_netzwerkspeicher
        icon: mdi:alert
        state: >
          {{ states.sensor | selectattr('entity_id', 'search', 'synology1812_laufwerk') | selectattr('entity_id', 'search', '_status') | selectattr('state', 'in', 'unavailable, normal') | list | count == 8}}

Ich hatte gerade einen Fall, bei dem ein Bewegungsmelder ausgefallen ist und ich es nicht bemerkt habe, bzw. erst nach mehreren Stunden, als das Licht immer noch brannte. Ich habe einen Sensor entwickelt, der das Attribut “last seen” verwendet. Dieses Attribut muss allerdings in Zigbee2MQTT aktiviert werden. Sobald ein Sensor 3h keinen Wert mehr liefert, wird eine Meldung ausgelöst.

template:
  - binary_sensor:
      - unique_id: z2m_last_seen_entities
        name: "Z2M Last Seen Entities"
        state: >
          {% set lapsed_hours = 3 %}
          {% set ns = namespace(count=0) %}
          {% for state in states.sensor | selectattr('entity_id', 'search', '.*_last_seen$')  %}
            {% if states(state.entity_id) == 'unavailable' or ((as_timestamp(now()) - as_timestamp(states(state.entity_id),0)) > ((lapsed_hours | int) * 60 * 60)) %}
              {% set ns.count = ns.count + 1 %}
            {% endif %}
          {% endfor %}
          {{ ns.count }}     
        attributes:
          devices: >
            {% set lapsed_hours = 3 %}
            {% set result = namespace(sensors=[]) %}
            {% for state in states.sensor | selectattr('entity_id', 'search', '.*_last_seen$') %}
              {% if states(state.entity_id) == 'unavailable' or ((as_timestamp(now()) - as_timestamp(states(state.entity_id),0)) > ((lapsed_hours | int) * 60 * 60)) %}
                {% set result.sensors = result.sensors + [state.name | regex_replace(find='_last_seen', replace='') ~ ' (' ~ relative_time(strptime(states(state.entity_id), '%Y-%m-%dT%H:%M:%S%z', 'unavailable')) ~ ')'] %}
              {% endif %}
            {% endfor %}
            {{ result.sensors | join(', ') }}

Wenn ihr noch nützliche Sensoren habt, schreibt teilt diese doch hier. :blush:

18 „Gefällt mir“

Ich habe es mal in den Bereich Anleitungen geschoben. Danke dir für die Mühe.

VG

Hallo @guezli,
ich habe gerade deinen Batteriesensor gefunden und eingebaut. Danke dafür, das sollte eine Menge Arbeit sparen und Platz sparen, da ja nur die Problemkinder ausgegeben werden.
Welche Kachel sollte man am besten für die Ausgabe nutzen? Ich habe aktuell nur eine Batterie mit niedrigem Ladelevel, die ich über eine einfache “Entität-Karten” ausgegeben habe. Funktioniert!
Was ist, wenn mehrere Batterien ausgegeben werden müssen? Welche Karte macht da am meisten Sinn, wenn man eigentlich eine Liste ausgeben will?

Ich nutze da ganz unspektakulär die Markdowncard in einer bedingten Entität. Ich
Muss es ja nur wissen, welches Gerät demnächst den Geist aufgibt.

type: conditional
conditions:
  - entity: input_boolean.dashboard_batterie
    state: 'on'
card:
  type: markdown
  content: '{{state_attr(''sensor.battery_alert'', ''battery_low'')}}'
  title: Batteriestand < 10%

Funktioniert bei mir nicht. Ich habe wie schon beschrieben den Sensor in eine "Entität-Karten“ gesteckt und bekommen meine Batterie mit 5 % angezeigt. Daneben habe ich jetzt die “Markdowncard” mit deinem Code platziert. Hier wird aber nicht angezeigt.

Hast du die Entitätsnamen angepasst?

Ansonsten nutz den Code ohne die Bedingungscard.


  type: markdown
  content: '{{state_attr(''sensor.battery_alert'', ''battery_low'')}}'
  title: Batteriestand < 10%

Mein erster Template-Sensor … ich glaube, mein Problem liegt ganz woanders. Ich habe deinen Code einfach Copy Paste in die Templatedatei der Entwicklerwerkzeuge hinein kopiert. Dabei ist mir erst jetzt aufgefallen, dass die ersten 7 Zeilen bis " value_template: >" komplett weiß sind. Ich vermute mal, dass die nur als Text ausgegeben werden. Natürlich ist mit die fehlerhafte Ausgabe auf der rechten Seite auch nicht aufgefallen.
Das ist doch bestimmt ein Einrückungsfehler? Gelten hier auch die YAML Regeln?

Hallo @guezli,
kannst du mir sagen, was ich grundsätzlich falsch gemacht habe?

Ich habe deinen Code in die Entwicklerwerkzeuge in Template hinein kopiert (links, mit zwei Leerzeichen Abstand).

--- Ausgabe aller Batterien mit einem Wert unter 10 %

  sensor:
     - platform: template
       battery_alert:
          entity_id: sensor.date
          friendly_name: 'Batteriestand'
            unique_id: battery_alert
            value_template: >
              {% set ns = namespace(below=[]) %}
              {% for s in states.sensor 
                    if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
                {% set ns.below = ns.below + [ s ] %}
              {% endfor %}
              {{ ns.below | count }} 
            attribute_templates:
              battery_low: >
                {% set ns = namespace(below=[]) %}
                {% for s in states.sensor 
                        if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
                  {% set ns.below = ns.below + [ s.name ~ ' (' ~ s.state ~ '%)'] %}
                {% endfor %}
                {{ ns.below | join(', ') }}

Mein Ergebnis auf der rechten Seite sieht folgendermaßen aus:

--- Ausgabe aller Batterien mit einem Wert unter 10 %

 sensor:
     - platform: template
       battery_alert:
          entity_id: sensor.date
          friendly_name: 'Batteriestand'
            unique_id: battery_alert
            value_template: >



              1 
            attribute_templates:
              battery_low: >





                2107113SG Battery Level (5%)

Wo liegt mein Fehler?

Du kannst den Sensor dort nicht testen. Was Du testen kannst ist das was im value_template steht, aber auch nicht immer.

In den Entwicklerwerkzeuge kann nur der Teil ab den geschweiften Klammern {} getestet werden, also das Auslesen der sich ändernden Werte.

Den Code selbst schreibst du in die Datei Configuration.yaml. Bevor du den Rechner neu startest, klicke bei Entwicklerwerkzeuge auf die Schaltfläche „Konfiguration prüfen“. Wenn der Code einen Fehler enthält, darfst du den Rechner auf keinen Fall neu starten.

In der Templatedatei sieht es eigentlich schon ganz gut aus:

--- Ausgabe aller Batterien mit einem Wert unter 10 %

value_template: >
  
  
    
  
  1 
attribute_templates:
  battery_low: >
    
    
      
  
  2107113SG Battery Level (5%)

Jetzt kommen aber die Fehler in der configuration.yamel.

Hallo @guezli,
kannst du mir nochmal weiter helfen? Ich habe nochmal alles überprüft und bin der Meinung das alles richtig eingebaut habe. Wo kommen die Fehlermeldungen her und wie kann ich meinen Fehler beheben?

Hoi @mickysoft

Nach - platform: template und battery_alert fehlt noch sensors:

Ich habe dir hier den vollständigen Code für den Sensor. Achte dich bitte auf die Kommentare bei #. Das ist der komplette Aufbau in meiner Yaml.

sensor:  #Wenn du den schon in deiner Cofiguration.yaml hast, nicht ein zweites mal hinzufügen
    - platform: template #Wenn du den schon in deiner Cofiguration.yaml hast, nicht ein zweites mal hinzufügen
      sensors: #Wenn du den schon in deiner Cofiguration.yaml hast, nicht ein zweites mal hinzufügen
         #Batteriestand
         battery_alert:
            entity_id: sensor.date
            friendly_name: 'Batteriestand'
            unique_id: battery_alert
            value_template: >
              {% set ns = namespace(below=[]) %}
              {% for s in states.sensor 
                    if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
                {% set ns.below = ns.below + [ s ] %}
              {% endfor %}
              {{ ns.below | count }} 
            attribute_templates:
              battery_low: >
                {% set ns = namespace(below=[]) %}
                {% for s in states.sensor 
                        if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
                  {% set ns.below = ns.below + [ s.name ~ ' (' ~ s.state ~ '%)'] %}
                {% endfor %}
                {{ ns.below | join(', ') }}
1 „Gefällt mir“

Hallo @guezli , Danke für deinen Anleitung. Ich werde leider erst am Wochenende zum einbauen komme. Es gib auf jeden Fall noch eine Rückmeldung!

1 „Gefällt mir“

@guezli Eine schöne Sammlung von Sensoren.
Ich möchte ja kein Klugscheißer sein, aber HA hat die Schreibweise der template Sensoren mittlerweile geändert. Vielleicht für Neueinsteiger die Gelegenheit es gleich in der neuen Schreibweise zu machen. Aktuell funktionieren beide. Noch. Wer weiß wann das geändert wird. Hier die Erklärung.

Hallo @guezli .
ich verzweifle :face_with_spiral_eyes:. Es will einfach nicht funktionieren :tired_face:

hier mein Stand in der Cofiguration.yaml

Ich habe dir mal meine beiden Sensoren ausgegeben. Wie du in den Kommentaren beschrieben hast, habe ich die “Sensor” herausgenommen, da der Punkt ja schon im ersten Template eingebaut war.

-------------------------- EIGENE Templat Sensoren -----------------------------------
{## -------------------------------------------------------------------------------------- ##}
--- Ausgabe aller Batterien mit einem Wert unter 10 % --------------------------------

value_template: >
  {% set ns = namespace(below=[]) %}
  {% for s in states.sensor 
        if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
    {% set ns.below = ns.below + [ s ] %}
  {% endfor %}
  {{ ns.below | count }} 
attribute_templates:
  battery_low: >
    {% set ns = namespace(below=[]) %}
    {% for s in states.sensor 
            if 'battery_level' in s.entity_id and s.state != 'unknown' and s.state|int < 10 %}
      {% set ns.below = ns.below + [ s.name ~ ' (' ~ s.state ~ '%)'] %}
  {% endfor %}
  {{ ns.below | join(', ') }}

Das ist der Template-Code

-------------------------- EIGENE Templat Sensoren -----------------------------------

--- Ausgabe aller Batterien mit einem Wert unter 10 % --------------------------------

value_template: >
  
  
    
  
  1 
attribute_templates:
  battery_low: >
    
    
      
  
  SP Joachim Batterie Level  HA App (5%)

So sieht das Ergebnis aus

  type: markdown
  content: '{{state_attr(''sensor.2107113sg_battery_level'', ''battery_low'')}}'
  title: Batteriestand < 10%

Und das ist die Karte, die alles ausgeben soll.

In deinem Screenshot ist ein Einrückfehler. Warum schriebt ihr alles in die configuration.yaml und setzt euch nicht mit dem Thema Auslagern auseinander? Gerade das Thema copy Paste bereitet dann auch weniger Probleme.

Ich kann nicht oft genug erwähnen das das Thema packages so hilfreich ist.

1 „Gefällt mir“

Hallo @psyganja,
danke für den Hinweis das, das Aufteilen und Auslagen der configuration.yaml nicht nur den Vorteil hat, den Inhalt auf mehrere Dateien zu verteilen. Ich hatte davon schon gelesen, aber es für mich noch nicht so interessant erachtet, da meine configuration.yaml noch nicht besonders groß ist. Das wird sich aber jetzt ändern.

Da ich kein Programmierer bin und mich gerade noch in YAML hinein denken muss, wehre es nett, wenn du mir sagen könntest, wo mein Einrückfehler. Ich habe es nämlich nicht rausbekommen.

Beim grünen Stern fehlt ohne Einzug

sensor:

Hallo @guezli,
das hat nicht funktioniert. Hier die Ergebnisse mit 2 und ohne vorangestellte Leerzeichen

Mit zwei führenden Lehrstellen

Ohne führende Lehrstellen

1 „Gefällt mir“