Fehlermeldung in Markdownkarte, die ich nicht verstehe: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'device_class'

Hallo zusammen,

ich möchte in einer Markdown Karte eine Summe von power aller in einem label enthaltenen Entitäten erstellen.
Das Label heißt “Smartplug” und alle haben auch einen Sensor mit der device_class power wie zum Beispiel hier:
state_class: measurement
unit_of_measurement: W
device_class: power

In der Markdown karte habe ich folgenden code:

type: markdown
content: |-
  {{ expand(label_entities(label_id('Smartplug')))
     |rejectattr('state', 'in', ['unavailable','unknown'])
     |selectattr('attributes.device_class', 'eq', 'power')
     |map(attribute='state')
     |map('float')
     |list
     |sum
     |round(0)
  }}

Dabei erhalte ich aber die Fehlermeldung wie im Betreff:

UndefinedError: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'device_class'

Nachdem aber das attribut device_class existiert, verstehe ich die Fehlermeldung nicht.
Was mach ich falsch oder wo ist mein Denkfehler?
Vielen Dank schon mal.

Hat hier niemand eine Idee, was hier das Problem sein könnte?
Irgendwelche Debugging Schritte?
Sind irgendwelche Ausgaben für obigen Befehl möglich, ähnlich einem debug.print um mehr zu sehen als nur die Fehlermeldung?
Über Hilfe wäre ich hier echt dankbar, weil ich hier nicht weiterkomme.

Versuch es mal so

type: markdown
content: |-
  {{ expand(label_entities(label_id('Smartplug')))
     |rejectattr('attributes.device_class', 'undefined') 
     |rejectattr('state', 'in', ['unavailable','unknown'])
     |selectattr('attributes.device_class', 'eq', 'power')
     |map(attribute='state')
     |map('float')
     |list
     |sum
     |round(0)
  }}

Danke, jetzt ist zumindestens die Fehlermeldung weg, aber die Summe ergibt 0.
D.h. keiner der gelisteten Entitäten hat auch die device_class.
Da bin ich jetzt schon einen Schritt weiter.
Dann begebe ich mich mal auf die Suche warum das so ist.

Hast du ein Label Smartplug angelegt und den gewünschten Entitäten (nicht Geräte) zugewiesen?

Entschuldigung dass ich so spät antworte, ich war leider verhindert.

Ich habe die Labels den Geräten zugewiesen, willst Du damit sagen, dass ich die Labels den Entitäten zuweisen muss?
Da muss ich mich mal genauer aufschlauen und werde das auch mit einem anderen Label mal probieren.
Danke für den Hinweis. Sobald ich hier weiter bin, werde ich Bescheid geben.

Ich habe jetzt keine Möglichkeit gefunden, einer Entität ein Label zuzuweisen … kann es sein dass das nicht funktioniert ?

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Es gibt auch die Möglichkeit, auf das Label eines Geräts zuzugreifen.
Mein Alexa Media Player hat das Label Test erhalten.

{{ label_devices('test') }}

spuckt die device id 5f9165917aba4aed674223ac1c7863a1 aus. Über


device_entities()


kann ich mir die dazugehörigen entity ids anzeigen lassen:


{{ device_entities(label_devices('test')|join) }}

generiert ['sensor.echo_dot_next_timer', 'media_player.echo_dot']

Mit expand:


{{ expand( device_entities(label_devices('test')|join) )
   |map(attribute='entity_id')
   |list
}}

Ich lerne hier immer mehr :smile:
Den Weg werde ich mal ausprobieren.

Ich habe eine interessante Methode gefunden.
Auf raten eines Bekannten habe ich einen “Dialog” (es war wirklich einer :wink: ) mit Copilot begonnen und dabei ist folgendes Script für die Markdown-Karte enstanden, die auch das macht was ich will und auch noch die einzelnen Werte auflistet:


type: markdown
title: Gesamtverbrauch Smartplugs
content: "{% set plugs = states.sensor | selectattr('entity_id', 'match', '^sensor.smart_plug_.*_power$') | list %}{% set sorted_plugs = plugs | sort(attribute='state', reverse=true) %}{% set total_power = plugs | map(attribute='state') | map('float') | sum %}**Gesamtleistung:** {{ total_power | round(2) }} W<br>{% for plug in sorted_plugs %}- {{ plug.name }}: {{ plug.state | float | round(2) }} W<br>{% endfor %}"

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)