In diesem Blog Eintrag möchte ich mein aktuelles Projekt zur Steuerung von 433 MHz Funksteckdosen mit einem Raspberry Pi beschreiben. Der Minicomputer stellt dabei eine REST API zur Verfügung mit dem ich die Steckdosen über einen Webbrowser oder eine Home Automation Plattform von überall in der Wohnung oder auch aus der Welt steuern kann.

Warum 433 MHz Funksteckdosen?

Wie sicherlich viele andere auch besitze ich bereits eine gewisse Anzahl solcher Steckdosen mit einer Funkfernbedienung. Teilweise auch seit dem Einzug hinter Möbeln schwer erreichbar verbaut und damit nur mit größerem Aufwand zu tauschen.

Als eines der wenigen Selbstbauprojekte die ich kennen ist dieses sogar vom finanziellen Aspekt interessant. Während man ein Paket mit drei bis vier 433 MHz Steckdosen für um die 20,00 Euro bekommt, zahlt man für eine WLAN Steckdose immer noch schnell das Doppelte. Ab einer gewissen Anzahl von zu steuernden Steckdosen lohnt sich das ganze also trotz Zusatzkosten für den Raspberry Pi und die investierte Zeit.

Einen Nachteil haben die 433 MHz Steckdosen jedoch, nämlich die fehlende Rückmeldung ob der Schaltvorgang erfolgreich war. Für die meisten Schaltvorgänge (u.a. Lampen) ist das aber in meinen Augen vernachlässigbar.

Verteilte Hausautomatisierung mit Funksteckdosen

Es gibt diverse Tutorials (siehe Google Suche) wie man mit einem 433 MHz Modul Steckdosen per Raspberry PI ansteuert. Die besondere Herausforderung bei der Hausautomatisierung ist, dass die 433 MHz Sender nur eine relativ begrenzte Reichweite haben. Noch mehr wenn, wie in eigentlich jeder Wohnung, Wände im Weg sind.
Daher habe ich eine Möglichkeit gesucht die Steckdosen nicht nur über einen Raspberry P, sondern im kompletten Heimnetzwerk über eine REST API, zu steuern. Dadurch kann ich in Kombination mit zum Beispiel einer Home Automation Plattform ein verteiltes System aufbauen und Steckdosen in der ganzen Wohnung zentral steuern.

Ich konnte bei meiner Recherche keine fertige Lösung für eine REST API finden, um die Steckdosen einfach über einen Webbrowser oder eine Home Automation Plattform zu steuern. Daher habe ich selbst einen solchen REST API Server für das Projekt in Node.js geschrieben. Der Quellcode für die API ist übrigens auf GitHub zu finden.

Auswahl und Aufbau der Hardware

Verwendete Hardware

Sofern ihr noch keinen Raspberry PI und entsprechendes Zubehör zum Aufbau von Schaltungen besitzt und evt. mehr ausprobieren möchtet würde ich euch ein Raspberry Pi Starter-Set * empfehlen. Dort sind alle Teile enthalten mit den man die ersten Schritte machen kann.

Zum Aufbau dieser Schaltung reichen im Zweifel aber auch nur ein Raspberry Pi mit Netzteil, das Sendemodul und ein paar Jumperkabel (Female-Female). Wer mag kann das ganze dann am Ende noch in einem Gehäuse verstecken.

Aktuell ist der Raspberry PI 3 das am besten erhältliche und vom Preis-/Leistungsverhältnis sinnvollste Modell. Grundsätzlich funktioniert die Schaltung und Software aber mit jedem Modell. Ich habe zum testen selbst ein „nur“ ein Raspberry Pi Model B verwendet.

Die benötigte Hardware habe ich in der folgenden Tabelle aufgelistet:

Bezeichnung Preis
Raspberry Pi 3 * ca. 39,00 Euro
Netzteil für Raspberry Pi 3 * ca. 10,00 Euro
microSD Karte, 16 GB * ca. 10,00 Euro
Gehäuse für Raspberry Pi 3 (Optional) * ca. 8,00 Euro
Jumperkabel * ca. 7,00 Euro
433MHz Sende- und Empfangsmodul, 3er Set * ca. 8,00 Euro
Funksteckdosen, 3er Set * ca. 18,00 Euro

Funksteckdosen mit einstellbaren Codes

Bei den Funksteckdosen ist es wichtig solche mit per DIP Schaltern einstellbaren Codes zu verwenden. Es gibt auch 433MHz Funksteckdosen mit selbstlernenden Codes. Diese Codes müssen dann jedoch erst ausgelesen werden und bei einem Stromausfall in der Regel auch wieder neu angelernt werden.
RCS 1000 N von Brennstuhl mit DIP Schaltern

Ich habe für diesen Artikel Steckdosen aus dem RCS 1000 N Set von Brennstuhl * verwendet, besitze jedoch auch eine No Name Serie aus dem Baumarkt die sich genauso schalten lässt.

433 MHz Sendemodul

433 MHz Sendemodul FS1000A

Um unsere Funksteckdosen schalten zu können brauchen wir ein 433 MHz Sendemodul. Diese findet man für relativ kleines Geld entweder einzeln oder auch als Pack mit mehren Modulen. Meistens wird der Sender auch in Kombination mit einem Empfangsmodul verkauft. Dann benötigen wir nur das quadratische Sendemodul.

Das Sendemodul verfügt über 3 Pins:

  • DATA – Daten
  • VCC – Spannungsversorung
  • GND – Masseanschluss

Außerdem gibt es noch einen Lötpunkt an den man eine Antenne anbringen kann um die Sendeleistung zu verbessern.

Aufbau der SchaltungAufbau der Schaltung mit 433 MHz Sendemodul und Raspberry Pi 3

Das 433 MHz Sender Modul kann direkt mit dem Raspberry Pi verbunden werden. Dafür könnt ihr entweder eine Steckplatine (Breadboard) verwenden oder direkt Female-Female Jumper Kabel. Mit letzterem hat man direkt einen Aufbau den man auch in einem größerem Gehäuse unterbringen kann.

Die Sendemodule vertragen in der Regel eine Betriebsspannung von 3,3 Volt bis 5 Volt, so dass wir bei der Spannungsversorgung auf beide Möglichkeiten am Pi zurückgreifen können. Im oben gezeigten Aufbau habe ich den Pin 4 (5 Volt) für die Spannungsversorgung (rot) gewählt, und GND mit dem Ground Pin vom Pi verbunden (schwarz). Den Data-Pin des Sendemodul habe ich mit dem Pin 11 ( GIPO 17, WiringPi 0) verbunden (blau).

Einrichtung der Software

Für den Betrieb der REST API müssen wir zunächst einige Voraussetzungen schaffen, falls diese noch nicht gegeben sind. Die Installation und Konfiguration des API Servers selbst ist dann aber schnell erledigt.

System

Zunächst bringen wir unser System auf den aktuellen Stand und installieren falls notwendig den benötigten Git-Core:

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install git-core

Wiring Pi installieren

Die RESTful API setzt auf dem rcswitch-pi bzw. genauer auf den Node JS Bindings node-rcswitch auf. Daher müssen wir auf dem Raspberry Pi zunächst die GIPO Interface Bibliothek Wiring Pi installieren die von node-rcswitch benötigt wird. Dies können wir mit den folgenden Befehlen erledigen:

$ git clone git://git.drogon.net/wiringPi
$ cd ~/wiringPi
$ ./build

Abschließend kann die Installation kurz mit dem folgendem Befehl getestet werden.

$ gpio -v
$ gpio readall

Node.js installieren

Node.js ist eine Plattform die in der der Chrome V8 JavaScript Engine ausgeführt wird und es erlaubt Server-Anwendungen in Javascript zu entwickeln. Die Platform verwendet npm als Paketmanager und erlaubt es so, Anwendungen einfach zu verteilen.

Node.js auf dem Raspberry Pi B+ oder älter installieren

Wir laden zunächst ein für den ARM Prozessor des Raspberry PI optimiertes Installations Paket herunter und installieren dieses dann mit dem zweitem Befehl.

$ wget http://node-arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg -i node_latest_armhf.deb

Node.js auf dem Raspberry PI 2 oder neuer installieren

Hier kann man direkt die auch auf der Node.js Homepage beschriebene Installation für Debian Systeme mit den folgenden zwei Befehlen verwenden.

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y nodejs

In beiden Fällen können wir anschließend mit folgendem Befehlt die installierte Version überprüfen:

$ node -v

RESTful API installieren

$ npm install raspi-rcswitch-api

Anschließend müsst ihr in der Datei noch unter dem Punkt transmitter_pin den GIPO Pin eintragen, an dem ihr den Sender angeschlossen habt. Beachtet dabei die abweichende Pin Nummerierung von Wiring Pi.
Optional könnt ihr auch die Anzahl der Wiederholungen, die ein Signal gesendet wird unter retries anpassen. Sollte der Port 3000 der im Standard verwendet wird auf eurem Raspberry schon durch eine andere Anwendung belegt sein, kann dieser ebenfalls angepasst werden.

Nun können wir den API Server mit folgendem Befehl starten:

npm start

Anschließend sollten wir über unseren Browser nach dem Muster http://raspberrypi:3000/api/v1/switch/systemCode/unitCode/state unsere Steckdosen schalten können. Eventuell müsst ihr, abhängig von eurem Netzwerk, den Namen und den Port in der Adresse anpassen.

  • Der systemCode ist der fünf Zeichen lange Code den ihr in der Fernbedienung und den Steckdosen eingestellt habt.
  • Der unitCode ist die Nummer der Steckdose (1-4)
  • Der state kann entweder on oder off sein, je nachdem ob ihr die Steckdose ein oder ausschalten möchtet.

Über die Konfigurationsdatei device_config.json kann einzelnen Steckdosen auch ein Name zugewiesen werden, so dass man diese etwas einfacher ansprechen kann. Mehr dazu findet ihr in der README Datei unter dem Punkt Mapped device access.

Ausblick

Als nächstes steht noch die Integration der Steckdosen über die API in eine Home Automation Plattform an um sie einfach über eine Web-Oberfläche oder Smartphone App steuern zu können. Ich experimentiere in diesem Bereich noch mit einigen Lösungen, grundsätzlich ist das ansteuern von RESTful APIs aber bei allen möglich. Alternativ könnte man zum Beispiel auch einen Dienst wie IFTTT nutzen um die Steckdosen zum Beispiel über einen Amazon Echo * und Alexa zu steuern.

Aktuell ist der Aufbau bei mir wie auf den Fotos zu sehen auch noch ein Prototyp auf dem Breadboard. In einem nächsten Schritt werde ich den 433 MHz Sender noch zusammen mit weiteren Sensoren in einem Raspberry Pi Gehäuse unterzubringen um ihn dann an seinem Einsatzort im Wohnzimmer platzieren zu können.

Disclosure: Ich habe in diesem Artikel sogenannte Affiliate-Links verwendet und sie mit einem „*“ gekennzeichnet. Erfolgt über diese Links eine Bestellung, erhalte ich eine Provision vom Verkäufer, für den Besteller entstehen dabei keine Mehrkosten.


4 Comments

Alex · 25. August 2017 at 20:07

Hallo, genau das habe ich gesucht, krieg es aber nicht zu laufen. Frischer PI 2 und lt. Anleitung installiert endet mit:
npm start
npm ERR! Linux 4.9.41-v7+
npm ERR! argv „/usr/local/bin/node“ „/usr/local/bin/npm“ „start“
npm ERR! node v4.2.1
npm ERR! npm v2.14.7
npm ERR! path /home/pi/wiringPi/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open

npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/wiringPi/package.json‘
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! Please include the following file with any support request:
npm ERR! /home/pi/wiringPi/npm-debug.log

Auf alle Fälle fehlt mehr als nur die JSON Datei. Gute Idee ?
Alex

    Alex · 25. August 2017 at 20:27

    Nochmal neuer Versuch, anderes Ergegbnis:
    npm WARN enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm WARN pi No description
    npm WARN pi No repository field.
    npm WARN pi No README data
    npm WARN pi No license field.
    pi@mhz:~ $ npm start
    npm ERR! Linux 4.9.41-v7+
    npm ERR! argv „/usr/bin/nodejs“ „/usr/bin/npm“ „start“
    npm ERR! node v6.11.2
    npm ERR! npm v3.10.10
    npm ERR! path /home/pi/package.json
    npm ERR! code ENOENT
    npm ERR! errno -2
    npm ERR! syscall open

    npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm ERR! enoent This is most likely not a problem with npm itself
    npm ERR! enoent and is related to npm not being able to find a file.
    npm ERR! enoent

    npm ERR! Please include the following file with any support request:
    npm ERR! /home/pi/npm-debug.log

      Chris · 25. August 2017 at 21:25

      Beim ersten Versuch hätte ich jetzt pauschal auf die Node JS Version getippt. Ich nehme an
      $ gpio -v
      $ gpio readall
      funktionieren?
      Was sagt denn das npm-debug.log?

Alex · 5. September 2017 at 19:00

Hi, hatte vorher keine Zeit gehabt…
wie folgt siehts aus:
node -v
v6.11.2

gpio -v
gpio version: 2.44
Copyright (c) 2012-2017 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
Type: Pi 2, Revision: 01, Memory: 1024MB, Maker: Sony
* Device tree is enabled.
*–> Raspberry Pi 2 Model B Rev 1.1
* This Raspberry Pi supports user-level GPIO access.

gpio readall
+—–+—–+———+——+—+—Pi 2—+—+——+———+—–+—–+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+—–+—–+———+——+—+—-++—-+—+——+———+—–+—–+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 1 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+—–+—–+———+——+—+—-++—-+—+——+———+—–+—–+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+—–+—–+———+——+—+—Pi 2—+—+——+———+—–+—–+

Ich mach den PI noch mal neu mit Noobs und probieres es nochmal. WiringPI klappt, hab schon Steckdosen geschaltet. Melde mich….

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Related Posts

Home Automation

SmartMirror: Montageplatten und Installation der Hardware

Nachdem der Rahmen für meinen Smart Mirror gebaut und mit dem Spiegel verklebt ist, müssen die neuen Montageplatten im Schrank angebracht werden. Anschließend kann die Hardware in meinem Smart Mirror installiert werden. Einbau der Montageplatten Read more…

Home Automation

SmartMirror: Monitor und Rahmen

Nachdem die Idee für meinen SmartMirror wiederbelebt und der Entschluss gefasst war das Projekt nun anzugehen, musste ich mir als nächstes Gedanken um einen passenden Monitor machen. Neben dem bereits bestellten Spiegel benötigte ich die Read more…

Home Automation

SmartMirror: Die Idee

Vor ein oder zwei Jahren bin ich zum ersten Mal auf den MagicMirror von Michael Teeuw gestoßen und war von der Idee begeistert. Die Idee verschiedene Informationen in einen Spiegel anzuzeigen ist in meinen Augen ziemlich Read more…