Hallo zusammen,
hier will ich mein Projekt vorstellen.
Es geht um eine automatische Heizungssteuerung in einem Einfamilienhaus. Zu 90% Fußbodenheizung ohne Thermostate. Das Haus ist innen mehr oder weniger offen, auch über die beiden Etagen. Installiert ist eine Junkers Gastherme. Diese wurde gesteuert von einem zentral angebrachten Innenthermometer mit dem ganzen üblichen Kauderwelsch wie Heizkurven und dergleichen. Hat nie richtig gut funktioniert. Dann bin ich auf das Produkt "Netatmo Thermostat" aufmerksam geworden. Hab es bestellt, die komplette Elektronik der Therme lahmgelegt (CAN Bus Außenthermometer, Mischer, Innenthermometer, die Pumpe ist eine autarke Grundfoss), und Netatmo angeschlossen. Die Außentemperatur bekommt der Netatmo Thermostat über die Netatmo Wetterstation oder über die Wettervorhersage. Innthermometer ist dabei. Durch zwei Kontakte an der Junkers-Therme, kann diese beliebig ein- und ausgeschaltete werden (hat wohl jede Heizung solche Anschlüsse). Der Netatmo Thermostat lernt nach ein paar Tagen die Eigenheiten der Heizung. Und was soll ich sagen, es funktioniert wesentlich besser als die originale Steuerung. Nach über einem Jahr Nutzung bin ich aber doch noch nicht 100%ig zufrieden und Schabe ich den Netatmo Thermostat durch eine eigene Raspberry Lösung ersetzt. Ist bis jetzt 2 Wochen im Einsatz und es sieht sehr vielversprechend aus.
- Raspberry Pi 2 B
- PiFace Digital 2
- USB-WLAN
- Raspbian
Das Programm habe ich in C geschrieben.
Vom PiFace verwende ich eines der beiden Relais, welches mit der Heizung an den beiden An/Aus Pins verbunden ist (Niedrigspannung).
Das C Programm ruft zwei Python Scripts zum Aktiviert bzw Deaktivieren des Relais auf und damit zum An- und Ausschalten der Therme.
Das Programm verarbeitet die Innen- und Außentemperatur. Da ich eine Netatmo Wetterstation habe, nutze ich diese und das Programm ruft ein entsprechendes PHP Script auf, um die Temperaturen zu bekommen.
Datum, Zeit, Innentemperatur, Außentemperatur und wie lange die Therme an war, werden alle 30 Minuten in einer Datei gespeichert.
Das Kniffligste an solch einer Steuerung ist, einen Algorithmus oder eine Formel zu finden, wann und wie lange die Heizung eingeschaltet sein muß, um zu einer bestimmten Zeit, eine gewünschte Innentemperatur zu haben. Das ganze ist unglaublich träge und sehr viele Faktoren spielen da eine Rolle. Die Lösung war ein künstliches neuronales Netz. Ich hatte es erst selbst programmiert, bin dann aber auf die quell-offene Lösung FANN umgeschwenkt ( FANN ).
Das Programm lernt so an Hand der bisherigen Messwerte, die Heizung immer besser zu regeln. Alle halbe Stunde werden neue Messwerte erfaßt, gespeichert, das neuronale Netzt mit diesen Werten abgefragt und die optimale neue Brenndauer der Therme bestimmt. Sie bleibt dann die nächsten 30 Minuten entweder aus oder wird eingeschaltet und nach der berechneten Zeit wieder per Timer ausgeschaltet. Die Zwischenzeit verwendet das Programm zum Training des neuronalen Netzes. Einer der 4 CPU Kerne des Raspis ist dabei natürlich ausgelastet. Die RAM Auslastung braucht kaum mehr als 1 MByte.
Wenn Interesse besteht, werde ich hier nach und nach den Sourcecode und Anleitungen hier hinterlegen.
Gruß, Matthias