Funksteckdosen Steuerung mit Raspberry Pi und App

Vor kurzem kam mir die Idee, aus meinen drei vorhandenen Funksteckdosen mehr zu machen, als sie einfach nur über die mitgelieferte Fernbedienung steuern zu können. Da in aktuell Beiträgen und Foren das Thema „Internet der Dinge“ (engl. Internet of Things, engl. IoT) das Schlagwort ist habe ich mich im Internet auf die Suche nach passenden Ideen gemacht. Ich konnte bereits nach kurzer Zeit folgenden Forenbeitrag finden [Tutorial] Funksteckdosen, … mit iOS & Android (Version 2) In dem Tutorial geht es darum, die vorhandenen Funksteckdosen mittels eines Raspberry Pi’s ins Internet zu bringen und das ganze via Smartphone, Tablet, …. steuern zu können.

Inhaltsverzeichnis

Benötigte Bauteile

Um das ganze Umsetzen zu können werden folgende Bauteile benötigt:

Die Funksteckdosen lassen sich in jedem Conrad Laden oder auf Amazon finden. Wichtig ist hierbei nur, dass die Funksteckdosen auf der Rückseite über kleine DIP-Schalter verfügen, über deren man die Adresse der Steckdose MANUELL einstellen kann. Es gibt im Handel auch Steckdosen, bei denen diese Adressierung mit der Fernbedienung automatisch von statten geht, stellt für uns aber das Problem dar, das wir erstmal das Funksignal der Fernbedienung analysieren müssten, um rauszufinden welche Adressen und Befehle dort gesendet werden.

Also einfach darauf achten, dass sich das ganze Manuell einstellen lässt.

Des Weiteren benötigt man ein 433 MHz Sendemodul, welches später an den Raspberry Pi angeschlossen wird. Über das Sendemodul werden mit einem 433 MHz Signal die Ein- und Ausschaltbefehle an die Steckdosen gesendet.

Da wir das ganze später via Smartphone oder Tablet steuern wollen, müssen wir das ganze noch ins Internet bekommen, hierzu verwenden wir einen Raspberry Pi an dem wir später unser 433 MHz Sendemodul anschließen.

Für unseren raspberry benötigen wir eine SD-Karte mit dem Betriebssystem Whezzy, einige Kabel um das Sendemodul anzuschließen, einen 1-Wire Temperatursensor und ggf. einen WLAN USB-Stick, falls man den Raspberry Pi nicht über die vorhandene LAN-Schnittstelle anschließen möchte.

Da wir das ganze über ein Smartphone oder Tablet steuern, benötigen wir noch eine entsprechende App die das ganze visualisiert und die Schaltbefehle an den Raspberry und weiter zu den Steckdosen schickt. Hierzu verwenden wir die App NetIO, welche sowohl für iOS als auch Android in den App-Stores existiert.

 

Verkabelung

Die nachfolgende Tabelle und das Bild zeigen ,wie der 433 MHz Sender an den Raspberry Pi anzuschließen ist.

Sender


Raspberry-
Pi
Beschreibung
ANT


Abhängig vom Sendemodul
benötigt man noch eine
Antenne. Hierzu kann ein
einfacher Draht von ca.
17,3 cm länge verwendet
werden.
GND


GNDMasse Verbindung zwischen
Sender und Raspberry
DATA


#17Data Ausgang vom Sender
auf den Daten Eingabe
Pin vom Raspberry
VCC


+5VSpannungsversorgung

 

Wichtig ist, dass man bevor man die Kabel an den Raspberry Pi und das Sendemodul anschließt, noch ein 17,3 cm langen Stück Kabel nimmt und dieses in den Antennen Lötpunkt des Sendemoduls lötet. Dabei reicht ein einfacher Draht vorkommen aus, man sollte nur darauf achten das man das ganze auf die genau Länge bringt, um einen so guten Empfang wie möglich zu haben.

Und nochmal direkt als Verdrahtungsplan vom Sendemodul zum Raspberry Pi.

Verbindung Raspberry Pi 433 MHz Sender
Verbindung Raspberry Pi 433 MHz Sender

 

Vorbereitung des Raspberry Pi

RaspberryPiLogo
Raspberry Pi

Nach der ersten Inbetriebnahme des Raspberry Pi sollte man eine grundlegende Konfiguration vornehmen, bevor man sich an mögliche Installationen und Konfigurationen macht.
Dazu gehört die Konfiguration von Sprache, Zeichensatz, Zeitzone und ein deutsches Tastatur-Layout. Außerdem sollte man auch noch das Standard-Passwort des Benutzers „pi“ ändern und eine Software-Aktualisierung des Systems vornehmen. Danach ist die Konfiguration des Raspberry Pi auch schon erledigt.

Man sollte folgende Aufgaben durchführen:

  • Ändern des Standard Passworts des Benutzers „Pi“
  • Änder der Spracheinstellungen und des Zeichensatzes auf „Deutsch“ bzw. „UTF-8“
  • Neu erstellen des SSH-Schlüssel
  • Aktualisierung des Betriebssystems und der Software Pakete
  • Neustart des Raspberry Pi

Den Großteil dieser Aufgaben kann man im Raspberry Pi Software Konfiguration Tool erledigen (kurz raspi-config).

Raspeberry Pi - raspi-config Menü
Raspeberry Pi – raspi-config Menü

Standard-Passwort ändern

Nach der ersten Inbetriebnahme des Raspberry Pi sollte man zu aller erst das Passwort für den Benutzer „Pi“ ändern, da sonst jeder mit dem Standardpasswort „raspberry“ zugriff auf den Pi hat und das sowohl über die angeschlossene Bildschirm und Tastatur als auch via SSH über das Netzwerk.

Die Einstellung des Passworts für den Benutzer „pi“ findet man unter dem Menüpunkt „Change User Password“.

Hinweis: Wenn man das Passwort direkt am Raspberry Pi ändert, dann ist die Tastatur unter Umständen noch auf ein amerikanisches Layout eingestellt. Das bedeutet, dass die Tasten „Y“ und „Z“ vertauscht sind.
Wenn man das Passwort über SSH ändert, dann besteht dieses Problem nicht, weil der SSH-Client die Tastatur-Belegung der lokalen Tastatur benutzt.

Dateisystem auf die ganze SD-Speicherkarte erweitern

Wenn eine Linux-Distribution frisch auf eine SD-Card geschrieben wurde, dann belegt die Root-Partition nicht die gesamte Speicherkarte, sondern lässt einen Teil davon unbenutzt. Wenn man möchte, kann man das Dateisystem auf die ganze Speicherkarte ausdehnen.
Das erfolgt unter dem Menüpunkt „Expand Filesystem“.

Anschließend ist ein Reboot notwendig, weil erst danach diese Änderung übernommen wird. Man sollte diesen Reboot auch wirklich gleich machen und nicht noch irgendwelche Änderungen. Wenn das Programm den Reboot nicht anbietet, kann man ihn auch auf der Kommandozeile auslösen.

sudo reboot

Sprach- und Zeiteinstellungen ändern

Die Spracheinstellungen findet man unter dem Menüpunkt „Internationalisation Options“.
Mit „Change Locale“ ändert man die Sprache und den Zeichensatz. Es empfiehlt sich „de_DE.UTF-8 UTF-8″ einzustellen.
Mit „Change Timezone“ ändert man die Zeitzone. Das ist ganz wichtig, wenn man den Raspberry Pi mit der richtigen Zeit betreiben möchte.
Mit „Change Keyboard Layout“ ändert man die Belegung der Tastatur. Hier wählt man „Generic 105-Key“. Das funktioniert aber nur, wenn man direkt mit einer Tastatur am Raspberry Pi arbeitet. Per SSH funktioniert das nicht und macht auch keinen Sinn.

Alternativ kann man diese Einstellungen auch über die Kommandozeile erledigen. Das ist vor allem dann notwendig, wenn man kein Raspbian und demzufolge auch kein „raspi-config“ hat.

Umstellen der Systemsprache, des Landes und des Zeichensatzes:

sudo dpkg-reconfigure locales

Zeitzone einstellen:

sudo dpkg-reconfigure tzdata

Tastatur-Layout einstellen (nicht über SSH):

sudo dpkg-reconfigure keyboard-configuration

Oder wenn man es per SSH einstellen will:

sudo nano /etc/default/keyboard

Hier ändert man den folgenden Wert:

XKBLAYOUT="de"

Software-Aktualisierung

Gerade bei der ersten Inbetriebnahme ist es wichtig, dass man das System Software-seitig auf den neusten Stand bringt. Die Aktualisierung von Betriebssystem und installierten Anwendungen und Bibliotheken besteht aus zwei Schritten.Der erste Schritt besteht darin ein „Update“ der Paket-Listen durchzuführen. Dort steht drin, welche Pakete welche Version haben und welche miteinander verknüpft sind.

sudo apt-get update

Anschließend bringt man die installierte Software auf einen neuen Stand. Das heißt, der „Upgrade“-Prozess gleicht die Paket-Listen mit dem installierten Bestand ab und nicht daraufhin die festgestellten Änderungen vor.

sudo apt-get upgrade

Nach dem man umfangreiche Änderungen an der Konfiguration vorgenommen hat, sollte man immer einen Neustart des Raspberry Pi vornehmen.

sudo reboot

SSH Zugriff einrichten

Nun können wir uns von einem anderem Rechner im Netzwerk via SSH mit dem Raspberry Pi verbinden.

Bei mir unter MacOSx gebe ich hierzu folgenden Befehl ein:

ssh 192.168.xxx.xxx -1 pi

Nun Überprüfen wir ob unsere vorhandenen Pakte und Paketquellen aktuell sind und aktualisieren sie ggf.:

sudo apt-get update
sudo apt-get upgrade

Dann benötigen wir um die GPIO Leiste (also die Ein- und Ausgänge des Rapberry) anzusteuern folgende Library:

sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

Nun müssen wir die Sendefunktion von xkonni klonen:

cd 
git clone git://github.com/xkonni/raspberry-remote.git
cd raspberry remote

Als nächstes die send.cpp Kompilieren:

make send

Funksteckdosen einstellen

Ich verwende folgende 433 MHz Steckdosen, welche aus drei Funksteckdosen und der Fernbedienung bestehen. Um die Steckdosen verwenden zu können muss man na

Verwendete Funksteckdosen
Verwendete Funksteckdosen

ch dem auspacken zu aller erst die Adressen der Steckdosen und der Fernbedinung einstellen. In der Fernbedinung kann ein fünf stelliger Code durch Einstellen der DIP-Schalter eingestellt werden. Es handelt sich bei diesem Code um den sogenannten Hauscode. Dieser Hauscode muss auch genauso bei den Steckdosen eingestellt werden. Daneben muss, um jede Steckdose individuell ansteuern zu können in den jeweiligen Steckdosen noch einmalig der Buchstabe A-E vergeben werden. Durch die verschiedenen Code Einstellungen ist es quasi möglich beliebig viele Steckdosen anzusteuern.

Erster Sendebefehl

Um das ganze das erste mal auszuprobieren, ist es wichtig, dass man sich noch im Ordner raspberry-remote befindet, da dort die send.cpp liegt. Das ganze erkennt man daran, das vor jedem Befehl den man in die Konsole eingibt pi@raspberrypi /Ordnername $, also hier pi@raspberrypi /RPI.GPIO-0.1.0 $ steht.

Falls das ganze dort nicht mehr steht, muss man mit cd raspeberry-remote in diesen Ordner gehen.

Nun zum Befehl den man benötigt um eine Funksteckdose zu schalten. Wie bereits gesagt besteht die Befehl einmal aus dem Hauscode, der für alle Funksteckdosen gleich ist und der entsprechenden Steckdosennummer. Dabei wird folgender Beispielsbefehl gesendet:

sudo ./send <Hauscode> <Steckdosennummer> <Zustand 1 = An, Zustand 0 = aus>

Für die erste Steckdose lautet der Befehl den man in die Konsole eingibt:

sudo ./send 11111 1 1

Die Steckdose sollte nun geschaltet sein.

Mit dem nachfolgen Befehl:

sudo ./send 11111 1 0

sollte die Steckdose wieder ausgeschaltet werden.

Smartphone App NetIO einrichten

Um aus der App heraus auf dem Smartphone die Steckdosen des Raspberry Pi ansteuern zu können, benötigen wir noch ein Python-Script, welches als Schnittstelle zwischen dem Smartphone und dem geladenen Skript von xkonni fungiert.

Aus dem Home Ordner des Raspberry Pi heraus geben wir folgenden Befehl ein:

cd

Dann installieren wir RPi.GPIO:

wget http://pypi.python.org/packages/source/R/RPi.GPIO-0.1.0.tar.gz
tar zxf RPi.GPIO-0.1.0.tar.gz
cd RPi.GPIO-0.1.0
sudo python setup.py install

Nun wird das Skript von ThomasH (siehe Forum oben in der Einleitung) geklont und aktualisiert:

cd
git clone git://github.com/ThomasH-W/netio_server
cd netio_server
git pull

Jetzt müssen wir die zuvor eingestellten Adressen der Steckdosen dem Raspberry Pi mitteilen. Hierzu geben wir folgenden Befehl ein um die entsprechende Datei aufzurufen:

cd
cd netio_server
sudo nano netio_config.py

In der Datei müssen nun folgende Konfigurationen vorgenommen werde. Im oberen Bereich muss unter HOST, die IP-Adresse des Raspberry Pi eingegeben werden, sowie der gewünschte Port (im Normalfall lautet dieser: 54321). Unter light_dict kann man jetzt die Namen und Codes der Funksteckdosen eingeben. Als Beispiel für die erste Steckdose „Wohnzimmer“ sowie der Hauscode „00101“ und der Gerätenummer 2 (B).

In der Datei kann man beliebig viele Steckdosen eintragen bzw. die Beispiele löschen. Dabei ist nur zu beachten, dass hinter jeder Zeile ein Komma steht, bis auf der letzten!

Unter sensor_dict können an den Raspberry Pi angeschlossene Temperatursensoren angeschlossen werden. Dazu hier mehr.

Unter time_multi, kann man „1 „ für die Angabe in  Sekunden und „60“ für die Angabe in Minuten einstellen. Dies ist für eine eventuell später verwendete Timerfunktion wichtig.

Unter lan_dict, können Netzwerkgeräte hinzugefügt werden, welche per WAKE-ON-LAN eingeschaltet werden sollen.

Um zu testen ob das grade konfigurierte Skript auch ordnungsgemäß funktioniert, kann man folgenden Befehl eingeben:

sudo python netio_server.py

Falls man das Skript im Hintergrund laufen lassen möchte, schreibt man ein & dort hinter:

sudo python netio_server.py &

Man kann nun das Terminal Fenster schließen bzw. seinen PC/Mac ausschalten.

Autostart

Da man nicht jedes mal die Konsole aufrufen möchte um das Python Skript zu starten, bietet es sich an auf dem Raspberry Pi einen entsprechenden Crontab anzulegen:

crontab -e

Hier schreibt man dann folgendes an das untere Ende:

@reboot cd " /home/pi/bin"; python ./netio_server.py &

Oberfläche der App gestalten

Als erstes erstellt man sich auf der NetIO Internetseite einen kostenlosen Account.

NetIORegestrierung
NetIO – Neuen Account registrieren

Über den Menüpunkt Design Editor, gelangt man in die Designer Oberfläche wo man ein neues Projekt starten kann.

NetIO - Design Editor
NetIO – Design Editor

Im Design-Editor müssen wir zu aller erst ein Paar generelle Einstellungen vornehmen, damit sich später unsere App auch mit dem Raspberry Pi verbindet. In der linken Seite des Editors sollte der Reiter „Global“ geöffnet sein. Hier kann man einen „Config Name“, sowie eine Beschreibung „Description“ einfügen.

NetIO - Global Einstellungen
NetIO – Global Einstellungen

Im unteren Bereich des Reiters „General“, kann man die Verbindungseinstellungen „Connections“ eingeben. Hier muss man einen eindeutigen Namen „name“ vergeben, den man für die anderen Seiten der App benötigt. Durch diesen Namen weiß die App auf welche Verbindung sie zugreifen soll. Unter „Host“ gibt man die IP-Adresse des Raspberry Pi ein und unter „Port“ die Nummer, die wir in der NetIO_config.py Datei vergeben haben (In der Regele 54321).

NetIO - Conncetions Einstellungen
NetIO – Conncetions Einstellungen

Nach dem diese Einstellungen vorgegeben hat, kann man sich daran machen und die Oberfläche für sein Smartphone oder Tablet gestalten. Hierzu kann im oberen Bereich auf den Reiter „+Add Item“ klicken und aus dem Dropdown Menü ein entsprechendes Element auswählen. Als Beispiel nehmen wir hier einen Button.

NetIODesignerDropDownMenü
NetIO – Designer Button auswahl

Der Button lässt sich in der Oberfläche mit gedrückter Linker Maustaste hin- und her verschieben. Über das Rote X am Button, kann dieser aus der Oberfläche gelöscht werden. Am weißen Quadrat an der unteren rechten Ecke des Buttons lässt sich seine Größe durch ziehen oder schreiben verändern.

NetIO - In der Design Oberfläche platzierter Button
NetIO – In der Design Oberfläche platzierter Button

Ich habe meiner Oberfläche drei Schiebeschalter hinzugefügt, da diese den Vorteil haben, dass sie in einem definierten Intervall aktualisiert werden und man erkennt ob die Steckdose grade geschaltet ist oder nicht.

Man wählt also aus dem Dropdown Menü „+Add Item“ und fügt seiner Designer Oberfläche einen „Switch“ hinzu. Das ganze sieht dann wie in der nachfolgenden Abbildung aus.

NetIOSwitch
NetIO – Switch

Damit das ganze dann auch noch seine Befehle an den Raspberry Pi schickt müssen folgende Einstellungen vorgenommen werden:

  • onText = An
  • offText = Aus
  • onSend = Licht Wohnz an
  • offSend = Licht Wohnz aus
  • reads Licht Wohnz Status
  • intervall = 2000
  • parseResponse = \d+

Sollte einer der ebend aufgelisteten Eigenschaften mal nicht angezeigt werden, so kann man diese über „Add Attribute“ hinzufügen. Nachdem man die Einstellungen vorgenommen hat, sollte das ganze dann wie in der nächsten Abbildung aussehen.

NetIO - Eingestellter Switch
NetIO – Eingestellter Switch

 

Wenn man an den Raspberry Pi einen oder mehrere Temperatursensoren via 1-wire Bus angeschlossen hat, so kann man diese sich ebendfalls in der App anzeigen lassen. Hierzu muss man aus dem Dropdown Menü „+Add Item“ ein „Label“ auswählen und der Designer Oberfläche hinzufügen. Für das Label müssen folgende Einstellungen vorgenommen werden:

  • text = Temp Wohnzimmer
  • reads = Temp Wohnz
  • intervall = 10000
  • parseResponse = \d+
  • formatResponse = {0},{1}°C

Fertig eingestellt sieht das ganze dann so aus.

NetIO - Label mit Temperaturanzeige
NetIO – Label mit Temperaturanzeige

Smartphone App öffnen

Wenn du die NetIO App auf dein Smartphone/Tablet geladen hast, kannst du durch Schütteln oder durch wischen mit zwei Fingern von Unten nach Oben ein kleines Fenster öffnen. Hier kann man seine auf der Internetseite eingegebenen Daten zum Login verwenden und anschließend Sync anklicken. Es müsste nun unter deinen Anmeldedaten ein Neuer Eintrag namens „New Configuartion“ bzw. der Name den du im Online-Designer angegeben hast erscheinen.

Es öffnet sich deine gestaltete Oberfläche!

Weblinks

[1] [Tutorial] Funksteckdosen, … mit iOS & Android (Version 2)

[2] Netio.davideickhoff.de

[3] YouTube Channel

Schreibe einen Kommentar

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