Kuschelig2.0: Unterschied zwischen den Versionen

Aus Wiki CCC Göttingen
Zur Navigation springen Zur Suche springen
 
(37 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Kuschelig 2.0 soll die alte Heizungssteuerung ersetzen und auf einem Raspberry Pi laufen.
Kuschelig 2.0 ist jetzt im Testbetrieb und ersetzt damit die [[Kuschelig|alte Heizungssteuerung]]. Sie läuft auf einem Raspberry Pi.
Zur Ansteuerung der Thermostate und zum Auslesen der Temperatursensoren werden Linux Kernelmodule für  
Zur Ansteuerung der Thermostate und zum Auslesen der Temperatursensoren werden Linux Kernelmodule für  
Onewire verwendet. Die Steuerung soll weiterhin mit einem Jabberbot möglich sein.
Onewire verwendet. Die Steuerung ist weiterhin mit einem Jabber-Bot möglich.
Dieser soll aber direkt auf dem Raspberry Pi laufen und ist mit SleekXMPP in Python implementiert.
Dieser läuft direkt auf dem Raspberry Pi und ist mit SleekXMPP in Python implementiert.


== Thermostat ==
== Heizungssteuerung über Chat-Bot ==


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.
Die Heizung kann über den Jabber bot mit der Jabber ID '''nokbot@cccgoe.de''' oder alternativ aus dem MUC ('''heizung''') gesteuert werden.  
 
Die wichtigsten Kommandos beim Heizungs-Bot sind folgende:
 
* help – gibt Informationen zu einem Kommando
* status – gibt die aktuelle Raumtemperatur an und Einträge im Heizplan, falls vorhanden
* kuschelig – Einträge zum Heizplan hinzufügen
* kuschdel – Einträge aus dem Heizplan entfernen
 
Wenn man es einfach nur warm haben will, so schnell es nur geht, kann <code>kuschelig</code> ohne Parameter aufgerufen werden. Das ist dann äquivalent zu <code>kuschelig on</code>. Dementsprechend gibt es auch <code>kuschelig off</code>. Statt on/off lässt sich auch eine Temperatur zwischen 17-24 Grad Celsius angeben. Diese Befehle ohne eine Zeitangabe bedeuten immer "so schnell wie möglich" und überschreiben gegebenenfalls eine schon andere vorhandene Vorgabe:
 
Wenn man sich entschließt, zu einer bestimmten Uhrzeit heute oder morgen im Noklab zu erscheinen, kann das kuschelig-Kommando noch um diese Zeit ergänzt werden. Wird zum Beispiel folgender Befehl eingegeben
 
!kuschelig 21 19:00
 
dann versucht das Heizsystem die gewünschte Temperatur von 21°C bis 19 Uhr zu erreichen. Dazu muss dieses Ziel allerdings früh genug bekannt sein. Andere Tage lassen sich auch angeben:
 
!kuschelig 21 19:00 tomorrow
!kuschelig 20 20:00 2015-03-03
 
Über das status-Kommando lässt sich die aktuelle Raumtemperatur und eine Liste der Einträge, wann welche Temperatur erreicht werden soll, abfragen:
 
!status
 
Ohne weitere Optionen werden aber nur maximal die ersten drei Einträge angezeigt. Mit
 
!status all


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.
bekommt man dann alle Einträge des Heizplans zu sehen.


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.
Zum Löschen der Einträge kann das Kommando <code>kuschdel</code> benutzt werden. Es erwartet einen oder mehrere Indizes für die zu löschenden Einträge als einen Parameter. Beispiel:


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.
!kuschdel 1
!kuschdel 2,3


== Heizungssteuerung ==
== Statusanzeige per Ampel ==


Die Heizung kann über den Jabber bot mit der Jabber ID '''bot@paws.de''' oder alternativ aus dem MUC gesteuert werden.
[[File:Ampel2.jpg|thumb|50px]]
Die für die Heizungssteuerung relevanten befehle sind '''!kuschelig''' und '''!status'''.
Im Space befindet sich im Regal die "Ampel" mit aktuell fünf Lampen. Die oberen zwei davon zeigen den Status der Heizung an. Wenn alle Lampen aus sind, soll nur die Basis-Temperatur (17°C) gehalten werden. Wenn eine der beiden Lampen an ist, ist die Heizung aktiv. Die obere, grüne Lampe leuchtet, wenn die Raumtemperatur größer oder gleich der Soll-Temperatur ist. Die gelbe Lampe darunter leuchtet, wenn die Soll-Temperatur noch nicht erreucht wurde und noch weiter geheizt werden muss.


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.
{| class="wikitable"
! Segment !! leuchtet, falls…
|-
|style="background-color: #44FF44;"| 1. von oben || target > 17 && target <= now
|-
|style="background-color: #FFDD44;"| 2. von oben || target > 17 && target > now
|-
|}


Status gibt die aktuelle Temperatur im Space und die eingestellte Zieltemperatur zurück.
== Hardware ==
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.
Folgende Hardware ist im Einsatz:


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.
=== Thermostat ===


== Elektronik ==
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.


Die Heizung wird von einem Raspberry-Pi über Onewire gesteuert dabei werden die Sensoren und das Thermostat verwendet die schon
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.
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 ==
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.


Türstatus-, Sensorabfrage und -Logging sowie das Auslösen der Boost-Funktion des Heizungsventils geschieht über die Skripte <code>/bin/boostiftoocold</code>, <code>/bin/therm*</code> 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.
Die 17°, die wir da beim Thermostat eingestellt haben, ist also die Mindesttemperatur, die wir nicht unterschreiten wollen, da es sonst mit der Luftfeuchtigkeit und Schimmel Probleme geben könnte.


Auf pyro läuft auch der XMPP-Bot unter dem User <code>nokbot</code>. Der Bot wird aktuell automatisch nach dem Booten über <code>cron</code> gestartet. Dessen Python-Code liegt im Heimverzeichnis von <code>nokbot</code>.
=== Elektronik ===


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.
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.


== Sensoren ==
=== Sensoren ===


Die One-Wire Sensoren mit ihren IDs, die überall im Space verteilt sind:
Die One-Wire Sensoren mit ihren IDs, die überall im Space verteilt sind:
Zeile 49: Zeile 82:
!  ID              !!  Ort   
!  ID              !!  Ort   
|-
|-
|  10-00080181e1cf ||  Küche: Heizung
|  10-00080181e1cf ||  Küche: Heizung Vorlauf
|-
|-
|  10-000801dcbf7e ||  Küche: Heizung
|  10-000801dcbf7e ||  Küche: Heizung Rücklauf
|-
|-
|  10-000801dd1380 ||  Heizung Rücklauf
|  10-000801dd1380 ||  Heizung Rücklauf
Zeile 59: Zeile 92:
|  10-0008020165f9 ||  Küche: an der Decke
|  10-0008020165f9 ||  Küche: an der Decke
|-
|-
|  22-0000000ed18a ||  beim Noklab-Gemälde
|style="background-color:#FFccbb;"|  22-0000000ed18a ||style="background-color:#FFccbb;"|  beim Noklab-Gemälde (unzuverlässig)
|-
|-
|  28-000001c75bf1 ||  in der Mitte oben am großen Fenster
|  28-000001c75bf1 ||  in der Mitte oben am großen Fenster
|-
|-
|  28-000001c77c5e ||  auf dem Regal liegend
|style="background-color:#FFbbFF;"|  28-000001c77c5e ||style="background-color:#FFbbFF;"im Spacemaster-Regal neben der Pumpe
|-
|-
|  28-00000558acfa ||  an der Decke
|style="background-color:#FFbbFF;"|  28-00000558acfa ||style="background-color:#FFbbFF;"|  an der Decke
|}
|}
Die rosa hervorgehobenen Sensoren werden für die Bestimmung der Raumtemperatur aktuell verwendet.
== Funktionsweise der Software ==
Türstatus-, Sensorabfrage und -Logging sowie das Auslösen der Boost-Funktion des Heizungsventils geschieht über die Skripte auf '''pyro''', die in <code>/root/pyro/heizung/</code> liegen, von <code>/bin</code> aus verlinkt sind und über die crontab vom Benutzer root regelmäßig gestartet werden. Die aktuelle Raumtemperatur wird im Moment als Minimum zweier Sensoren in Raum01 ermittelt, wobei „Ausreißer“ (wenn ein Sensor z.B. mal gerade 85° sagt) rausgefiltert werden. Diese Skripte stehen unter Versionskontrolle: git.cccgoe.de.
Ob die Boost-Funktion der Heizung ausgelöst werden soll oder nicht, entscheidet das regelmäßig laufende <code>boostiftoocold</code>-Skript. Dieses vergleicht eine Ist-Temperatur mit einer on-the-fly bestimmten Soll-Temperatur, die das <code>schedule.py</code>-Skript berechnet; denn das verwaltet all die Vorgaben und kann bestimmen welche Temperatur wann mindestens erreicht sein muss, damit die Ziele erfüllt werden können.
Auf '''pyro''' läuft auch der XMPP-Bot unter dem User <code>nokbot</code>. Der Bot wird aktuell automatisch nach dem Booten über <code>cron</code> gestartet. Dessen Python-Code liegt im Heimverzeichnis von <code>nokbot</code> und steht unter Versionskontrolle (BitBucket-Projekt von defnull).
Der Chat-Bot selbst macht gar nicht viel. Er liest die aktuelle Temperatur von <code>/var/therm/now</code> und ruft das <code>schedule.py</code>-Skript auf, um die Temperaturen und Zeiten festzulegen und anzuzeigen.
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 neu starten soll. Dabei updatet er sich auch.
=== Abschaltautomatiken ===
Wir wollen nicht umsonst heizen. Deswegen gibt es zwei Automatiken, die die Heizung abschalten können, ohne dabei zukünftige Heizpläne zu beeinflussen:
* Fall „Keiner ist gekommen“: Wenn die Zeit eines bestimmten Temperatur-Ziels erreicht wurde, die Wohnungstür aber noch geschlossen ist, wird automatisch ein Abschalt-Event für 2 Stunden später eingefügt (quasi <code>!kuschelig off 2h</code>). Kommt man also etwas später und möchte es es warm halten, muss man manuell dieses Abschalt-Event entfernen, damit die Heizung nicht einfach ausgeht. Ja, das ist suboptimal und könnte noch verbessert werden.
* Fall „Keiner ist mehr da“: Wenn das Heizsystem mitbekommt, dass die Tür von einem offenen in den geschlossenen Zustand wechselt, dann wird automatisch quasi ein <code>!kuschelig off</code> ausgelöst.
Damit das mit der Türstatusabfrage klappt, muss auf '''brickme''' der entsprechende Türstatus-Abfrage Dienst laufen.


== TODO ==
== TODO ==


* <s>Pyro scheint neuerdings nicht lange "durchzuhalten" (ist dann nicht mehr erreichbar)</s>
* Das Anbinden der Heizung in der Küche, könnte das Heizen beschleunigen. Bisher schaffen wir nur etwa 0,7°C pro Stunde auf Bauchnabelhöhe. An der Decke wird's natürlich schneller warm.
* <s>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 das <code>boostiftoocold</code>-Skript so drin, dass es alle 6 Minuten gestartet werden müsste.</s>
* Sdx hat freundlicherweise einen Sensor für das Fenster gebastelt, mit dem wie messen können, ob gelüftet wird oder nicht. Es ist noch nicht ganz klar, wie der an pyro angebunden werden kann und ob der Kernel diese Art von 1wire-Gerät schon unterstützt. Die Idee ist jedenfalls, solange nicht zu boosten, bis das Fenster wieder zu ist, damit möglichst wenig Wärme direkt nach draußen abhaut.
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
* Der Bot fliegt regelmäßig aus dem Chat raus, ist dann aber noch direkt erreichbar. Bisher hatten unsere Gegenmaßnahmen keinen Erfolg. Das kann doch nicht so schwer sein!
sollte.
* schedule.py könnte noch angepasst werden: Das Zuspät-Kommen wird derzeit mit einem automatisch generierten Abschalt-Eintrag für 2 Stunden später bestraft. Man muss also dran denken, das aus dem Heizplan zu löschen, wenn man später kommt. Besser wäre natürlich, dieses Event automatisch zu löschen, wenn die Tür aufgeht. Dazu bräuchte man wahrscheinlich extra Flags je Heizplan-Eintrag. Z.B. ein "Lösch mich automatisch, wenn die Tür aufgeht"-Flag.
Das Problem müsste behoben sein ich habe es aber noch nicht getestet.
* <s>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.</s>
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.

Aktuelle Version vom 2. April 2015, 15:33 Uhr

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 Jabber-Bot möglich. Dieser läuft direkt auf dem Raspberry Pi und ist mit SleekXMPP in Python implementiert.

Heizungssteuerung über Chat-Bot[Bearbeiten]

Die Heizung kann über den Jabber bot mit der Jabber ID nokbot@cccgoe.de oder alternativ aus dem MUC (heizung) gesteuert werden.

Die wichtigsten Kommandos beim Heizungs-Bot sind folgende:

  • help – gibt Informationen zu einem Kommando
  • status – gibt die aktuelle Raumtemperatur an und Einträge im Heizplan, falls vorhanden
  • kuschelig – Einträge zum Heizplan hinzufügen
  • kuschdel – Einträge aus dem Heizplan entfernen

Wenn man es einfach nur warm haben will, so schnell es nur geht, kann kuschelig ohne Parameter aufgerufen werden. Das ist dann äquivalent zu kuschelig on. Dementsprechend gibt es auch kuschelig off. Statt on/off lässt sich auch eine Temperatur zwischen 17-24 Grad Celsius angeben. Diese Befehle ohne eine Zeitangabe bedeuten immer "so schnell wie möglich" und überschreiben gegebenenfalls eine schon andere vorhandene Vorgabe:

Wenn man sich entschließt, zu einer bestimmten Uhrzeit heute oder morgen im Noklab zu erscheinen, kann das kuschelig-Kommando noch um diese Zeit ergänzt werden. Wird zum Beispiel folgender Befehl eingegeben

!kuschelig 21 19:00

dann versucht das Heizsystem die gewünschte Temperatur von 21°C bis 19 Uhr zu erreichen. Dazu muss dieses Ziel allerdings früh genug bekannt sein. Andere Tage lassen sich auch angeben:

!kuschelig 21 19:00 tomorrow
!kuschelig 20 20:00 2015-03-03

Über das status-Kommando lässt sich die aktuelle Raumtemperatur und eine Liste der Einträge, wann welche Temperatur erreicht werden soll, abfragen:

!status

Ohne weitere Optionen werden aber nur maximal die ersten drei Einträge angezeigt. Mit

!status all

bekommt man dann alle Einträge des Heizplans zu sehen.

Zum Löschen der Einträge kann das Kommando kuschdel benutzt werden. Es erwartet einen oder mehrere Indizes für die zu löschenden Einträge als einen Parameter. Beispiel:

!kuschdel 1
!kuschdel 2,3

Statusanzeige per Ampel[Bearbeiten]

Im Space befindet sich im Regal die "Ampel" mit aktuell fünf Lampen. Die oberen zwei davon zeigen den Status der Heizung an. Wenn alle Lampen aus sind, soll nur die Basis-Temperatur (17°C) gehalten werden. Wenn eine der beiden Lampen an ist, ist die Heizung aktiv. Die obere, grüne Lampe leuchtet, wenn die Raumtemperatur größer oder gleich der Soll-Temperatur ist. Die gelbe Lampe darunter leuchtet, wenn die Soll-Temperatur noch nicht erreucht wurde und noch weiter geheizt werden muss.

Segment leuchtet, falls…
1. von oben target > 17 && target <= now
2. von oben target > 17 && target > now

Hardware[Bearbeiten]

Folgende Hardware ist im Einsatz:

Thermostat[Bearbeiten]

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 Mindesttemperatur, die wir nicht unterschreiten wollen, da es sonst mit der Luftfeuchtigkeit und Schimmel Probleme geben könnte.

Elektronik[Bearbeiten]

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.

Sensoren[Bearbeiten]

Die One-Wire Sensoren mit ihren IDs, die überall im Space verteilt sind:

ID Ort
10-00080181e1cf Küche: Heizung Vorlauf
10-000801dcbf7e Küche: Heizung Rücklauf
10-000801dd1380 Heizung Rücklauf
10-00080200db39 Heizung Vorlauf
10-0008020165f9 Küche: an der Decke
22-0000000ed18a beim Noklab-Gemälde (unzuverlässig)
28-000001c75bf1 in der Mitte oben am großen Fenster
28-000001c77c5e im Spacemaster-Regal neben der Pumpe
28-00000558acfa an der Decke

Die rosa hervorgehobenen Sensoren werden für die Bestimmung der Raumtemperatur aktuell verwendet.

Funktionsweise der Software[Bearbeiten]

Türstatus-, Sensorabfrage und -Logging sowie das Auslösen der Boost-Funktion des Heizungsventils geschieht über die Skripte auf pyro, die in /root/pyro/heizung/ liegen, von /bin aus verlinkt sind und über die crontab vom Benutzer root regelmäßig gestartet werden. Die aktuelle Raumtemperatur wird im Moment als Minimum zweier Sensoren in Raum01 ermittelt, wobei „Ausreißer“ (wenn ein Sensor z.B. mal gerade 85° sagt) rausgefiltert werden. Diese Skripte stehen unter Versionskontrolle: git.cccgoe.de.

Ob die Boost-Funktion der Heizung ausgelöst werden soll oder nicht, entscheidet das regelmäßig laufende boostiftoocold-Skript. Dieses vergleicht eine Ist-Temperatur mit einer on-the-fly bestimmten Soll-Temperatur, die das schedule.py-Skript berechnet; denn das verwaltet all die Vorgaben und kann bestimmen welche Temperatur wann mindestens erreicht sein muss, damit die Ziele erfüllt werden können.

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 und steht unter Versionskontrolle (BitBucket-Projekt von defnull).

Der Chat-Bot selbst macht gar nicht viel. Er liest die aktuelle Temperatur von /var/therm/now und ruft das schedule.py-Skript auf, um die Temperaturen und Zeiten festzulegen und anzuzeigen.

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 neu starten soll. Dabei updatet er sich auch.

Abschaltautomatiken[Bearbeiten]

Wir wollen nicht umsonst heizen. Deswegen gibt es zwei Automatiken, die die Heizung abschalten können, ohne dabei zukünftige Heizpläne zu beeinflussen:

  • Fall „Keiner ist gekommen“: Wenn die Zeit eines bestimmten Temperatur-Ziels erreicht wurde, die Wohnungstür aber noch geschlossen ist, wird automatisch ein Abschalt-Event für 2 Stunden später eingefügt (quasi !kuschelig off 2h). Kommt man also etwas später und möchte es es warm halten, muss man manuell dieses Abschalt-Event entfernen, damit die Heizung nicht einfach ausgeht. Ja, das ist suboptimal und könnte noch verbessert werden.
  • Fall „Keiner ist mehr da“: Wenn das Heizsystem mitbekommt, dass die Tür von einem offenen in den geschlossenen Zustand wechselt, dann wird automatisch quasi ein !kuschelig off ausgelöst.

Damit das mit der Türstatusabfrage klappt, muss auf brickme der entsprechende Türstatus-Abfrage Dienst laufen.

TODO[Bearbeiten]

  • Das Anbinden der Heizung in der Küche, könnte das Heizen beschleunigen. Bisher schaffen wir nur etwa 0,7°C pro Stunde auf Bauchnabelhöhe. An der Decke wird's natürlich schneller warm.
  • Sdx hat freundlicherweise einen Sensor für das Fenster gebastelt, mit dem wie messen können, ob gelüftet wird oder nicht. Es ist noch nicht ganz klar, wie der an pyro angebunden werden kann und ob der Kernel diese Art von 1wire-Gerät schon unterstützt. Die Idee ist jedenfalls, solange nicht zu boosten, bis das Fenster wieder zu ist, damit möglichst wenig Wärme direkt nach draußen abhaut.
  • Der Bot fliegt regelmäßig aus dem Chat raus, ist dann aber noch direkt erreichbar. Bisher hatten unsere Gegenmaßnahmen keinen Erfolg. Das kann doch nicht so schwer sein!
  • schedule.py könnte noch angepasst werden: Das Zuspät-Kommen wird derzeit mit einem automatisch generierten Abschalt-Eintrag für 2 Stunden später bestraft. Man muss also dran denken, das aus dem Heizplan zu löschen, wenn man später kommt. Besser wäre natürlich, dieses Event automatisch zu löschen, wenn die Tür aufgeht. Dazu bräuchte man wahrscheinlich extra Flags je Heizplan-Eintrag. Z.B. ein "Lösch mich automatisch, wenn die Tür aufgeht"-Flag.