Raspberry Pi + OpenHAB 2: WS2801 / WS2812 RGB LED Streifen steuern

Das Smart Home System OpenHAB 2 liefert uns sehr viele Optionen unser Haus zu automatisieren und alles von einem Punkt aus zu steuern. Dazu gehört auch eine Zimmerbeleuchtung, die mittels WS2801 oder aber WS2812B RGB LED Strips realisiert werden kann. Wir wollen daher auch diese Art der Steuerung in unser Panel einfließen lassen und bspw. die Farbe der Deckenbeleuchtungen mittels App auf dem Handy oder Tablet ändern können.

Wir starten also mit der Einrichtung der RGB LED Strips und richten anschließend OpenHAB 2 so ein, dass wir bequem die Farbe über das mobile Panel auswählen können.

Dieses Tutorial ist für den WS2801 Streifen optimiert. Du kannst allerdings genauso gut einen WS2812B LED Strip verwenden, jedoch musst du dann den Code am Ende ein wenig anpassen (sehr einfach).

 

Zubehör

Raspberry Pi WS2812 RGB LED Strip

Die LEDs der WS2812 bzw. WS2801 Streifen können jegliche Farben annehmen.

Bis auf die Streifen an sich, ist das benötigte Zubehör identisch. Diese Komponenten habe ich benutzt:

Ich empfehle Anfängern ein Spannungsnetzteil und kein Schaltnetzteil zu verwenden (wie ich im Video). Falls du dies doch tun möchtest, allerdings keine Erfahrung damit hast, so bitte ich dich einen Elektriker um Hilfe zu bitten. Das Tutorial-Video kannst du dir bereits ansehen, bevor wir alles Schritt-für-Schritt durchgehen:

Die mehrfarbigen LED „Lichterketten“ können als Raumbeleuchtung bzw. zur Deko verwendet werden. Welche coolen Effekte mit einem WS2801 Streifen dargestellt werden können, siehst du im folgenden Video:

Diese Effekte sind zwar nicht in OpenHAB erstellt worden, allerdings lassen sie sich ebenfalls sehr einfach nachbilden (z.B. auf Knopfdruck: führe Effekt X aus).

 

Anschluss der WS28xx RGB LED Streifen

Bevor wir die Konfiguration von OpenHAB vornehmen, schließen wir den WS28xx RGB LED Streifen an. Dazu sollte jegliche Stromverbindung unterbrochen sein.

Beim WS2801 Streifen werden drei Pins angeschlossen: GND kommt an GND, DI vom Streifen kommt an GPIO 10 / MISO und CI kommt an GPIO 11 (SCKL). Außerdem werden vom Streifen der 5V Pin und GND noch an ein externes 5V Netzteil angeschlossen. Mehr Informationen findest du in diesem Artikel.

Raspberry Pi WS2801B RGB LED Stripe Schaltplatine

Wenn du hingegen einen WS2812 LED Strip nutzt, so ist der Aufbau etwas anders, da dieser Streifen nur einen Datenpin hat. Wie du ihn genau anzuschließen hast, erfährst du im entsprechenden Tutorial dazu.

Ich würde in beiden Fällen Anfängern nicht dazu raten ein Schaltnetzteil zu nehmen! Sofern du keine Erfahrung hast nimm lieber das etwas teurere Spannungsnetzteil und sei damit auf der sicheren Seite.

 

Raspberry Pi und OpenHAB 2 WS2801 / WS 2812 Vorbereitung

OpenHAB 2 liefert uns die Möglichkeit u.a. Shell Befehle auszuführen und hat im User Interface einen Colorpicker. Beides werden wir im folgenden brauchen, da wir zum einen ein Skript erstellen, welches die WS28xx Streifen steuern wird und zum anderen eine Regel in OpenHAB (Rules), das dieses Skript aufruft sobald die ausgewählte Farbe geändert wird.

Wir fangen also an, indem wir in OpenHAB das benötigte Execute Add-on installieren. Nachdem OpenHAB installiert wurde, kannst du einen Browser öffnen und zur OpenHAB PaperUI wechseln: http://openhabianpi:8080/paperui/index.html#/extensions
Unter Extensions -> Add-ons suchst du nach „Exec“ und installierst dieses Plugin.

Anschließend wechseln wir in die Shell (via SSH). Der Standard-User und Passwort lauten openhabian. Zunächst einmal werden wir ein Python Programm erstellen, welches drei Parameter (Rot, Grün und Blau Werte) nimmt und unseren WS2801 Streifen entsprechend einstellt (alle LEDs):

sudo nano /etc/openhab2/scripts/ws28xx.py

Entsprechende Anpassungen müssen ggf. für den WS2812B Streifen vorgenommen werden. Die entsprechenden Pakete müssen wie in den anderen Tutorials beschrieben für Python 3 (sudo pip3 install adafruit-ws2801) installiert werden (bei Python 2 müssen die folgenden Skripte angepasst werden). Speichere mit STRG+O und kehre mit STRG+X zurück zur Konsole. Das Skript bekommt nun noch Rechte, damit es vom openhab User ausgeführt werden kann:

sudo chmod +x /etc/openhab2/scripts/ws28xx.py
sudo addgroup openhab spi

Zum testen kannst du diesen Befehl aufrufen (wird als openhab User ausgeführt):

sudo -u openhab /usr/bin/python3 /etc/openhab2/scripts/ws28xx.py 123 123 123

 

Wir erstellen nun eine Datei für OpenHAB 2, welche ein „Item“ enthält, das den Colorpicker darstellt:

sudo nano /etc/openhab2/items/ws28xx.items

Das Item hat keine Besonderheit – lediglich einen internen Namen und ggf. einen angzeigten Namen:

Color WS28xx_Strip

Nun müssen wir eine Regel definieren, die besagt, dass das vorher erstellte Skript für den WS28xx Streifen mit den RGB Parametern aufgerufen werden soll, sobald der Farbwert geändert wird.

sudo nano /etc/openhab2/rules/ws28xx.rules

Die Regel ließt den RGB Wert aus dem HSV Objekt aus, wandelt diesen in RGB um und sendet diesen als Eingabeparameter an das Python Skript:

Das war es bereits! Nach dem Speichern sollte die Regel bereits aktiv sein. Ein letzter Schritt fehlt allerdings noch, damit wir den Colorpicker auch wirklich nutzen können, nämlich wird er im Moment noch nirgends angezeigt. Daher erstellen wir eine neue Sitemap (oder erweitern eine alte) und fügen das Item hinzu:

sudo nano /etc/openhab2/sitemaps/ws28xx.sitemap

Der Inhalt ist folgender und wird in der Basic UI angezeigt:

 

Steuerung über das OpenHAB 2 Panel

Wir rufen jetzt das User Interface von OpenHAB auf. Die BasicUI enthält alle definierten Sitemaps. In unserem Fall ist diese unter http://openhabianpi:8080/basicui/app?sitemap=ws28xx zu finden (ggf. durch die lokale IP Adresse zu ersetzen).

Hier siehst du das definierte Item, bei welchem der Colorpicker geöffnet wird:

Raspberry Pi Panel OpenHAB 2 WS2801 WS2812 RGB LED

Sobald eine Farbe ausgewählt wurde, wird der HSB Itemwert geändert. Dadurch wird außerdem automatisch unser Skript aufgerufen, das die Farbe des RGB Strips setzt. Bisher setzen wir die Farbe des gesamten Streifens, aber es ist natürlich ebenso möglich bestimmte Muster oder Effekte ausführen zu lassen. Wie diese definiert werden sind in den eigentlichen Tutorials zu den RGB LED Streifen definiert.

Wie mehrfach erwähnt, sind Effekte auch mit dem WS2812 möglich. Falls du diesen Streifen nutzen willst, kannst du hier ein Beispielvideo sehen:

12 Kommentare

  1. Tolles Tutorial, mich würde interessieren, wie man die LEDs über einen ESP8266 oder Ähnliches steuern kann und diesen dann ins OH2 einbindet. Das macht die Positionierung des LED Strips einfacher.

    Antworten
  2. Hallo,
    ist mit „Spannungsnetzteil“ ein _Fest_spannungsnetzteil mit geschlossenem (schutzisoliertem) Gehäuse (Steckernetzteil oder Tischnetzteil) gemeint, im Gegensatz zu „open-frame“ Geräten, also Geräten ohne Gehäuse, bei denen spannungsführende Teile offen zugänglich sind und somit berührt werden können, was gefährlich ist?
    Trafo-basierte (lineare) Netzteile sind seltener geworden, der Großteil der Stecker- und Tischnetzteile sind heute Schaltnetzteile.
    Mit freundlichem Gruß
    Harald

    Antworten
  3. Guten Tag
    Finde die Tutorials hier auf der Seite echt super und hilfreich,
    daher erst mal großes lob an euch .
    Ich bräuchte aber noch Hilfe und zwar habe ich mehrere WS2812b Bänder an ein über I2C angeschlossenen PCA9685 angeschlossen , wie bekomme ich die Ausgangsbefehle auf dieses board was muss ich dazu im Programm ändern und ist es möglich dort verschiedenen färben / effekte auf den verschiedenen LED Bändern laufen zu lassen

    Antworten
  4. Gibt es auch einen weg, die LED’s nicht von dem „Haupt“-Pi zu steuern, sodass der als Zentrale irgendwo sitzt und die LED’s in einem anderen Raum aktiviert werden können?

    Antworten
  5. Hi, habe das ganze mal probiert leider bringt der Pi mir immer folgenden Fehler:
    Traceback (most recent call last):
    File „/etc/openhab2/scripts/ws28xx.py“, line 5, in
    import RPi.GPIO as GPIO
    ImportError: No module named ‚RPi‘

    habt ihr eine Idee was ich nicht berücksichtige?

    Antworten
  6. Hi there

    I ran these commands with success:
    sudo chmod +x /etc/openhab2/scripts/ws2801color.py
    sudo addgroup openhab spi

    AND I can run this script via openhab user and it also works:
    sudo -u openhabian /usr/bin/python3 /etc/openhab2/scripts/ws2801color.py 123 123 10

    BUT when run to pick a color from OPENHAB color palette UI, I get this error in the log:

    ——————————————-
    File „/etc/openhab2/scripts/ws2801color.py“, line 20, in

    pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO)

    File „/usr/local/lib/python3.5/dist-packages/Adafruit_GPIO/SPI.py“, line 42, in __init__

    self._device.open(port, device)

    PermissionError: [Errno 13] Permission denied
    ———————————————————–

    Why am I getting permission denied??

    many thanks,
    Tony.

    Antworten
  7. Hallo.

    Habe ich so nachgebaut.. Funktioniert auch.. Allerdings werden mir über den colorpicker ausgewählte Fahren auf dem LED Band anders angezeigt.. Die Farben passen nicht zusammen.. kennst das jemand ?!

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!