PV- Energie Überschuss für den Heizstab nutzen

Hallo zusammen!

Bin ein Home Assistant Anfänger, mit Arduino kaum besser!

Habe folgendes schon realisiert:

Bei Energie Überschuss von meiner PV-Anlage, wenn der Akku Speicher voll ist und ich ins Netz einspeise, wird die Wallbox aktiviert.
Und wenn der Akku Speicher zu 70% leer ist wird die Wallbox wieder deaktiviert.
Es sei denn, die Wallbox wurde Manuel über die Home Assistant Oberfläche aktiviert. Und das mit Vorwahl 0,5, 1, 1,5, oder 2 Stunden. (Man muss das Auto auch mal laden, wenn keine Sonne scheint)!
Und mit einem Taster in der Garage kann man die Wallbox für eine 0,5 Stunde starten.
Dafür nutze ich ein Eingang und Ausgang vom ESP8266.
Jetzt möchte ich ein 3,5kW Heizstab im Warmwasser Speicher PWM ansteuern.
Dafür habe ich ein TSR-25DA 3-32VDC auf 480VAC 25A Dreiphasen Solid State Relais genommen, der vom ESP8266 Ausgang PWM angesteuert werden soll.
Der Ausgang (GPIO0) soll ab 0,6kW Netz Einspeisung (Entitäts-ID: sensor. s10x_export_to_grid) anfangen zu modulieren von 0 bis 100% abhängig von der Netzeinspeisung.

Und wie realisiert man sowas am besten?

Wäre dafür eine PID Regelung sinnvoll?
Oder gibt es da was Besseres?
Mit Automationen & Szenen? Nur mit ESPHome???

Bin für jede Hilfe dankbar!

Gruß Peter

Hallo Peter,

schau Dir das mal an, das sollte alles können, wonach Du suchst:

Grüße
Georg

Danke Georg für den Tipp.
Weil ich so gut wie kein Englisch verstehe und die Übersetzungen manchmal ziemlich schlecht sind, meide ich nach Möglichkeiten Englische Seiten.
Aber bei einem direkten Tipp, werde ich mich damit Mal auseinander setzen. Es wird ein wenig dauern!
Zumindest sieht alles ziemlich interessant und passen für mich aus.

Gruß
Peter

Hallo Peter,

Du kannst Dir die Webseiten ganz bequem in Deinem Browser übersetzen lassen, falls Englisch ein Problem darstellen sollte.

Grüße
Georg

Hallo Georg,
ich kenne Übersetzungs Funktion im Browser und nutze die auch regelmäßig, aber es ist halt nicht so das die Übersetzung perfekt währe und man auch alles verstehen würde nach der Übersetzung.
Ich habe den Solar Excess Optimizer ausprobiert.
Der/Die Autoren haben sich viel Mühe gegeben. Höchsten Respekt.
Ist für meine Anwending aber nicht zu gebrauchen.

  1. Es werden viel zu viele Parameter abgefragt.
  2. Der Ausgang wird Binär gesteuert.

In Meinem Fall, frage ich die Einspeisung ins Netz ab. Und die entsteht nur wenn der Akku Speicher voll ist und ich Energie Überschuss habe.
Der von mir gewählter wert von 0,6 kW basiert auf der Tatsache der Synchronisation des Wechselrichters, und da entstehen Spitzen bis über 400 Watt. Aus Erfahrung, ist der Wert 600 Watt optimal.
Jetzt bräuchte ich nur eine Funktion, mit der ich den Ausgang D4 vom ESP8266 PWM steuern könnte, abhängig vom Einspeise Wert.

Gruß
Peter

Auf jeden Fall schon mal nicht so:

Abgesehen davon, daß die Netzbetreiber aus Gründen der Netzqualität nicht wollen, daß solche Leistungen direkt aus dem Netz per PWM angesteuert werden, funktioniert das auch nicht richtig.
PWM funktioniert mit Gleichspannung, aber nicht mit Wechselspannung.

Für Netzspannung bräuchte man eine Phasenanschnitt- oder besser eine Phasenabschnittsteuerung, die aber mit der Netzfrequenz synchronisiert werden muss, um überhaupt die Leistung steuern zu können.
Aber die wollen die Netzbetreiber in diesen Leistungsbereichen auch nicht haben.

Am Besten funktioniert eine Schwingungspaketsteuerung, bei der die Spannung für z.B. für 50% Leistung zwei Sekunden ein und zwei Sekunden ausgeschaltet ist.
Bei solchen Periodendauern zählt der Zähler aber nur die volle Leistung des Heizstabes während der Einschaltdauer. Im günstigsten Fall, wenn 600W von der Solaranlage eingespeist werden, zählt der Zähler dann zwei Sekunden lang 1900W und 2 Sekunden lang nichts, wenn er über eine Rücklaufsperre verfügt.
Im Endeffekt wäre das nur eine Einsparung von 300W über die gesamte Schaltperiode von 4 Sekunden gerechnet gegenüber den 3500W Gesamtverbrauch des Heizstabes.

Für sowas gibt es eigentlich nur zwei vernünftige und auch funktionierende Varianten:
1.) Mehrere Heizstäbe mit kleiner Leistung (z.B. 100W), die je nach Überschuss eingeschaltet werden.
2.) (die schwierigere Variante) Die Netzspannung gleichrichten und die gleichgerichtete Spannung mit PWM stellen. Das funktioniert aber nur mit Heizstäben, mit einer Nennspannung von 325V (230V gleichgerichtet ergibt vereinfacht gesagt, eine pulsierende Gleichspannung von 325V) . Aber ob es die gibt, weiß ich nicht.

Dann noch der Punkt, inwieweit sich das überhaupt lohnt. Wenn das Wasser nicht gerade mit Strom erhitzt wird, kommt man nie auf eine große Ersparnis an Heizöl oder Gas.
(1L Heizöl hat einen Energiegehalt von ca.10kWh. (Abgasverluste nicht eingerechnet) Um das Brauchwasser zu erwärmen braucht meine Heizung (als Beispiel) am Tag nicht mal einen Liter Heizöl. Das wäre eine Ersparnis von ca. 93ct, im Vergleich zum eingesetzten Strom im Wert von ca. 3,5€.)

Hallo Frank,
danke für die ausführliche Erklärung/Aufklärung.
Sehr vieles war mir schon früher bekannt. Zum Beispiel:

Wenn man den den ESP Ausgang mit sehr niedriger Frequenz von z.B. 10Hz steuert, funktioniert ein SSD Relais sehr gut. Wobei 10Hz würde ich auch nicht mehr als PWM sondern als schneller Blinker bezeichnen. Und um ein Heizstab zu betreiben, würde auch eine noch niedrigere Frequenz ausreichen.

Ich habe ein Digitalen Zähler, der separat den Bezug so auch die Einspeisung zählt. Da ich den Strom für 8,2 Cent einspeise/verkaufe, wollte ich den Überschuss lieber selber nutzen.
Dein Rechenbeispiel ist ja vollkommen richtig. Mit Strom zu heizen ist teuer! Ich heize mit Öl und Solarthermie und wollte anstatt den Strom billig zu verkaufen, den lieber in die Heizung stecken.
Die Bemühung von den Netzbetreibern das Netz sauber zu halten möchte ich ich auch gerne unterstützen. Dafür habe ich vor den SSD Relais auch ein Netzfilter.
Ich hab gerade auf die schnelle den Schaltplan gezeichnet (inkl. Fehler :wink:), um das ganze etwas anschaulicher zu machen.
Auszug aus der YAML im ESP:

GPIO Eingang

binary_sensor:

  • platform: gpio
    pin: GPIO15
    name: “Wallbox Start” #Eingang 8
    device_class: power

  • platform: gpio
    pin: GPIO13
    name: “Eingang 7” #Eingang reserve

  • platform: gpio
    pin: GPIO12
    name: “Eingang 6” #Eingang reserve

GPIO Ausgänge

output:

  • platform: esp8266_pwm
    pin: GPIO0
    frequency: 10 Hz
    id: heating_output

  • platform: gpio
    pin: GPIO2
    id: digital_output_wallbox

Example usage in a light

light:

  • platform: monochromatic
    output: heating_output
    name: “Ausgang Heizstab”

  • platform: binary
    output: digital_output_wallbox
    name: “Ausgang Wallbox”

Solange das Netzteil am Ende richtig herum angeschlossen wird, ist die Zeichnung fast egal. :laughing:

Der Netzfilter ist zum Filtern hochfrequenter Störungen, die von Schaltnetzteilen oder ähnlichem kommen, an dieser Stelle also wenig sinnvoll, schadet aber auch nicht.
Sinnvoller wäre ein SSR mit Nulldurchgangsschaltung.
Was der Zähler hierbei zählt, müsstest du probieren.

Allerdings sind die 10Hz schon sehr schnell. Immerhin sind das nur 5 Vollwellen, also 10 Leistungsstufen, wenn man halbwellenweise rechnet.

Den Netzfilter hatte ich tatsächlich noch verbaut als ich mit der 1kHz Frequenz vom ESP geplant habe, will ich jetzt aber auch nicht wieder ausbauen.
Bei meinen Testversuchen mit unterschiedlichen Werten von 30-100% (Helligkeit), habe ich am Stromzähler nichts negatives feststellen könne.
Da spielen alle fleißig mit. Der Zähler, der Smart Meter oder der Wechselrichter.
Ich will in den Hezstab ja auch etwas weniger reinschieben als der Überschuss.

Ja, wenn man das nur auf eine Phase bezieht und der ESP 100% synchron mit der Netzfrequenz laufen würde. Den Wert “frequency: 10 Hz” kann man ja auch erhöhen oder senken. Wobei, bei unter 6Hz funktioniert es schlecht. Habe ich ausprobiert.
Daher mein Wunsch:
Den Wert den mir mein Wechselrichter als Einspeisung ins Netz liefert zu nutzen, um ab mind. 600Watt den Ausgang so anzusteuern, das der Einspeisewert nicht unter 600Watt geht. Wie ich es in meinem ersten Post beschrieben habe. Ich kann es nicht so umsetzen (bin halt Praktiker aber schlechter Programmierer).
Und da bitte ich um Hilfe.

Beim Programmieren in YAML kann ich leider auch nicht helfen, mit dieser Krücke von Programmiersprache stehe ich auf Kriegsfuß und muss mir für meine eigenen Bedürfnisse immer wieder Hilfe im Netz zusammensuchen.

Ich bin selbst eher Praktiker und habe in meiner beruflichen Laufbahn schon einige seltsame Seiteneffekte kennen lernen müssen, daher bin ich bei solchen eher unkonverntionellen Lösungen lieber vorsichtig.

Etwas kaputt machen kann man so sicher nicht. Meine Bedenken bezogen sich auf das, was der Zähler (in beiden Richtungen) zählt. Aber ich weiß auch nicht, welche Zeitbasis der Zähler zum integrieren der Leistung in Energie nutzt.

Daß der Heizstab 3phasig angeschlossen ist, habe ich erst aus deinem Schaltplan gesehen, bisher bin ich aufgrund der eher kleinen Leistung von einer Phase ausgegangen.
3Phasig sollten sich rein rechnerisch dann eher 30 Leistungsstufen, aber da ein dreiphasiges Relais nicht im Nulldurchgang (ein)schaltet, können es auch mehr sein.
(In der Regel werden bei Halbleiterrelais Triacs zum Schalten genutzt, die erst im Nulldurchgang des Stromes ausschalten)

Einen PID-Regler halte ich hier für etwas übertrieben. Es würde reichen, die errechnete Menge des Überschusses (abzüglich etwas Sicherheitsmarge, damit das Wasser nicht aus dem Netz geheizt wird) als Stellgröße zu verwenden.

Ich würde zuerst errechnen, wieviel Watt ins Netz eingespeist würde, indem ich die Leistung aller Verbraucher von der Solareinspeisung abziehe und von diesem Wert die Sicherheitsmarge abziehen.
Den errechneten Wert würde ich dann mit einem Faktor multiplizieren, daß ein Prozentwert für die PWM dabei heraus kommt.
Den Faktor müsstest du vorher berechnen oder durch ausprobieren herausbekommen.

Das Ganze muss dann in eine Automatisierung gepackt werden, in der der Heizstab nur dann eingeschaltet wird, wenn der Akku voll und die Wallbox ausgeschaltet ist.

Hallo an ALLE!

habe mich lange nicht gemeldet, aber jetzt.
Ich habe nicht immer Zeit und Lust. Und dann kommt noch das ausprobieren dazu.
Nach einer langen Diskussion mit der KI funktioniert jetzt mein Projekt (besser geht immer)!
Ich frage meinen Wechselrichter direkt über MOD-Bus ab. Geht fiel schneller als die fertige (E3DC Remote Storage Control Protocol (Git)).
Die Einspeisewerte werden negativ zurückgegeben, die Bezugswerte Positiv. Daher muss ich mit negativen Werten arbeiten.
Und hier der Auszug aus der YAML:

# ********** Ab hier Programm **************

# Sensor für Überschuss aus Wechselrichter

sensor:
  - platform: homeassistant
    id: grid_power
    name: "E3DC Grid Power"
    entity_id: sensor.e3dc_grid_power
    unit_of_measurement: W
    accuracy_decimals: 1

# ───────────────────── GPIO‑Ausgänge ─────────────────────
output:
  - platform: esp8266_pwm
    id: heating_output
    pin: GPIO0
    frequency: 150 Hz            # PWM‑Frequenz

# ───────────────────── Licht‑Objekte (PWM) ─────
light:
  - platform: monochromatic
    id: heizstab                   # << Name in der Logik!
    name: "Ausgang Heizstab"
    output: heating_output

# ────────────────────────── Globale Hilfs‑Variablen ──────────────────────────
globals:

  # zuletzt gesetzte PWM‑Helligkeit des Heizstabs (0‑1)
  - id: last_bri
    type: float
    initial_value: '0.0'

# ─────────────────────────────  Regler (250 ms)  ─────────────────────────────
interval:
  - interval: 250ms
    then:
      - lambda: |-
          const float P_ON       = -500.0f;     // ab hier beginnt Überschussregelung
          const float P_FULL     = -1500.0f;    // ab hier = 100% PWM
          const float MIN_EXPORT = -400.0f;     // mindestens 400 W Einspeisung lassen
          const float DEADBAND   = 0.01f;       // 1 % PWM Änderung nötig
          const float MAX_STEP   = 0.02f;       // maximale PWM-Steigerung pro Intervall (Rampe)

          float gp = id(grid_power).state;      // negativ = Einspeisung
          float current_bri = id(last_bri);

          // Standardmäßig: kein Heizstab
          float target_bri = 0.0f;

          if (gp < P_ON) {
            target_bri = (-gp - (-P_ON)) / ((-P_FULL) - (-P_ON)); // linear zwischen 0-1
            target_bri = clamp(target_bri, 0.0f, 1.0f);

            // Einspeisung nicht zu stark senken
            float max_bri = (-gp - (-MIN_EXPORT)) / ((-P_FULL) - (-P_ON));
            max_bri = clamp(max_bri, 0.0f, 1.0f);
            target_bri = fminf(target_bri, max_bri);
          }

          // Hysterese: kleine Änderungen ignorieren
          if (fabsf(target_bri - current_bri) < DEADBAND) return;

          float new_bri = current_bri;

          if (target_bri < current_bri) {
            // SOFORT runterregeln
            new_bri = target_bri;
          } else {
            // Langsam hochregeln (Rampe)
            new_bri = fminf(current_bri + MAX_STEP, target_bri);
          }

          id(last_bri) = new_bri;

          if (new_bri <= 0.0f) {
            auto call = id(heizstab).turn_off();
            call.perform();
            ESP_LOGD("regelung", "Heizstab AUS (%.0f W)", gp);
          } else {
            auto call = id(heizstab).turn_on();
            call.set_brightness(new_bri);
            call.perform();
            ESP_LOGD("regelung", "Heizstab PWM: %.1f %% (GridPower = %.0f W)", new_bri * 100.0f, gp);
          }