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
Bis auf die Streifen an sich, ist das benötigte Zubehör identisch. Diese Komponenten habe ich benutzt:
- Raspberry Pi
- WS2801 LED Streifen
- alternativ: WS2812B Strip
- auch möglich: APA102 Strip
- 5V SpannungsnetzteilBreadboard
- Jumper Kabel, ebay
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.
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import time, sys, inspect, ast import RPi.GPIO as GPIO # Import the WS2801 module. import Adafruit_WS2801 import Adafruit_GPIO.SPI as SPI # Configure the count of pixels: PIXEL_COUNT = 32 # other settings SPI_PORT = 0 SPI_DEVICE = 0 pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO) ################################################################################ # DEFINE YOUR FUNCTIONS HERE ################################################################################ def setRGBColor(pixels, r=255, g=255, b=255): # cast from string to int r, g, b = int(float(r)), int(float(g)), int(float(b)) pixels.set_pixels( Adafruit_WS2801.RGB_to_color( r, g, b ) ) pixels.show() if __name__ == "__main__": if len(sys.argv) < 4: sys.exit(1) cmdargs = sys.argv[1:] setRGBColor(pixels, cmdargs[0], cmdargs[1], cmdargs[2]) |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
rule "WSxx Change" when Item WS28xx_Strip received command then if (receivedCommand instanceof HSBType) { val red = ((WS28xx_Strip.state as HSBType).red * 2.55) as Number val green = ((WS28xx_Strip.state as HSBType).green * 2.55) as Number val blue = ((WS28xx_Strip.state as HSBType).blue * 2.55) as Number logInfo("WS Status", red.toString + "," + green.toString + "," + blue.toString) executeCommandLine("/usr/bin/python3 /etc/openhab2/scripts/ws28xx.py " + red.toString + " " + green.toString + " " + blue.toString ) } else if (receivedCommand == ON){ //logInfo("WS Status", "ON") } else if (receivedCommand == OFF){ } end |
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:
1 2 3 4 5 |
sitemap ws28xx label="WS28xx RGB LED Strup" { Colorpicker item=WS28xx_Strip } |
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:
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:
25 Kommentare
Warum wird Anfänger von der Nutzung eines Schaltnetzteils abgeraten.
Danke
Arbeiten mit Netzspannung kann lebensgefährlich sein. Jemand der wenig Erfahrung hat, sollte lieber auf Nummer Sicher gehen.
Flexstrip ohne Sicherung kann Brandgefährlich sein
Interessant wäre dann aber auch, wie man eine Sicherung einbaut. 🙂
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.
Ich versuche mal in Zukunft dazu ein Tutorial zu machen.
Würde mich auch sehr interessieren!
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
Ja, die Bezeichnung variiert wohl: Die Art, die man von Laptops, etc. kennt, wo keine offenen Berührungsstellen sind.
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
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?
Klar, per MQTT
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?
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.
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 ?!
Hallo,
ich würde das ganze gerne mit einen WS2812B und Openhab2 steuern. Ich bekomme das nötige Pythonskript + rule leider nicht hin.
Bin gerade erst am Anfang von Openhab und wäre froh wenn mir das jemand schicken könnte der das schon probiert hat.
Mit besten Dank im Vorraus
Jürgen
Wenn du da was findest würde ich mich über einen Post hier freuen. Habe das gleiche Problem.
Blöde frage, aber es scheint sehr einfach zu sein laut deiner Beschreibung ws2812b anzusteuern.
Nur finde ich in keinen deiner 2 Anleitungen was ich hier oben am Code ändern muss damit ich die ws2812b mit openhub steuern kann. ich bekomme ja nicht einmal den Code: sudo -u openhab /usr/bin/python3 /etc/openhab2/scripts/ws28xx.py 123 123 123 zum laufen. Ich habe keine ahnung was ich in der ws28xx.py ändern muss. Bitte um Hilfe..
An der gleichen Stelle hänge ich momentan auch. Ich finde leider nichts wie ich die ws28xx.py ändern muss um sie auch mit ner ws2812 led zu betreiben. Über Tipps würd ich mich sehr freuen..
Hallo zusammen.
Geht mir leider genauso…
Ich bekomme zwar den Python Script mit den ws2812b zum laufen, aber ich schaffe es nicht, das ganze aus OH anzusteuern.
Wäre super, wenn jemand dafür ein Tutorial anbieten könnte.
Hallo!
Leider hab ich dasselbe Problem , bräuchte eine ws28xx.py die für den 2812b geeignet ist. Da die das obige sample nicht für den 2812b funktioniert…
Falls jemand eine Lösung hat wäre ich sehr dankbar!
LG
Grüß euch Leute,
ich habe leider das selbe Problem mit dem WS2812b und daher wär meine Frage ob da schon irgendwer eine Lösung gefunden hat. Würde mich freuen wenn mir wer weiterhelfen kann.
Mit freundlichen Grüßen Tim
Servus.
Ich habe auf meinem RPi3 openHabian (das Image) in der V1.5 installiert.
Nach der Konfiguration gibt er mir über den Monitor die Möglichkeit mich anzumelden. Gefordert wird „openhab login“.
Versucht habe ich bisher folgende (aus Dokumentationen, Tutos, etc. gesucht):
(loginname:password)
openhabian:openhabian
openHabian:openHabian
openHabian:Habianopen
openhab:openhab
openhab:openhabian
openhab2:hab2open
admin:admin
pi:raspberry
In der openhab.conf steht folgendes:
hostname: openhab
loginname: openhabian
password: openhabian
SSH: Über die CMD(WIN)/Terminal(Linux) nur über die IP Adresse (kein DNS) verfügbar. Dort funktioniert aber auch kein Login.
Die UI ist über den Browser über IP:8080 erreichbar. Dort habe ich sowohl „exec binding“ als auch „network binding“ installiert.
Pi wurde mehrere Male neu gestartet.
Danke im Vorraus für sämtliche Tipps <3
Hallo Zusammen,
habe gerade das TUT durchgearbeitet und bekommen beim testen des Scriptes diese Fehlermeldung:
[15:14:54] openhabian@openHABianDevice:/etc/openhab2/scripts/APA102_Pi$ sudo -u openhab /usr/bin/python3 /etc/openhab2/scripts/ws28xx.py
Traceback (most recent call last):
File „/etc/openhab2/scripts/ws28xx.py“, line 18, in
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO)
File „/usr/local/lib/python3.7/dist-packages/Adafruit_GPIO/SPI.py“, line 42, in __init__
self._device.open(port, device)
FileNotFoundError: [Errno 2] No such file or directory
Was kann ich da tun?
habe das selbe problem, würde mich über eine Lösung auch sehr freuen