2071215

Funksteckdosen schalten mit dem Raspberry Pi

22.04.2015 | 08:30 Uhr |

Sie sind im Urlaub, möchten jedoch Ihr Haus oder Ihre Wohnung abends beleuchten, um es bewohnt erscheinen zu lassen. Mit dem Raspberry Pi können Sie eine solche Lampensteuerung realisieren.

Eigentlich ist Peter Boxler Mac-Nutzer – aber er ist auch Raspberry-Projektentwickler. Als solcher hat er drei Projekte erfolgreich auf die Beine gestellt. Alle machten und machen ihm viel Spaß, wie er sagt, kosteten aber auch viel Schweiß und Tränen. Die Projektbeschreibungen sind eher für Pi-Hacker geeignet, da er die einfacheren Schritte nicht dokumentiert hat. Sie können aber generell als Anregung für Projektideen dienen.

Hier stellt er sein Projekt zur Lampensteuerung während einer längeren Abwesenheit vor. Wie man mit dem Raspberry auch seine Heizung steuern kann, erläutern wir in einem anderen Artikel.

Der Raspberry Pi hat mich von Anfang an fasziniert. 2012 schaffte ich mir den Ein-Platinen-Computer an, ein Modell B+, legte ihn jedoch nach einigem Herumprobieren auf die Seite – ich hatte noch keine wirkliche Idee für ein Projekt. Das änderte sich im Frühjahr 2014 – ich wollte für die Abwesenheit während eines Urlaubs eine Lampensteuerung einrichten.

Video: Quadcore-CPU & 1 GB RAM - der Raspberry Pi 2

Der Pi hat 4 USB-Anschlüsse, einen LAN-Anschluss, einen HDMI-Anschluss für einen Monitor und einen Audio-Video-Ausgang. Ebenfalls auf dem Board ist ein Anschluss für die Pi-Camera - eine HD-fähige Kleinst-Kamera für Fotos und Video. Was den Pi auszeichnet, ist die 40-polige Steckerleiste. Viele dieser Anschlüsse sind General Purpose Input/Output-Pins, die in Programmen angesteuert/gelesen werden können. Und mittlerweile gibt es viele Erweiterungsboards von unzähligen Anbietern. Der Pi verbraucht lediglich 1 Watt Leistung: 5 V und 200 mA Strom.

Der Raspberry Pi Modell B+
Vergrößern Der Raspberry Pi Modell B+
© Peter K. Boxler

Die Anforderungen

Während meiner Ferien sollen 4 Funksteckdosen (Typ ELRO) nach einem vorgegebenen Schema ein- und ausgeschaltet werden. Die Funksteckdosen werden in verschiedenen Räumen platziert, und die geschalteten Lampen sollen Anwesenheit vortäuschen. Pro Dose soll jeder Wochentag (von Sonntag bis Samstag) ein eigenes Schaltprogramm haben, und die Schaltprogramme werden jede Woche wiederholt.

Die Schaltaktionen sollen außerhalb des Programms in einem XML-File definiert und der Raspberry soll mit einem un-interruptible Power Supply ausgestattet sein.

Das Schaltprogramm (Python) soll als Linux-Daemon laufen, der beim Boot des Pi gestartet wird. Via Interprocess-Kommunikation kann ein Client-Programm den Schaltstatus abfragen. Zudem soll man via Web-Interface den aktuellen Schaltstatus abfragen können.

Die Lösung

Der Aufbau der fertigen Lösung sieht so aus - ohne Gehäusedeckel

Switcher Hardware-Aufbau
Vergrößern Switcher Hardware-Aufbau
© Peter K. Boxler
Die vier schaltbaren Funksteckdosen
Vergrößern Die vier schaltbaren Funksteckdosen
© Peter K. Boxler
Links: Pi stacked mit Schaltboard, rechts: UPiS mit Akku
Vergrößern Links: Pi stacked mit Schaltboard, rechts: UPiS mit Akku
© Peter K. Boxler
Switcher komplett
Vergrößern Switcher komplett
© Peter K. Boxler

Der Hardware-Aufbau

Hardware-Setup Switcher
Vergrößern Hardware-Setup Switcher
© Peter K. Boxler

Der Pi bzw. das ganze System wird via un-interruptible Power Supply UPiS (mit blauem LiPo-Akku) mit 5 V Spannung versorgt. Da im ELRO-Handsender bereits ein Sende-Protokoll-Chip PT2262 sowie ein 433-MHz-Sender enthalten ist, wird der Handsender über einen  Treiber-Chip 2803A von den General Purpose Input/Output Pins (GPIO-Pins) des Pi angesteuert.

Das grüne Board enthält eine batteriegepufferte Real Time Clock sowie den Treiber-Chip 2803A. Ebenfalls auf diesem Board befinden sich 3 LED und 2 Drucktasten. LED1 und LED3 werden für Statusanzeigen benutzt. Die Drucktasten sind derzeit nicht benutzt.

Das Board enthält ebenfalls 2 Anschlüsse für einen im Gehäuse montierten Mini-Kippschalter. Dieser hat 2 Positionen: ‚Nobody Home‘ und ‚Somebody Home‘.

Die Boards wurden in einem handelsüblichen Alu-Gehäuse montiert.

Kurioser Bug: Raspberry mag nicht geblitzt werden

Pin-Belegung Raspberry Pi

Der verwendete Raspberry Pi Modell B+ hat 40 Pins, verwendet werden aber nur die ersten 26 Pins.

Pin-Belegung Raspberry Pi
Vergrößern Pin-Belegung Raspberry Pi
© Peter K. Boxler

Verbindung zum Handsender

Dieses Schema zeigt die Verbindungen vom Pi zum Chip (auf Interface Board) und zum Handsender.

Verbindung zum Handsender
Vergrößern Verbindung zum Handsender
© Peter K. Boxler

Das UPiS

Das verwendete un-interruptible Power Supply Module (genannt UPiS) mit dem blauen LiPo-Akku wird von einer Firma in Athen hergestellt. Das Modul hat vielfältige Funktionen und kann über ein serielles Interface, das über die Pins 8 und 10 läuft, weitgehend konfiguriert werden. Fällt die von außen kommende 5-V-Stromversorgung aus, wird das System für rund 3 bis 6 Stunden über den Akku mit Strom versorgt. Wird der untere Ladezustand erreicht, wird der Pi kontrolliert heruntergefahren.

Über das serielle Interface können Befehle an das UPiS gesendet werden, einer davon, der Befehl @status, bringt den internen Status des UPiS. Das sieht so aus:

----------------------
www.pimodules.com
UPiS Advanced
Firmware Version:1.096 Beta Version
Hardware Release:VCO2
----------------------
UPiS Status
Powering Source:USB
UPiS RTC Date:2000:01:04
Switcher Doku Seite 6
UPiS RTC Time:03:52:08
Average Powering Values
----------------------
RPi Voltage:04.90 V
EPR Voltage:00.00 V
USB Voltage:04.96 V
BAT Voltage:04.11 V
UPiS Current:0464 mA
----------------------
Battery Charger ON
Low Power Restart Time (LPRSTA) is 5 seconds
Raspberry Pi timed shutdown is inactive
Raspberry Pi timed start-up is inactive
File Safe Power Cut-Off Time is: 30 Seconds
File Safe Shut Down type is: RPi NOT Powered while sleep
File Safe Unconditional Shutdown when Power loose Timer is OFF, UPiS will work until battery
discharged
Real Time Clock Correction Factor value is: 0x00
Analog Sensor Temperature:29 C 84 F
Blockschema des UPiS
Vergrößern Blockschema des UPiS
© Peter K. Boxler

Nobody Home-Switch

Der Switcher ist nicht nur während eines Urlaubs in Betrieb, sondern auch, wenn wir daheim sind, aber abends mal weggehen. Mit dem Kippschalter Home/NotHome kann man die Funktion des Switchers folgendermassen beeinflussen:

  • Stellung NotHome: Switcher schaltet die Dosen gemäß den Angaben im Control-File

  • Stellung Home Switcher schaltet nach Umschalten auf Home alle Dosen sofort AUS. Folgende Aktionen (Aus/Ein) werden nicht mehr durchgeführt, der aktuelle Dosenstatus wird jedoch nachgeführt.

Beim Umschalten von Home auf NotHome werden die Dosen sofort wieder auf den zu diesem Zeitpunkt gültigen Stand geschaltet. Das vordefinierte Programm wird wieder normal abgearbeitet.

Die besten Rasperry-Pi-Alternativen

Die Software

Das Switcher-Programm

Die verwendete Script-Sprache ist Python. Das Switcher-Programm switcher.py ist ca. 550 Zeilen lang, es steuert den Handsender (und damit auf Distanz die Funksteckdosen) nach einem festgelegten Wochenprogramm.

Die Schaltsequenzen sind außerhalb des Programms in einem XML-File codiert. Dieser File wird nach Programm-Start eingelesen und geparst. Es entsteht eine Aktionen-Tabelle, die alle Schaltvorgänge (EIN/AUS) für jeden Tag der Woche und für jede Dose enthält.  Pro Dose und Tag können beliebig viele Schaltvorgänge definiert werden. Das Wochenprogramm wird endlos wiederholt.

Das Switcher-Programm enthält eine Simulations-Funktion (Commandline-Paramater -s), die  einen Schnelldurchlauf durch 3 Wochen in ca. 10 Minuten ermöglicht. Damit lässt sich schnell prüfen, ob das Programm im Wochenablauf einwandfrei funktioniert.

Das Switcher-Programm kann auf zwei Arten gestartet werden:

  • Einfacher Aufruf auf Commandline: sudo python switcher.py [- Commandline Parameter]

  • Aufruf als Linux-Daemon (siehe Kapitel weiter unten)

Beim Start des Programms können folgende Commandline-Parameter spezifiziert werden:

-d                               kleiner Debug, Statusmeldungen werden ausgegeben (stdout)

-D                              großer Debug, weitere Statusmeldungen

-f filename                  XML-Inputfile

-s                              Simulation (Schnelldurchlauf durch 3 Wochen)

-i min                         Inkrement-Intervall bei Simulation (Minuten, 2 bis 8 sinnvoll)

-t wochentag              an dem die Simulation gestartet wird

-h                              Help, Usage wird ausgegeben

-a                              es werden nur die im File gefundenen Aktionen ausgegeben

 

Control-File

Der Control-File im XML-Format beinhaltet alle Schaltsequenzen für alle Tage der Woche pro Dose. Der File hat im Tag <file-id> eine Beschreibung - damit kann der aktuell gültige File identifiziert werden - siehe Statusmeldung des Switcher-Clients. Der Control-File wird mit einem Editor erstellt. Es ist dabei sorgfältig vorzugehen - Fehler in den Tags sind leicht zu übersehen und führen zu einem Absturz des Switcher-Programms.

Hier ein Ausschnitt des Files:

Control File
Vergrößern Control File
© Peter K. Boxler

Switcher-Client

Das Switcher-Client-Programm swclient.py kann Requests an den Switcher-Daemon senden (siehe Kapitel Interprocess Kommunikation weiter unten).

Der Status-Request bringt folgende Antwort vom Daemon:

Switcher-Client
Vergrößern Switcher-Client
© Peter K. Boxler

In diesem Beispiel ist zu sehen, dass der Switcher-Daemon auf 17:38 Uhr wartet, um dann Dose 3 einzuschalten. Letzte Aktion war um 0:22 Uhr, als Dose 1 ausgeschaltet wurde. Alle Dosen sind zur Zeit ausgeschaltet (Dosenstatus). Der Home/NotHome-Switch ist in Stellung NotHome.

Schaltzeiten anzeigen

Das Script swaction.py wird in der Entwicklung benutzt, um die im XML-File codierten Schaltzeiten pro Tag und pro Dose auszugeben - für Tests und Doku. Es werden 3 Listen ausgegeben:

  • Schaltzeiten für alle Tage der Woche für alle Dosen

  • Schaltzeiten für jede Dose für alle Tage der Woche

  • Grafische Darstellung (Timeline) für alle Tage und Dosen

Dieses Script benutzt dieselbe Parsing-Funktion wie das Switcher-Script switcher.py. Diese Parsing-Funktion ist im Script swparse.py zu finden. Dieselben Listen werden auch vom Switcher-Script switcher.py ausgegeben, falls der Commandline-Parameter -a gesetzt ist.

Für die Ausgabe in einen Textfile ist folgender Befehl einzugeben:

sudo python swaction.py > schaltzeiten.txt

Daemonisierung

Das Switcher-Programm switcher.py erfüllt alle Anforderungen für das Schalten der Dosen.

Als weitere Herausforderung wurde der Switcher-Prozess ‚daemonisiert‘, d.h. es wurden weitere Code-Teile angefügt, die es erlauben, den Switcher als Linux-Daemon laufen zu lassen. Der Switcher-Daemon kann von der Commandline mit folgenden Aufrufen gestartet und gestoppt werden:

sudo python swdaem.py start
sudo python swdaem.py stop

Der dafür zusätzlich notwendige Code wurde hier gefunden und leicht angepasst.

Interprocess-Kommunikation

Da der Switcher-Prozess als Linux Daemon im Hintergrund läuft und damit keine Verbindung zu einer Konsole hat, ist das Switcher-Programm als Server ausgeführt, das neben dem Schalten der Dosen auch Requests von einem Client beantworten kann. Einer dieser Requests ist der „stat“-request, der etwa folgendes meint: Sag mir, was du jetzt gerade tust, was du als letztes getan hast und was du als nächstes tun wirst.

Diese Interprocess-Kommuikation wird über Sockets abgewickelt – dazu wird das geniale Framework ZeroMQ verwendet: ‚ an intelligent transport layer for distributed applications ‘.

Aus dem Guide:

ØMQ (also known as ZeroMQ, 0MQ, or zmq) looks like an embeddable networking library but acts like a concurrency framework. It gives you sockets that carry atomic messages across various transports like in-process, inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fan-out, pub-sub, task distribution, and request-reply. It‘s fast enough to be the fabric for clustered products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous message-processing tasks. It has a score of language APIs and runs on most operating systems. ØMQ is from iMatix and is LGPLv3 open source.

Das Switcher-Programm fragt im Main-Loop nonblocking die Queue ab und kann so Anfragen vom Client-Programm swclient.py beantworten.

Das Client-Programm swclient.py wird bei Bedarf in einer Konsole gestartet.

Eine Status-Abfrage ist zudem auch via Web-Interface möglich - siehe weiter unten. Aus diesem Grund ist im Pi der Web-Server lighttpd installiert.

Shutdown Pi

Für ordentlichen Shutdown des Pi läuft das Script softshut_upis.py. Dieses prüft, ob Pin GPIO27 auf Null geht - bei Tastendruck (rote Taste) auf dem UPiS-Board. Der Pi wird dann heruntergefahren mit dem Befehl „halt“. Das UPiS sorgt dafür, dass die 5-V-Versorgung des Pi abgeschaltet wird. Druck auf denselben Knopf schaltet 5 V zum Pi wieder ein.

Web-Interface

Auf dem Pi des Switchers ist der Web-Server lighttpd einschließlich PHP installiert. Via Port 8008 kann der Status des Switchers analog dem Commandline-Client swclient.py abgefragt werden. Mittels Port-Forwarding kann dieser auch von außerhalb des lokalen Netzwerks angefragt werden. Die gelieferte Webseite sieht so aus:

Statusabfrage via Web
Vergrößern Statusabfrage via Web
© Peter K. Boxler

Die Software-Komponenten

Das Switcher-Projekt besteht aus folgenden Codeteilen:

Software-Komponenten
Vergrößern Software-Komponenten
© Peter K. Boxler

Noch mehr coole Verwendungsmöglichkeiten für den Raspberry

Meine Raspberry Projekte:

Projekt Switcher

Projekt Xmas TV

Projekt Light Painting

- den Beitrag können Sie auch auf www.pcwelt.de/hacks lesen

Andere Links:

Eine erste Idee für die Ansteuerung des Handsenders habe ich in einem Artikel von Hermann Kurz gefunden. Er verwendete den ELRO-Handsender, da dieser bereits den Sende-Protokoll-Chip PT2262 sowie einen 433-MHz-Sender enthält.

Interprocess-Kommunikation mittels ZeroQM Framework

http://zeromq.org

UPiS-Module von PI-Modules.com

www.pimodules.com

Real Time Clock Module mit Batterie von Adafruit

www.adafruit.com/product/264

Funksteckdosen-Set von ELRO , Artikelnummer AB440S/3, 3 Stück mit Handsender

Hinweis für alle Bastler:

Wenn auch Sie ein kreatives Projekt entwickelt haben, schreiben Sie uns. Wir würden Ihre Konstruktionen, nützlich oder einfach nur schräg, gern auf www.pcwelt.de/hacks vorstellen. Schreiben Sie an Birgit Götz - hacks@pcwelt.de. 

0 Kommentare zu diesem Artikel

PC-WELT Hacks - Technik zum Selbermachen?

Raspberry Pi erfreut sich gerade unter Bastlern einer großen Beliebtheit. Kein Wunder, denn mit der 35-Euro-Platine lassen sich viele spannende Projekte realisieren. Vom Mediacenter, Netzwerkspeicher, Fotomaschine bis hin zum Überwachungssystem ist alles möglich. Dieser Bereich ist aber nicht nur dem Raspberry Pi gewidmet, sondern bietet auch viele Tipps, Tricks und Anleitungen für andere spannende Bastelprojekte.

2071215