Wer notgedrungen mit Strom heizen muss, etwa in einer Hobbywerkstatt oder in einem Badezimmer in einem Altbau, der wird bei steigenden Energiekosten zunehmend auf die Effizienz achten. Dazu gehört auch, die Heizung nicht umsonst laufen zu lassen. Eine Selbstbaulösung mit dem Raspberry Pi als Steuerzentrale kann Heizgeräte wie beispielsweise Infrarotheizungen, einen Heizlüfter oder Dunkelstrahler in einem oder in mehreren Räumen steuern.
Der Raspberry Pi wird dazu die Heizungen am 230-V-Netz nicht direkt schalten. Das ist auch nicht notwendig: Einfacher gelingt es mit geeigneten Funksteckdosen und einem Funkmodul im 433-MHz-Band, das für wenige Euro erhältlich ist. Funksteckdosen für dieses Band und ein Temperatursensor sowie die diversen Einzelteile sind ebenfalls nicht teuer. Die größte Anschaffung ist die Heizung selbst, wobei bei diesem Projekt in der Praxis ein Dunkelstrahler ohne eigene Schaltelektronik und eine einfache Stromsteckdose für die Wärmeerzeugung ausreichen. Eine Leistung von 600 Watt ist dabei für 150 bis 200 Euro zu haben.
Aktuell bester Preis: Raspberry Pi 4 Model B
Über das Netzwerk messen und schalten
Generell sind auch andere Heizungen geeignet, die über einen haushaltsüblichen Schuko-Stecker verfügen, wie zum Beispiel die derzeit beliebten Infrarotheizungen, die über eine größere Fläche Wärme abgeben. Bei den meisten kostengünstigen Infrarotheizungen, die gleichfalls zwischen 150 und 200 Euro kosten, fällt gleich ein Manko auf, das hier behoben wird: Die mitgelieferte Steuerungselektronik ist meist eine einfache, nicht programmierbare Funksteckdose samt Fernbedienung. Auch bei etwas teureren Modellen mit vorprogrammierbarer Steckdose oder Thermostat fällt die mindere Qualität sofort auf. Das kann der Raspberry Pi als Steuerung für hochwertigere Funksteckdosen besser.
Hinsichtlich des Aufbaus handelt es sich nicht um ein aufwendiges Elektronikprojekt, und ein Breadboard in einem kleinen Elektronik-Bastelset reicht im Wesentlichen für einen ersten Aufbau. Für eine gut verstaute Lösung in einem Gehäuse ist der Umgang mit einem Lötkolben aber von Vorteil, um auf ein Breadboard zu verzichten und die Stecker für die GPIO-Pins des Raspberry Pi an Kontakte für Temperatursensor und Funkmodul anzulöten. Der meiste Aufwand, und hier ist etwas Geduld gefragt, ist die Anbindung der zusätzlich erworbenen Funksteckdosen an den Raspberry Pi so- wie die Installation des Frameworks Pilight. Um das Projekt im Rahmen zu halten, erfolgt hier die Temperaturmessung in der Shell manuell. Zudem wird die Heizung über die Weboberfläche geschaltet.
Teile- und Kostenübersicht
Raspberry Pi 2, 3 oder 4 | 60 bis 160 Euro |
Jumperkabel und Breadboard | ab 10 Euro |
Funksteckdosen Brennenstuhl RCS 1000 N | 20 Euro |
Temperatursensor DHT22/AM2302 | 10 Euro |
Sendemodul FS1000A | 9 Euro |
Beliebige Heizung, 230 V mit Schuko-Stecker | 150 bis 200 Euro |
Teilprojekt 1: Temperatur messen
Der Raspberry Pi erfüllt hier zwei Rollen, einmal die als Temperatursensor und die als Funkschalter. Den Anfang machen der einfache Anschluss des Sensors und die Installation der Python-Software zum Auslesen der Temperatur. Nach dem praktischen Test mehrerer Sensoren für diesen Zweck stellte sich die Arbeit mit dem Sensor DHT22 beziehungsweise AM2302 (circa zehn Euro) als sehr einfach heraus. Denn es gibt für den Raspberry Pi leicht einzurichtende Python-Module von Adafruit mit guter Dokumentation.
Temperatur auslesen: Mit der Bibliothek und den Beispiel-Scripts von Adafruit ist ein DHT22-Sensor einfach anzusteuern.
IDG
Nicht erfolgreich war die Anbindung eines DS18B20, ebenfalls ein gut verfügbarer und oftmals angebotener Sensor für Selbstbauprojekte. Doch auf Dauer erwiesen sich die DS18B20 als unzuverlässig und die Ansteuerung mittels Wiring Pi ist nicht mehr zeitgemäß, zumal dieses Rahmenwerk nicht mehr weiterentwickelt wird.
Der verwendete DHT22/AM2302 hat drei Beinchen für die Anschlüsse an die GPIO-Pinleiste eines Raspberry Pi. Vorsicht ist geboten, die Spannungsversorgung nicht an den falschen Kontakt anzuschließen, denn das würde die Elektronik zerstören. Von vorn oder von oben betrachtet, ist der ganz linke Pin des Sensors für die 3,3-Volt-Speisespannung, die der Raspberry Pi liefert, zuständig. Der mittlere Pin dient zum Auslesen der Daten, der ganz rechte Pin ist die Erdung. Hier in diesem Aufbau ist der linke Pin an Pin 1 des Raspberry Pi (3,3 Volt) zu verbinden (erster Pin ganz links, zweite Reihe unten), die Erdung an Pin 6 (obere Reihe, dritter Pin von links) und der mittlere Anschluss des Sensors an GPIO 4 (Pin Nummer vier von links in der unteren Reihe).
An dieser Stelle ist ein Hinweis auf die Webseite https://pinout.xyz hilfreich, die den Pin-Header des Raspberry Pi visuell vor Augen führt und die Belegung zeigt. Steht die Verkabelung, so geht es an die Einrichtung der Python-Module. Das Kommando
sudo apt install python-setuptools git python-dev
installiert die benötigten Pakete dazu. Im Anschluss daran holt
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
den Python-Programmcode aus dem stets empfehlenswerten Github-Repository des Systemhauses Adafruit. Mit
cd Adafruit_Python_DHT/
sudo python setup.py install
ist das Python-Programm zum Auslesen der Temperatur eingerichtet. Ein Test zum Auslesen sieht im Terminal des Raspberry Pi dann wie folgt aus:
sudo examples/AdafruitDHT.py 2302 4
Die Temperatur wird hinter „Temp=“ ausgegeben, die Luftfeuchte nach „Humidity=“.
Teilprojekt 2: Funksteckdosen konfigurieren
Mehr Aufwand verlangt die Verbindung einer oder auch mehrerer Funksteckdosen mit dem Raspberry Pi und dem Funkmodul. Funksteckdosen sind im Doppel- oder Dreierpack samt Fernbedienung in fast jedem Baumarkt erhältlich, häufig schon für wenige Euro. Ein günstiges Sendermodul und ein wenig Software machen den Raspberry zur Schaltzentrale für die Steckdosen. Dafür wird ein Funkmodul mit 433 MHz benötigt.
Ein Set mit Sender und Empfänger kostet bei Ebay oder Amazon zwischen 7 Euro und 12 Euro und ist über eine Suche nach „RF Link Arduino“ schnell zu finden. Die Sets werden in erster Linie für den Arduino-Microcontroller verkauft, funktionieren jedoch mit einer entsprechenden Softwarebibliothek auch am Raspberry. Funksteckdosen gibt es mittlerweile in großer Vielfalt. Beinahe alle Arten lassen sich ebenfalls mit dem Raspberry steuern. Am zuverlässigsten funktionieren Steckdosen, die sich über eine Reihe von Dip-Schaltern einstellen lassen, die hinter einer kleinen Klappe mit einer kleinen Kreuzschlitzschraube verborgen sind.
Steckdosen ohne Dip-Schalter, insbesondere „selbstlernende“ Steckdosen erfordern je nach Hersteller mühsame Experimente auf dem Raspberry Pi. Ein zusätzlicher Nachteil der schalterlosen Geräte ohne Dip-Leiste: Nach einem Stromausfall oder auch nur einem Wechsel der Steckdose vergessen sie ihre Codierung und müssen dann neu eingelernt werden.
Eine Funksteckdose (hier von Brennenstuhl) vorbereiten: Auf der Rückseite finden sich zehn Dip-Schalter in zwei Gruppen für die Einstellung von Systemcode und Unitcode.
IDG
Wir raten aus diesem Grund zu Steckdosenmodellen, die sich mit zehn Dip-Schaltern programmieren lassen. Je nach Hersteller sind die Dip-Schalter mit 1 bis 10 oder mit 1 bis 5 und A bis D beschriftet – beide Versionen sind gleichermaßen nutzbar. Unsere Wahl fiel auf das Funkschalt-Set RCS 1000 N von Brennenstuhl, das bei Onlineversandhäusern mit zwei Dosen rund 20 Euro kostet.
Zunächst sollte man Fernbedienung und Steckdosen aufeinander abstimmen. Dazu wird an den fünf Dip-Schaltern der Fernbedienung und den linken fünf nummerierten Dips der Steckdosen der sogenannte „Systemcode“ eingestellt, über den alle Dosen erreichbar sind. Die darauffolgenden fünf Dip-Schalter mit Buchstaben von A bis E sind der Unitcode, um mehrere Geräte in einem System schalten zu können. Wir wählen hier den Systemcode 11100 und für die eine Steckdose in diesem Projekt den Unitcode A, also 10000. Nachdem auf den Dip-Schaltern der Fernbedienung der gleiche Systemcode eingestellt ist, sollte die Taste „A“ die Dose schalten.
Für die weiteren Schritte im „Teilprojekt 4: Pilight einrichten“ benötigen wir den dezimalen Wert der gewählten Schalterstellung 11100 für den Systemcode, die „An“, „An“, „An“ entspricht. Das ergibt einen Binärwert von 111 und damit dezimal die Zahl 7. Der Unitcode „An“ (10000) entspricht einfach 1. Beide Werte sollte man sich für später notieren – sie werden noch wichtig.
Teilprojekt 3: Den Sender verkabeln
Dann geht es an die Einrichtung des Raspberry Pi als Schaltzentrale. Zunächst muss ein Sender mit dem Raspberry verbunden werden. Am einfachsten gelingt dies über ein kleines Breadboard (Steckbrett) und einige Steckkabel. In den meisten Elektronik-Bastelsets sind lediglich beidseitig männliche Steckkabel dabei. Je nachdem, ob ein Steckbrett verwendet wird, sind Jumperkabel vom Typ weiblich/männlich oder weiblich/ weiblich erforderlich.
Übersicht der Schaltung aus Fritzing: So werden FS1000A-Transmitter (links im Breadboard) und der DHT22-Sensor (rechts) schematisch mit der Pin-Headerleiste des Raspberry Pi verbunden.
IDG
Bei diesem Projekt kommt als Sender das BQLZR-433-Mhz-Modul vom Typ FS1000A zum Einsatz, das es ab neun Euro von etlichen Händlern gibt. Den Sender steckt man mit seinen drei Pins am besten quer auf ein Breadboard. Die Reihenfolge der Pins folgt der Beschriftung in der Draufsicht: Datenpin, Spannungsversorgung (5,5 Volt) sowie Erdung. Wichtig ist dabei der Anschluss des Datenpins an die GPIO-Pinleiste des Raspberry Pi: Die Datenleitung der Sender erwarten fast alle Scripts zur Steckdosensteuerung am GPIO-Pin 17 des Raspberry (untere Reihe, sechster Pin von links).
Die Antenne wird bei einigen Sendern über einen Pin geführt, bei anderen ist ein Anschluss auf dem kleinen Board des Senders. Eine optimale Länge für 433 MHz wären 17,2 Zentimeter – in der Praxis tut es allerdings ein beliebiges Drahtstück mit einer Länge von circa 17 Zentimetern. Darauf darf man nicht verzichten, ansonsten will das Modul nicht weit funken.
Pin-Header eines Raspberry Pi (Modell 2, 3 und 4): Für eine Übersicht, welches Jumperkabel an welchen Pin gehört, ist die Webseite https://pinout.xyz zu empfehlen.
IDG
Teilprojekt 4: Pilight einrichten
Nun zum anspruchsvollen Teil des Projektes – die Ansteuerung der Funksteckdose über den Sender. Dazu dient hier die Software Pilight auf dem Raspberry Pi. Die Installation im aktuellen Raspberry-Pi-OS 32 Bit auf der Basis von Debian 11 (Bullseye) gelingt wie folgt:
- In die Datei „/etc/apt/sources.list“ kommt folgende neue Zeile:
deb http://apt.pilight.org/stable main
- Das Kommando
sudo wget -O - http://apt.pilight.org/pilight.key | sudo apt-key add -
nimmt den Schlüssel zur Paketsignatur aus dieser Quelle auf.
Die Warnung, dass „apt-key“ nicht mehr empfohlen wird, können Sie aktuell noch ignorieren.
- Es sind auf dem aktuellen Raspberry-Pi- OS drei Zusatzpakete notwendig, welche diese Befehle herunterladen:
wget http://apt.pilight.org/pool/stable/main/l/libmbedx509-0/libmbedx509-0_2.6.0-1_armhf.deb
wget http://apt.pilight.org/pool/stable/main/l/libmbedtls10/libmbedtls10_2.6.0-1_armhf.deb
wget http://apt.pilight.org/pool/stable/main/l/libmbedcrypto0/libmbedcrypto0_2.6.0-1_armhf.deb
Anschließend installiert sudo dpkg -i *.deb diese Pakete im aktuellen Verzeichnis.
- Jetzt installiert der Befehl
sudo apt install pilight
die Software.
Weboberfläche von Pilight: Hier ist eine einzige Funksteckdose definiert, die jetzt auf dem Raspberry Pi über dessen Adresse im LAN und den mitgelieferten Webserver schaltbar ist.
IDG
Um Pilight mit dem Sender und der Funksteckdose bekannt zu machen, ist die Bearbeitung einer längeren Konfigurationsdatei erforderlich, welche im JSON-Format vorliegt und mittels
sudo nano /etc/pilight/config.json
bearbeitet wird. Hier sind viele Anpassungen notwendig und eine Beispielkonfiguration ist weiter unten als Listing abgedruckt („Listing: config.json von Pilight“).
Abschnitt „devices“: In diesem Bereich werden die Funksteckdose A mit Protokoll, ID zur Ansteuerung mit Systemcode und Unitcode aus dem Teilschritt 2 definiert sowie der Standardschaltzustand.
Abschnitt „gui“: Dieser Teil dient zur Definition der Weboberfläche von Pilight, um einen Schalter für die zuvor unter „devices“ angegebene Funksteckdose A zu definieren.
Abschnitt „settings“: Hier wird der Webserver-Port eingetragen wie auch hinter „gpio-platform:“ das Raspberry-Pi-Modell, also „raspberrypi4“, „raspberrypi3“ oder „raspberrypi2“.
Abschnitt „hardware“: An dieser Stelle erfolgt eine kurze Definition der Pilight-Aktion zum Schalten der Funksteckdose.
Abschnitt: „registry“: In dem Unterpunkt „hardware“ ist noch die Angabe des Schaltimpulses über einige Parameter vonnöten. Die abgebildete Konfiguration funktioniert mit der Funksteckdose von Brennenstuhl, wobei Dosen anderer Hersteller andere Parameter verlangen können. Die gesamten Einstellungen in der Datei „config.json“ von Pilight werden unter https://manual.pilight.org/configuration/settings.html erklärt (englischsprachig).
Das folgende Kommando
sudo systemctl start pilight
startet nun den Pilight-Dienst und den dazugehörigen Webserver. Sollten sich in der Konfiguration Syntaxfehler eingeschlichen haben, wird der Dienst dies melden und nicht starten. Beim Aufrufen der IP-Adresse oder des Hostnamens des Raspberry Pi im LAN über http//[Adresse] zeigt sich jetzt die Weboberfläche von Pilight mit dem definierten Schalter der Funksteckdose. Die Seite ist auch für kleine Displays von Smartphones geeignet.
Listing: config.json von Pilight
{
"devices": {
"switch1": {
"protocol": [ "elro_800_switch" ],
"id": [{
"systemcode": 7,
"unitcode": 1
}],
"state": "off"
}
},
"rules": {},
"gui": {
"switch1": {
"name": "Funksteckdose A",
"group": [ "Funksteckdosen" ],
"media": [ "all" ]
}
},
"settings": {
"log-level": 6,
"pid-file": "/var/run/pilight.pid",
"log-file": "/var/log/pilight.log",
"standalone": 1,
"webserver-enable": 1,
"webserver-root": "/usr/local/share/pilight/webgui",
"webserver-http-port": 80,
"webserver-https-port": 5002,
"webserver-cache": 1,
"whitelist": "",
"gpio-platform": "raspberrypi3"
},
"hardware": {
"433gpio": {
"sender": 0,
"receiver": 1
}
},
"registry": {
"webserver": {
"ssl": {
"certificate": {
"location": "/etc/pilight/pilight.pem"
}
}
},
"pilight": {
"version": {
"current": "8.1.5"
}
},
"hardware": {
"RF433": {
"mingaplen": 4420,
"maxgaplen": 72900,
"minrawlen": 26,
"maxrawlen": 400
}
}
}
}