Wie komm ich an historische Datenwerte von Sensoren zum weiterrechnen?

Ich bin unglücklich mit der Auswertung meines Energieverbrauchs. Das ist ist im Laufe der Zeit mit HA gewachsen, aber irgendwie auch nicht (mehr) wirklich aussagekräftig. Deswegen heißt mein Projekt jetzt “Renovieren” - aber ich stoße an allen Ecken an Hürden, der Frust wächst…

Ziel 1a - kwh Verbrauch Hochrechnen
Ich möchte gerne hochrechnen, wie viel kwh ein Gerät / Raum / Haus aufs Jahr gerechnet verbrauchen wird bzw. in der Vergangenheit hat.
Dafür will ich die letzten 365 Tage berücksichtigen, ältere Daten nicht. Wenn die Geräte neu sind, muss die Hochrechnung natürlich mit weniger Tagen auskommen, und dementsprechend der ein Faktor dynamisch angepasst werden (bsp: Gerät seit vier Monaten am Start: Verbrauch

Hier laufe ich gegen so viele Wände. Wie kann ich das machen? Wie macht ihr das?
Mit UtilityMeters hab ich rumgebastelt, bis mir aufgefallen ist, dass die ja mit statischen Zyklen arbeiten, und jeweils auch nur den vergangenen vollen Zyklus zeigen. Deswegen hilft das ja nicht. Oder hab ich UtilityMeters doch nicht richtig verstanden?

Ich kenne keine Möglichkeit an die historischen Daten zu kommen, bestenfalls inkl. CoverRatio als Attribut - damit könnte man ja easy rechnen. Nur so als fiktives Beispiel, an was ich denke: sensor.waschmaschine(kwh-365days) * (1/CoverRatio).

Bisher habe ich einfach das Datum des Beginns der Aufzeichnung genommen und dann den Dreisatz bemüht. Aber jetzt habe ich zu alte Daten, das Nutzungsverhalten hat sich nachhaltig verändert, das alte Nutzungsverhalten soll also nicht mehr berücksichtigt werden.

Wie rechnet ihr denn euren Energieverbrauch aus/hoch?

Ziel 1b - Zyklus Hochrechnen
Der kleine Bruder von eben beschriebenen: Wenn Waschmaschine/Geschirrspüler/Kaffeemaschine,… fertig sind, erhöhe ich einen Counter. Daraus berechne ich, dass z.B. die Waschmaschine durchschnittlich alle 56 Stunden läuft. Gleiches Spiel wie oben, nur eben für einen input_number.helper.

Ziel 2 - Tendenz Energieverbrauch
Ich möchte darstellen, ob der Energieverbrauch im Moment tendenziell steigt oder sinkt (kwh oder %). Bei manchen Geräten müssen dafür die letzten 0-12h mit 13-48h verglichen werden, bei manchen aber auch 0-96h mit 97-336h.
Hier hab ich ein ähnliches Problem wie oben - zum vergleichen hilft es mir ja nicht, den (Beispiel) angebrochen Tag mit dem Vortageswert zu vergleichen.

In diesem Fall könnte man wohl auch auf Statistics - Home Assistant zugreifen, auch wenn das je Gerät mind 3 weitere Entities mit sich bringt, und auch umständlich über configuration.yaml zu lösen ist.
Darüber hinaus deck mein Recorder nur 168h ab. Klar, könnte man entsprechend verlängern. Aber das bedeutet bei mir täglich mehrere GB mehr schreiben/hochladen…

Mensch ärgere dich nicht
Ich hab jetzt das lange Wochenende mit lesen, basteln, fluchen, DB-Reparieren, Backup Restores,… :stuck_out_tongue_closed_eyes: verbra(u)cht, und bin dem Ziel gefühlt keinen Meter näher gekommen :confused:
Wie controlled ihr denn euren Energieverbrauch, fallen euch Lösungsmöglichkeit / Ansätze für meine Ziele ein?

Dafür ist HA meiner Meinung nach nicht gemacht.
Bis auf die Daten im Energie Dashboard wird alles nach default 10 Tagen gelöscht. Kann man zwar verlängern, ist aber nicht wirklich sinnvoll.
Langfristdatenspeicherung ist eine Aufgabe für die InfluxDB und dann daraus abgeleitet eventuell eine Visualisierung in Grafana. Eventuell geht das auch in HA.
Eventuell gibt es AddOns, die bei den ganzen Kalkulationen und Hochrechnungen helfen, aber dann brauchst du immer noch eine Speichermöglichkeit.
Ist ein spannendes Thema. Mal schauen was hier noch so kommentiert wird.

Interessantes Projekt. :+1:

Mit dem utility_meter hast Du doch unzählige Möglichkeiten. Die kann man bis zu 15 Min. Intervallen herunter konfigurieren. Nur mal so gesponnen: Du machst nen yearly und nen monthly. Die Daten von dem monthly kannst Du mit dem Attribut “last_period” in einen Sensor last_month speichern. Somit hast Du schonmal das Verhalten von 8 Wochen im Blick. So könntest Du zumindest tendentiell hoch oder runter des Verbrauchs monatlich erkennen. Mit den prozentualen Abweichungen könnte man dann dynamisch den zu erwartenden Jahresverbrauch mit dem yearly kalkulieren.

EDITH: Noch ein bischen quergelesen. Die long term statistics werden nie gepurged, das wurde auch in der letzten Release-Party erläutert. Die werden stündlich in der DB gespeichert. Über eine SQL-Query soll man da drankommen, aber das muss ich noch testen. Könnte aber ein Plan sein…

1 „Gefällt mir“

Genau da hakts bei mir. Die utility_meter stellen ja immer Kalendarische zyklen dar - im Yearly sind also nicht die letzten 365 Tage, sondern der Verbrauch des aktuellen Jahres. Am 15.04. also 105 Tage. Das wäre also mindestens ziemlich aufwendig, da was passendes zu basteln…

DAS klingt megagut! Prinzipiell ist das ja auch schon alles, was es braucht - was war der Wert vor -365 Tagen, was war der Wert vor 336 Stunden… Ich hatte mal mit SQL gearbeitet, das war unterirdisch performant - aber vermutlich war meine Abfrage viel zu kompliziert. Also, das ist wirklich ein spannender Ansatz!

Ich träume ja immer noch von einer Template-Option, einem Service o.ä. der einfach nur einen Wert ausspuckt. Aber da scheint es wirklich nix zu geben. Vielleicht ist SQL eine gute Lösung!

Yess! Obwohl ich mich mit SQL nun wirklich nicht auskenne - mit Google, Foren, SQL-Browser hab ich einen sehr guten Zwischenstand :sunglasses: Mit diesem (sensor.meinhistoriesensor und wievielzurückinsekunden natürlich entsprechend anpassen) SQL-Sensor:

SELECT *
FROM "statistics"
WHERE metadata_id = (SELECT id FROM statistics_meta WHERE statistic_id = 'sensor.meinhistoriesensor') 
AND created_ts > (CAST(strftime('%s', 'now') AS integer) - wievielzurückinsekunden)
ORDER BY created_ts LIMIT 1

gibt es den ensprechenden historischen Wert, inklusive hilfreicher Attribute zurück:

id: 34828
created: null
start: null
mean: null
min: null
max: null
last_reset: null
state: 28.924
sum: 27.573
metadata_id: 20
created_ts: 1651586410.51253
start_ts: 1651582800
last_reset_ts: null
unit_of_measurement: kWh
icon: mdi:database-search
friendly_name: sensor.test_vor_einem_jahr

Das ist wirklich Top! Und mit start_ts kommen direkt auswertbare Sekunden. Da kann man sogar gefahrlos Sensoren hochrechnen lassen die noch nicht so alt sind.

Ich vermute, wenn man sich gut mit SQL auskennt, könnte man noch viel bessere Abfragen bzw. Ergebnisse machen (Plausibiliätsprüfung? Wurde der Sensor irgendwann mal zurückgesetzt? Direkt Hochrechnung ausspucken), aber ich rechne da lieber in Templates, da hab ich wenigstens ein Grundverständnis :wink:

Nochmal vielen Dank für den Stubser in die Richtung - ich hoffe ich kann bald mal nen fertigen Prototypen präsentieren :slight_smile:

Super Sache!

Lass uns gerne an den weiteren Fortschritten teilhaben…