Kuschelig2.0
Kuschelig 2.0 ist jetzt im Testbetrieb und ersetzt damit die alte Heizungssteuerung. Sie läuft auf einem Raspberry Pi. Zur Ansteuerung der Thermostate und zum Auslesen der Temperatursensoren werden Linux Kernelmodule für Onewire verwendet. Die Steuerung ist weiterhin mit einem Jabberbot möglich. Dieser läuft direkt auf dem Raspberry Pi und ist mit SleekXMPP in Python implementiert.
Thermostat
An der Heizung ist ein digitaler Thermostat, bei dem eine Zieltemperatur über ein Rad eingestellt werden kann. Dieser sollte im Modus "Manu" für "manuell" bleiben. Der Modus "Auto" ist nämlich dazu da, per Zeitschaltung verschiedene Temperaturen anzufahren. Das erfordert allerdings, dass man den auch richtig programmiert. Es passt auch nicht ganz zu unseren Gewohnheiten, weil nicht immer jemand da ist und wenn doch, dann vielleicht auch mal bis spät in die Nacht.
Das Thermostat ist gleichzeitig ein 1-Wire-Endgerät, worüber man für 5 Minuten das Ventil voll aufdrehen kann ("boost"). Ziel von Kuschelig 2.0 ist es, über diese Boost-Funktion und in der Wohnung verteilte 1-Wire-Temperatursensoren die Regelung selbst zu machen, so dass man schon bevor man in den Space reingeht, die Temperatur über einen Chat-Bot erfragen und beinflussen kann. Im Winter soll man also, bevor man noch in den Raum reingeht, die Zieltemperatur einstellen können, damit man sich hier nicht erst einen abfrieren muss. Damit nicht immer geheizt wird, sollte aber die Zieltemperatur beim Thermostat selbst bei 17° liegen.
Funktioniert das System mal gerade nicht, kann immer noch direkt am Thermostat die Zieltemperatur per Rad eingestellt werden. Man darf dann nicht vergessen, das wieder runter auf 17° zu stellen.
Die 17°, die wir da beim Thermostat eingestellt haben, ist also die Midnesttemperatur, die wir nicht unterschreiten wollen, da es sonst mit der Luftfeuchtigkeit und Schimmel Probleme geben könnte.
Heizungssteuerung
Die Heizung kann über den Jabber bot mit der Jabber ID bot@paws.de oder alternativ aus dem MUC gesteuert werden. Die für die Heizungssteuerung relevanten befehle sind !kuschelig und !status.
Kuschelig nimmt on, off oder eine Gleitkommazahl zwischen 17 und 24 als Argument und setzt diesen Wert (in °C) als Zielwert für die Heizungssteuerung ein. Dabei bewirkt on eine Zieltemperatur von 22.5°C und off setzt die Zieltemperatur wieder auf 17° zurück.
Status gibt die aktuelle Temperatur im Space und die eingestellte Zieltemperatur zurück. Momentan ist keine Authentifizieren nötig um die Heizung zu steuern das wird sich aber in Zukunft vielleicht ändern.
Solange die Raumtemperatur geringer als die Zieltemperatur ist wird die Heizung in 6 Minuten Intervallen für 5 Minuten voll aufgedreht. Die Raumtemperatur wird an dem Temperatursensor gemessen der über dem Tisch von der Decke hängt.
Wenn die Tür vom Noklab abgeschlossen wird (nicht wenn sie bereits abgeschlossen ist) wird die Zieltemperatur auf 17°C gesetzt. Dies erfordert allerdings, dass auf der entsprechende Türstatus-Abfrage Service auf brickme läuft. Fällt der aus, wird der Space immer als geschlossen interpretiert, was die automatische Abschaltung beim Übergang von offen nach geschlossen aushebelt.
Statusanzeige per Ampel
Im Space befindet sich im Regal die "Ampel" mit aktuell fünf Leuchten. Die oberen zwei davon zeigen im Moment den Status der Heizung an, also, wie die gewünschte Zieltemperatur (target) und die aktuelle Raumtemperatur (now) zueinander stehen und ob geheizt werden soll (target>17) oder nicht.
Segment | leuchtet, falls… |
---|---|
1. von oben | target > 17 && target <= now |
2. von oben | target > 17 && target > now |
Elektronik
Die Heizung wird von einem Raspberry-Pi über Onewire gesteuert dabei werden die Sensoren und das Thermostat verwendet die schon bei Kuschelig zum Einsatz kamen. Sowohl das Thermostat und die Sensoren als auch der Raspberry-Pi werden über die 5-Volt und Masse Leitung der Onewire-Verbindung mit Strom versorgt.
Software
Türstatus-, Sensorabfrage und -Logging sowie das Auslösen der Boost-Funktion des Heizungsventils geschieht über die Skripte /bin/boostiftoocold
, /bin/therm*
auf pyro, die über die crontab vom Benutzer root regelmäßig gestartet werden. Die aktuelle Raumtemperatur wird im Moment als Mittelung verschiedener Sensoren in Raum01 ermittelt, wobei „Ausreißer“ (wenn ein Sensor z.B. mal gerade 85° sagt) rausgefiltert werden.
Auf pyro läuft auch der XMPP-Bot unter dem User nokbot
. Der Bot wird aktuell automatisch nach dem Booten über cron
gestartet. Dessen Python-Code liegt im Heimverzeichnis von nokbot
.
Diejenigen, die Änderungen an dem Jabber Bot vornehmen wollen, fragen defnull am besten nach Schreibzugriff auf das entsprechende git Repo. Nach Änderungen an diesem Repo kann man dem Bot per "reload" sagen, dass er sich neustarten soll. Dabei updatet er sich auch.
Sensoren
Die One-Wire Sensoren mit ihren IDs, die überall im Space verteilt sind:
ID | Ort |
---|---|
10-00080181e1cf | Küche: Heizung |
10-000801dcbf7e | Küche: Heizung |
10-000801dd1380 | Heizung Rücklauf |
10-00080200db39 | Heizung Vorlauf |
10-0008020165f9 | Küche: an der Decke |
22-0000000ed18a | beim Noklab-Gemälde |
28-000001c75bf1 | in der Mitte oben am großen Fenster |
28-000001c77c5e | auf dem Regal liegend |
28-00000558acfa | an der Decke |
Die rosa hervorgehobenen Sensoren werden für die Bestimmung der Raumtemperatur aktuell verwendet.
TODO
Pyro scheint neuerdings nicht lange "durchzuhalten" (ist dann nicht mehr erreichbar)Der Boost wird nicht wie erwartet alle 6 Minuten sondern eher im 10-Minuten-Takt ausgelöst. Es dauert also länger, bis die Zieltemperatur erreicht ist, wenn sie überhaupt erreicht werden kann. Keine Ahnung warum. In der crontab von root steht dasboostiftoocold
-Skript so drin, dass es alle 6 Minuten gestartet werden müsste.
Das Problem war das ein von /bin/therm-boost-fg angelegtes lockfile für 9 minuten existierte obwohl es eigentlich nur 5minuten 30 sekunden leben sollte. Das Problem müsste behoben sein ich habe es aber noch nicht getestet.
Der Bot fliegt noch regelmäßig aus dem MUC raus. Möglicherweise bekommt der Bot vom MUC eine Nachricht, die er nicht parsen kann (hab da eine Fehlermeldung in der screen-Session gesehen, die auf ein fehlendes Anführungszeichen hindeutet) und will dies als Fehlermeldung dem MUC berichten, welcher darauf den Bot rausschmeißt.
Ich denke der fehler müsste erstmal behoben sein ich habe in /lib/python3.4/site-packages/sleekxmpp/stanza/rootstanza.py die Zeilen 75-79 auskommentiert so das der bot keine Fehlermeldung mehr sendet wenn er eine Nachricht für ungültig hält. Eigentlich müsste es aber eine schönere Lösung für das Problem geben.
- Bessere Fehlerbehandlung: Beispielsweise wird die Abschaltautomatik ohne irgendeine Art der Beschwerde ausgehebelt, wenn der Türstatus-Service nicht läuft. Wir müssten uns mal überlegen, wie wir solche Fehler sichtbar machen können.