Good Vibrations – Das “Käschtle”

Ich habe eine Stereoanlage. Und eine MP3-Sammlung. Beides für sich ist toll. Zusammen war es bisher immer ein Krampf. Meist habe ich das Notebook vor die Anlage geschleppt, unter Verrenkungen eine Kabelverbindung hergestellt und … ein Lied gehört. Dann wurde das Ganze wieder abgebaut. Das muss doch besser gehen, dachte ich seit langem; und habe trotzdem nix Passendes gefunden. Bis ich von der Kombination aus Volumio und einem Raspberry Pi gehört habe. Einen Versuch ist es wert, dachte ich mir.

Volumio ist eine aufeinander abgestimmte Sammlung von Softwarekomponenten zur Verwaltung und vor allem Steuerung einer Musiksammlung. Bereitgestellt wird der Zugriff über eine schicke Weboberfläche.

Zunächst braucht man zur Inbetriebnahme die richtige Hardware. Das ist als Basis ein Raspberry Pi. Viel mehr als ein Krächzen ist dem aber nicht zu entlocken. Glücklicherweise gibt es DACs (z.B. Hifiberry), also Erweiterungen, die die fehlende Soundqualität in Form eines Aufsteckmoduls nachliefern. Außerdem braucht man einen USB-WLAN-Stick für die Fernsteuerung und natürlich eine SD-Karte für die Software.

elektronik_bauteileAuf die SD-Karte überträgt man einfach das Image, das direkt von Volumio zur Verfügung gestellt wird. Bereits beim ersten Booten startet damit Volumio und liefert (fast) alle notwendigen Einstellungen mit. Selbst die Konfiguration des DACs und des WLAN-Sticks kann man direkt aus Volumio heraus vornehmen. Das System ist also schnell zusammengesteckt. Bleibt noch die Frage, wie auf die Musik zugegriffen werden kann. Auch da liefert Volumio einige unterschiedliche Möglichkeiten mit (USB-Festplatte, NAS, temporärer Speicher über Netzlaufwerksfreigabe). Die von mir bevorzugte Lösung – die Musik kommt mit auf die SD-Karte – ist leider nicht mit dabei. Mit ein wenig Kreativität ist auch das schnell nachgezogen.

Jetzt will man die nackte Hardware aber natürlich nicht auf der Stereoanlage rumliegen haben – ein schmuckes Kästchen (ab hier nur noch “Käschtle” genannt) muss her. Dazu habe ich mir die sechs Seitenflächen aus Multiplex auf Gehrung gesägt.

holzteileDabei möchte ich auf den neusten Zuwachs in meiner Werkstatt hinweisen: eine Japansäge mit Schneidlade:

sägeladeDer perfekte Schnitt gelingt zwar auch damit noch nicht direkt, mit etwas Übung sind die Ergebnisse aber schnell besser als mit der Stichsäge. Die Seitenflächen werden miteinander verklebt und die Elektronik mit kleinen Abstandshaltern im Inneren verschraubt.

befuellter_kastenFertig ist das Käschtle.

geschlossener_kastenDas findet seinen Platz auf der Stereoanlage und fügt sich trotz des ganz anderen Materials wunderbar ein.

im_einsatz2Und? Ist das nun die Lösung? Ja, sie ist es. Zumindest bis auf Weiteres. Der Zugriff ist bequem und komfortabel, die Tonqualität ist sehr gut und endlich scheitert das Hören eines einzelnen Songs nicht mehr daran, dass es zu umständlich ist, ihn auf die Anlage zu bringen. Ganz nebenbei empfängt Volumio über Airplay beispielsweise auch die Tonspur von Filmen, die man auf dem Notebook guckt; damit gewinnt sogar das Heimkino etwas dazu.

Advertisements

Es werde Licht ….

Wir haben viele Lampen im Wohnzimmer. Das ist schön. Leider ist keine dabei, die das ganze Zimmer erleuchtet. Daher läuft man morgens zunächst an 3-5 Schalter, um die richtige Beleuchtung einzustellen. Vielleicht auf dem Weg auch nochmal wieder zurück, weil die eine Lampe dann doch falsch war. Wäre es nicht schön, wenn das einfacher wäre? Ja, das wäre es. Und das lässt sich machen!

Im Baumarkt oder im Internet (z.B. hier) findet man Funksteckdosen. Die sehen etwa so aus:

funksteckdose

und lassen sich mit einer Fernbedienung an- und ausschalten:

schalterDamit müsste man schon nicht mehr zu allen Lampen laufen, sondern könnte sie zentral steuern. Noch schöner wäre es aber natürlich, wenn man Kombinationen von Lampen zusammenstellen und gemeinsam schalten könnten. Dazu muss die Kontrolle über eine zentrale Software laufen. Natürlich bietet sich der Raspberry Pi-Server aus den vorherigen Posts für so eine Aufgabe an.

Zunächst muss der aber lernen, per Funk mit den Steckdosen zu kommunizieren. Dazu schliesse ich einen RF-Link-Transmitter (hier Typ WRL-10534) an; Stromversorgung mit 3,3V oder 5V, Masse und einen GPIO-Port für die Daten:

rf_link_transmitter

Der muss vor dem Anschluss verkabelt …

rf_link_transmitter_verkabelt

… und in das Gehäuse integriert werden:

rf_link_transmitter_gehause

Auf der Softwareseite ist das Vorgehen sehr ähnlich zur Ansteuerung des kombinierten Temperatur- und Luftfeuchtigkeitssensors DHT22. Die Kommunikation auf der untersten Ebene übernimmt ein C++-Programm. Das basiert auf der Software RCSwitch. Da der Kern meiner Heimautomatisierung wie beschrieben in Java implementiert ist, benötige ich wieder einen Swig-Wrapper zur Verwendung. Der Webserver muss um eine zusätzliche REST-Schnittstelle erweitert werten: Es müssen die Informationen zur Identifikation der Steckdosen und je ein Kommando für AN und AUS übermittelt werden.

Die Identifikation der Steckdosen ist vielleicht noch ein ganz spannender Punkt. Jede Steckdose verfügt nämlich über einen System- und einen Unit-Code. Die beiden Codes lassen sich direkt an der Steckdose einstellen:

codeDie Software verwendet dann die Codes, um die richtige Steckdose anzufunken.

Damit sind der atmosphärischen Lichtsteuerung eigentlich keine Grenzen mehr gesetzt. Bisher habe ich nur die Steuerung über die Weboberfläche umgesetzt (siehe Video). Generell lassen sich nun aber dynamische Sequenzen programmieren und beliebig und von überall her starten.

Warm und Trocken

In einem vorherigen Post habe ich die Basis für unsere Heimautomatisierung beschrieben: den Raspberry Pi. In diesem Post geht es nun um den ersten dort angeschlossenen Sensortyp: der DHT22. Dabei handelt es sich um einen kombinierten Temperatur- und Luftfeuchtigkeitssensor.

dht22Um den Sensor verwenden zu können, muss er zunächst an den Raspberry Pi angeschlossen werden. Von den vier Pins werden dazu drei benötigt: Versorgungsspannung 3.3V, Datenkanal und Masse. Der Pin mit der Vorsorgungsspannung und der Datenpin werden über einen Widerstand (hier 5.6 kOhm) miteinander gekoppelt. Versorgung und Masse werden auf der GPIO-Steckerleiste des Raspberry Pis an den entsprechenden Pins angeschlossen. Der Datenkanal kann an einen beliebigen GPIO-Port angelegt werden. Weitere Details zum Anschließen des Sensors finden sich an vielen Stellen (Google ist dein Freund: “DHT22 Raspberry Pi”) im Netz.

Die Ansteuerung des Sensors direkt über Java (darin ist meine zentrale Software auf dem Raspberry Pi geschrieben) ist nicht ganz einfach. Glücklicherweise habe ich hier sehr kompakten und übersichtlichen C-Code gefunden, den ich in eine einfache C++-Klasse integrieren konnte. Über einen Java-Native-Interface- (oder auch JNI)-Wrapper (konkret SWIG) bekomme ich Java-Klassen, die sich nahtlos in die übrige Software integrieren. Damit lässt sich der Sensor wunderbar ansprechen.

Die Sensorwerte lese ich regelmäßig aus und lege sie in der Datenbank ab. Damit lässt sich der Temperaturverlauf über beliebige Zeiträume überwachen. Zur übersichtlichen Darstellung verwende ich die JFreeChart-Bibliothek. Hier beispielsweise die Temperaturkurve in unserem Keller aus dem letzten 24h:

tempertature_24hGegen 15 Uhr habe ich das Kellerfenster geöffnet und dies bis 20 Uhr vergessen …

Und fertig ist der erste Schritt auf dem Weg hin zu Big-Brother.

Heim-Automatisierung: der Kern

Angetrieben von dem Verdacht, dass unser unisolierter Keller vielleicht zu feucht sein könnte, habe ich mir vorgenommen, unser Haus zu überwachen und teilweise zu automatisieren. Bis es soweit ist, liegt aber noch ein weiter Weg vor mir. In dieser Blogpost-Serie will ich von dem Weg berichten.

Die erste Frage, die ich mir bei dem Projekt gestellt habe, war, auf welche Technologie ich setzen sollte. Es gibt mittlerweile eine Reihe von Ansätzen und Anbietern, die fertige Plug-And-Play-Lösungen bereitstellen (z.B. Phillips Hue für Beleuchtung, Homematic, FS20, …). Aber auch auf Softwareseite sprießen die Frameworks gerade massiv aus dem Boden (Eclipse Smart Home, OpenHAB, …). Da der Weg aber das Ziel ist und ich sowohl bei der Hardware als auch bei der Software basteln wollte und will, habe ich mich für eine vollständig eigenständige Lösung entschieden. Ein Schritt, den ich später mit Sicherheit noch bereuen werde.

Im Kern steht ein Raspberry Pi. Später kann es sein, dass es sogar mehrere miteinander vernetzte RaspPis werden. Auch wenn nicht die Sprache der Wahl für hardwarenahe Lösungen, habe ich mich dennoch für Java als Programmiersprache entschieden. Einfach weil ich darin zur Zeit am liebsten entwickle. Durch die ersten Trial-And-Error-Versuche (auf modern: agile P-D-C-A oder Plan-Do-Check-Act-Zyklen) bin ich mittlerweile bei folgender Architektur angekommen:

architektur

Auf dem Raspberry Pi läuft das (Standard-)Betriebssystem Raspbian. Als Ökosystem für den Start habe ich außerdem einen MySQL-Datenbankserver, Java und die WiringPi-Bibliothek installiert. Ich werde hier nicht die Basics zum Aufsetzen eines neuen Raspberry Pis beschreiben, dazu gibt es ausreichend (sehr gute) Anleitungen in diesem Internet. Kern der eigentlichen Lösung ist ein Java-Programm, das ich RaspiServer genannt habe. Es wird später die Aufgabe haben, die Sensoren und Aktoren anzusprechen, Sensordaten in der Datenbank abzulegen und als Webserver den aktuellen Stand zur Verfügung zu stellen (und vielleicht viel mehr). Tatsächlich sind für die verschiedenen Sensoren auch noch ein paar weitere Dienste und Bibliotheken notwendig, darauf gehe ich aber bei späteren Posts noch genauer ein. Zum Abschluss noch ein Bild des aktuellen Aufbaus:

raspberrypiRechts hinten ist der Raspberry Pi zu sehen. Zentrale Komponente für das Heimautomatisierungsprojekt ist die schwarze Steckerleiste (GPIO oder General-Purpose-I/O-Leiste). Dort können die Sensoren und Aktoren angeschlossen werden.

Links vorne kann man einen Tinkerforge-Stapel aus Bricks sehen. Dazu gehören auch das Display (hinten links) und die beiden Sensoren (vorne rechts). Zu Tinkerforge wird es sicher bald auch noch mal einen Post geben.