====== Heizungssteuerung ====== {{process:shack-heritage-badge.png}} ----- **Die mechnische Zuverlässigkeit der Stellmotoren war nur so mittel. \\ Dieser Artikel dient rein archivarischen Zwecken** ----- ===== Motivation ===== Wenn man mal abends shutdown im shack macht, merkt man erstmal wieviele Heizkörper der shack eigentlich hat, die alle einzeln abgedreht werden müssen. Dieser Vorgang ist fehlerträchtig (einzelne Heizkörper werden vergessen) und macht wenig Spaß. Da muss es doch eine bessere Lösung für geben! ===== Projektstatus ===== Idee >> Research >> Proof of concept >> Redesign >> **Proof of concept V2** ====== yankee's Konzept ====== Folgende Dinge sollen Bedacht werden: * Die Lösung soll Energie sparen, nicht noch mehr verbrauchen --> Sie muss einen geringen Eigenverbrauch haben. * Die Lösung als Gesamtes muss auf viele Heizkörper skalieren und die Kosten müssen sich dabei in Grenzen halten. * Die Lösung soll einfach zusammen zu bauen sein. * Die Lösung soll verlässlich sein. * Um die Heizungen anzusteuern ist ein Temperaturfühler nicht ausreichend, weil die Temperatur am einen Ende des Raums nicht viel über die Temperatur auf der anderen Seite aussagen muss. Eine Raumhälfte auf 30°C zu heizen, damit es auf der anderen Seite des Raums noch 20°C sind ist blöd. * Es gibt jede Menge Heizungsregler auf dem Markt die man umrüsten könnte. Die sind jedoch alle unterschiedlich aufgebaut und 10 mal das gleiche Model kaufen heißt nicht unbedingt, dass 10 mal der gleiche Motor drin steckt. * Eine Zeitschaltuhr ist im shack nicht hilfreich, denn die Öffnungszeiten des shack lassen sich in kein verlässliches Muster abbilden. Die üblichen billigen Heizungsregler auf dem Markt haben einen "Manuell-Modus" bei dem man einfach die gewünschte Temperatur mit +/- Tasten einstellt und dann die Temperatur geregelt wird. (Manuell im Gegensatz zu Automatik mit Zeitschaltuhr). Die Heizungsregler haben einen internen Temperatursensor womit der "mehrere Sensoren"-Aspekt beachtet ist, das Zeug ist billig, einfach zusammenzubauen, funktioniert gleichermaßen, egal welche Hardware im Gerät steckt, verbraucht wenig Strom etc. etc. Ist eigentlich was wir brauchen, nur dass die das gleiche Problem wie die mechanischen Dinger haben: Keine zentrale Steuerung. Im Gegensatz zu den mechanischen Reglern lässt sich dort jedoch ganz simpel durch Simulation eines Tastendrucks die Temperatur verstellen. --> Einfach mit einem Mikrocontroller "Tasten drücken". Das lässt sich dann skripten und beispielsweise mit dem großen roten Power-down-Schalter koppeln, so dass wenn der ausgeschaltet wird alle Heizkörper runterfahren. ====== Rahmenbedingungen ====== ===== Heizkörper ===== Folgende Heizkörper befinden sich im shack: ^ Raum ^ Anzahl Heizkörper ^ | Lounge | 5 | | Seminarraum | 3 | | Media-Lab | 1 | | E-Lab | 2 | | Serverraum | 2 | | Werkstatt | 2 | | Getränkelager | 1 | | Lager | 1 | | Küche | 1 | | Flur (zwischen Küche/Portal) | 1 | | Bad 1 | 1 | | Bad 2 | 1 | | Optionsräumne (von vorne nach hinten) | 2,2,2,1 | ====== Aufbau ====== ===== Heizungsregler ===== Wir verwenden umgebaute Heizungsregler von Conrad für 10 Euro/Stück. Diese werden wie folgt umgebaut: - Deckel vom Heizungsregler entfernt. Batterieklappe ist leider im Deckel --> abgelötet - Man sieht 4x2 Kontakte wo die Taster waren die durch die Taster verbunden werden. Der Kontakt an der LCD abgewandten Seite ist jewails ground, bzw mit geringen Widerstand (4,7-30 Ohm habe ich gemessen) mit Ground verbunden. Den kann man sich als sparen und einfach ground nehmen. An die dem LCD zugewandten Kontakten ist dann je ein Kabel angelötet (rot=auto/man, schwarz=prog, weiß=+, grün=-) - An die +/- Taster ein Draht angelötet, sowie an der Batterieklappe einen Draht zur Spannungsversorgung angelötet Die Heizungsregler werden dann mit einer Steuerungsplatine mit CAN-Controller angeschlossen. ===== CAN-Adressen ===== Jeder Heizkörper bekommt eine Basisadresse zugeweisen. Von der Basisadresse werden die letzten drei Bits genutzt um die Funktion zu identifizieren: ^ Funktionsbits ^^ Funktion ^ Nutzdaten ^^^ ^ Bin ^ Dec ^ Funktion ^ 1. Byte ^ 2. Byte ^ 3. Byte ^ | 000 | 0 | Aktuelle Temperatur anfragen | - | - | - | | 000 | 0 | Aktuelle Temperatur melden | aktuelle Temperatur in steps | - | - | | 001 | 1 | Setze Temperatur | Temperatur in Steps (-1 falls unbekannt) | boolean "sicheres setzen") | - | | 010 | 2 | Taste gedrückt | 0 = Minus, 1 = Plus, | Tastendrucklänge in 0.512ms Schritten || | ... | 2-7 | For Future Use | - | - | - | Das Funktionsbyte insgesamt ist folgendermaßen aufgebaut: RRRC CFFF R = Reserved For Future Use (lies als "0") C = Category (0 = Controller, 1 = Heizkörper 1, 2 = Heizkörper 2) ==== Sicheres Setzen ==== "sicheres setzen" bedeutet, dass der Controller zunächst so häufig auf Minus drückt, bis der Heizungsregler garantiert auf step 0 steht. Es kann passieren, dass der Controller einen Tastendruck ausführt, diese jedoch nicht beim Heizungsregler erkannt wird. In diesem Fall würde die tatsächlich gesetzte Temperatur von der Temperatur abweichen, die der Controller meint gesetzt zu haben. Die Funktion "sicheres setzen" sorgt dafür, das solche Effekte wieder ausgeglichen werden. ==== Steps ==== ^ Step ^ Temperature ^ | 0 | Aus | | 1 | 8.0°C | | 2 | 8.5°C | | 3 | 9.0°C | | ... | ... | | 45 | 30.0°C | | 46 | MAX | ===== Heizungssteuerung 2.0 ===== Erster Prototyp basierend auf ESP8266 + espeasy. IP Addresse 10.42.27.61, ganz linke Heizung, nicht an dauerstrom, besitzt Akkupack und sollte die Nacht überleben. * Pin 12: Herunter Knopf, Temperatur -0.5Grad * Pin 13: Hoch Knopf, Temperatur +0.5Grad * Minimale Temperatur: 7.5 Grad (OFF steht auf dem Display) * Maximale Temperatur: 30.5 Grad (ON steht auf dem Display) * Puls von 500ms für einen Druck (GPIO von off auf on auf off) * eine sekunde Pause zwischen drucken Aktuell gibt es zwei möglichkeiten der Steuerung. ==== HTTP ==== curl 'http://10.42.27.61/control?cmd=Pulse,12,0,500' Einen 500ms Puls auf gpio 12 (Knopf runter) startend von off hin zu on hin zu off. ==== MQTT ==== Auf `mqtt.shack`: import paho.mqtt.client as mqtt from time import sleep broker_address="mqtt.shack" client = mqtt.Client("P1") client.connect(broker_address) # einen Reset durchführen und zu einer Validen Temperatur kommen: for i in range(50): client.publish("easy/thermo01/cmd","Pulse,12,0,500") sleep(1) ==== shell ==== Temperatur (Sollwert) um 5° erhöhen for i in {1..10} do curl 'http://10.42.27.61/control?cmd=Pulse,13,0,500' sleep 1 done