Es Werde Licht mit McLighting - MQTT Part III

Es gibt verschiedene Gründe LED-Streifen zu benutzen: Stromsparen, Wellness (Blaulicht), Beleuchtung, etc. In diesem Blogpost geht es vornehmlich um eins: Bei den Gästen mit Regenbogen-Beleuchtung im Badezimmer angeben.

Bearbeitungszeit: ~1-3 Stunden (leider viel Fleißarbeit bei der Softwareinstallation)

Die gesamte Blogreihe befasst sich mit der Frage, wie du Geräte zuhause per MQTT miteinander vernetzen kannst. Hier findest du nochmal die vergangenen Beiträge:

Teil 1 - MQTT auf dem Raspberry Pi: https://plantprogrammer.de/mqtt-auf-dem-raspberry-pi-mosquitto/
Teil 2 - MQTT-Kommunikation, aber sicher: TLS und Berechtigungen: https://plantprogrammer.de/mqtt-auf-dem-raspberry-pi-mosquitto-part-ii/

Disclaimer

In diesem Blogpost geht es unter anderem um Basteleien mit Elektrizität. Dabei kannst du dich durch unsachgemäße Benutzung schwer verletzen. Ich selbst habe keine formelle Ausbildung im Umgang mit Elektrizität und gebe hier nur wieder, wie ich zum Ziel gelangt bin. Selbstverständlich versuche ich mich dabei selber auch nicht in Gefahr zu bringen, trotzdem der Haftungsausschluss: Nachahmen auf eigene Gefahr. Der Netzanschluss ist einem gelernten Elektriker zu überlassen.

1 Hardwarevoraussetzungen

Da dies eine mehrteilige Blogpostreihe ist, gehe ich davon aus, dass bereits ein Raspberry Pi vorhanden ist und nach den Anleitungen in Teil 1 und Teil 2 eingerichtet ist.

  • 1 Stück ESP8266*: Ich empfehle einen ESP8266 D1 Mini, das ist der beste Kompromiss zwischen Größe, Anzahl Anschlüsse und Preis: Amazon (ohne Unterstützerlink)
  • 1 Meter (s. nächster Abschnitt) RGB-LED-Streifen WS2812B (IP67 falls Wasserkontakt möglich**): Amazon (ohne Unterstützerlink)
  • 1 Stück MeanWell-Netzteil 40W: Amazon (ohne Unterstützerlink)
  • 5 Stück Wago-Steckklemme 222-413 3-polig: Amazon (ohne Unterstützerlink)
    (Leider etwas teurer mit ~70ct pro Stück, aber super praktisch. Zur Not tun es auch herkömmliche Lüsterklemmen)
  • Ein Lötkolben, ein Mikro-USB Kabel und etwas Werkzeug zum Kabelschälen (Abisolierzange oder Haushaltsschere oder irgendwas Kreatives) ist notwendig
  • ein paar Jumperwire und ein Schuko-/Eurostecker mit offenen Kabelenden sind zum Testen ganz hilfreich

* (Die verwendete Software ist nicht ESP32 kompatibel, siehe dazu auch Abschnitt "9 ESP8266 vs. ESP32 und TLS")
** IP67 ist die Schutzklasse die für Zone 1 Badezimmer-Installationen erforderlich ist. Also in Dusche bzw. direktem Umfeld der Badewanne aber nicht untergetaucht. Eventuell reicht weniger, aber meine Devise ist: Lieber mit ein paar Cent mehr bezahlen, als mit der eigenen Gesundheit.

Als Amazon-Partner verdiene ich an qualifizierten Verkäufen, wenn du die Links verwendest. Das kostet nichts extra und hilft mir mehr Zeit für coole Tutorials aufzubringen. Wenn du das nicht möchtest sind daneben jeweils die Links ohne Partnerprogramm gelistet.

LED-Streifen-Länge

In diesem Blogpost gehe ich von dem verlinkten 1 Meter LED-Streifen mit 100 LEDs aus. Bei anderen Längen wird gegebenenfalls ein anderes Netzteil nötig. Die Formel zur Leistungsberechnung ist: 60mA * Anzahl_LEDs * 5V = ??W. Bei üblicherweise 60 LEDs pro Meter (bitte genau auf Artikelbeschreibung achten) bedeutet das zum Beispiel 3,6 Ampere * 5 Volt also 18 Watt pro Meter LED-Streifen. Also wäre in diesem Fall das nächstgrößere (25W) Netzteil angebracht. Mit dieser Formel hat der LED-Streifen bei mir auch nach 14-stündigem Betrieb (wechselnde Farben) keine nennenswerte Temperaturänderung erfahren. Ab einer gewissen Länge wird empfohlen die Stromzufuhr direkt neu zu speisen, weil sonst die LEDs nicht mehr farbgetreu sind und der vordere Teil des Streifens sehr warm werden kann. Aus persönlicher Erfahrung gehen 3 Meter noch ganz gut, wenn nicht auf voller Helligkeit betrieben wird. Hier eine kleine Übersichtstabelle über Netzteile:

Länge in m LEDs/m Leistungsaufnahme passendes MeanWell-Netzteil
1 60 18 LPV-35-5 max 25W
1 100 30 LPV-60-5 max 40W
2 60 36 LPV-60-5 max 40W
3 60 54 LPV-100-5 max 60W
5 30 45 LPV-100-5 max 60W

2 Softwarevoraussetzungen

3 Löten

Als erstes geht es ans Löten. Die ESP8266 kommen in der Regel als Platine mit beiliegenden Stift- bzw. Sockelleisten. Das ist billiger zu produzieren, zu lagern und somit zu verschiffen als vorgelötete Sets und bietet mehr Flexibilität in der Anwendung. Dementsprechend müssen die Stiftleisten noch aufgelötet werden. Theoretisch brauchst du nur eine Seite für die Inhalte dieses Blogposts, aber wenn der Lötkolben einmal warm ist, ist das relativ schnell gemacht. Auf dem folgenden Bild siehst du das Ergebnis und dazu sei gesagt, so wie der dritte Lötpunkt von rechts bzw. die im Hintergrund sollte es nicht aussehen (ich habe drei linke Hände), die anderen im Vordergrund taugen aber als Referenz.
WICHTIG: Auch wenn du nur die kleinen Pins oben mit der Lötstelle verbindest, wird der Rest, besonders die lange Seite vom Pin, auch heiß. Arbeite auf einer feuerfesten Oberfläche und lasse den ESP abkühlen, bevor du ihn hochhebst. Sei nicht wie Plantprogrammer, verbrenne dir nicht die Flossen.

Abb. 1: Wemos D1 Mini. ESP8266 mit eingelöteten Stiftleisten

4 Installation

Die Installation der ganzen Arduino und ESP-Bibliotheken ist länglich, deswegen widme ich dem Thema ein ganzes Kapitel. Damit du die McLighting-Bibliothek nutzen kannst müssen nämlich erst einmal eine ganze Reihe Hilfsbibliotheken installiert werden. Ich werde auch nicht alle möglichen besprechen, sondern genau so viele, dass du am Ende des Posts deinen LED-Streifen

  • per Webinterface steuern kannst (Läuft auf dem ESP)
  • per MQTT steuern kannst
  • per HomeAssistant steuern kannst (das ist ein beliebtes Tool zu Home-Automation)
  • mit Animationen bespielen kannst

Für alle weiteren Funktionen verweise ich vorerst auf die englischsprachige Originalanleitung. Wenn genügend Leser:innen mir schreiben, dass eine bestimmte Funktion noch besonders interessant ist, erstelle ich gerne noch einen Blogpost.

Los geht's! Als allererstes musst du die Arduino IDE starten und in den Präferenzen den Link https://arduino.esp8266.com/stable/package_esp8266com_index.json als externen BoardManager eintragen (Hinweis: Mehrere Einträge können kommagetrennt oder über das Icon am rechten Rand des Eingabefelds gesetzt werden.)

Abb. 2: Ausschnitt aus den Präferenzen, wo die ESP8266-Boarddefinitionen als Link eingetragen werden.

Als nächstes öffnest du den Boardmanager (nicht Library Manager. Siehe Abb. 3) und suchst nach ESP8266. Dort findest du genau ein Paket, dass du installierst.

Abb. 3: Neue Boards installieren unter Tools->Board->Boards Manager

Jetzt kümmern wir uns um die Bibliotheken. Ein paar sind im entsprechenden Manager vorhanden, manche musst du manuell herunterladen und installieren.

Manager

Öffne den Bibliotheksmanager (Tools->Manage Libraries oder Sketch->Include Library->Manage Libraries) und tippe die nachfolgenden Pakete in die Suche ein. Manchmal gibt es mehrere Ergebnisse, unter der Liste ist ein Screenshot von allen richtigen. Installiere jeweils die neueste Version

  • "WiFiManager" by tzapu
  • "Websockets" by Markus Sattler
  • "Adafruit NeoPixel" by Adafruit
  • "ArduinoJson" by Benoit Blanchon
  • "PubSubClient" by Nick O'Leary
  • "NeoPixelBus" by Michael C. Miller
  • "FastLED" by Daniel Garcia
Abb. 4: Screenshots der oben erwähnten Bibliotheken zum Abgleich.

Github

Als nächstes kommen alle Bibliotheken, die von Github heruntergeladen werden müssen. Ich zeige es exemplarisch mit Screenshots für die erste unterhalb der Liste.

Öffne zuerst die verlinkte Github Seite, suche den grünen Button mit der Beschriftung "Code" und klicke ihn an. In dem Popup (Abb. 5), das sich öffnet, gibt es den Link "Download ZIP", den du anklickst.

Abb. 5: Download von Github Projekten als .Zip-File

Wenn du alle heruntergeladen hast, geht es weiter mit dem Import. Benutze in der Arduino IDE den Menüpunkt Sketch->Include Library->Add .ZIP Library (Abb. 6) und füge so alle heruntergeladenen Zip files (leider nur einzeln möglich) hinzu.

Abb. 6: Zip-Files als Arduino-Bibliotheken hinzufügen.

5 Das Programm McLighting

Ich habe mich hier für McLighting entschieden, weil es alles kann, was ich brauche und das alles selbst zu programmieren ein Lebenswerk wäre. McLighting wurde ursprünglich von Tobias Blum und Debashish Sahu für den ESP8266 entwickelt. Seit 2020 gibt es einen Hinweis in der Readme, dass das Projekt aus Zeitgründen nicht von diesen weiterentwickelt wird, aber der Account FabLab-Luenen betreibt und entwickelt das Projekt weiter unter https://github.com/FabLab-Luenen/McLighting. Wenn du das Projekt da herunterlädst, ähnlich wie bei den Github-Bibliotheken, und entpackst, kannst du danach die Datei Arduino/McLighting/McLighting.ino doppelklicken oder in der Arduino IDE über File->Open öffnen. Das sieht dann so oder so ähnlich aus wie Abbildung 7.

Abb. 7: McLighting Projekt

Sobald McLighting auf dem ESP installiert ist, startet es beim ersten Start ein Konfigurationsportal, auf das du dich per Wifi einwählen kannst. Die Datei definitions.h erfordert aber ein paar Anpassungen, damit alles läuft. Und im selben Atemzug zeig ich dir noch, wie du dem temporären Konfigurations-WLAN ein Passwort verpasst, damit sich nicht „versehentlich“ jemand dort einloggt, bevor du Zeit hattest, den ESP zu konfigurieren. Die ersten 32 Zeilen der definitions.h sollten nach den Änderungen so aussehen, ich erkläre die Änderungen weiter unten (wenn du das überspringen möchtest, lies bei Verkabelung weiter).

definitions.h:

#define USE_WS2812FX_DMA 2      // 0 = Used PIN is ignored & set to RX/GPIO3; 1 = Used PIN is ignored & set to TX/GPIO1; 2 = Used PIN is ignored & set to D4/GPIO2;  Uses WS2812FX, see: https://github.com/kitesurfer1404/WS2812FX
                                // or comment it out
#if defined(USE_WS2812FX_DMA)
  #define MAXLEDS 384           // due to memory limit of esp8266 at the moment only 384 leds are supported in DMA Mode. More can crash if mqtt is used.
#else
  #define MAXLEDS 4096
#endif
// Neopixel
#define LED_PIN 3          // PIN (15 / D8) where neopixel / WS2811 strip is attached; is configurable, if USE_WS2812FX_DMA is not defined. Just for the start
#define NUMLEDS 100         // Number of leds in the; is configurable just for the start
#define RGBORDER "GRB"    // RGBOrder; is configurable just for the start
#define FX_OPTIONS 48      // ws2812fx Options 48 = SIZE_SMALL + FADE_MEDIUM  is configurable just for the start; for WS2812FX setSegment OPTIONS, see: https://github.com/kitesurfer1404/WS2812FX/blob/master/extras/WS2812FX%20Users%20Guide.md
//#define LED_TYPE_WS2811    // Uncomment, if LED type uses 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
#define LED_BUILTIN 2      // ESP-12F has the built in LED on GPIO2, see https://github.com/esp8266/Arduino/issues/2192
char HOSTNAME[65] = "LEDstrip1"; // Friedly hostname  is configurable just for the start. Hostname should not contain spaces as this can break Home Assistant discovery if used.
#define WIFICONFIG_PASS "correct-horse-battery-staple"

#define ENABLE_OTA 1                  // If defined, enable Arduino OTA code. If set to 0 enable Arduino OTA code, if set to 1 enable ESP8266HTTPUpdateServer OTA code.
#define ENABLE_MQTT 1                 // If defined use MQTT OR AMQTT, if set to 0 enable MQTT client code, see: https://github.com/toblum/McLighting/wiki/MQTT-API, if set to 1, enable Async MQTT code, see: https://github.com/marvinroger/async-mqtt-client
//#define ENABLE_MQTT_HOSTNAME_CHIPID   // Uncomment/comment to add ESPChipID to end of MQTT hostname
//#define ENABLE_MQTT_INCLUDE_IP        // uncomment/comment to add the IP-adress to the MQTT message
#define ENABLE_HOMEASSISTANT          // If defined, enable Homeassistant integration, ENABLE_MQTT must be active
#define MQTT_HOMEASSISTANT_SUPPORT   // If defined, use AMQTT and select Tools -> IwIP Variant -> Higher Bandwidth
#define DELAY_MQTT_HA_MESSAGE 5       // HA Status is send after DELAY_MQTT_HA_MESSAGE seconds, to save bandwith

//#define ENABLE_BUTTON 14              // If defined, enable button handling code, see: https://github.com/toblum/McLighting/wiki/Button-control, the value defines the input pin (14 / D5) for switching the LED strip on / off, connect this PIN to ground to trigger button.
//#define ENABLE_BUTTON_GY33 12         // If defined, enable button handling code for GY-33 color sensor to scan color. The value defines the input pin (12 / D6) for read color data with RGB sensor, connect this PIN to ground to trigger button.
//#define POWER_SUPPLY 12               // PIN (12 / D6) If defined, enable output to control external power supply
#if defined(POWER_SUPPLY)
  #define POWER_ON   HIGH           // Define the output state to turn on the power supply, either HIGH or LOW.  Opposite will be uses for power off.
#endif
//#define ENABLE_REMOTE 13              // If defined, enable Remote Control via TSOP31238. The value defines the input pin (13 / D7) for TSOP31238 Out

Zeile 1 - USE_WS2812FX_DMA: Indem du den Wert von 0 auf 2 setzt, teilst du dem ESP mit, dass die Data-Leitung der LEDs mit Pin D4 verbunden wird (s. Zeilenkommentar für Werte)

Zeile 10 - NUMLEDS: Diesen Wert solltest du auf die Anzahl der zu betreibenden LEDs setzen, in diesem Beispielfall 100. Der Wert kann auch im Konfigurationsportal nochmal geändert werden.

Zeile 11 - RGBORDER: Dieser Wert bestimmt, in welcher Reihenfolge die LEDs intern verschaltet sind. Bei WS2812 LED-Streifen ist es normalerweise "GRB", manche brauchen "RGB" (wenn rot und grün vertauscht sind). Für etwas teurere Streifen mit zusätzlichen weißen LEDs gibt es noch Einstellungen, die "GRBW" und so heißen.

Zeile 15 - HOSTNAME: Hier kannst du den Hostname für das Konfigurations-WLAN einstellen. Gleichzeitig ergibt sich daraus nachher das MQTT-Topic unter dem der Streifen erreichbar sein wird.

Zeile 16 - WIFICONFIG_PASS ist neu: Hier kannst du das WiFi-Passwort festlegen, das der ESP für sein Konfigurationsportal nutzen soll.

Zeile 32/33 - ENABLE_REMOTE: Diese Zeile besagt, dass eine Infrarot-Fernbedienung verwendet werden soll. Das ist für dieses Tutorial nicht der Fall, also musst du die Zeile mit // am Anfang auskommentieren. Normalerweise würde hier der Pin angegeben werden, an dem der Infrarot-Empfänger angeschlossen ist.

McLighting.ino:

if (!wifiManager.autoConnect(HOSTNAME, WIFICONFIG_PASS)) {

Zeile 436 - Passwort: Die Änderung dieser Zeile besteht im Wesentlichen daraus, das in definitions.h erstellte Passwort in der Funktion autoConnect als Übergabeparameter hinzuzufügen.

6 Upload und Konfiguration

Als letzter Schritt an der ESP-Front fehlt noch der erfolgreiche Upload und die Konfiguration. Wenn alle Treiber im zweiten Schritt richtig installiert wurden (Dafür ist ein Neustart nötig) und der ESP per USB angeschlossen ist, kannst du in der Arduino IDE unter Tools->Port-> auswählen an welchem Port der ESP angeschlossen ist. Unter OS X heißt der Port, den du auswählen möchtest, in der Regel /dev/cu.usbserial-X (wobei X eine Zahl ist). Unter Windows ist die Standardbenennung COMX (wobei X eine Zahl ist). Unter Linux heißt der Port in der Regel /dev/ttyUSBX (wobei X eine Zahl ist). Falls der Port nicht angezeigt wird, hilft es manchmal die Arduino IDE neuzustarten, bzw. den ESP aus- und wieder einzustecken. Wenn der Port ausgewählt ist und das Board unter Tools->Board als "LOLIN(WEMOS) D1 R2 & Mini" eingestellt ist, kannst du den Upload-Button (zweiter von Links) oder den Menüpunkt Sketch->Upload anklicken.

HINWEIS: Es gibt zwei "Fehlermeldungen" die kein Hindernis darstellen und ignoriert werden können.

# pragma message "FastLED version 3.004.000"
# pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"

Falls Fehlermeldungen mit dem Text "[...].h no such file or directory" auftauchen, fehlt gegebenenfalls eine der Bibliotheken aus Teil 4 - Installation.

Wenn der Upload geklappt hat (Ausgabe zählt bis 100% und meldet "Hard resetting via RTS pin..."), kannst du den Seriellen Monitor im Menü Tools öffnen und im Fenster das aufgeht die Baudrate unten rechts auf 115200 stellen. Jetzt solltest du Debugging-Informationen sehen können. Manchmal auch erst nach einem weiteren Neustart des ESPs. Du kannst dafür jederzeit den Reset-Button am ESP drücken.

Außerdem öffnet der ESP einen WLAN-Accesspoint mit dem Hostnamen, den du oben angegeben hast. In den Beispiel definitions.h oben lautet dieser "LEDstrip1". Verbinde dich mit diesem WLAN (Achtung: Das kappt die Internetverbindung, deshalb nutze ich zur Konfiguration immer mein Telefon statt des Computers). Sobald du deinen Browser öffnest, solltest du auf der Startseite der Konfiguration landen. Hier kannst du das WLAN auswählen, mit dem sich der ESP verbinden soll (dein Heimnetzwerk), das entsprechende Passwort angeben und MQTT-Zugangsdaten, falls du die im letzten Blogpost eingerichtet hast. Außerdem gibt es nochmal die Möglichkeit, die Anzahl LEDs, die Anordnung der Farben, usw. anzupassen, falls noch nicht im vorherigen Kapitel geschehen.

Glückwunsch, das war der gesamte Softwareteil. Dein ESP sollte jetzt in der Lage sein, einen LED Streifen zu steuern. Weiter geht es mit der Verkabelung. Jetzt ist übrigens ein guter Zeitpunkt für eine kurze Pause.

7 Verkabelung

Die Anleitung zur Verkabelung werde ich hier dem Stromfluss nach aufbauen. Auch wenn im tatsächlichen Anwendungsfall die Wandsteckdose (bzw. Lampenkabel) wahrscheinlich das letzte ist, was du anschließt (bzw. fachgerecht anschließen lässt, damit die Versicherung im Schadenfall auch zahlt). Der ESP sollte zu diesem Zeitpunkt nicht mehr per USB verbunden sein.

LEBENSGEFAHR: Die Wandverkabelung (also alles vor dem Netzteil) dürfen nur Elektriker machen. Sie würden zuerst dafür sorgen, dass kein Strom auf den Kabel aus der Wand fließt (wenn sie sich unsicher sind, in welcher Stellung der zugehörige Lichtschalter ist, messen sie es mit Fachwerkzeug oder entfernen für die Dauer des Verkabelns die Sicherung), bzw. wenn du die LEDs an einem Stecker betreiben möchtest, dieser ausgesteckt ist. Sie verifizieren dann noch einmal mit einem Spannungsprüfer oder ähnlichem Werkzeug, dass tatsächlich keine Spannung an den Adern (üblicherweise Braun und Blau) mehr anliegt.

  1. Elektriker verbinden jetzt mit Hilfe der Wagoklemmen oder herkömmlicher Lüsterklemmen das blaue Kabel aus Wand / Stecker mit dem blauen Kabel aus dem Netzteil. Dann verbinden sie das braune mit dem braunen Kabel. Alles ab dem Netzteil darf meines Wissens auch von Laien übernommen werden.
  2. Verbinde (wieder mit Klemmen) das schwarze Kabel aus dem Netzteil mit dem freiliegenden weißen Kabel der LEDs und das rote Kabel aus dem Netzteil mit dem roten freiliegenden Kabel der LEDs. Manche LED-Streifen haben Kabel an beiden Enden, die Verkabelung hier bezieht sich auf das Ende von dem die kleinen weißen/schwarzen Pfeile auf dem LED-Streifen weg zeigen, weil die Pfeile den Stromfluss anzeigen und der ist in diesem Fall weg vom Netzteil durch die LEDs.
  3. Als letztes stecke drei Jumperwire (bei mir rot, lila, schwarz, Stecker->Buchse) mit dem Pin in den LED-Stecker: rot auf rot; schwarz auf weiß; lila auf grün und die Buchsenenden der Jumperwires auf die entsprechenden ESP Pins: lila auf D4; schwarz auf G; rot auf 5V.
Abb. 8: Schemazeichnung der Verkabelung. Klemmverbindungen sind jeweils eine Wagoklemme/Lüsterklemme
Abb. 9: So sieht es zusammengesteckt aus (ab Netzteil). Fürs Foto hab ich das fix mit Tesa auf dem Schreibtisch festgeklebt, verbaut sollte es nachher eine vernünftige Halterung bekommen.

Zeit für einen Testlauf. Wenn du den Strom jetzt einschaltest (Stecker einsteckst) siehst du idealerweise, wenn alles richtig verkabelt ist, den ESP aufblinken und die erste LED in weiß leuchten. Sobald der ESP gebootet hat lädt er die letzte aktive Konfiguration, standardmäßig bedeutet das, dass der LED-Streifen komplett rot eingefärbt wird. Für ein bisschen Spielerei mit buntem Geleucht kannst du jetzt auf den eingebauten Webserver gehen, indem du die IP-Adresse im Browser eingibst.

Wenn du nicht genau weißt, wie die IP-Adresse ist, schalte den Strom nochmal ab, warte einen Moment bis die LEDs aus sind, entferne die Jumperwire vom ESP und stecke ihn nochmal per USB an den Computer an. Im Seriellen Monitor der Arduino IDE wird beim Boot üblicherweise ausgegeben, welche IP-Adresse der ESP beim Verbinden mit dem WLAN bekommen hat.

Glückwunsch, jetzt hast du schon buntes Geleucht. Im letzten Schritt zeige ich dir noch wie du die Animationen und Konfigurationsmöglichkeiten per MQTT ansprichst.

8 MQTT Topics

Um den LED-Streifen per MQTT zu steuern gibt es nur zwei Topics

  1. <hostname>/in also bei der oben genannten Konfiguration LEDstrip1/in
  2. LEDstrip1/out

/in nimmt Kommandos entgegen und /out gibt Rückmeldungen (oft sowas wie OK/<Code>, manchmal aber auch ganze Konfigurationen als JSON)

Alle verfügbaren Kommandos sind auf dieser Projekt-Wiki-Seite (englischsprachig) zu finden. Die wichtigsten zeige ich dir hier im Überblick, jeweils mit Syntax, Beschreibung und Beispiel.

Kommando Beschreibung Beispiel
#<HexfarbeWRGB> Setzt die Primärfarbe für Animationen bzw. die Farbe für statisches Licht z.B. Grün -> #0000FF00
##<HexfarbeWRGB> Setzt die Sekundärfarbe für Animationen wie ColorWipe, bei der sich zwei Farben gegenseitig auffressen z.B. Blau -> ##000000FF
###<HexfarbeWRGB> Setzt die Tertiärfarbe für Animationen die für 3 Farben ausgelegt sind z.B. Rot -> ###00FF0000
%<Helligkeit> Setzt die Helligkeit des Streifens. Werte 0-255 %25
?<Geschwindigkeit> Setzt die Geschwindigkeit in der die Animation läuft. Werte 0-255. Achtung, zu hohe Werte ruckeln manchmal oder machen die Animation kaputt. ?80
/<AnimationsID> Ersetzt die aktuelle Animation. Werte 0-... Die Animationen kann man am besten im Webinterface nachschauen. Die wichtigsten 5:
Statisches Licht Primärfarbe /0
Blinken Primär- und Sekundärfarbe im Wechsel /1
Breath weicher Übergang zwischen Primär- und Sekundärfarbe /2
Buntes Blinken, jede LED wählt zufällige Farbe /10
Regenbogen /12
/on schaltet den LED-Streifen an /on
/off schaltet den LED-Streifen aus /off
/toggle schaltet den LED-Streifen um, von an nach aus und umgekehrt /toggle

Eine Möglichkeit mit diesen Befehlen schon das Licht zu steuern und zum Beispiel eine Regenbogenanimation anzuzeigen ist, auf dem Raspberry-Pi-Terminal wie in Blogpost 1 erklärt, folgende Kommandos anzugeben:

mosquitto_pub -L mqtt://localhost/LEDstrip1/in -m "/12"
mosquitto_pub -L mqtt://localhost/LEDstrip1/in -m "?35"
mosquitto_pub -L mqtt://localhost/LEDstrip1/in -m "%20"

# Alternativ falls die User Accounts verwendet wurden
mosquitto_pub -L mqtt://wc_leds:11235813@localhost/LEDstrip1/in -m "/12"
mosquitto_pub -L mqtt://wc_leds:11235813@localhost/LEDstrip1/in -m "?35"
mosquitto_pub -L mqtt://wc_leds:11235813@localhost/LEDstrip1/in -m "%20"

Wenn dir das noch nicht reicht hier noch eine Idee für ein Skript, das du regelmäßig, z.B. einmal am Tag ausführen kannst.

#!/bin/bash
ANIMATION_DES_TAGES=$((RANDOM % 65))
mosquitto_pub -L mqtt://localhost/LEDstrip1/in -m "/${ANIMATION_DES_TAGES}"

Das war es für heute. Gut gemacht 👍

Ich habe an dieser Stelle als alles lief, bestimmt 2 Stunden einfach nur mit den LEDs gespielt und ich wünsche dir mindestens genauso viel Freude damit. Erzähl mir gerne wie es geklappt hat und was du damit bauen möchtest (Beleuchtung für Schlaf-/Bade-/Wohnzimmer? Optische Visualisierung von Nachrichten? ...? Profit?). Meine Twitter DMs sind immer offen und ich freue mich auch über E-Mails an info@.

Zum Abschluss noch ein paar kurze Worte zur ESP-Wahl und ein Ausblick aufs nächste Mal.

9 ESP8266 vs. ESP32 und TLS

Die hier verwendete McLighting-Bibliothek ist für den ESP8266 ausgelegt. Der ESP8266 hat nicht genug Rechenleistung um neben der ganzen Lichtsteuerung Transportverschlüsselung zu bieten. Es gibt noch eine andere Bibliothek mit dem Namen WLED (Github-Link), die auch auf dem ESP32 läuft, der prinzipiell leistungsstark genug wäre, Transportverschlüsselung zu machen, aber es ist in der WLED Bibliothek bisher nicht implementiert (Issue #1346). Die sicherste Variante die LEDs zu betreiben ist daher wahrscheinlich einen separaten MQTT-Account für den LED-Streifen zu haben, der nur auf die Topics <name>/in bzw. <name>/out zugreifen darf und auf /in auch nur lesend. So kann man dann auf der schreibenden Seite steuern, welcher Client das Licht überhaupt steuern darf.

10 Ausblick

Die LEDs funktionieren, können coole Animationen abspielen und sind über MQTT ansprechbar. So in dieser Form habe ich die LEDs selber auch schon im Gäste-WC installiert. Der nächste Schritt ist es, andere Hardware zu nutzen, um das Licht zu steuern. In der finalen Version meiner Installation sollen RFID-Karten verwendet werden um das Licht zu konfigurieren. Da diese Blogpostreihe inzwischen aber auch unter Home-Automation Bastler:innen beliebt ist, werde ich noch einen Temperatur- und Luftfeuchtesensor anbinden, um zu illustrieren wie das geht. Als Anwendungsfall stelle ich mir sowas vor wie "Luftfeuchtigkeit steuert die Animationsgeschwindigkeit und je länger ich dusche, desto hektischer blinkt das Licht" :D

Das alles und noch viel mehr machen wir in den nächsten Blogposts.

Wie gehabt, wenn etwas nicht funktioniert oder du Fragen hast, schreib mich gerne auf Twitter öffentlich oder per DM an oder schick mir eine E-Mail an info@ (und die Blogdomain)

Zu Teil 4 geht es hier entlang