LW IT Solutions
« Blog Overview /Smart Home / Home-Assistant-Energieübersicht: device_class, Einheit und state_class in der...
This post in other languages:

Home-Assistant-Energieübersicht: device_class, Einheit und state_class in der Discovery-Nachricht

Home-Assistant-Energieübersicht: device_class, Einheit und state_class in der Discovery-Nachricht
Inhalt
  1. Wohin die Nutzlast geht und warum sie dort bleibt
  2. Die drei Felder, die alles entscheiden
  3. total_increasing, total, measurement
  4. Welches Symptom aus welcher Zeile kommt
  5. Der Sensor, der seinen letzten Wert für immer behält
  6. Statistik schaut nicht zurück
  7. Quellen

Der Sensor kommt an. Er zeigt eine Zahl, die Zahl ändert sich, der Verlauf zeichnet eine Linie. Dann wird die Energieübersicht geöffnet, die Liste möglicher Quellen ist kurz, und der Sensor steht nicht darin – ohne Fehlermeldung irgendwo, denn aus Sicht des Systems ist nichts schiefgegangen.

Was fehlt, ist die Übereinstimmung dreier Felder der Entdeckungsnutzlast. Jedes davon ist freiwillig, jedes wird für sich angenommen, und erst die Kombination entscheidet, ob eine Entität eine Zahl in einem Diagramm ist oder eine Größe, die sich aufsummieren lässt.

Eine MQTT-Entdeckungsnutzlast für Home Assistant mit hervorgehobenem device_class, unit_of_measurement und state_class, verbunden mit drei Erläuterungen
Alles außerhalb der drei hervorgehobenen Zeilen bestimmt, wie die Entität heißt. Diese drei bestimmen, wo sie sich verwenden lässt.

Wohin die Nutzlast geht und warum sie dort bleibt

Entdeckung ist eine Nachricht auf einem Topic, das der Broker behält: homeassistant/<Komponente>/<Knoten>/<Objekt>/config, veröffentlicht mit gesetztem Retain-Merker. Behalten heißt, dass der Broker sie Home Assistant nach jedem Neustart erneut zustellt – deshalb übersteht ein MQTT-Gerät einen Neustart, ohne dass das Gerät etwas senden müsste.

# anlegen, behalten
mosquitto_pub -h broker -r -t "homeassistant/sensor/zaehler01/energie/config" -m "$(cat sensor.json)"

# entfernen: leere Nutzlast auf dasselbe Topic, wieder behalten
mosquitto_pub -h broker -r -t "homeassistant/sensor/zaehler01/energie/config" -m ""

Der zweite Befehl ist der, der meist fehlt. Die Entität in der Oberfläche zu löschen, entfernt sie bis zum nächsten Neustart; dann spielt der Broker die behaltene Konfiguration wieder ein, und das Gerät ist zurück. Eine MQTT-Entität ist erst weg, wenn das Topic leer ist, das sie erzeugt hat.

Die drei Felder, die alles entscheiden

device_class erklärt, um welche Art Größe es sich handelt, und legt damit fest, welche Einheiten dazu erlaubt sind. Für energy sind das Wh, kWh und MWh. Für power sind es W und kW, und ein Leistungssensor kommt als Energiequelle nicht in Frage, gleich was sonst in der Nutzlast steht – Watt ist eine Rate, und eine Übersicht, die Raten aufaddiert, wäre falsch.

unit_of_measurement wird buchstäblich verglichen. kWh geht durch, kwh und KWH nicht, und das Ergebnis ist keine abgelehnte Nutzlast, sondern eine Entität, deren Einheit nicht zur Klasse passt und die sich deshalb nicht auswählen lässt. Das ist die mit Abstand häufigste Ursache, und sie ist auf jedem Bildschirm unsichtbar außer auf dem, auf dem die Entität nicht erscheint.

state_class entscheidet, ob überhaupt Langzeitstatistik entsteht. Ohne dieses Feld bleibt der Wert im kurzen Verlauf und sonst nirgends; mit dem falschen ebenso. Nur total und total_increasing erzeugen die Stundensummen, aus denen eine Energieübersicht liest.

total_increasing, total, measurement

total_increasing ist für Zähler gedacht, die nur aufwärts zählen. Ein Rückgang wird als Zählerwechsel gelesen – ein getauschtes Gerät, eine Firmware, die bei null beginnt – und der neue Wert zählt ab dort, statt als negativer Verbrauch. Es braucht kein last_reset und ist für nahezu jeden Energiezähler die richtige Wahl.

total ist für Werte, die auch fallen können, etwa eine Bilanz, und erwartet einen last_reset-Zeitpunkt, um zu wissen, wann eine Periode begann. measurement ist für alles, was ein Zustand ist und keine Summe: Temperatur, Leistung, Feuchte. Es ist die Angabe, zu der alle greifen, weil sie neutral klingt, und es ist der Grund, warum ein tadelloser Zählerstand einen schönen Verlauf ergibt und nie eine einzige Kilowattstunde.

Eine Feinheit von total_increasing sollte bekannt sein, bevor sie eintritt: Ein Wert, der nach unten springt, wird bei genügend großem Sprung als Zählerwechsel gelesen, und der gesamte neue Stand wird in dieser Stunde als Verbrauch verbucht. Ein Zähler, der gelegentlich einen alten, niedrigeren Wert meldet, erzeugt also keinen kleinen Fehler, sondern eine Spitze in Höhe des ganzen Zählerstands.

Welches Symptom aus welcher Zeile kommt

Symptom Ursache in der Nutzlast
Entität da, als Energiequelle nicht wählbar state_class fehlt oder steht auf measurement
Entität da, Einheit sichtbar, aber nie summiert Einheit passt nicht zur device_class, etwa kwh
Entität lässt sich nicht umbenennen oder bearbeiten unique_id fehlt – und damit auch keine Energiequelle
Eine einzelne riesige Spitze in einer Stunde total_increasing an einem Zähler, der niedriger meldete
Wert steht tagelang still, Verbrauch ist null kein availability_topic und kein expire_after
Ein gelöschtes Gerät ist nach dem Neustart zurück das behaltene Konfigurationstopic wurde nie geleert

Fünf der sechs zeigen sich als etwas anderes als ein Fehler. Das ist die Gestalt des ganzen Problems: Eine Entdeckungsnutzlast wird Feld für Feld angenommen oder übergangen, und ein übergangenes Feld hinterlässt keine Spur außer der Fähigkeit, die es lautlos vorenthalten hat.

Der Sensor, der seinen letzten Wert für immer behält

Ein MQTT-Sensor ohne Verfügbarkeitsbehandlung kennt kein Offline. Der letzte eingetroffene Wert bleibt stehen, und bei einem Zählerstand ist das schlimmer als eine Lücke: Die Zahl wirkt plausibel, der Verlauf ist flach, und die Energieübersicht meldet einen Haushalt, der seit Dienstag nichts verbraucht hat.

availability_topic mit einem letzten Willen auf der Geräteseite ist die saubere Lösung, expire_after die grobe – eine Sekundenzahl, nach der der Zustand als nicht verfügbar gilt, wenn nichts Neues eintrifft. Für einen Zähler, der alle zehn Sekunden sendet, sind dreihundert großzügig und fangen ein totes Gerät trotzdem binnen fünf Minuten ab.

Statistik schaut nicht zurück

Langzeitstatistiken entstehen einmal je Stunde aus den Zuständen, die in dieser Stunde aufgezeichnet wurden. Eine am Freitag berichtigte Nutzlast erzeugt keine Statistik für Montag bis Donnerstag, weil es nichts gab, woraus sie hätte entstehen können – die Zustände waren da, nur hatte niemand angeordnet, sie zu summieren.

Das Loch lässt sich im Statistikeditor unter den Entwicklerwerkzeugen von Hand schließen, der einzelne Summen ändern kann, und bei einem Zähler, auf dessen Stände es ankommt, lohnt sich das. Es ist zugleich der Grund, die drei Felder am Tag der Einrichtung zu prüfen statt am Monatsende: Alles andere in einer Entdeckungsnutzlast lässt sich später berichtigen, ohne dass etwas verloren geht.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

ALL ARTICLES & CATEGORIES

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Diese Rubrik per RSS verfolgen

Data Privacy

Alle 11 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 44 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 25 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 15 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

Smart Home

Alle 11 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Diese Rubrik per RSS verfolgen