EnergieDashboard, Kosten, Amortisierung, Langzeitstatistik, Korrekturen & Nachrüstungen

Momentan bin ich noch am Rumspielen und ausprobieren, aber wenn ich mir die Fragen des Energiedashboards ansehe und die Sensoren die ich grade auslese, sehe ich hier einige offene Punkte die zu lösen sind bevor das Ganze mit weiteren Komponenten aktiv wird.

Momentan In Verwendung: 1x ESPLesekopf mit Tasmota EZB DD3 mit 2 Richtungs-Doppeltarif-Zähler
T1,T2, Verbrauch Gesamt,jew in KWH und den momentanen Leistungskurven in Watt für 3 Phasen

Kurzfristig Geplant: ESPHome für die Viessmann Gasheizung, AI on the Edge für Wasser und Gaszähler.

Was mache ich mit Anfangswerten die aus dem Zähler kommen und die Statistik verunstalten wie 2,4kwh Export die ich nich erzeugt habe nach meinem Wissensstand? Die müssen ja irgendwie abgezogen werden

Wie lange speichert das Dashboard Verbräuche , Preise und Teilsummen einzelner Verbraucher und Erzeuger. Ich finde die doppelte Buchhaltung mit Grafana und InfluxDB irgendwie abschreckend.
Würde dazu noch Klimadaten wie Wind, Wetter,Temperatur , Luft- und Bodenfeuchtigkeit abspeichern damit wir uns das Gartentagebuch etwas sparen wo wir sowas bisher händisch notiert haben.

Wieso hat das Dashboard keine Anzeige für momentan Vebrauch?
Hier liegen schwankende Werte von wenigen dutzend bis mehreren hundert Watt an den 3 Phasen des Zählers an. Das sollte doch standardmäßig mit angezeigt werden :slight_smile:

Wie geht man die Amortisierung am besten an? Man hat ja in den Angeboten der Solarteure eine Beispielrechnung und man hat Prognosen in HA und es gibt statistische Werte die man bisher gemessen hat bzw die man gemessen hat und hochrechnen kann.
Die Einzelnen Werte gegeneinander zu stellen wäre interessant so dass man am Ende sieht was gestimmt hat und wie weit man sich vertan hat zu seinen Gunsten oder Ungunsten.
Wie macht man das Ganze robust gegenüber Veränderungen wie Wechsel des Stromanbieters zwischendurch der womöglich dynamische Preise hat und die Rechnung ändert oder eine Preissenkung die die Amortisierung verlängert? Wie würde ich die Sache ansetzen wenn ich damit rechne dass ich eine Solaranlage in klein jetzt kaufe und dann auf den Geschmack komme und noch mal erweitern möchte ?

Das EnergieDashboard kennt auch keine Momentanverbräuche in Watt, sondern erwartet immer Wh oder kWh-Stunden oder vergleichbares. Momentanverbräuche musst Du Dir anderswo anzeigen lassen.

In der Regel Speicher HA seine Einzelwerte 10Tage. Die Daten aus dem EnergieDashboard werden länger gespeichert und dann auch intern irgendwie in Wochen-, Monats-, Jahreswerten abgespeichert. Alle anderen Werte sind nach 10Tagen weg.

Du kannst nun alles was du länger behalten möchtest in die influxDB auslagern, aber nur das was du wirklich benötigst um die influxDB nicht auch unnötig voll laufen zu lassen oder du erhöhst die Speicherdauer in der HA Datenbank, was dann aber wieder auf die Performance schlagen könnte.

Für Amortisation muss Dir jemand anderes weiter helfen. Darum habe ich mich nie gekümmert, aber Du kannst ja Deine Bezugskosten und Deine Einspeisekosten hinterlegen. Dann siehst Du was Du verdient und was Du ausgegeben hast und in Kombination mit Deinem Gesamtverbrauch kannst Du Dir dann auch errechnet, wieviel Geld du gespart hat, weil Du Deinen eigenen erzeugten Strom verbraucht hast und mit den 3 Werten dann Deine Amortisation rechnen.
Viel Erfolg
Claudius

@ryhoruk Eine wirklich tolle Antwort!

Kleine Ergänzung noch. Wegen der Anfangswerte. Wenn diese wirklich im EnergieDashboard falsch angezeigt werden sollte, kannst du sie auch hinterher über Entwicklerwerkzeuge - Statistiken bearbeiten.

2 „Gefällt mir“

Es ist ziemlich mühsam den Zeitpunkt des falschen Wertes zu finden.
Vor allem ist es schwierig wenn man zwar den Verbrauch repariert hat, aber dann die Kosten weiterhin verkehrt sind
Noch dazu kommen diese Geisterwerte des öfteren wieder. Gerne in der Nacht und 2-3 mal.
Keine Ahnung warum dann nochmal der Gesamtverbrauch des Zählers 2mal eingespielt wird.
Auf die Dauer macht einen das Reparieren mürbe.

Hast du ein Helfer dafür erstellt der den aktuellen Wert mit loggt? Manchmal gehen die Geräte, besonders ESP offline und dann nimmt der den gesamt Wert weil das Energie dashboard nicht damit um kann wenn der Wert ‚nicht Verfügbar‘ ist. Hatte das auch am ersten Tag.

Also gebaut ist es wie folgt aus Bastel-Gründen:

  1. Es gibt einen Pihole-Raspberry der einen MQTT Server betreibt
  2. Im Zählerschrank befindet sich ein ESP-Lesekopf mit Tasmota der die Werte via MQTT auf den Raspberry schreibt
  3. Der 2te Raspberry zum Testen von HA steht hier am Schreibtisch und hat folgende Einstellungen in der Configuration.yaml

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
      - name: "Stromzähler Verbrauch EG"
        unique_id: "StromzEGVerbrauch"
        unit_of_measurement: 'Wh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ states('sensor.tasmota_sm_1_8_0') }}
  - sensor:
    # Stromzähler Abstellkammer Erzeugung
      - name: "Stromzähler Erzeugung EG"
        unique_id: "StromzEGErzeugung"
        unit_of_measurement: 'Wh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ states('sensor.tasmota_sm_2_8_0') }}
  - sensor:
    # Stromzähler Abstellkammer Momentanverbrauch GesamtAllePhasen"
      - name: "Stromzähler Momentanverbrauch_GesamtEGAllePhasen"
        unique_id: "StromzMomVerbrauchGesamt"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "measurement"
        state: >-
            {{ states('sensor.tasmota_sm_16_7_0') }}

Stromverbrauch und Erzeugung sind dann im Energie-Dashboard ausgewählt mit einem statischen Preis in Cent.

Ob der Lesekopf offline geht, kann ich jetzt nicht mit Sicherheit sagen. USB-Kabel und Netzteil sind bisher aber solide gelaufen und WLAN reicht dank Mesh Netzwerk deutlich über die Grundstücksgrenze hinaus, Empfangsprobleme sollte es also in dem Abstellraum nicht geben.

Ok Weiss nicht wie sich das in Verbindung mit mqtt verhält. Bei Esphome kann man es auch beobachten das er manchmal auf offline geht. Hat auch nichts mit dem Empfang oder so zu tun warum aber das so ist kann ich auch nicht erklären dafür Steck ich noch nicht so tief in der esp Materie drin :see_no_evil: ist aber auch bekannt daher soll man einen Helfer nutzen als fallback der das verhindert das der Wert auf 0/unavailable geht und somit der Gesamtwert geloggt wird. Vielleicht kannst ja was damit anfangen:

{% if states('sensor.gaszaehler_gasverbrauch') == 'unavailable' or states('sensor.gaszaehler_gasverbrauch') == 0 %}
  {{ states('sensor.gasincubicmeter') }}
{% else %}
  {{ states('sensor.gaszaehler_gasverbrauch') | float }}
{% endif %}

‘sensor.gaszaehler_gasverbrauch’ Ist der originalwert und
‘sensor.gasincubicmeter’ ist in dem Fall der Template Sensor der an das Energie Dashboard weitergegeben wird.

2 „Gefällt mir“

Irgendwo hab ich nen Denkfehler :slight_smile: Es wurde nur schlimmer als ich darauf

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
      - name: "Stromzähler Verbrauch EG"
        unique_id: "StromzEGVerbrauch"
        unit_of_measurement: 'Wh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {% if states('sensor.tasmota_sm_1_8_0') == 'unavailable' or states('sensor.tasmota_sm_1_8_0') == 0 %}
            {{ states('sensor.stromzahler_verbrauch_eg') }}
            {% else %}
            {{ states('sensor.tasmota_sm_1_8_0') }}
            {% endif %}
  - sensor:
    # Stromzähler Abstellkammer Erzeugung
      - name: "Stromzähler Erzeugung EG"
        unique_id: "StromzEGErzeugung"
        unit_of_measurement: 'Wh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {% if states('sensor.tasmota_sm_2_8_0') == 'unavailable' or states('sensor.tasmota_sm_2_8_0') == 0 %}
            {{ states('sensor.stromzahler_erzeugung_eg') }}
            {% else %}
            {{ states('sensor.tasmota_sm_2_8_0') }}
            {% endif %}
  - sensor:
    # Stromzähler Abstellkammer Momentanverbrauch GesamtAllePhasen"
      - name: "Stromzähler Momentanverbrauch_GesamtEGAllePhasen"
        unique_id: "StromzMomVerbrauchGesamt"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "measurement"
        state: >-
            {{ states('sensor.tasmota_sm_16_7_0') }}

gemacht hab. Das wäre ein neuer Zwischensensor nicht der alte der schon ins Dashboard linkt oder?
Heisst ich hab Tasmota Erzeugung, Erzeugung-Puffer-, Erzeugung-Dashboard und nochmal 3 für den Gesamtverbrauch? Momentan-Verbrauch muss man ja ned Puffern.

ich würde sagen

  1. Deine Einrückungen stimmen nicht
  2. probiere mal folgenden Code
template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
    - name: "Stromzähler Verbrauch EG"
      unique_id: "StromzEGVerbrauch"
      unit_of_measurement: 'Wh'
      device_class: "energy"
      state_class: "total_increasing"
      state: >-
        {% if states('sensor.tasmota_sm_1_8_0') == 'unavailable' or states('sensor.tasmota_sm_1_8_0') == 0 %}
           
        {% else %}
          {{ states('sensor.tasmota_sm_1_8_0') }}
        {% endif %}

falls das nicht geht, dann … bin mir aber nicht sicher ob es <> oder != heissen muss um das Gegenteil von == auszudrücken.

template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
    - name: "Stromzähler Verbrauch EG"
      unique_id: "StromzEGVerbrauch"
      unit_of_measurement: 'Wh'
      device_class: "energy"
      state_class: "total_increasing"
      state: >-
        {% if states('sensor.tasmota_sm_1_8_0') <> 'unavailable' or states('sensor.tasmota_sm_1_8_0') <> 0 %}
          {{ states('sensor.tasmota_sm_1_8_0') }}
        {% endif %}

oder

template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
    - name: "Stromzähler Verbrauch EG"
      unique_id: "StromzEGVerbrauch"
      unit_of_measurement: 'Wh'
      device_class: "energy"
      state_class: "total_increasing"
      state: >-
        {% if states('sensor.tasmota_sm_1_8_0') == 'unavailable' or states('sensor.tasmota_sm_1_8_0') == 0 %}
          {{ states('sensor.stromzezverbrauch') }} #Verweis auf sich selbst. Das geht definitiv
        {% else %}
          {{ states('sensor.tasmota_sm_1_8_0') }}
        {% endif %}

ich benutze letzteres.
Viel Erfolg
Claudius

P.S. meines Wissens werden unique_ids in HA immer klein geschrieben gespeichert. Dann wäre es vielleicht sinnvoll diese auch in der Definition so zu schreiben, wie sie später in HA verwendet werden. Dann ist das nicht so verwirrend und man kann leichter mit Copy&Paste arbeiten.

also Block 1 aus den Ideen funktioniert schon mal nich. Ich probier über das Wochenende mal die andern :slight_smile:

Ich find sowas sollte HA von Haus aus mitbringen und robuster sein :frowning:

Der letzte Block funktioniert auch nich, da waren heut Mittag wieder einige tausend KWH in der Statistik :thinking: Langsam wird es echt lästig

Wenn du den letzten Block von @ryhoruk 1zu1 übernommen hast dann ist da auch ein Fehler drin im if Teil bei

'sensor.stromzezverbrauch'

Müsste

'sensor.stromzegverbrauch'

Sein.

1 „Gefällt mir“

ok das war nu peinlich^^ Tippfehler übersehen beim Copy&Paste :wink:

Das allein war es aber nicht.
Angeblich laut Englischer Seite braucht es availability templates und nen Default wert.
Laut Protokoll fällt der Sensor hier und da auf “0” was aber nicht immer einen falschen Wert in der Statistik zur Folge hat.

Hast Du jetzt eine funktionierende Lösung gefunden?

Ich habe das mit den

availability template

nicht hinbekommen und, wie oben schon einmal als Beispiel aufgeführt, mit folgendem Code bei mir reparieren können.

template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
    - name: "Stromzähler Verbrauch EG"
      unique_id: "StromzEGVerbrauch"
      unit_of_measurement: 'Wh'
      device_class: "energy"
      state_class: "total_increasing"
      state: >-
        {% if states('sensor.tasmota_sm_1_8_0') == 'unavailable' or states('sensor.tasmota_sm_1_8_0') == 0 %}
          {{ states('sensor.stromzegverbrauch') }} #Verweis auf sich selbst. Das geht definitiv
        {% else %}
          {{ states('sensor.tasmota_sm_1_8_0') }}
        {% endif %}

Eventuell muss Du es für Deine Bedürfnisse anpassen und eben 0-Werte auch zulassen. Prüfe einfach welche Werte so im Problemfall vorkommen. Bei einigen heisst es unavailable oder none. Dann wäre der Code wie folgt und in folgendem Code würde 0 als valider Wert ebenfalls ausgewertet. Deine Rahmenbedingungen musst du leider selber ermitteln und dann die Bedingungen drum herum bauen. Blöd zum Testen, weil man die Fehlerwerte eben nicht provozieren/simulieren kann.

template:
  - sensor:
    # Stromzähler Abstellkammer Verbrauch
    - name: "Stromzähler Verbrauch EG"
      unique_id: "StromzEGVerbrauch"
      unit_of_measurement: 'Wh'
      device_class: "energy"
      state_class: "total_increasing"
      state: >-
        {% if states('sensor.tasmota_sm_1_8_0') == 'unavailable' or states('sensor.tasmota_sm_1_8_0') == 'none' %}
          {{ states('sensor.stromzegverbrauch') }} #Verweis auf sich selbst. Das geht definitiv
        {% else %}
          {{ states('sensor.tasmota_sm_1_8_0') }}
        {% endif %}

Viel Erfolg
Claudius

Also hier ist das Sensor Log von heute Nacht für Erzeugung und Verbrauch:

Verbrauch:

3-4 Uhr
03:07:00 - Vor 12 Stunden wechselte zu 17671225.01659
03:06:59 - Vor 12 Stunden wechselte zu 17671201.8228
03:01:51 - Vor 12 Stunden nicht mehr verfügbar
03:01:02 - Vor 12 Stunden wechselte zu 17671201.8228

12-13 Uhr

12:20:27 - Vor 3 Stunden wechselte zu 17675441.10757
12:20:17 - Vor 3 Stunden wechselte zu 0.0
12:20:07 - Vor 3 Stunden wechselte zu 17675439.32147

Erzeugung:

0-12 Uhr
11:20:46 - Vor 4 Stunden wechselte zu 2477.0
11:20:46 - Vor 4 Stunden nicht mehr verfügbar
10:07:03 - Vor 5 Stunden wechselte zu 2477.0
10:04:42 - Vor 5 Stunden nicht mehr verfügbar
07:52:43 - Vor 7 Stunden wechselte zu 2477.0
07:52:43 - Vor 7 Stunden nicht mehr verfügbar
03:06:59 - Vor 12 Stunden wechselte zu 2477.0
03:01:51 - Vor 12 Stunden nicht mehr verfügbar
02:00:08 - Vor 13 Stunden wechselte zu 2477.0
02:00:08 - Vor 13 Stunden nicht mehr verfügbar
00:46:57 - Vor 14 Stunden wechselte zu 2477.0
00:42:13 - Vor 14 Stunden nicht mehr verfügbar
00:41:26 - Vor 14 Stunden wechselte zu 2477.0
00:41:25 - Vor 14 Stunden nicht mehr verfügbar
00:40:37 - Vor 14 Stunden wechselte zu 2477.0
00:39:02 - Vor 14 Stunden nicht mehr verfügbar
00:28:45 - Vor 15 Stunden wechselte zu 2477.0
00:28:35 - Vor 15 Stunden wechselte zu 0.0
00:21:15 - Vor 15 Stunden wechselte zu 2477.0
00:21:05 - Vor 15 Stunden wechselte zu 0.0
00:07:05 - Vor 15 Stunden wechselte zu 2477.0
00:06:55 - Vor 15 Stunden wechselte zu 0.0

Wie man sieht haben wir sowohl Availability Fehler als auch Fälle wo man trotz “increasing total” mal den gleichen Wert bzw “0” hat.

die 0er und „nicht verfügbar“ müssen komplett verschwinden. Anonsten laufen dir die Werte nur so davon.
Von 0 auf Wert, sieht und interpretiert HA meiner Meinung nach immer als Anstieg und rechnet den mit ein.

Leg dir einfach einen Alternativ-Sensor an und spiele dort mit den Wenn-Dann-Bedingungen bis die „nicht verfügbar“ und 0er Werte weg sind. So habe ich das damals gemacht und bin zu meiner obigen Funktion/Sensor gekommen.
Viel Erfolg
Claudius

werd ich machen.
Ideen wieso diese Werte aus Tasmota so komisch rauskommen würde mich auch interessieren. Andere Ideen ausser der Sensor hat zu schlechtes WLAN an seinem Bestimmungsort? Das Handy hat dort null Probleme da das Haus mit 3 Verstärkern relativ gut ausgeleuchtet ist.

Dazu kann ich nichts sagen, da ich Tasmota selber nicht einsetze und keine Spekulationen in den Raum stellen möchte.
Viel Erfolg
Claudius

Mal gucken.
MQTT Loglevel hab ich hoch gesetzt, jetzt muss ich nur noch die DebugDaten irgendwo wegschreiben und wieder finden um etwas Licht reinzubringen.
Unavailable könnte wlan sein, aber die null werte sind sehr komisch.