Die mechnische Zuverlässigkeit der Stellmotoren war nur so mittel.
Dieser Artikel dient rein archivarischen Zwecken
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!
Idee » Research » Proof of concept » Redesign » Proof of concept V2
Folgende Dinge sollen Bedacht werden:
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.
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 |
Wir verwenden umgebaute Heizungsregler von Conrad für 10 Euro/Stück. Diese werden wie folgt umgebaut:
Die Heizungsregler werden dann mit einer Steuerungsplatine mit CAN-Controller angeschlossen.
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“ 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.
Step | Temperature |
---|---|
0 | Aus |
1 | 8.0°C |
2 | 8.5°C |
3 | 9.0°C |
… | … |
45 | 30.0°C |
46 | MAX |
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.
Aktuell gibt es zwei möglichkeiten der Steuerung.
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.
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)
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