Berechnung für Netzeinspeisung für HA Energie Dashboard

Belenos

New member
Hallo in die Runde,

ich habe gerade angefangen, mit HA ein wenig herumzuspielen und ein paar Werte zu Stromverbrauch und -erzeugung zu ermitteln. Das hätte ich gern in einer schönen, übersichtlichen Grafik, wie beispielsweise das Energie-Dashboard von HA.
Im Keller hab ich nen IR-Lesekopf mit Tasmota an den Stromzähler gepackt (Apator Norax 3D). Der liefert mir auch fleißig die Verbrauchswerte. Davon aber leider nur den Gesamtverbrauch und nicht die Gesamteinspeisung. Das Register scheint es dort irgendwie nicht zu geben, vermutlich gesperrt.
Ich kann aber den Momentanverbrauch ablesen, der positiv und negativ sein kann. Also seh ich schon, wenn etwas eingespeist wird.
Auf dem Terassendach hab ich 2 Panels, die an nem Deye Wechselrichter hängen.
HA läuft bei mir als Docker Compose auf meinem NAS, was mir das installieren von Erweiterungen erschwert. Deshalb lese ich die Daten vom Wechselrichter per Kommandozeile aus. Funktioniert eigentlich recht gut.
Aktuell komme ich so an die Daten für Gesamtverbrauch und die Gesamterzeugung ran. Was fürs Dashboard fehlt, ist der Wert für die Einspeisung.
Kann ich den irgendwie berechnen?

Meine configuration.yaml sieht aktuell so aus:

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
command_line:
  - sensor:
      name: "power_balkon_pv_now"
      command: curl -s -u user:pass http://192.168.xx.xx/status.html | grep -E "\webdata_now_p(\s|$)" | cut -d'"' -f 2
      unit_of_measurement: 'W'
      scan_interval: 60
  - sensor:
      name: "power_balkon_pv_total"
      command: curl -s -u user:pass  http://192.168.xx.xx/status.html | grep -E "\webdata_total_e(\s|$)" | cut -d'"' -f 2
      unit_of_measurement: 'kWh'
      scan_interval: 120
template:
  - sensor:
    # Stromzähler Keller Verbrauch
      - name: "Stromzähler Gesamt Verbrauch"
        unique_id: "StromVerbrauch"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ float(states('sensor.tasmota_sml_total_in')) | round(3) }}
  - sensor:
    # Stromzähler Keller Aktuell
      - name: "Stromzähler Aktuell"
        unique_id: "StromAktuell"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "total"
        state: >-
            {{ states('sensor.tasmota_sml_power_cur') }}
- sensor:
    # Stromzähler Keller Aktuell
      - name: "Stromzähler Aktuell"
        unique_id: "StromAktuell"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "total"
        state: >-
            {{ states('sensor.tasmota_sml_power_cur') }}
  - sensor:
    # Stromzähler Keller Aktuell Verbrauch
      - name: "Stromzähler Aktuell Verbrauch"
        unique_id: "StromAktuellVerbrauch"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "total"
        state: >-
            {% set curr_power = states('sensor.tasmota_sml_power_curr') | float %}
            {% if curr_power > 0 %}
              {{ curr_power }}
            {% else %}
              {{ 0 }}
            {% endif %}
  - sensor:
    # Stromzähler Keller Aktuell Einspeisung
      - name: "Stromzähler Aktuell Einspeisung"
        unique_id: "StromAktuellEinspeisung"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "total"
        state: >-
            {% set curr_power = states('sensor.tasmota_sml_power_curr') | float %}
            {% if curr_power < 0 %}
              {{ -curr_power }}
            {% else %}
              {{ 0 }}
            {% endif %}
  - sensor:
      - name: "Terasse Erzeugung Total"
        state: "{{ states('sensor.power_balkon_pv_total') if states('sensor.power_balkon_pv_total') | float > 0 }}"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        unique_id: "balkon_pv_energy"
  - sensor:
      - name: "Terasse Erzeugung Aktuell"
        state: "{{ states('sensor.power_balkon_pv_now') }}"
        unit_of_measurement: 'W'
        device_class: "energy"
        state_class: "measurement"
        unique_id: "balkon_pv_energy_now"

Seltsamerweise wird auch der momentane Stromzählerwert mit "unbekannt" angezeigt. Wundert mich etwas.
1713199731831.png

Vielen Dank schon mal im Vorraus!
 
Hallo Belenos,

ich möchte das Thema nochmal aufgreifen.

Ist es in Ordnung, wenn meine Einspeisewerte negativ sind?
Mir gefällt die Anzeige mit dem lila Balken nach unten – sie zeigt anschaulich die Einspeisung.
Allerdings stimmt dann in der Energieansicht unter "Stromnetz gesamt" die Summierung nicht mehr.
Kann man das anpassen – z. B. durch eine andere Konfiguration der Energiekachel oder per Template?

Hintergrund:

Ich habe ein Balkonkraftwerk, konnte bisher aber nicht messen, wie viel Strom ich tatsächlich einspeise.
Mein digitaler Stromzähler zeigt bei PV-Überschuss lediglich eine geänderte Pfeilrichtung an, die Zählerstände bleiben unverändert.
Daher fehlen mir direkte Messwerte zur eingespeisten Energie.

Was ich sehe:
Wenn ich mehr PV-Strom erzeuge als ich verbrauche, wird der Wert von "HZ1 Leistung_L1" negativ – die anderen beiden Phasen (L2 und L3) liefern dann aber weiterhin positive Werte.
Daher nutze ich ein Template zur Erkennung von Überschuss (siehe unten).

Hardware & Setup:
PV: Hoymiles DTU HMS-800W-2T (per Hoymiles, danke suaveolent)
Zähler: Itron HZ1-C20D-R1-Z
IR-Lesekopf: bitShake SmartMeterReader AIR (Tasmota)
MQTT: Mosquitto
Home Assistant: Docker, Sensorwerte per MQTT integriert

Skript zum BitShare:
Code:
>D
>B
=>sensor53 r
>M 1
+1,5,o,0,9600,HZ1,4
1,1-0:1.7.0*255(@1,akt. Leistung,W,Power,0
1,1-0:1.8.0*255(@1,Verbrauch,kWh,E_in,3
1,1-0:2.8.0*255(@1,Einspeisung,kWh,E_out,3
1,=h--
1,1-0:21.7.0*255(@1,Leistung_L1,W,Watt_L1,0
1,1-0:41.7.0*255(@1,Leistung_L2,W,Watt_L2,0
1,1-0:61.7.0*255(@1,Leistung_L3,W,Watt_L3,0
1,1-0:32.7.0*255(@1,Spannung L1,V,voltage_l1,1
1,1-0:52.7.0*255(@1,Spannung L2,V,voltage_l2,1
1,1-0:72.7.0*255(@1,Spannung L3,V,voltage_l3,1
1,1-0:31.7.0*255(@1,Strom L1,A, amperage_l1,1
1,1-0:51.7.0*255(@1,Strom L2,A, amperage_l2,1
1,1-0:71.7.0*255(@1,Strom L3,A, amperage_l3,1
#


Ausschnitt configuration.yaml:
YAML:
template:
  - sensor:
    # Stromzähler Verbrauch
      - name: "Stromverbrauch Zähler"
        unique_id: "StromzaehlerVerbrauch"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ float(states('sensor.bitshake_smartmeterreader_hz1_e_in')) | round(3) }}

      # Einspeiseleistung aus negativer Summenleistung
      - name: "Einspeisung aktuell"
        unique_id: "strom_einspeiseleistung"
        unit_of_measurement: 'W'
        device_class: power
        state: >-
          {% set l1 = float(states('sensor.bitshake_smartmeterreader_hz1_watt_l1') or 0) %}
          {% set l2 = float(states('sensor.bitshake_smartmeterreader_hz1_watt_l2') or 0) %}
          {% set l3 = float(states('sensor.bitshake_smartmeterreader_hz1_watt_l3') or 0) %}
          {% set total = l1 + l2 + l3 %}
          {{ total * -1 if total < 0 else 0 }}

sensor:
  - platform: integration
    source: sensor.strom_einspeiseleistung
    name: Stromzaehler Einspeisung
    unit_prefix: k
    round: 3
    method: left # "trapezoidal" ergibt morgens oft einen Sprung
    unique_id: stromzaehler_einspeisung

Home Assistant Energie-Dashboard Konfiguration:
/Energie/Energiekonfiguration (Dreipunkt oben rechts)
Stromnetz/Netzbezug: Stromverbrauch Zähler (aus configuration.yaml)
Stromnetz/Netzeinspeisung: Stromzaehler Einspeisung (aus configuration.yaml)
PV-Module/PV-Erzeugung: DTU AC-Tagesenergie (aus Gerät Hoymiles/DTU)
 
Aktuell komme ich so an die Daten für Gesamtverbrauch und die Gesamterzeugung ran. Was fürs Dashboard fehlt, ist der Wert für die Einspeisung.
Kann ich den irgendwie berechnen?
Einen Template Sensor anlegen der die Differenz zwischen Gesamterzeugung und Gesamtverbrauch bildet. Den Wert nur ausgeben wenn er positiv ist. (Das was erzeugt aber nicht verbraucht wird ist die Einspeisung.)
Bei negativem Wert 0 ausgeben (dann wird nichts eingespeist).
 
YAML:
  - name: Einspeisung BKW
    unique_id: einspei
    state: >
      {% set differenz = states('sensor.verbrauch')|float(0) - states('sensor.erzeugt')|float(0) %}
      {% if differenz <= 0 %}
        {{ 0|float(0) }}
      {% else %}
        {{ differenz }}
      {% endif %}
    unit_of_measurement: kWh
So in etwa. Deine Namen für die Sensoren noch anpassen.
 

Zurzeit aktive Besucher

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
6.824
Beiträge
65.934
Mitglieder
7.141
Neuestes Mitglied
Dummvogel
Zurück
Oben