... klingt verrückt, ist es aber nicht ...

Es war einmal vor langer, langer Zeit. 

Oder etwas genauer gesagt, es war im Jahre 1991 als ich zum ersten Mal Hand an meine Heizungsanlage gelegt habe. Das Öl-Zeitalter sollte beginnen und aus der alten Kohle-Heizung eine neue mit Heizöl werden. Wendebedingt war nun zwar das Material in der ehemaligen DDR nicht mehr knapp, aber das Geld schon. Ich habe damals meine  Kohleofen GK 30 umgebaut und auf Heizöl nachgerüstet. Die Steuerung dafür war so einfach wie zuverlässig. Statt dem Anzeigethermometer ein Thermostat in den Ofen und gut. Zu kalt, Brenner läuft, zu warm Brenner geht aus. Simpel, robust und einfach nicht tot zu kriegen. Über den Komfort wollen wir mal lieber schweigen. Bestenfalls am Abend der Gang in den Keller um für die Nacht das Thermostat etwas zurückzudrehen, mehr aber auch nicht. Auf die Heizölpreise musste man nicht achten und die Umweltfragen gab es damals glaube ich noch gar nicht.

Bequemlichkeit gab es aber schon. Das dauernde Regeln am Thermostat geht schon etwas auf die Nerven also musste etwas neues her. Neuer Ölkessel mit Steuerung, ja, aber das wäre zu einfach gewesen. Und dafür schraube ich viel zu gerne selbst an den Sachen herum. Die Blackbox einer Steuerung hat mich bei Weitem nicht so fasziniert, wie die Frage, eine Außentemperaturführung und Zeitsteuerung selbst zu bauen. Das ganze dann zeitgemäß 1992 schön diskret mit Operationsverstärkern, einer Mehrkanalzeitschaltuhr und diversen Kabeln durch das Haus, um auch mal vom Wohnzimmer aus die elektrische Heizpatrone zur Warmwasserbereitung einschalten zu können. Diese Steuerung liegt noch bei mir im Keller, zur Entsorgung fehlt mir bis heute der Mut und ich spendiere hier bald auch mal ein Bild.

Level 3: Wäre ja super, wenn man verschiedene Messwerte auch noch dauerhaft aufzeichnen würde und die gesamte Steuerung einem PC anvertraut, so der Plan. Also im PC-Zeitalter mal wieder alles neu verkabeln, die relevanten Temperaturen messen (Vorlauf, Rücklauf, Außen, Warmwasser) und den Rest in etwas Programmlogik hineinpressen. Hier begann also die Kopplung von meiner Heizung mit MySQL. Gemessen wurde über einen Koppler an der seriellen Schnittstelle eines stink normalen PC's, geschaltet über eine Relaiskarte und die Logik war (glaube ich zumindest mangel's Erinnerung) mit PERL umgesetzt. Irgendwann hatten sich bei diesem PC mal einige Bauteile selbst vom Motherboard "abgelötet" und es wurde dann irgendwie Zeit für Level 4.

Wir schreiben mittlerweile das Jahr 2012. Das Internet ist erfunden, gehostete Server sind bezahlbar und natürlich baut man nun alles so, dass man es von der ganzen Welt aus bedienen kann. So zumindest der Plan. Es entstand die Idee, eine Datenbank so zu designen, dass in dieser die Steuerung mehrerer Objekte (Häuser) parallel nebeneinander her laufen kann. Soweit ist das nicht besonderes. Der besondere Plan war, dass die eigentliche Steuerungslogik nicht durch ein externes Programm (was die Messwerte aus der Datenbank abfragt und daraus Steuerbefehle ableitet) sondern durch die Datenbank selbst erfolgt. Und so funktioniert das nun im groben Modell:

Messwert aufnehmen --> an Datenbank senden --> mit Sollwert vergleichen --> Steuerbefehl (an/aus) generieren --> abspeichern --> von extern abfragen --> ausführen, also schalten

Mehr zur Steuerlogik erfahren...


Beschreibung der Steuerkreise und Steuerschritte:

Die Aufgaben werden in verschiedene Prozesse (sogenannte Steuerkreise) aufgeteilt. Ein Steuerkreis übernimmt zum Beispiel die Aufgabe, für warmes Wasser (hier auf elektrischem Weg mit Hilfe der Heizpatrone) zu sorgen. So sieht dieser Steuerkreis konkret bei mir aus.

Nr. --> Steuerkreis
 
Schritt
 
Funktion
 
Beschreibung
30 --> WW_Heizpatrone_an 10 p_timer Der Timer funktioniert hier als Freigabe. Er legt das Zeitfenster fest, in dem die Handschaltung über Home/FHEM erlaubt ist.
30 --> WW_Heizpatrone_an 15 p_last("patrone_get")=1.00 Wurde das Heizen der Patrone über Home/FHEM angefordert?
30 --> WW_Heizpatrone_an 20 p_last("boiler_oben") < p_setpoint("ww_heizpatrone") Warmwassertemperatur erreicht ??
30 --> WW_Heizpatrone_an 30 p_set_device("heizpatrone",1) Heizpatrone an (Legionellenschaltung)

... und was bedeutet das ???

 WW_Heizpatrone_an ist nur ein Name, um den Steuerkreis zu identifizieren. Schritt bestimmt die Reihenfolge der Abarbeitung der einzelnen Steuerschritte also hier von 10 bis 30. Beschreibung, klar, ist eine Beschreibung ;-)

Der eigentliche Befehl steckt in den Funktionen. Hinter p_last() verbirgt sich eine stored function in der Datenbank. Diese ermittelt den letzten in der Messwerttabelle gespeicherten Wert für das Gerät mit dem Namen 'patrone_get'. Ergibt der Funktionswert true, wird der nächste Programmschritt ausgeführt, ansonsten ist Schluss.

  • boiler_oben --> ist der Temperatursensor im Heißwasserspeicher (oben eingebaut)
  • ww_heizpatrone --> repräsentiert den gewünschten Sollwert für die Warmwassertemperatur und
  • heizpatrone --> ist die Gerätebezeichnung, die mit dem entsprechenden Relais zum Anschalten korrespondiert

Vor die Steuerschritte kann man immer noch einen Timer einbauen. Dieser ist wie eine Wochenzeitschaltuhr zu programmieren und legt quasi fest, ob der nächste Steuerschritt auszuführen ist. Eine Feiertagsfunktion hat das ganze auch bekommen und an Feiertagen ist für das Programm dann immer Sonntag :-)

Ich habe jede Menge Funktionen (stored functions) eingebaut um zum Beispiel auch den Durchschnitt der von Messwerten über einen bestimmten Zeitraum in die Steuerlogik einfließen lassen zu können.

Hier gibt es die Auflistung der wichtigsten Funktionen --> Link


Weiterer Fließtext