Steuerbarer Heizstab für PV-Überschuß

Hallo liebes Forum,

ich bin neu hier, habe aber erstmal länger gesucht und nichts gefunden für folgendes Vorhaben, daher folgende Frage:

Wir haben hier einen Heizstab für die Integration in Warmwasserspeicher, den wir mehr oder weniger stufenlos regeln können. Dem Heizstab können wir die Soll-Wassertemperatur samt Hysterese vorgeben sowie die einzuprägender Leistung (z.B. der PV-Überschuß); auslesen können wir die aktuelle Leistung sowie die aktuelle Wassertemperatur des Pufferspeichers.
Die Connectivity ist ModBus-TCP (der Heizstab ist natürlich der Slave).
Kann mir vielleicht einen ersten Hinweis geben, wie sowas a. generell in OpenEMS funktioniert und/oder ob b. sowas schon mal aufgebaut wurde und wenn ja wie? Steuerbare elektrische Lasten kommen ja langsam in Mode :slight_smile:

Danke und ein frohes Osterfest,
Lothar.

Hallo loddar,

gib doch gerne mal das Modell und den Hersteller an.

Dann könnte man sich selber auch mal ein Bild machen.

Danke und Grüße

Hi Loddar,

Wie @Sn0w3y schon schrieb: bisserl Info wäre gut.
Ich tippe einfach mal auf AC Thor? m.W. holt dieser die Infos aus dem Wechselrichter.

Grundsätzlich hast Du da viele Möglichkeiten. Das simpelste ist eine Steuerung per Netzwerk-Relais. Sowas hat OpenEMS out of the box. Nur halt dann in Stufen. Falls Du einen Batteriespeicher hast, würde das praktisch keine Rolle spielen.

Ich setze sowas in der Art seit zwei Jahren ein :wink:

1 Like

Nicht nur das, m.W. nach ist der AC-Thor auch nicht ansteuerbar, sondern liest nur aus und steuert dann eben selbstständig - korrigiert mich, wenn ich falsch liege :slight_smile:

Den AC-Thor haben wir schon mal integriert. Der kann angesteuert werden. Ich finde die Sourcen nur gerade nicht. Falls Bedarf besteht bitte melden, dann mache ich mich auf die Suche und stelle einen PR.

Hallo zusammen,

der Heizstab ist ein relativ neues Produkt: https://novolto.de/
Normalerweise spricht der MQTT in Richtung einer Plattform, aber er kann eben auch ModBus-TCP (Slave), was für OpenEMS wohl die einfachere (brokerfreie und direktere) Lösung sein wird, zumal es ja auch schon ModBus-Bridges gibt wie ich gesehen habe,

OpenEMS müsste also ModBus-TCP (Master) sprechen.

Man gibt dem Novolto die Zieltemperatur des Kessels samt Hysterese und die aktuell einzuprägende Leistung für den 3KW-Heizstab. Diese wird relativ fein aufgelöst per Vollwellensteuerung in die Heizwicklungen gegeben (in bis zu 20W-Schritten meine ich, abhängig vom eingestellten Saldierungsintervall). Wenn man ihm 1650W sagt, prägt er eben genau 1650W (oder eben die nächst kleinere “Stufe” in die Wicklungen ein, vermutlich 1640W).

Es gibt Register, aus denen man dann die aktuelle Wassertemperatur und die aktuelle Leistung auslesen kann.

Also eine schöne steuerbare Last für den PV-Überschuß.
Hilft das weiter? Wie wäre die Vorgehensweise? Muß ein neuer Controller her oder kann man auf etwas existierendem aufsetzen?

LG Lothar.

dann müsste OpenEMS ja die Temperaturen (IST/SOLL/MAX) kennen und aus dem PV-Überschuss das Soll errechnen.
Klingt nach einer lösbaren Aufgabe, aber fertig gibt es da m.W. nichts.

Ohne die Doku gelesen zu haben: kannst Du den Spies nicht umdrehen, den PV-Überschuss aus OpenEMS nehmen und die Zieltemperatur aus dem Überschuss errechnen? Also quasi die Regelung dem Heizstab überlassen.

Ich finde es immer problematisch Heizungsregelung in Richtung OpenEMS zu schieben. Man braucht halt die Temp-Messwerte.
Nichts, was man nicht programmieren könnte, aber um ein allgemeingültiges Modul zu erstellen, muss man etwas mehr Aufwand betreiben. Schließlich ist jedes Heizsystem anders.

Wo ist der Heizstab denn verbaut? In einem Pufferspeicher? Das wäre verhältnismäßig einfach. Extern erfordert ggf. Ventil- Pumpen- und Übertemperatur-Regelungen.

Ich hatte mir seinerzeit auch Gedanken zu diesem Thema gemacht und setze seit 2 Jahren erfolgreich eine Steuerung mit Siemens LOGO! ein. Diese kann per Modbus mit OpenEMS reden. In beide Richtungen und sowohl als Slave als auch als Master.

Okay…ja…ich schweife ab. Werde mir bei Gelegenheit mal die Doku zu Deinem Gerät durchsehen.

Hey @loddar,
hallo @klinki,

es gibt ja bereits Temperatursensoren im openEMS. Dementsprechend könnte man das durchaus ins openEMS bringen. Ich bin aber auch der Meinung, dass openEMS ein reines Energiemanagementsystem im Sinne elektrischer Energie ist (soweit war mein Verständnis bis dato). Temperatursensoren werden aktuell nur (laut SourceCodes) für die Fehlerüberwachung bei größeren Speichern/Wecshelrichtern abgefragt. Korrigiert mich bitte gerne wenn das nicht so sein sollte.

Aber der Heizstab hört sich sehr Interessant an. !

Grüße

Genau - ich stimme in allen Punkten mit Dir überein.

Man müsste die Sensoren ja auch Hardware-technich einbinden.
Oder man nimmt ein Eco 501 und kann dezentral arbeiten.

Ich hatte hier schonmal eine Diskussion über die Heizungs-Kopplung…ein paar Tage her…
EDIT: Dieser Beitrag war es.

Sektoren-Kopplung ist unglaublich wichtig - aber aus OpenEMS-Sicht schwer umzusetzen

1 Like

Mehr Code in c++ braucht es nicht

int iModbusTCP_Heizstab(int ireq_power) // angeforderte Leistung
{
// Alle 10 sec wird der neue wert an den heizstab geschickt
static int isocket = -1;
static bool brequest = false;
static time_t tlast = 0;
static int maxpower = -1;
time_t now;
time(&now);
char server_ip[16];
Modbus_send Msend;
static int iPower_Heizstab = 0;

if ((now-tlast)>5)
{
    if ((isocket < 0)&&(strcmp(e3dc_config.heizstab_ip, "0.0.0.0") != 0)&&ireq_power>0&&(now-tlast>10))
        
    {
        isocket = SocketConnect(e3dc_config.heizstab_ip, e3dc_config.heizstab_port);
        if (isocket < 0) // wenn der socket nicht verfügbar, eine Stunde warten
        tlast = now + 60;
    }
    if (isocket > 0)
    {
        //                brequest = true;
        tlast = now;
        send.resize(12);
        receive.resize(15);
        
        if (maxpower <= 0) // ermitteln maximale Leistung
        {
            Msend.Tid = 1*256;
            Msend.Pid = 0;
            Msend.Mlen = 6*256;
            Msend.Dev = 1;
            Msend.Fcd = 3; // Funktioncode auslesen

// Msend.Fcd = 6; // Funktioncode
Msend.Reg = (1014%256)256 + (1014/256); // Adresse Register Leistung heizstab
Msend.Count = 1
256; // Anzahl Register // 22.6° setzen
memcpy(&send[0],&Msend,send.size());
SocketSendData(isocket,&send[0],send.size());
sleep(0.1);
// Auslesen der maximalen Leistung

            iLength = SocketRecvData(isocket,&receive[0],receive.size());
            if (iLength > 0)
            {
                if (receive[7]==3)
                {
                    maxpower = receive[9]*256+receive[10];
                }
            }
        }

        
        iPower_Heizstab = iPower_Heizstab + ireq_power;
        if (iPower_Heizstab < 0) iPower_Heizstab = 0;
        if (maxpower < 3000) maxpower = 3000;
        if (iPower_Heizstab > maxpower) iPower_Heizstab = maxpower;

// if (iPower_Heizstab > 10000) iPower_Heizstab = ireq_power;
Msend.Tid = 1256;
Msend.Pid = 0;
Msend.Mlen = 6
256;
Msend.Dev = 1;
Msend.Fcd = 6; // Funktioncode
Msend.Reg = (1000%256)256 + (1000/256); // Adresse Register Leistung heizstab
// Msend.Count = 1
256; // Anzahl Register // 22.6° setzen
Msend.Count = (iPower_Heizstab%256)*256+ (iPower_Heizstab/256); // Leistung setzen
memcpy(&send[0],&Msend,send.size());
iLength = (SocketSendData(isocket,&send[0],send.size()));
if (iLength <=0||(iPower_Heizstab==0))
{
SocketClose(isocket);
if (isocket >= 0) isocket = -2;
iPower_Heizstab = isocket;
}
}

    else
        iPower_Heizstab  = isocket;
}
    return iPower_Heizstab;

}

Wir schreiben aber in Java :stuck_out_tongue:

Spaß beiseite, ich schaue mal, ob ich den kaufen und testen kann und einbinden kann :slight_smile:

@stefan.feilmeier macht es sinn, den Heizstab als extra Modul zu machen, wenn ja, wie würdest du dir das Vorstellen ? :slight_smile:

Grüße !

Guten Morgen,

ich wünsche ein frohes Osterfest gehabt zu haben!
Danke für eure Beiträge.

Den Code geb ich mal meinem Spezi weiter :slight_smile:

Wie es den Anschein macht, ist es ja halbwegs sinnfrei, die Pufferspeichertemperatur mit zu steuern. Die stelle ich doch besser am Heizstab “fest” ein, er hat ja ein Webfrontend zur Konfiguration.

Dann müsste OpenEMS ihm nur noch mitteilen, wie viel Leistung er ins Wasser umsetzen soll, das wäre wohl das klügere Setup und würde euren Anmerkungen eher entsprechen, oder?

Danke euch, viele Grüße,
Lothar.

Hallo Christian,

könntest du mir den Gefallen tun und den Code eventuell suchen ? :slight_smile:
Wäre super toll!

Grüße !

(Entschuldigung für die Übersetzung) Ich habe ein Projekt mit dem AskoHeat-Produkt von Askoma gesehen. Dieses Heizgerät verfügt über Register, an die überschüssiges PV gesendet werden kann, und versucht selbst, den Speichertank wieder aufzuladen. Es verfügt außerdem über einen oder mehrere eingebaute Temperatursensoren.
Im Allgemeinen benötigt der Algorithmus vier Eingaben:

  • Heizleistung power [W]
  • Pufferkapazität volume [l]
  • Zieltemperatur target [°C] (Grenzwert)
  • Aktuelle Temperatur actuel [°C]

Anhand der Differenz target - aktuell soll die benötigte energiemenge berechnet werden.

HeatingTime = volume * (target - aktuel) * 4190 / power

Der Wert von 4190 in dieser Gleichung beträgt 4190 J/(kg·°C), was der Energiemenge entspricht, die zum Erhitzen von 1 Liter Wasser erforderlich ist. Indem Sie die Gleichung drehen und eine konstante Heizzeit annehmen, können Sie die Leistung bestimmen, ab der die Gleichung erfüllt ist.

1 Like

@ldywicki
Von diesem Produkt hätte ich gerne zwei Jahre früher erfahren :face_with_peeking_eye:
Ich gebe die Info mal an meine bekannten Heizungsbauer weiter.

Meiner Meinung nach: ja. So überlässt man den Strom OpenEMS und die Thermie dem System, was dafür gemacht ist.
Wie erwähnt mache ich die Steuerung des Heizstabs über eine Logo. Der Heizstab hat aber auch nen Thermoschalter. Theoretisch reicht sogar dieser.

Viel Erfolg!

Ich steuere bei mir zu Hause alle Raumheizungen - bestehend aus Elektrofußbodenheizungen + Infrarotheizungen + Holzofen im Wohnzimmer - über OpenEMS. Dazu verwende ich die OneWire Temperaturfühler mit einem eigenen (bisher nicht-veröffentlichten) Controller.

Grundsätzlich glaube ich schon, dass wir mit OpenEMS tiefer auch in den Bereich Wärme einsteigen müssen. Z. B. würde ich im Controller für Dynamische Stromtarife gerne planen/simulieren können, wie viel elektrische Energie der Heizstab (oder eine Wärmepumpe) noch aufnehmen kann (ggf. “muss”).

Im ersten Schritt ist es vermutlich sinnvoll, mal die Modbus-Protokolle der Geräte zu erfassen. Man könnte z. B. zumindest ElectricityMeter implementieren, dann könnte man den Verbrauch immerhin monitoren. Im zweiten Schritt müssen wir die Register vereinheitlichen. Siehe dazu auch die Diskussion hier → AC-Thor Einbindung - #2 by stefan.feilmeier

2 Likes

Ja, klingt nach einem vernünftigen Ansatz. Bei einer reinen Überschuss-Regelung gibt es meiner Meinung nach auch nicht so viel zu beachten.

Kompliziert wird die ganze Geschichte, wenn es in die Anforderung geht. Also eine Heizungsregelung in Abhängigkeit von Außentemperatur, Wärmebedarf, Heizkurven und noch Vieles mehr.
Das Thema Regelung hatte ich damals, ehrlich gesagt, auch unterschätzt.

Eine intelligente Regelung à la ToU wäre ein absoluter Traum für alle Wärmepumpen-Besitzer!

Ich würde mich gerne an der Entwicklung an dieser Stelle beteiligen. Leider habe ich keinen AC-Thor.
Aber ich könnte mich beim Thema Temperaturen einbringen. Meine Lösung zu Hause ist mit einem ECO 501 umgesetzt.

Gruß,
Klinki

Zum Thema “Steuerbarer Heizstab für PV-Überschuss” möchte ich hier auf diesen Post über eine AC-Thor Implementierung hinweisen.