Heizungssteuerung HSX
Hier ist ein ausführbares Windows Programm zum Experimentieren mit der Spezifikation
https://www.dropbox.com/s/j30bof8cguapm3f/hsxspecexe.zip?dl=0
(wird auf Anforderung gegen die aktuellste Version getauscht.)
Hier sind die (fast) aktuellsten Lazarus Quellen der Spezifikation :
https://github.com/Ekkib/hsxspec.git
Hier ist eine Raspi hsx_spec.bin Version :
https://www.dropbox.com/s/x37n3o5fi68wh9i/hsx_arm.tar?dl=0
(Auspacken mit $ tar -xf hsx_arm.tar , wurde eingepackt mit tar -czf hsx_arm.tar hsx_spec)
Auf dem PC, dem Raspi oder sonstwo mit Lazarus compilieren und ausprobieren :
$ git clone https://github.com/Ekkib/hsxspec.git
Da sich das Programm vermutlich noch häufiger ändert, wird hier nicht alles bis ins Detail beschrieben. Es gibt auch weiter unten die als ASCII Kunst beschriebene Spezifikation und Bildschirmfotos (Screenshots). Vielleicht gibt es ja auch bald eine Version für das WEB, zusätzlich zu der Lazarus Desktop-Version ? Mal schauen.
Allgemein :
Ganz viel tl, dr. Herunterscrollen für Bildschirmfotos !
Grundlage von HSX sind Listen. Diese Listen sind beliebig erweiterbar und werden beim erstmaligen Start mit einigen Defaultwerten für Namen und Werte besetzt. Diese Werte werden dann in eine editierfähige .ini Textdatei gespeichert. So ist maximale Flexibilität gesichert.
RX_Aktoren : (R für Relais, P... für Pumpen)
T_Sensoren : (T... für Temperaturen)
PA_Adressen : Physikalische Adressen der Sensoren und Aktoren. Gleiche Liste wie Sensoren und Aktoren, mit vorgestelltem "PA" (physikalische Adresse).
TagesProgramme (über Kalender vorwählbar) :
ReGler : (Software Blöcke, Beschreibung siehe weiter unten) :
Die Heiztabelle gibt Laufzeit des Brenners pro Tag vor, abhängig vom 24 Stunden Mittelwert von z.B. T_Aussen. Zwischenwerte werden interpoliert. In dieser Tabelle stehen die Erfahrungswerte, die jederzeit angepasst und um weitere Stützstellen erweiterbar sind. Neben der reinen Regelung aufgrund von aktuell gemessenen Temperaturen ist dies eine sehr gute Alternative/Unterstützung, um die notwendige Brennerlaufzeit zu bestimmen.
Notation
Wie erkennbar wird versucht, sprechende Namen zu verwenden. Die Buchstabe(n) geben an, wofür die Variable benutzt wird. Die Buchstabe(n) werden abgegrenzt durch Unterstriche "_". Diese Namen können dann im Programm direkt verwendet werden. In der Anzeige des fertigen Programms können dann diese ersten Buchstaben final automatisiert weggelassen werden. Wenn erst mal alles fertig ist, ;-) .
Programmkonzept
Das Programm besteht aus einem zentralen Baustein "Zentrale" und (nahezu) beliebig vielen Reglerbausteinen. In den Reglerbausteinen können aufgrund der erfassten Temperaturen die Aktoren (Brenner, Pumpen, Mischer) betätigt werden. In der Zentrale werden die eingelesenen Temperaturen gelistet und die Ergebnisse der Reglerbausteine konsolidiert. Ferner werden Laufzeiten der Aktoren des aktuellen Tages und die Zeiten bis zum nächsten Stopp laufend aktualisiert. Die Reglerbausteine werden interaktiv parametriert. Alle Einstellungen werden in einer .ini Datei gespeichert. Die Aktoren können "entflattert" werden, d.h. mit minimalen Laufzeiten versehen werden.
Zeitbausteine
Der Zeitbaustein (Timer) jedes Reglerbausteins wird mit mit einem Zeitwert besetzt, sobald eine der Bedingungen dafür gegeben ist. Wird das Heizprogramm umgeschaltet, läuft der Timer weiter. Bei leerem Timer wird dieser allerdings bei Vorliegen einer korrekten Ursache gesetzt.
Programmquellen
Um das Konzept zu erläutern gibt es die Quellen des lauffähigen Lazarus Programms, die folgenden Erläuterungen als ASCII Kunst, und Bildschirmfotos (Screenshots). Am aktuellsten ist der Text dieser Seite, gefolgt von den Lazarus Quellen.
Kalender Baustein
In dem Kalender können für bestimmte Tage Heizungsprogramme vorgewählt werden (Wochentag, Frei, Urlaub, Party, ...). Sind keine Programme vorab bestimmt, wird ein für jeden Wochentag (Montag, ...) individuell wählbares Programm gefahren. Der endgültige Kalenderbaustein sollte direkt anzeigen, welche Programme an welchen Tagen laufen, z.B. durch Farben und "Hover over". Durch Klick auf einen Tag lässt sich der vorgewählte Standard überschreiben. Als Feiertage ("Frei") werden eingetragen : 1.1. , 1.5. , 3.10. , 24. - 26.12. und 31.12. . Bei Bedarf können natürlich auch die beweglichen Feiertage (Ostern, Pfingsten, Christi Himmelfahrt, Fronleichnam) noch automatisch eingepflegt werden, die auch noch vom Bundesland abhängig sind.
Erklärung zur Text-Notation der ASCII Kunst
[Taste] zum Drücken
{Dropdown-Menü}
_23:15_ Eingabefeld
->Heizprogramm<- Irgendeine Darstellung
O Checkbox, Haken macht Zeile aktiv, oder Eintrag grün
... : Anklicken fügt weiteren, neuen Eintrag hinzu
X : löscht einen Eintrag von mehreren, der erste Eintrag bleibt (natürlich)
; trennt Kommentar
Ende Erklärung ...
Zentrale Implementierung
; TagesLaufzeit Aggregat (aktuelle Restlaufzeit)
01:50:30 Brenner (01:10:21)
01:50:30 PWohnzimmer (01:10:21)
00:45:00 PWintergarten (00:00:00)
00:30:00 PHeizkoerper (00:00:00)
->Datum/Uhrzeit<-
->Kalenderbaustein<-
->Programmvorwahl für Wochentage<-
->Auswahl Heizprogramm<-
->Liste aller Temperaturen<-
Ende Zentrale Implementierung
Regler Implementierung :
O aktiv ; hier muss ein Haken stehen, damit der Regler auch schaltet.
; Ohne Haken läuft der Regler leer.
; Haken wird automatisch durch "laden" aktualisiert um Mitternacht,
; wird entfernt bei manueller Bedienung am Kessel
[-10] 2:15:45 [+10] ; Countdown Timer, -10 = - 10 Minuten, +10 = +10 Minuten
; Sekunden Ink/Dekrement statt Minuten im Debug Modus
{Brenner} ; Aktoren, die angeschaltet werden, wenn Timer > 0
{PWohnzimmer}
... X
O _07:15_ _09:15_ ; Wenn Timer nicht läuft, wird er anhand dieser Tabelle
O _16:15_ _18:15_ ; und der aktuellen Uhrzeit geladen.
O _20:15_ _20:45_ ; Priorität geringer als Xq24h
... X
; das Heizen soll so angefangen werden, daß es bis zur eingestellten Zeit (_15:00_) fertig ist
; wenn "q" angekreuzt wird, wird 24h Mittelwert statt aktuellem Wert genommen
O {T__AussenN} O q 5,5 3:10 _15:00_ ; Messwert indiziert Heiztabelle
11:53 4,3 3:20 ; Anzeige in grün nach Trigger, wie tatsächlich geladen
; "normale" Bedingungen :
O {T__Wohnzimmer} O q O > _21,5_ Hysterese _0,5_ ; grün oder rot,
O <
O {T__Wohn_Vorl} O q O > _45,5_ Hysterese _0,5_ ; beeinflusst Funktion wenn aktiv,
O <
... X
[sichern] [laden] ; Man kann beliebig spielen, es wird nur bei "sichern" gesichert.
; "laden" lädt auch alle Checkboxen, auch einen zuvor gespeicherten "aktiv" Haken
; Um Mitternacht wird ein "laden" gemacht, um alles zurückzusetzen
[ Siehe : alte Implementierung bei Hs1]
Ende Regler Implementierung
Der zentrale Programmteil "Zentrale" :
Regler (mit pro Tag geltenden Heizprogrammen, hier "PFrei") :
Verhalten beim Hochlaufen
Nach dem Neustart wird darauf gewartet, daß jeder Temperatursensor eine "sinnvolle" Temperatur zeigt, bevor die Regelung beginnt. Dies kann einige Zeit dauern, da die Sensoren sequentiell abgefragt werden. Ferner wird beim Hochlaufen auch abgefragt, welche 1Wire Temperatur Sensoren überhaupt angeschlossen sind. Das Ergebnis dieser Abfrage wird mit den in der .ini Datei dokumentierten, erwarteten Sensoren verglichen. Sensoren, die "fehlen", werden in den Benutzermasken entsprechend mit "rot" markiert und mit einem Defaultwert besetzt. Bei funktionierenden Sensoren erscheint der gemessene Wert mit grüner Hintergrundfarbe. Zusätzlich gefundene Sensoren werden in der .ini Datei in der eigenen Gruppe "Found1Wire" dokumentiert, und zusätzlich zu den schon bekannten Sensoren gelistet. Vermutliche Namen T_Xnn. Die T_Xnn werden nur in der Maske gelistet, wenn sie auf dem Bus sichtbar sind.
Bedienung am Heizkessel :
Geschieht auf der Frontplatte über beleuchtbare Taster, einen pro Aktor. Der Taster leuchtet, wenn der Aktor aktiv (=an) ist.
Der Status des Aktors wird durch Drücken des Tasters reversiert : Aus zu An, und umgekehrt. Jeder Tastendruck "toggelt" also das Aggregat. Bei Mischern sind zwei Taster vorgesehen (Auf, Zu), natürlich ohne die Software-Rast-/Reversierfunktion. Mischer fahren nur so lange, wie der Taster gedrückt wird.
Sobald irgendein Taster gedrückt wird, werden sämtliche Regler inaktiv (Haken aus oberster Checkbox "aktiv" wird entfernt). Der Standard der Regler-Stellungen wird dann um Mitternacht durch virtuelles Drücken des Knopfes "Alles_laden" wieder hergestellt, insbesondere auch die Aktiv-Schaltung. Der Knopf "Alles_laden" sorgt dafür, daß der Knopf "laden" auf jedem Regelbaustein gedrückt wird.
Die Besonderheit bei der manuellen Bedienung : Alle Aktoren gehen nach einer pro Aktor individuell konfigurierten Zeit wieder aus. Der Standard für diese Timer ist eine Stunde, für den Brenner allerdings nur 30 Minuten.
Es gibt auch ein WEB Formular, das diese Hardware Taster in Software nachbildet, inklusive der Timer Funktion.