Simple, relative Mischersteuerung mit DOIF

Begonnen von cwagner, 29 März 2015, 16:18:23

Vorheriges Thema - Nächstes Thema

cwagner

Als Ergebnis eines langen Ausprobierens verschiedener Ansätze möchte ich hier meine Mischersteuerung mit DOIF zur Diskussion stellen.

Aufgabe: Aus einem Vorlauf mit stark und schnell schwankenden Temperaturen (30-90 Grad im Extremfall) möchte ich für einen Fußbodenheizkreis einen Vorlauf abzweigen, der konstant 30 Grad hat. Dies reicht für dieses Teil des Hauses vollkommen und verhindert auch, dass der Fußboden nicht die für das Laminat förderliche Wärme von 28 Grad dauerhaft überschreitet. (Dennoch habe ich noch einen mechanischen Grenzwertgeber für den Fall des Überschreitens der Vorlauftemperatur.)

Schlüssel zur Vereinfachung ist, eine errechnete Öffnung reproduzierbar absolut an den Mischer zu übergeben. Dafür gibt es ein Super-Modul , das im Wiki unter http://www.fhemwiki.de/wiki/STELLMOTOR beschrieben ist. In Verbindung mit PID20 hatte ich damit schon gute Ergebnisse. Zwei Punkte waren damit aber nicht in den Griff zu bekommen: Da die Messwerte sich extrem schnell ändern, habe ich alle 45 Sekunden über 1-Wire-Fühler neue Messwerte, entsprechend sehr viele Regelvorgänge. Der von FHEM errechnete Sollwert des Mischers und die wirkliche Stellung mussten immer wieder synchronisiert werden.

Meine jetzige Lösung:
Ein Userreading am Temperaturdevice errechnet ein "Delta" zum Sollwert mit jedem neuen Messwert. Über das Attribut event-on-update-reading sorge ich dafür, dass bei jeder Messung ein event ausgelöst wird.

Dieses DELTA lasse ich von einem DOIF vergleichen. Für den Links- und Rechtslauf gibt es je einem Aktor, wie im Wiki-Beitrag für Stellmotor beschrieben. Das DOIF startet das Relais zum Erniedrigen für stur 2 Sekunden und das für das Erhöhen - egal wie groß ein negatives Delta ist - um 1 Sekunde. Wenn das gerundete Delta 0 ist, geschieht nichts.
Diese Steuerung braucht nicht zu wissen, wo der Mischer aktuell steht, es wird einfach nur relativ geregelt.

Die Definition des DOIF:
define DI_T_Vorlauf_FBH DOIF ([T_Vorlauf_FBH:FBH_Delta]<0)  (set Switch_Heizkeller output Mischer_mehr on-for-timer 1) DOELSEIF ([T_Vorlauf_FBH:FBH_Delta] >0) (set Switch_Heizkeller output Mischer_weniger on-for-timer 2)
Wichtig ist, in diesem Fall das attr do always zu setzen.

Ein zweites DOIF regelt das Deaktivieren und das Stoppen der Umlaufpumpe des Temperatur-DOIF, wenn die Raumtemperatur erreicht ist bzw. die Temperaturabsenkung zu bestimmten Zeiten (das macht hier trotz der Trägheit einer Fußbodenheizung Sinn, weil der Hausbereich nur etwa 5 Stunden des Tages benutzt wird):
define DI_FBH_Betrieb DOIF ([06:00-14:00] and [TF_Galerie:temperature:d]<20) (attr DI_T_Vorlauf_FBH disable 0,set SW_04_FBH_Pumpe on)

Christian
PI 2B+/5 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