Fussbodenheizung mit PWM steuern

Begonnen von jamesgo, 24 September 2015, 08:28:49

Vorheriges Thema - Nächstes Thema

FEHMPiDi

Hallo,

jetzt konnte ich die Dateien laden. Komisch, da wohl gestern Abend etwas mit der Internetleitung nicht in Ordnung.
Dann kann ich ja jetzt loslegen. Ich werde bestimmt noch ein paar Fragen posten  ;D

Danke
FHEM5.7@RaspPi.3|NanoCUL868-HM|NanoCUL868-Max|SDuino|DS18B20|1xHM-Sen-MDIR-WM55|   
2xHM-LC-Sw1PBU-FM|HM-LC-SW4-DR|I2C_MCP23017|2xMAX-ShutterContact|11xHM-LC-Bl1PBU-FM|CTW600|VCONTROL|1xHM-Sen-MDIR-O|2xMilight

jamesgo

Hallo SKUSI,

Ich habe mal einen Screenshot eines Plots für die Funktion angehängt. Im Prinizip ist es sowas wie eine Heizkurve.

y ergibt den notwendigen Puls (1= 100%)
x ist die Temperaturdifferenz

D.h. (von links) kommend bis 1.2° Differenz = 100%

Der spannende Regelbereich liegt beim "fast" erreichen der Wunschtemperatur also 0-0,5° Temperaturabweichung.

Wenn du die beiden Funktionen (factor = 0,8 bzw. 0,7) vergleichst:

- die rote (flachere) Kurve wird früher anfangen zu plusen, aber bis 1,3° volle Pulle heizen (d.h. wenn die Heizung schnell reagiert das Überheizen verhindern)
- die blau (steilere) Kurve wird bis 1,2° nicht pulsen (d.h. bei einer trägeren Heizung länger auf 100% laufen)

Der factor sagt also etwas darüber aus wieviel Energie dein Boden zwischenspeichert.

Wenn ich jetzt davon ausgehe dass du die Temperatur 0.1° genau messen kannst, dann passiert im Bereich 0.2° bis 0.0° recht wenig da die Kurve hier ziemlich flach ist. Über den Offset verschiebst du die ganze Kurve nach oben um die minimale Einschaltzeit früher zu erreichen.

Eine basis Plusweite von 15 min (=900sec) und einer MINONOFFTIME von 2 min (=120sec) entspricht 0.13333 dem minimalen puls um die MINONOFFTIME zu überschreiten.

Wenn du die beiden Funktionen durchrechnest wirst du folgendes feststellen:

- factor = 0.7 wird bei 0.2° differenz nicht mehr heizen, bei 0.3° schon
- factor = 0.8 wird auch bei 0.1° differenz zu einem puls von 2 minuten führen

Der factor ist also der große Hebel um Energie in den Beton zu bekommen. Je enger die Heizschlaufen und je dünner der Beton desto schneller reagiert die Heizung (bei mir reichen die Werte von 0.7 bis 1.2).

Den offset brauchst du erst wenn du die Pulsweite und die MINONOFFTIME veränderst. Andere Pulsweiten hatten bei mir keinen Einfluss auf das Regelverhalten und meine Stellantriebe brauchen ca. 2,5 Minuten bis zum "voll auf" und 2 Minuten bis zum "voll zu" ... daher diese MINONOFFTIME.

Der dritte (und wichtigste) Regelparameter ist aber die Vorlauftemperatur da sie direkt die transportierte Energiemenge vorgibt.
Wird es trotz niedrigem factor zu warm ist der VL zu hoch. Schafft es die Heizung nicht die Temperatur zu halten dann sind entweder die Pulse zu klein oder der VL zu niedrig.

Der vierte Regelparameter ist das Zeitprogramm. Zu spät anfangen bedeutet auch bei hohem VL und großen Plusen dass es zu kalt bleibt. Eine Fussbodenheizung ist halt träge. Die Temperatur tagsüber zum Energiesparen lieber nur um 0.5° absenken denn eine Heizung die modulieren kann wird dadurch weniger verbrauchen und abends wird es schneller warm. Alle Räume morgens gleichzeitig aufheizen bedeutet für die Heizung evt. 70% Last. Mit Bad, Küche und Esszimmer (und den Flur 30 Minuten später) evt. nur 50%

Dazu noch Fragen?

Das mit dem Reading ist Programmtechnisch kein Problem. Was mich stört sind die zusätzlichen Events die dann pro Minute für Werte ausgelöst werden die es schon gibt. Darum die Frage an alle. Bin ich da zu pingelig oder ist das für FHEM kein Problem?


Grüße
Andy

cobra112

Hallo

Erstmal vielen Dank für das Modul.

Ich hab da noch einige Fragen.

Wie binde ich ein EQ3 HomeMatic Funk Wandthermostat 132030 in das Plugin ein?
Ist Temperatur verstehe ich ja noch, aber wie binde ich die desired-temp ein?
Gibt es eine Option die Pumpe an und auszuschalten?

Im Log kommt diese Fehlermeldung:
PERL WARNING: Use of uninitialized value $ret in concatenation (.) or string at ./FHEM/93_PWMR.pm line 611.

MFG
Cobra

jamesgo

#48
Hallo Cobra,

ich kenne das HM Modul nicht aber es scheint ein eigenes Wochenprogramm zu haben.

Falls du das verwenden willst dann für den Raum das Attribut "autoCalcTemp" auf 0 setzten.

Jetzt gibt es 2 Möglichkeiten die desired-temp zu setzten:

- zyklische Abfrage des HM devices mit at und desired-temp setzten
- falls das HM Modul ein event für die "Wunschtemperatur" generiert einen notify definieren, der dann die "desired-temp" setzt

Was meinst du mit "pumpe an/ausschalten"? Statt einem Stellantrieb die Pumpe? oder wenn alle Stellantriebe aus die Pumpe auch noch ausschalten?

Bzgl. des Perl Warnings: Wie ist dein actor definiert? Er ist entweder nicht definiert oder lässt sich nicht auf on/off setzten.

Grüße
Andy

cobra112

Hi

Meine Fußbodenheizung hat eine extra Pumpe für die Heizkreise, es macht ja kein Sinn das die Pumpe immer läuft.

Imo läuft alles über Dummys deswegen bestimmt die Fehlermeldung.
Bekomme morgen die Hardware.
Hab in jeden Raum eine AVM Dect200 eigentlich könnte ich ja davon die Raumtemp. bekommen.

define Schlafzimmer_temp dummy
attr Schlafzimmer_temp room Heizung
attr Schlafzimmer_temp stateFormat temperature
define FBDECT_Temperatur notify Schlafzimmer:temperature.* setreading Schlafzimmer_temp temperature %EVTPART1
attr FBDECT_Temperatur room Heizung

Wie könnte so ein notify aussehen?

MFG
Cobra

jamesgo

Hallo,

im prinzip ja.

Die Temperatur referenzierst du direkt beim Anlegen des Raumes.
Die "desired-temp" kommt dann von deinem Wandthermostat (so wie aus deinem Beispielcode).

Grüße
Andy

cobra112

Hi

Hab es mal so probiert:

define wunschtemp notify set roomKitchen desired-temp wandterm:temperature %EVTPART1
attr wunschtemp room Heizung

Leider geht es nicht.

Unknown argument for desired-temp, choose <6..30>

MFG
Cobra

jamesgo

#52
???

define wunschtemp notify <hier dein HM device>:<hier das reading für die wunschtemp>  setreading roomKitchen desired-temp %EVTPART1



Skusi

@ jamesgo

Super vielen Dank für die ausführliche Abhandlung.

Ich hab soweit auch alles verstanden. Da ich Beruflich viel mit MSR Technik zutun habe ist das auch alles nicht so fremd für mich. Ich habe aber bis heute mir nie einen Kopf gemacht was in so einem Regler von der Stange vor sich geht. Deswegen freue ich mich, das ich bei mir privat nun endlich mal einen richtig genau arbeitenden Regler einsetzten kann, wenn er denn die richtigen Parameter bekommt.

Wie ich schon erwähnt habe ist meine FBH extrem träge, durch die 2 Schichten Fliese. Hinzu kommt eine nicht sooo dolle Isolierung des Hauses und recht große Räume mit viel Fensterflächen.

Mein Testraum ist derzeit ein kleines Büro. Die Temp Sensoren senden mit eine 0,2 Grad Genauigkeit. Ich mußte die so beschneiden da die Messwerte sonst immer sehr flatterig waren, und mir jedemenge Events geschrieben haben.

Die ersten 24h sahen schon nicht schlecht aus. Aber ich brauche schon extreme Werte.
Derzeit ist das PWM Modul mit 600 3600 540 defined und der Raum fährt mit Factor 2.

Letzte Nacht ist die Temp dann im tiefsten Punkt um 0,7 unter Solltemp gefallen. Mal sehen ob ich das noch besser hinbekomme. Die Tests sind halt sehr langwierig. Ich werde nun die Tage mal alle 24 Stunden voesichig an einer Schraube drehen und dann den SVG Graph studieren.

Schade das meine TX29DTH Sensoren nicht vernünftig in 0,1 Grad Schritten laufen. Das macht die PWM Rechnung schon etwas sprunghafter. Aber die Dinger senden im 4 Sekunden Takt und können sich meistens nicht für das richtige zehntel entscheiden.

Das mit dem Pumpe abschalten wenn kein Raum anfordert finde ich auch ein gute Sache. Meine Jetztige Hardware Einzelraumregelung macht das auch. Und über die schalte ich sogar den Heizkessel weg. Also wenn möglich bau doch noch ein Reading für die Pumpe/Kessel - Freigabe mit ein.

Das Soll Temp Reading brauche nur, weil man im TabletUI Thermostat Widget für desired und Ist Temp nur eine data-device setzen kann. Im Moment verzichte ich auf dei Anzeiger der Ist Temp im Widget und mache es über ein Symbol. Geht auch, ander wäre aber schöner :-)

---Skusi
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

jamesgo

#54
Hallo Skusi,

das mit dem Widget ist natürlich ein Argument. Ich schau mal was ich da machen kann.

Ich möchte dir aber noch einen Denkanstoß für deine Fußbodenheizug geben, da du dich meiner Meinung nach auf dem "viel hilft viel" Holzweg befindest.

Mit den alten Fussbodenheizungen läßt sich eine konstante Raumtemperatur nur schwer erreichen. Entweder ist es zu kalt oder zu warm. Warum?

Der Boden speichert viel Wärme. D.h. beim Aufheizen ist der Raum noch kalt und sehr viel Energie im Boden (dicker Estrich + Fliesen + Fliesen). Wird die Wunschtemperatur erreicht und die Energiezufuhr gestoppt dann wird der Raum trotzdem wärmer als gewollt, da die Energie aus dem Boden noch an den Raum abgegeben wird - man hätte früher drosseln müssen.

Umgekehrt wenn nun die Energie aus dem Boden an den Raum abgegeben wurde, wird es langsam kälter. Das warme Wasser fängt wieder an zu fliessen - aber es dauert lange bis der Boden wieder Wärme an den Raum abgeben kann - folglich wird es im Raum zu kalt. Um das zu verhindern hätte man schon sehr früh anfangen müssen dosiert Wärme zuzuführen.

Bildlich gesprochen: eine moderne Fussbodenheizung zu regeln ist wie ein Ei in einem Löffel zu balancieren. Eine alte Fussbodenheizung ist wie ein Ei auf einem Messer.

Meine Einstellung: 60 900 120 
  • prüfe jede Minute die Temperatur und entscheide neu
  • rechne die Pulse auf ein 15 minuten Steuerinterval um
  • regle fein von 2 Minuten (=13,3%) bis 15 Minuten (100%)


Deine Einstellung: 600 3600 540 
  • prüfe nur alle 10 Minuten = träge Heizung + träge Entscheidung
  • Steuerinterval 1 Stunde - das spielt keine so große Rolle denn 50% bleibt 50%
  • heize 9 Minuten oder gar nicht = reagiere erst wenn es schon zu spät ist (trotzdem 15 -100% Regelbereich)

In einem Raum mit 10 qm liegen zwischen 50 und 100 Meter Heizungsrohr (z.B. 16x2mm =12mm Innendurchmesser). D.h. in dem Rohr befindet sich ca. 6 bis 11 Liter Wasser. Mein moderner Heizkreisverteiler läßt sich von von 2-4 Liter/Minute einstellen. In alten Systemen wird es vermutlich schneller fliessen. Es dauert also 1,5-3 Minuten bis das Wasser komplett durch ist.

Meine Implementierung der PWM rechnet übrigens immer seit dem letzten Schaltvorgang, d.h. aus der Vergangenheit und nicht ab dem jetzt Zeitpunkt.
Das Bedeutet: alte Entscheidung 3 Minuten heizten ... neue Entscheidung 1 Minute heizen (nach 1 Minute geprüft) = sofort ausschalten.

Dein factor dürfte aber auch ziemlich groß sein.
Er ergibt einen Regelbereich von 35% bei > 0.2° und 100% bei > 0.4°
In Verbindung mit deiner Temperaturgenauigkeit von 0.2° sieht doch 1,5 besser aus - da gibt es 3 Regelpunkte.

Wenn du jetzt 22° einstellst und 21.5° rauskommt ... könntest du es doch mit 22.5° versuchen :-)

Wie gesagt: bitte als Denkanstoß und nicht als Kritik an deinen Überlegungen sehen.

Viele Grüße
Andy

Skusi

Hallo jamesgo,

Danke erstmal für die Erleuterungen und die Zeit die Du Dich mit meiner Heizung beschäftigt hast ! :-)

ZitatDeine Einstellung: 600 3600 540 
prüfe nur alle 10 Minuten = träge Heizung + träge Entscheidung
Steuerinterval 1 Stunde - das spielt keine so große Rolle denn 50% bleibt 50%
heize 9 Minuten oder gar nicht = reagiere erst wenn es schon zu spät ist (trotzdem 15 -100% Regelbereich)

Die 10 Minuten Abstände zum neu Berechnen habe ich so gewählt, weil ja die Temperatur die von den Sensoren kommen sich auch nur langsam ändern. Was bringt es wenn Dein Modul jede Minute dieselbe Rechnung macht, mit dem selben Ergebnis. OK die Reaktion auf eine geänderte Temp ist natürlich mit meinen 10 Minuten im extremfall 10 Minuten später.... Ich denke da liegt der Hase im Pfeffer - oder ?

Außerdem dachte ich das es CPU Time spart...

"Steuerinterval 1 Stunde" habe ich gewählt weil ich die Vebtile nicht so beanspruchen wollte. Ist auf Dauer bestimmt nicht Gut wenn die kurz vor Erreichen des Solwertes Stundenlang im Minutentakt auf und zu fahren. Aber wei Du schon schreibst, macht doch die Puls-Basis nicht so viel Unterschied beim Regelverhalten. Gerade wenn Du ja, wie ich nun weiß, auch schon begonnene Pulse verkürzt, wenn die Neurechnung was anderes Ergibt als beim vorigen mal.

Die 9 Minuten mindest Puls habe ich aus den selben Gründen eingestellt. Die Thermoantriebe brauchen grob 3 min für auf und 2 min für zu. Und ich dachte das bei meiner extrem trägen Heizung ein Heizen im Minuten Bereich eh keine Wirkung zeigt. Also 3 min auf, dann bleiben 6 min Heizen, das war für mich eine annehmbare Zeit. Bei Deinen 120 würden meine Ventile doch nicht mal voll öffnen.

Egal, ich werde mal feiner herangehen. Ich denke ich wähle für die nächsten Tage mal sowas wie 60 1800 240 und Factor 1,5
Mal sehen was die Grafik dann sagt.

Aussagekräftige Plots gehen eh erst ab heute. Ich habe gerade die Pumpe von der Pumpenlogic der Uponor Regelung getrennt. Die hat die letzten Nächte mir immer die Plots gestört, da sie die Pumpe weggeschaltet hat wenn alle Räume warm sind. Da konnte mein Büro Pulsen was es wollte, kam halt nix mehr.

Alles wird Gut.... irgendwann.

---Skusi
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

cobra112

#56
Hi

Vielen Dank für die Hilfe.

Seit 1 Tag hab ich es jetzt im Einsatz und läuft soweit ganz gut.
Was für mich noch Wichtig ist das sich die Pumpe Automatisch abschaltet wenn kein Raum Beheizt wird.

Hier mal mein versuch dazu.

(fh:roomsOn.*) {
if ($EVTPART1 == 0 ) {
fhem('set FH_Pumpe_dummy off');
}else {
if ($EVTPART1 >= 1 ) {
fhem('set FH_Pumpe_dummy on');
}
}
}

MFG
Cobra

jamesgo

Hallo,

ich habe neue Versionen für die beiden Module hochgeladen.

94_PWM.pm: als zusätzlicher Parameter kann nun ein actor definiert werden. <overallHeatingSwitch>[:<regexp_for_on>]

sobald kein Raum mehr "on" ist wird der actor auf "off" gesetzt. Damit kann man z.B. eine Pumpe abhängig vom Wärmebedarf schalten oder die Therme kontrollieren.

93_PWMR.pm:

eigenes reading für die Raumtemperatur um diese im thermostat widget von Tablet-UI zu verwenden
reading energyusedp nun in Prozent. (könnte im Tablet-UI als Wert für "valve-position" verwendet werden)
actorState ist nun ein Reading

Viele Grüße
Andy


Skusi

Danke Danke Danke...

Sehr schön gemacht. Nun ist alles komplett :-)
(bis uns nochwas einfällt :-) )

---Skusi
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

jamesgo

Hallo,

ein bisschen muss ich ja auch von euren Ideen und Anforderungen profitieren.  8)

Bei mir "schwingt" der OverallHeatingSwitch gerade ein bisschen weil kurzzeitig alle Räume aus sind.

Wie sieht das bei euch aus?

Grüße
Andy