Beispiel: Mischersteuerung mit DOIF für Fussbodenheizung

Begonnen von cwagner, 09 Oktober 2016, 20:01:11

Vorheriges Thema - Nächstes Thema

cwagner

Mit drei DOIFs habe ich eine zeitgesteuerte Mischersteuerung realisiert, die aus einem Hauptkreis mit für die Fußbodenheizung zu hohem Vorlauf einen "kompatiblen" Vorlauf abzweigt. Im Hauptkreis können Vorlauftemperaturen bis 80 Grad entstehen (Altbau), das Laminat über der FB-Heizung verträgt nur maximal 28 Grad Temperatur und "vernünftige" Vorlauftemperaturen für den Fußbodenheizkreis liegen bei 22-35 Grad.

Die Lösung stelle ich hier zur Diskussion, einerseits als Anregung und andererseits auch in der Hoffnung auf konstruktive Kritik:

Mechanisch sieht es so aus: Aus dem Hauptkreis "saugt" eine zweite Pumpe über einen 4-Wege-Mischer Vorlauf. Durch die Mischerstellung wird der zu heiße Vorlauf durch den immer kühleren Rücklauf auf die gewünschte Temperatur reduziert. Ein mechanischer Übertemperaturschalter im Vorlauf der Fußbodenheizung schaltet die Pumpe sicherheitshalber aus, wenn 35 Grad überschritten werden. Ein Ausfall der Steuerung stellt ähnlich wie bei der Brennersteuerung der Heizung also keine Gefahr dar (fail safe).

Es gibt am 1-Wire-Bus (wegen schneller Reaktion) einen Temperaturfühler hinter dem Mischer im Vorlauf und vor dem Mischer im Fußboden-Rücklauf.
Der Mischer wird elektro-motorisch gesteuert über einen Rechts-/Linkslaufsynchronmotor mit Endabschaltungen. Angesteuert wird er über zwei Relais-Ports eines 1-Wire-Denkovi-Achtfach-Relais. Die beiden Relais sind elektrisch so geschaltet, dass im Fall einer Fehlschaltung beider Relais auf "ein" nur der Linkslauf ("zu") aktiviert wird.

Der erste DOIF ist die "Zeitschaltuhr", da der Raum nur einige Stunden über den Mittag genutzt wird. Klar, Fußbodenheizung ist sehr träge, bei der geringen Nutzung lohnt sich m.E. aber eine "Nachtabsenkung" auch schon durch weniger Strom und weniger Verschleiß der Pumpe.


DEF        ([06:00-14:00] and [TF_Galerie:temperature:d]<19 and [DI_Sommer_Winter] eq "Winter") (setReading DI_FBH_Betrieb Vorlauf_FBH {(43-[TF_Galerie:temperature])},set Switch_Heizkeller output Mischer_mehr on-for-timer 30,set SW_04_FBH_Pumpe on,attr DI_T_Vorlauf_FBH enable)
DOELSE (set DI_T_Vorlauf_FBH disable,set SW_04_FBH_Pumpe off,set Switch_Heizkeller output Mischer_weniger on-for-timer 95)
   NAME       DI_FBH_Betrieb
Readings:
Vorlauf_FBH     21.8
Attributes:
   cmdState   an|aus
   event-on-update-reading cmd_nr
   group      Fussbodenkreis
   initialize initialized
   room       Heizung
   verbose    3
   wait       60:60


Beim Ausschalten wird der Mischer, egal wo er gerade steht, grundsätzlich auf "Zu" gefahren. Eine Fahrt dauert max. 95 Sekunden
Die Rechnung "43-[TF_Galerie:temperature]", die im Reading Vorlauf_FBH  gespeichert wird, ist eine einfache Bedarfssteuerung. Wenn der Raum morgens auf 19 Grad abgekühlt ist, beträgt der Vorlauf 24 Grad, bei 15 Grad nach extrem kalten Winternächten wären es dann 28 Grad. Hier wäre natürlich auch eine übliche Heizkennlinie denkbar.
Die eigentliche Mischersteuerung ist das nachfolgende DOIF, das hier über das vor einiger Zeit dankenswerterweise eingebaute set disable aktiviert/deaktiviert wird.

Das zweite DOIF ist die eigentliche Mischersteuerung:
Internals:
DEF        (([DI_FBH_Betrieb:Vorlauf_FBH]-[T_VL_FBH:temperature])>0) (set Switch_Heizkeller output Mischer_mehr on-for-timer 2)
DOELSEIF (([DI_FBH_Betrieb:Vorlauf_FBH]-[T_VL_FBH:temperature])<0) (set Switch_Heizkeller output Mischer_weniger on-for-timer 3)
DOELSE
   NAME       DI_T_Vorlauf_FBH
Attributes:
   disable    1
   do         always
   event-on-update-reading cmd_nr
   group      Fussbodenkreis
   initialize initialized
   room       Heizung


Wenn also das Delta zwischen den gemessenen letzten Vorlauf und dem Sollwert Vorlauf_FBH größer Null ist, muss der Vorlauf also erhöht werden. Das Relais wird für 2 Sekunden eingeschaltet (was grob 2% Öffnung bedeutet)
Wenn das Delta zwischen Ist und Soll negativ ist, wird der Mischer für 3 Sekunden geschlossen (etwa 3%).

Durch die ungleiche Zeit von Öffnen und Schließen erhalte ich eine feiner abgestufte Regelung, die durch den Takt der Messwerte (45 Sekunden) sehr agil ist. Ein Event wird über die entsprechenden Attribute an dem Fühlerdevice auf Änderungen erst bei mindestens 0,1° Änderung ausgelöst.

Diese Regelung ist selbststeuernd balancierend - alle anderen Versuche sorgten regelmäßig bei vielen Steuervorgängen zu einer signifikanten Abweichung zwischen dem gerechneten Öffnungswinkel und dem tatsächlichen.

Ein drittes DOIF ist eine Sicherheits-Sicherheitsschaltung: Ein DS18S20 in SMD-Bauform misst direkt unter dem Laminat die Temperatur im Bereich des Zulaufes der Fußbodenheizkreise und schaltet bei Überschreitung den Fußbodenheizkreis aus und gibt einen E-Mail-Alarm aus (bisher gab es nur Test-Emails :-)  )

In der Praxis zeigt der Vorlauf eine Genauigkeit von -0,5/+0,25° und die Raumtemperatur läuft sehr gleichmäßig über 3 Stunden auf die Solltemperatur (+/- ,5°). Mir ist klar, dass diese Werte im Bereich der Genauigkeit der Sensoren liegen. Die Zahl der Öffnen- und Schließenschritte liegt aktuell bei etwa 200 über die Heizzeit von 5 Stunden, also durchschnittlich alle 1,5 Minuten zwei Sekunden Öffnen oder drei Sekunden Schließen.

Mit dieser Lösung bin nicht nur ich ich nach 5 Monaten Betrieb (voriger Winter und nun der erste Monat im Herbst) recht zufrieden, sondern auch der WAF ist sehr gut...
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB