d12g

Blog von Daniel Grewing

Internet der Dinge – Mein Weihnachtsprojekt

| 3 Kommentare

Das Internet der Dinge („Internet of Things oder kurz IoT) mutierte in letzter Zeit immer mehr zum Schlagwort bei den aktuellen IT-Trends. Die Definition ist nicht ganz eindeutig und es existieren viele verschiedene Anwendungsbereiche. Kühlschränke können das Essen selbständig nachbestellen, der Toaster druckt das Wetter auf den Toast, die Heizung reguliert sich selbstständig oder die Uhr wird zur Verlängerung des Smartphones. Im Grunde sollen alle „Dinge“ über das Internet kommunizieren.

Kleinstcomputer, Elektronikbauteile und Sensoren
Die Entwicklung bei Kleinstcomputern (Raspberry Pi, Banana Pi) und einfachen modularen Elektronikbauteilen und Sensoren (Arduino, Tinkerforge) machen es einfach, auch selbst mit dem IoT zu experimentieren. Also habe ich zu Weihnachten mein erstes IoT-Projekt umgesetzt.
Zur Tradition von Weihnachten gehört es, die Wohnung zu dekorieren und das Lichtkonzept zu erweitern. Ein häufig anzutreffender Umbau ist, die Fenster mit Lichterketten zu versehen. Dadurch wird die Wohnung festlicher beleuchtet und der Welt wird demonstriert, „jo, hier wird Weihnachten gefeiert“.
Um nicht alle Lichterketten, wenn die Dunkelheit hereinbricht, händisch an, und vor dem Zubettgehen, wieder aus zu machen, verwendet man zur Steuerung Zeitschaltuhren. Das sind Aufsätze für Steckdosen und über kleine mechanische Stäbchen kontrolliert man die Steuerung der Stromzufuhr zeitabhängig. Um diese anachronistischen und mechanischen Brocken zu ersetzen, davon handelt mein Beitrag.

Weihnachtslichter und das Internet
Mit wenigen Bauteilen konnte ich zu Weihnachten die zeitliche Steuerung der Lichterketten von einem Computer übernehmen lassen, sowie die Lichter über eine Webanwendung manuell schalten.
Die Schaltung der Lichterketten erfolgte über den Raspberry Pi.
blog_rp

Den Raspberry Pi habe ich über USB mit dem Masterbrick von Tinkerforge verbunden, der wiederum mit dem Remote Switch Bricklet verbunden war.
blog_tf

Zur Schaltung der Lichterketten habe ich schaltbare Steckdosen von Brennenstuhl verwendet.
breenenstuhl

Erste Schaltung der Lichterketten
Für den ersten Test der Konstruktion kann man den Brickviewer von Tinkerforge verwenden und sich mit dem Masterbrick verbinden.
Bildschirmfoto vom 2015-02-05 19:53:37

In der Brennenstuhl-Steckdose wählt die Werte für den House Code (1-2-3-4-5) und den Receiver Code (C-D). Den House Code habe ich bei allen Steckdosen gleich gesetzt und nur den Receiver Code variiert.
brennenstuhl2

Gibt man diese Werte im Brickviewer ein und verbindet sich mit dem Master Brick kann man die Steckdosen bereits schalten.
Bildschirmfoto vom 2015-02-05 19:53:59

Zeitliche Steuerung
Für die Programmierung benötigt man dann die Werte für den House Code und den Receiver Code, hier also 33 und 12.

Für die zeitliche Steuerung habe ich auf dem Raspberry Pi mehrere Cronjobs eingerichtet. Diese führen zeitgesteuert ein Java-Programm aus. Für die Steuerung einer Lichterketten habe ich jeweils vier Jobs eingerichtet.
Diese machen folgende Aktionen:
Licht an um 06:30 Uhr und um 15:30 Uhr
Licht aus um 08:30 Uhr und 23:25 Uhr.

Hier die Eintrage in der Crontabelle für eine Steckdose.

30 6  * * * java -jar /home/pi/remotePower.jar 31 12 1
30 15 * * * java -jar /home/pi/remotePower.jar 31 12 1

30 8  * * * java -jar /home/pi/remotePower.jar 31 12 0
15 23 * * * java -jar /home/pi/remotePower.jar 31 12 0

Über Java wird dann remotePower.jar ausgeführt. Als Parameter übergibt man den House Code, den Receiver Code sowie die Schaltung (1=an, 0=aus). Die ausführbare Klasse in der jar-Datei sieht so aus:

package remoteSwitch;	 	 
import com.tinkerforge.BrickletRemoteSwitch;	 	 
import com.tinkerforge.IPConnection;	 	 

public class PowerSwitcher {	 	 
    private static final String HOST = "localhost";	 	 
    private static final int PORT = 4223;	 	 
    private static final String UID = "ooy";	 	 

    public static void main(String args[]) throws Exception {	 	 
        Short housecode = Short.parseShort(args[0]);	 	 
        Short receivercode = Short.parseShort(args[1]);	 	 
        Short onOrOff = Short.parseShort(args[2]);	 	 
        // Create IP connection	 	 
        IPConnection ipcon = new IPConnection();	 	 
        // Create device object	 	 
        BrickletRemoteSwitch rs = new BrickletRemoteSwitch(UID, ipcon); 	 	 
        ipcon.connect(HOST, PORT); 	 	 
        // Connect to brickd and switch 	 	 
        rs.switchSocketA(housecode.shortValue(), receivercode.shortValue(), onOrOff.shortValue());	 	 
        ipcon.disconnect();	 	 
    }	 	 
}	 	 

Manuelle Steuerung
Für etwas mehr Flexibilität bei der Steuerung habe ich noch eine Grails Anwendung geschrieben. Diese lief auf einem Tomcat auf dem Raspberry Pi. So konnte ich die Lichter über den Browser steuern.

Eine Übersicht aller Leichtleisten mit Buttons für die Steuerung

Eine Übersicht aller Lichterketten mit Buttons für die Steuerung

Einstellungen für eine Lichterkette

Einstellungen für eine Lichtleiste

Fazit
Insgesamt hat die zeitliche und manuelle Steuerung ganz gut geklappt. Manchmal schienen sich die Steckdosen “aufgehangen” zu haben und sie haben nicht mehr geschaltet. Man musste sie dann manuell ohne Lichterkette einmal ansteuern, dann funktionierte es wieder. Für die Webanwendung war mein Raspberry Pi etwas träge, aber ich denke 2015 wird das durch das aktuelle Model besser werden. Für die Version 2015 möchte ich auch weg von den Cronjobs. Jeweils vier Einträge für eine Steckdose finde ich zuviel. Stattdessen möchte ich die Grails-Anwendung um einen Job-Scheduler erweitern. Eine weitere Idee wäre es noch, die Lichterketten abhängig zu einem Lied (Last Christmas von Wham!, zum Beispiel) schalten zu lassen und so der Welt eine Lichtershow zu bieten.

3 Kommentare

  1. Hallo Daniel,
    das Thema Weihnachtsprojekt mit der Cron-Steuerung ist genau das was ich umzusetzen versuche (RPi + TinkerForge).
    Ansteuerung per brickv funktioniert, jedoch scheitere ich derzeit mit meinen Java Kenntnissen.
    Am RPi ist oracle-java8-jdk installiert. Mit “java -jar ./remotePower.jar” gibt es aber nur Fehlermeldungen (Invalid or corrupt jarfile). Ist die gelistete jar-Datei nur ein Fragment?
    Ich würde mich über Informationen freuen.
    Vielen Dank im Voraus
    Alexander Musil

  2. Hallo Daniel,
    habe heute einen Energieschub gehabt – und jetzt funktioniert es mit der Java-Programmierung.
    Danke für die Basisinformation in Deinem Blog.

    LG
    Alexander

  3. Hallo Alexander,

    das freut mich zu hören. Hast du das mit dem jarfile noch hinbekommen oder hast du es selbst umgesetzt?
    Da Weihnachten ja fast schon wieder vor der Tür steht, werde ich das Projekt bald auch wieder angehen und mal schauen, was ich noch so optimieren könnte.

    Grüße
    Daniel

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.