Hat jemand buntes Licht bestellt? – Raspberry Pi als Helferchen #2

Buntes Licht zum Erzeugen von Stimmung ist doch was feines. Jeder kennt die tollen Lampen von Philips, die man in seinem Heimnetzwerk in nur allen erdenklichen Farben leuchten lassen kann. Es wäre doch aber viel zu einfach sich das zu kaufen, oder? Wieso bauen wir uns das nicht einfach selbst?

In diesem Blog-Beitrag geht es darum, wie man sich mithilfe eines Raspberry Pi Zeros und einer Ikea Lampe einen schönen Philips Hue Klon baut. In sehr kurzer Zeit hat man das perfekte Stimmungslicht für sein Zuhause gebastelt.

Buntes Licht als Stimmungsgeber

Ein fahl beleuchteter Raum kann sehr schnell deprimierend wirken. Buntes Licht kann also nicht nur zur Dekoration verwendet werden. Sogar auf das körperliche und psychische Wohlbefinden kann buntes Licht Auswirkungen haben.

Ein Artikel auf licht.de sagt dazu folgendes:

„Maßstab für das Wohlbefinden ist das natürliche Licht. Es ist sehr lebendig und verändert sich ständig im Laufe des Tages und des Jahres – sonnig oder dämmrig, warm oder kalt, diffus oder mit harten Schatten. Diese Lichtverhältnisse beeinflussen die Hormonproduktion des Menschen. Aktuelle Forschungen beschäftigen sich damit, wie Licht unsere ”innere Uhr“ steuert. Es bestimmt Tag- und Nachtzyklus, lässt uns müde oder aktiv fühlen.“

Genau diesen Effekt können wir beeinflussen mit einem kleinen Bausatz und ein wenig Programmierarbeit. Legen wir los!

Die Teileliste

Für dieses Projekt benötigen wir relativ wenig:

  • Raspberry Pi Zero (Wird meist geliefert mit USB Adapter und HDMI Adapter) – ca. 15 €
  • Micro SDHC Karte mit ~ 8GB – ca. 5 €
  • Netzteil 5V, 2A – ca. 5 €
  • WLAN Stick (Empfehlung Edimax EW7811) – ca. 7 €
  • Stiftleiste passend für RasPi Zero – ca. 1 €
  • Ikea FADO Tischlampe – ca. 10 €
  • Sugru – ca. 13 €
  • Unicorn HAT – ca. 30 €

Hat man nicht ohnehin irgendwas hiervon schon daheim, dann belaufen sich die Gesamtkosten des Projektes auf ca. 90 €

Das Werkzeug

Benötigt werden folgende Werkzeuge:

  • Lötkolben mit Lötzinn (am besten eine feine Lötspitze)
  • Klammern
  • kleine Säge

Das Handwerk

  • Schritt 1 – GPIO Header auf Raspberry Pi Zero löten

Damit wir das Unicorn HAT am Raspberry überhaupt betreiben können, benötigen wir die nicht vorgelöteten GPIO Header. Dafür nehmen wir unsere Stiftleiste, setzen sie auf den Pi und klemmen sie mit einem Hilfsmittel der Wahl fest. Nun wenden wir den Pi und löten auf der Unterseite den GPIO Header an. Hierfür ist Feingefühl und Vorsicht notwendig, damit wir die Leiterplatine des Pis nicht beschädigen.

Zum Schluss kann man die Stifte mithilfe einer Zange auf das notwendige Maß kürzen, sodass der Header plan auf der Stiftleiste aufliegt. Seid vorsichtig, dass ihr sie nicht zu kurz macht.

Ein sehr schönes Video wie ihr die Header auflötet findet ihr zum Beispiel hier:

  • Schritt 2 – Lampenfuß modifizieren

Damit der Pi so flach wie möglich auf den Lampenfuß-Halter passt muss man das Plastikgewinde der Ikealampe einfach so weit wie möglich unten absägen.

Unicorn Hat für Raspberry Pi Lampe

  • Schritt 3 – Zusammenbau

Nun muss man nur noch, wie im oberen und in den nachfolgenden Bildern zu sehen ist, den Pi mithilfe des Sugrus auf dem abgesägten Gewinde platzieren, den Unicorn HAT aufsetzen, das USB Adapterkabel mit WLAN Stick mittels Sugru positionieren und das Netzkabel durch ein Loch im Lampenfuß nach außen führen. Hat man die Trocknungszeit des Sugrus abgewartet, kann man vorsichtig den Lampenfuß aufklipsen und der Bastelpart ist erledigt.

Standfuß für Raspberry Pi Lampe Unicorn Hat für Raspberry Pi Lampe
Raspberry Pi für buntes Licht Raspberry Pi Lampe abgeschaltet

Der Code

Die Basis bildet eine Installation von Raspbian Jessie von der Foundation-Seite, gerne auch in der Lite Version. Wir müssen dann noch das WLAN einrichten, damit wir uns per SSH aufschalten können. Ist das erledigt, können wir beginnen die notwendigen Librarys zu beziehen.

Wir benötigen Python, was in der Installation von der Foundation schon vorhanden sein sollte (apt-get install python). Unser Webinterface basiert auf FLASK für python. Das sollte ebenfalls installiert werden, wenn es noch nicht vorhanden ist (apt-get install python-flask).

Der Unicorn Hat wird von Pimoroni hergestellt und vertrieben. Deshalb finden wir in deren Github auch eine Repo mit den notwendigen Librarys um diesen Hat zu betreiben.

Codeauszug zur Installation:

\curl -sS get.pimoroni.com/unicornhat | bash

Danach sollten alle Gegebenheiten vorhanden sein und wir können anfangen den Code zu entwickeln.

Folgende Ordnerstruktur sollten wir am Ablageort unserer Wahl für FLASK erstellen:

  • Oberverzeichnis (in meinem Fall „moodlight“)
    • Im Root dieses Oberverzeichnisses legen wir eine Datei an namens mood.py. Das ist unser eigentlicher Script.
    • neues Unterverzeichnis „static“
      • Hier hinterlegen wir alle statischen Inhalte des Webinterfaces. Bei mir finden sich hier: „jquery-2.1.4.min.js“, „spectrum.css“, „spectrum.js“, „style.css“ – Erklärung folgt gleich.
    • neues Unterverzeichnis „templates“
      • Hier hinterlegen wir die html-Seiten für unser Webinterface. Bei mir befindet sich hier nur eine Datei: mood.html

Nun erläutere ich die einzelnen Codeteile.

  • ../moodlight/mood.py
#!/usr/bin/python

#Hier erfolgt der Import der notwendigen Librarys
from flask import Flask, render_template
import unicornhat as unicorn
import time, stat, threading

#Das ist die Appdefinition
app = Flask(__name__)

#Für den Rootpfad unseres Webpfades gibt die Flask App die mood.html
#aus unserem Unterverzeichnis /templates/ wieder
@app.route('/')
def home():
        return render_template('mood.html')

#Rufe ich in unserem Webpfad z.B. http://IP-ADRESSE-DES-PIS/off auf, so
#wird per Modul threading ein Thread erzeugt der unicorn.off sendet
#Das Licht geht in Folge dessen aus
@app.route('/off')
def off():
        s = threading.Thread(None,unicorn.off)
        s.start()
        return "ok"

#Für diesen Befehl /fill/ mit 3 Parametern, z.B. /fill/255/0/0 würde
#unicorn für alle 8 Reihen und alle 8 Spalten die Farbe auf Rot = 255
#Grün = 0 und Blau = 0 setzen, also Rot.
#Anschließend wird noch der Befehl unicorn.show abgesetzt, was zur Folge
#hat, dass der Unicorn HAT auch die Farbe anzeigt
@app.route('/fill///')
def fill_pixels(r, g, b):
        r, g, b = int(r), int(g), int(b)
        for y in range(8):
                for x in range(8):
                        unicorn.set_pixel(x, y, r, g, b)
        s = threading.Thread(None,unicorn.show)
        s.start()
        return "ok"

#Nach den sämtlichen Funktionsdefinitionen wird dann noch der Webserver
#gestartet auf allen lokalen Interfaces und Port 80 ohne Debugfunktion
#mit einer unicorn brightness von 1.0, also 100%
if __name__ == "__main__":
        unicorn.brightness(1.0)
        app.run(host='0.0.0.0', port=80, debug=False)

Damit wir dann auch was angezeigt bekommen, müssen wir natürlich die mood.html erstellen.

  • ../moodlight/templates/mood.html

Raspberry Pi Lampe mood

Zu Anfang werden die normalen HTML Tags abgehandelt. Man findet zwischen Zeile 6 und 10 den Aufruf von Spectrum und Jquery, sowie die Definition des Stylesheets, was ich erstellt habe, um auf der Website mit einem sogenannten Color Picker die Farbe wählen zu können. Mein Stylesheet hänge ich unten an. Die anderen drei Dateien sind vom jeweiligen Urheber unverändert übernommen.

Dann habe ich auf Zeile 15 eine Überschrift definiert. Bei mir steht das Moodlight im Wohnzimmer.

Der DIV zwischen Zeile 17 und 19 ist der Aufruf für den Spectrum Color Picker.

Der Button in Zeile 21 ist der Aus-Knopf.

Der Teil zwischen Zeile 23 und 39 ist der eigentliche Script, der immer bei Veränderung der Farbe im Colorpicker die Farbe im richtigen Format ausliest und dann als /fill/r/g/b an localhost übergibt. Dadurch wird die FLASK App Funktion mit den richtigen Werten aufgerufen und die Lampe ändert ihre Farbe. Man sieht ebenfalls, dass für das Objekt Button (mein Aus-Knopf) der Pfad /off aufgerufen wird. So kann man die Lampe auch wieder abschalten.

Und so sieht das fertige Webinterface aus:

Raspberry Lampe Webinterface

Dieses Webinterface funktioniert auch ausgezeichnet auf Touch-Devices, wie den gängigsten Smartphones und Tablets.

Wählt man nun eine Farbe, so leuchtet die Lampe entsprechend auf:

Raspberry Pi Lampe offenRaspberry Pi Lampe angeschaltet

  • Schritt 4 – Autostart nicht vergessen

Zuletzt sollte man nicht vergessen den Aufruf „python /Pfad/zum/moodlight/mood.py“ in den Autostart zu legen. Hierfür wählen wir das Mittel der Wahl. Ich habe mich für Systemd entschieden. Möglich wären auch rc.local, crontab -e, Startscript in /etc/init.d.

Fazit

Dies ist eine total coole Art sich selbst einen Philips Hue Klon zu bauen. Ein spaßiges, kleines Projekt für den Sonntag Nachmittag.

Ich hoffe es hat euch gefallen und vielleicht baut ja der ein oder andere so eine Lampe ja auch für sich. Über eure Erfolgsstories im Kommentarbereich freue ich mich und wünsche gutes Gelingen.

Euer Patrick

Appendix

  • ../moodlight/static/style.css
 html {
 -webkit-touch-callout: none;
 -webkit-user-select: none;
 -khtml-user-select: none;
 -moz-user-select: none;
 -ms-user-select: none;
 user-select: none;
 background: #333; /* For browsers that do not support gradients */
 background: -webkit-linear-gradient(left top, black, white); /* For Safari 5.1 to 6.0 */
 background: -o-linear-gradient(bottom right, black, white); /* For Opera 11.1 to 12.0 */
 background: -moz-linear-gradient(bottom right, black, white); /* For Firefox 3.6 to 15 */
 background: linear-gradient(to bottom right, black, white); /* Standard syntax */
 background-attachment: fixed;
}

body {
 margin: 0 30px;
}

h1 {
 widht: 325px;
 color:#FFF;
 font-family: Verdana, Arial, sans-serif;
 line-height:40px;
 font-size:135%;
}

#aus {
 width: 325px;
 height: 167px;
 margin-left: 15 px;
 margin-top: 5px;
 clear: left;
 background: #333;
 -webkit-border-radius: 10px;
 -moz-border-radius: 10px;
 border-radius: 10px;
 -webkit-box-shadow: 7px 7px 5px 0px rgba(0,0,0,0.75);
 -moz-box-shadow: 7px 7px 5px 0px rgba(0,0,0,0.75);
 box-shadow: 7px 7px 5px 0px rgba(0,0,0,0.75);
 font-size: 300%;
 color: #fff;
 font-family: Verdana, Arial, sans-serif;
 text-shadow: 4px 4px 2px rgba(0, 0, 0, 1);
 -webkit-touch-callout: none;
 -webkit-user-select: none;
 -khtml-user-select: none;
 -moz-user-select: none;
 -ms-user-select: none;
 user-select: none;
 outline: 0 none;
}

3 Kommentare

  1. Hallo Patrick,
    vielen Dank, mit deiner Hilfe konnte ich mir meine eigene Mood-Lampe herstellen.
    Liebe Grüße,
    Michael

  2. Hi Patrick,
    danke für deine Inspiration, jedoch fehlen mir die erforderlichen Files um das Projekt nachzubauen, könntest Du sie mir evtl schicken? Auch Google konnte mir nicht weiterhelfen.
    Liebe Grüße,
    Michael

Schreibe einen Kommentar

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

CAPTCHA *