Raspberry Pi Beispielbild

DIP-Schalter über Raspberry Pi betreiben

06. Apr. 2016 // Moritz Kanzler //

In diesem Guide wird beschrieben wie man DIP Funksteckdosen über einen Raspberry Pi fernsteuert. Es werden noch weitere Beiträge folgen mit deren Hilfe man auch über iOS Geräte auf den Raspberry zugreifen kann und alle angeschlossenen Dosen per App fernsteuern kann. Zunächst aber einmal zur Einrichtung der Grundfunktionen auf dem Raspberry Pi.

Was wird benötigt?

  • Funksteckdosen welche auf der 433 Mhz Funkfrequenz empfangen und über DIP Schalter verfügen (keine selbstlernenden Steckdosen)
  • einen Raspberry Pi (Modell 1/2)
  • ein 433 MHz (Sende-)Funkmodul für den Raspberry Pi
  • Jumper Kabel zum Verbinden des Pis mit dem Funkmodul, in diesem Fall female-female Kabel
  • optional noch einen Draht und Lötkolben um eine Antenne an dem Modul anzubringen (steigert die Sendeleistung)

Installation des Funkmoduls am Raspberry Pi

Um überhaupt die Funksteckdosen kontaktieren zu können, muss der Raspberry um diese Möglichkeit erweitert werden. Dazu hilft uns das oben angegebene Funkmodul. Die Installation dieses Moduls wird nun beschrieben. Zunächst muss das 433 Mhz Sendemodul betrachtet werden. Hat man beide Sende- und Empfangsmodu bestellt, handelt es sich um das kleinere Modul mit den drei Anschlüssen.

Auf der Platine neben den Anschlüssen sind die Folgenden kleinen Beschriftungen zu erkennen:

  • DATA: Die Datenleitung
  • VCC: Die Stromversorgung
  • GND: Der Anschluss für die Masse

An jeden dieser Pinne schließt man jeweils ein Jumperkabel an. Auf der Pinleiste des Raspberrys muss nun wie folgt nach Modell 1 und 2 unterschiedlich angeschlossen werden.

Raspberry Pi 1

Hier kommt die DATA Verbindung auf Pin 11, was gleichbedeutend mit der RPi-Beschriftung GPIO-Pin 17 ist. Die VCC Verbindung wird an die Versorgungspins 2 oder 4 angeschlossen. Bei der GND Verbindung kann Pin 6 auf dem Raspberry angesprochen werden.

Raspberry Pi 2

Beim Test auf dem Raspberry Pi 2 konnte ich das Funkmodul über die obige Belegung nicht ansprechen. Dazu musste ich die Steckbelegung ein wenig anpassen und auch im Programmcode weiter unten Anpassungen annehmen, dazu später aber mehr.

Die Belegung findet bei diesem Raspberry wie folgt statt: Die DATA Verbindung kommt an Pin 15 (oder GPIO-Pin 22), die VCC Verbindung wie oben an die Pins 2 oder 4 und die GND Verbindung ebenfalls an Pin 6.

VerbindungRaspberry Pi 1Raspberry Pi 2
DATAPin 11Pin 15
VCCPin 2/4Pin 2/4
GNDPin 66

Einrichten der Software zur Verwendung des Funkmoduls

Damit wir das angeschlossene Funkmodul auch in unserem Anwendungskontext benutzen können brauchen wir verschiedene Software. Der Aufruf der Befehle ist chronologisch aufgebuat und sollte umbedingt in dieser Reihenfolge stattfinden. Zur Einrichtung des Funkmoduls werden zwei Softwarepakete benötigt. Zum einen WiringPi zum Ansteuern der GPIO-Pins und Raspberry-remote, welches die Übermittelung der Daten in einem „steckdosentauglichen“ Format ermöglicht. Zunächst ist jedoch das obligatorische update durchzuführen und gegenbenfalls noch git zu installieren:

WiringPi

Um WiringPi zu installieren, laden wir zunächst das Paket über git herunter und folgen den der angegebenen Installationsanleitung des Entwicklers:

All das sollte im eigenen Home-Verzeichnis stattfinden (cd ~).

Raspberry-remote

Um die Steckdosen jetzt tatsächlich ansteuern zu können fehlt uns nur noch, das oben erwähnte, Raspberry-remote. Dieses wird auch ganz einfach über git bezogen und dann kompiliert:

Verwendung des Raspberry Pi 2

Wird der Raspberry Pi 2 verwendet wurde, wie oben beschrieben, die DATA Verbindung auf einen anderen GPIO-Pin gelegt. In diesem Fall muss vor dem kompilieren des send-Programms eine Änderung vorgenommen werden. Obige Befehlsfolge zur Inbetriebnahme wird nun durch Folgende ersetzt:

Zunächst muss in das Rasperry-remote Verzeichnis gewechselt werden und dort mit einem (beliebigen) Texteditor die Datei send.cpp bearbeitet werden.

Danach muss die Variable pin in Zeile 49 von 0 auf 3 gesetzt werden. Die Pinnummerierung folgt hierbei der von WiringPi und nicht der GPIO-Pinnummer. 3 stellt in WiringPi den angeschlossenen GPIO-Pin 22 dar.

Danach muss das Programm nur noch kompiliert werden:

Testen und erste Befehle absetzen

imageUm die eingerichtete Software dann auch für ihren finalen Zweck einzusetzen muss man zunächst etwas über den Aufbau der Funksteckdosen wissen. Jede Steckdose hat ein Fach in welchem die jeweiligen Einstellungen für diese vorgenommen werden können. Grundsätzlich gibt es zwei einstellbare Parameter:

  • den Systemcode, welcher eine Art Domäne für verschiedene Steckdosen darstellt,
  • und der Unitcode, welcher jede Steckdose in ihrer „Domäne“ eine eindeutige Nummer zuteilt.

Je nach Bauart gibt es bei den Unitcodes die Möglichkeit vier oder fünf Steckdosen pro Systemcode einzeln zu steuern. Der Systemcode ist fünfstellig und kann jede mögliche Kombination von 00000 bis 11111 annehmen. Bei Unitcode ist eine Nummer von 1 bis 4 oder 5 einstellbar. Dieser wird nicht binär sondern anhand der Schalter dargestellt, so bedeutet 10000 die Nummer 1, 00100 beispielsweise die Nummer 3 und 00001 die Nummer 5.

Die Steuerung der Steckdosen lässt uns die Freiheit wirklich jeder Dose eine einzelne Nummer zuzuordnen. Hat man mehr als vier bzw. fünf Steckdosen zu verwalten so kann auch der Systemcode geändert werden um weitere Steckdosen einzeln anzusteuern. Um über den Raspberry Pi und das Funkmodul dann endlich einmal eine Steckdose ein- oder auszuschalten muss man einen Befehl in der unten angegeben Syntax absetzen:

Zunächst muss also das, zuvor installierte, send-Skript angesprochen werden, danach wählt man den entsprechenden Systemcode der Steckdose und dann den Unitcode (hier als Ganzzahl zwischen 1 und 5). Mit dem letzten Parameter schaltet man die Steckdose entweder ein (=1) oder aus (=0). Um Steckdose 4 in System 10111 einzuschalten gibt man also das hier ein:

Es können auch mehrere Steckdosen gleichzeitig bedient werden:

In diesem Beispiel werden also Steckdose 2 und 4 im Systemcode 10111 eingeschaltet.

Praktische Erweiterungen

In diesem Abschnitt werden noch einige nützliche Erweiterungen präsentiert, welche den Umgang mit Raspberry-remote für mich vereinfacht haben. Will man später mit der vorgestellten App auf die Schaltersteuerung zugreifen wollen, müssen diese Anpassungen umbedingt gemacht werden!

Den send Befehl „global“ verfügbar machen

Um nicht immer auf das send-Skript im Homeverzeichnis zugreifen zu müssen kann man (das kompilierte) Skript auch in /usr/local/bin verschieben. Danach reicht ein einfacher Aufruf aus um das Programm anzusteuern:

Es wird also nicht mehr der Präfix ~/raspberry-remote/send benötigt.

send ohne root-Rechte ausführen

Nach wie vor, benötigt man root-Rechte um send auszuführen. Um auch als Nutzer diesen Befehl direkt zur Verfügung zu haben geht man zunächst in das Verzeichnis, in welchem das Programm liegt (in diesem Fall jetzt schon in /usr/local/bin) und ändert die Nutzungsrechte:

FAQ

Hier werden Fragen und Antworten gesammelt, welche mich im Laufe der Zeit erreichen oder aber Probleme behandelt, vor welchen ich selbst im Laufe der Entwicklung stehe. Es lohnt sich also bei Problemen einen Blick hier herein zu werfen, vielleicht findet sich eine schnelle Antwort.

Ausblick

Der erste Schritt zur Steuerung von Funksteckdosen über den Raspberry Pi ist getan. Über SSH kann nun jeder seine eigenen Steckdosen ein- und ausschalten. In Folgenden Artikeln, welche auch hier verlinkt werden stelle ich eine server- und clientseitige Software vor, mit der die Steuerung dann deutlich bequemer von der Hand gehen soll. Da ich nur hobbymäßig daran arbeite werde ich hier darüber informieren wie sich der Fortschritt entwickelt. Eine frühe läuffähige Version für den Raspberry und das iPhone findet ich in meinen GitHub-Repos. Beide werden aber noch ausführlich vorgestellt, sobald sie fertigstellt sind.