LoxPixel! RGBW Neopixel Integration in Loxone

 

Vorwort

Dies wird ein Artikel aus der Kategorie „Es ist bunt!? Es leuchtet !? Ich muss es haben!“  Wie sich vielleicht aus den anderen Artikeln herauslesen lässt, fiel die Entscheidung für unser Smart Home auf die Steuerung der Firma Loxone. Ich bin selbst „beruflich“ Loxone Partner von daher stellt die Programmierung und Parametrisierung des Miniservers zunächst kein Hindernis da. Dennoch möchte ich es mir in den eigenen 4 Wänden nicht nehmen lassen etwas zu basteln, dass nicht einfach von der Stange zu haben ist. Da ich bekennender LED und Farblicht Fan bin, habe ich in der Vergangenheit bereits viel mit Neopixel LEDs experimentiert. Im Gegensatz zu den bei Loxone üblichen RGBW Stripes, können bei Neopixel Leds (Neopixel im folgenden als Überbegriff für alle LED Stripe Typen mit Controller) die jeweiligen LEDs auf den Stripes einzeln angesprochen werden. Dies lässt interessante Effekte und Farbverläufe zu. Bei den normalen RGBW Stripes in Verbindung mit den RGBW Dimmern von Loxone leuchtet der jeweilige LED Streifen (Stripe) in einer einzigen Farbe. Die Farbwiedergabe einer einzelnen Farbe ist für die Erstellung von ansprechenden Lichtszenen natürlich unabdinglich. 

Die Idee

Ich wollte also das Beste aus beiden Welten. Die Möglichkeit einfache Farblich Szenen erstellen zu können, als auch Farbverläufe und andere Effekte in einem kompletten Raum als z.B. indirekte Beleuchtung nutzen zu können. Hier wollte ich sogar noch einen Schritt weiter gehen. Ich wollte Effekte für einen kompletten Raum, und die Farblicht-Szenen pro Wand einstellen können. Genauso soll eine Farbe für den kompletten Raum einstellbar sein. Das alles mit einem einzigen Stripe (entsprechend verlängert) und Controller pro Raum. Ob man das braucht? keine Ahnung 🙂 aber ich wollte die Anforderung mit einbauen. Das alles soll am Ende dann auch noch möglichst flexibel Einsetzbar sein (WLAN) und einfach in Loxone integrierbar sein sodass kein Informatikstudium nötig ist um die Platine nachzubauen und das ganze mit dem Loxone Miniserver zu verbinden. Anbei mal eine Skizze um zu verdeutlichen was ich mit einer Steuerung pro Wand meine. 

Ein Foto mit einem zugegebenermaßen übertriebenen Beispiel zur Verdeutlichung

Die Auswahl der richtigen / passenden LED Streifen

Es gibt bei den „Neopixel“ bzw. einzel adressierbaren LED Streifen einige Unterschiedliche Controller / LED Typen welche alle entsprechend eigene Vor und Nachteile besitzen. Ein richtig oder falsch gibt es hierbei sicherlich nicht. Ich habe im Rahmen meiner Tests einige Varianten ausprobiert und die für meinen Anwendungsfall geeignetsten Streifen gefunden. Die verschiedenen Varianten unterscheiden sich vor Allem in der Anzahl der Farben (RGB oder RGBW) sowie in der Art und Weise der Ansteuerung bzw. wie viele Leitungen zur korrekten Ansteuerung benötigt werden.

Die unterschiedlichen Typen werden auf der folgenden Seite grob angerissen:

https://playground.boxtec.ch/doku.php/led/ledpixel_guide

Hier gibt es auch Links zu einigen Beispiel Ansteuerungen mit Arduino & CO.

In meinem Falle soll die indirekte Beleuchtung ein Bestandteil des Beleuchtungskonzepts sein. Daher war mir ein dedizierter Kanal für Weißlicht wichtig. Es musste also eine Variante mit RGBW sein. Die einfachen WS2812 LEDs z.B. sind reine RGB LEDs und mischen Weis durch die Überlagerung aller Farben zur Farbe Weiß. Ich habe mich für die 5V Variante der SK6812 RGBW LED entschieden. Hier wird zusätzlich für den weißen Kanal zwischen Warm-weiß, Kalt-weiß und Normal-Weiß entschieden. Da die in unserem Bauvorhaben zum Einsatz kommenden Deckenspots ebenfalls zwischen Warm und Kalt-weiß wechseln können, wollte ich meine indirekte Beleuchtung so nah wie möglich an die Weißwerte der Deckenspots anpassen. Die Entscheidung fiel in diesem Fall auf die Variante Normal-weiß. Die Ansteuerung über 5V stellt unter Umständen ein Problem da. Bereits den 5 Meter langen Stripe sollte man auf Grund des hohen Spannungsabfalls an beiden Enden mit der 5V Spannungsversorgung verbinden, da es sonst zu deutlichen Farbverschiebungen kommt. Möchte man also nun einen kompletten Raum mit den Stripes versehen, so muss spätestens alle 5 Meter mit einer 5V Spannungsversorgung eingespeist werden. Sollte dies baulich bedingt nicht möglich sein, ist die Einspeisung in der Mitte des Stripes evtl. eine Alternative. Mir sind keine 12V oder 24V Varianten mit ähnlicher Funktionalität bekannt. Lasse mich diesbezüglich aber auch gerne eines Besseren belehren. Immer her mit den Kommentaren und Verbesserungstipps ! 🙂 

Folgende Komponenten kommen in meinem Testaufbau zum Einsatz:

LED Streifen: BTF-LIGHTING RGBW RGBNW Natürliches Weiß SK6812 (ähnlich WS2812B) 5m 60leds/pixels/m *

Netzteil: Mean Well LPV-100-5 LED-Trafo Konstantspannung 60W 0-12A 5 V/DC *

Die Hardware

Als Hardware habe ich mich auf Grund der integrierten WLAN Funktionalität relativ schnell für ein ESP8266 Modul in Form eines NodeMCU* entschieden. Außerdem hatte ich davon noch einige auf dem Schreibtisch liegen 😉 . Da die meisten Neopixel LED Streifen zur Ansteuerung lediglich einen Widerstand in der Datenleitung benötigen, ist der Anschluss kein Hexenwerk. Da ich vermutlich relativ viele Module einsetzen werde, habe ich trotzdem in EAGLE schnell eine Adapter Platine zusammengeklickt. Die Platine hat Buchsenleisten sodass das NodeMCU Modul direkt aufgesteckt werden kann. Mittels Jumper kann die zum jeweiligen LED Streifen (Anzahl Steuerleitungen) passende Konfiguration eingestellt werden. Zu guter letzt ist auf der Platine noch Platz für einen 7805 Spannungsregler falls die Versorgungsspannung über 5 Volt liegen sollte. In meinem Fall hängt die Platine mit an den 5V LED Netzteilen und benötigt somit keinen Spannungswandler. Der 7805 kann ebenfalls mittels Jumper überbrückt werden. Ich werde die Eagle Dateien auf Github zur Verfügung stellen. Verbesserungen und Erweiterungen sind ausdrücklich erwünscht 😉

Schaltplan der Adapterplatine
Layout der Adapterplatine
Aufgebaute LoxPixel! Platine

Die Software

Die Software war dann im Vergleich zur Platine doch etwas aufwändiger 😉 Ich habe viel experimentiert um die Farbwechsel so hinzubekommen wie sie Loxone bei den eigenen bzw. direkt angeschlossenen Leuchten darstellt. Da meine Deckenspots mit DMX angesteuert werden sollen, hatte ich die Loxone DMX Extension bereits in meinem Testaufbau vorgesehen. Der erste Gedanke war also mit Hilfe eines ArtNet Node von Ullrich Radig die DMX Signale der Loxone DMX Extension auf mein Netzwerk zu bringen und die LED Streifen Farbe damit einzustellen. Dies stelle sich allerdings als zu träge heraus. Auch das Empfangen der Farbwerte direkt von Loxone via UDP brachte keinen wirklich sauberen Farbübergang. Es hat immer irgendwie geruckelt. Zu guter Letzt habe ich den Farbübergang nun berechnet und arbeite nur noch mit den Ziel-Farbwerten. Nach ein wenig Feintuning ist nun meiner Meinung nach kein Unterschied mehr zu einem Farbwechsel eines original RGBW Stripes an einem Loxone RGBW Dimmer erkennbar. 

Folgende Features wurden in der Software eingebaut:

  • Weiche Farbwechsel
  • OTA Programmierung / So kann ein Update aufgespielt werden obwohl die Platine in der Decke verbaut ist
  • Erweiterbare Effekte
  • Soll sich gegenüber dem Loxone Lichtbaustein wie ein Lumitech Aktor verhalten (RGB/Warmweiß/Kaltweiß)

Als Bibliothek zur Ansteuerung der SK6812 Streifen habe ich mich für FastLED entschieden. Diese auch nur mit einem bestimmten Fork von coryking. Das Parsen des Loxone Lumitech String habe ich mir am Pico C Programm von Andreas Lackner für die HUE Integration in Loxone abgeschaut. Die Umrechnung von Farbtemperatur zu RGB Werten basiert auf folgendem Algorithmus.

Inbetriebnahme / Loxone Integration

Nach dem Herunterladen des Sketches kann die Datei in der Arduino IDE geöffnet werden. Vor dem flashen sollten die für den NodeMCU notwendigen Boardinformationen in der Arduino IDE eingefügt werden. Danach können die Programmieroptionen gemäß des folgenden Screenshots angepasst werden.

Boardinformationen in den Voreinstellungen einfügen
Einstellungen vor dem Flashen des NodeMCU

Vor dem Flashen müssen einige Parameter gemäß eures Anwendungsfalls eingestellt werden:

//Grundeinstellungen

//Anzahl LEDS
#define NUM_LEDS 300

//LED Pin
#define LED_PIN 5

//Hostname fuer Arduino OTA
const char* hostname = "Kueche";
//Port fuer Arduino OTA
int otaport = 8266;

//WLAN Zugangsdaten
const char* ssid = "YOUR SSID";
const char* password = "YOUR PASSWORD";

//LOXPixel! Lokaler UDP Port
unsigned int localUdpPort = 8888;

//LOXPixel! IP Einstellungen (feste IP)
IPAddress ip(192, 168, 178, 13);
IPAddress gateway(192, 168, 178, 1);
IPAddress subnet(255, 255, 255, 0);

//Start-Farben pro Wand
CRGB bgColor( 0, 0, 0);
CRGB bgColor2( 0, 0, 0);
CRGB bgColor3( 0, 0, 0);
CRGB bgColor4( 0, 0, 0);

//Effekteinstellungen

//Feuer Effekt
#define COOLING  55
#define SPARKING 120


//RIPPLE Effekt
int color;
int center = 0;
int step = -1;
int maxSteps = 16;
float fadeRate = 0.8;
int diff;

uint32_t currentBg = random(256);
uint32_t nextBg = currentBg;

uint8_t gHue = 0;
int effektNR = 0;
int pos1 = 0;
int pos2 = 0;
byte dothue = 0;


// Einstellungen ENDE

Hierbei geht es vor Allem um die Eingabe der richtigen WLAN Zugangsdaten, einer festen IP Adresse sowie die Angabe des verwendeten Datenpins. In der Funktion „effekte()“ muss nun noch die Aufteilung des LED Streifen vorgenommen werden:

  //Farben Setzen
      //Einteilungen pro Wand
      // An dieser Stelle kann die Anzahl der Einteilungen angepasst werden

      //Wand1 LED 0 -> LED 49 , Fadingzeit 5
      fadeTowardColor( leds, 50, bgColor, 5);
      //Wand2 LED 50 -> LED 101 , Fadingzeit 5
      fadeTowardColor( leds + 51, 50, bgColor2, 5);
      //Wand3 LED 102  -> LED 202 , Fadingzeit 5
      fadeTowardColor( leds + 101, 100, bgColor3, 5);
      //Wand4 LED 202 -> LED 300 , Fadingzeit 5
      fadeTowardColor( leds + 201, 99, bgColor4, 5);

Wand 1 von LED 0 bis LED 50 bekommt die Farbe bgColor mit einer Fadingzeit von 5  , Wand 2 von LED 50 bis LED 100 erhält die Farbe bgColor2 usw.. Diese Werte können nach belieben angepasst werden. Natürlich kann auch der komplette LED Streifen ohne Unterteilung verwendet werden.

In der loop() Funktion können die Sonderzeichen zur Unterscheidung der Bereiche auf dem LED Streifen angepasst werden (bei Bedarf).

    if (hexstring.charAt(0) == '#')
    {
      bgColor = parseLoxone(hexstring);
    }

    if (hexstring.charAt(0) == '!')
    {
      bgColor2 = parseLoxone(hexstring);
    }

    if (hexstring.charAt(0) == '?')
    {
      bgColor3 = parseLoxone(hexstring);
    }

    if (hexstring.charAt(0) == '*')
    {
      bgColor4 = parseLoxone(hexstring);
    }

    for (int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) packetBuffer[i] = 0; // Buffer leeren

    //Sonderzeichen fuer Effektsteuerung
    if (hexstring.charAt(0) == '@')
    {
      effektNR = hexstring.charAt(1) - '0';

    }

Diese Sonderzeichen müssen in Loxone bei einem virtuellen UDP Ausgang vor den Lumitech String geschrieben werden. Wand1 „#“ , Wand2 „!“, Wand3 „?“ und Wand4 „*“. Soll ein Effekt abgespielt werden, dann wird ein „@“ vorangestellt.

Die Integration in Loxone ist nach erfolgreichem Flashen recht einfach. Für die Steuerung der Farben wird ein einfacher Lichtsteuerungsbaustein verwendet. Für die Effekte ein Radio Button. Für den virtuellen Ausgang habe ich eine Vorlage erstellt. Diese kann in Loxone importiert werden.

Lichtsteuerung Baustein in Loxone
Parameter in der Lichtsteuerung für die Ausgänge
Einstellungen am virtuellen Ausgang
Einstellungen am Ausgangsbefehl (Sonderzeichen!)
Radiotasten Baustein zur Effektsteuerung
Einstellungen im Radiotasten Baustein
Einstellungen am Ausgang zur Effektsteuerung
Die Bereiche des LED Streifen lassen sich in der APP wie geplant getrennt einstellen
Auswahl der Effekte in der Loxone App

Downloads

Beispielvideo

Im folgenden Video sieht man zunächst verschiedene Farbszenen (Muster) und dann die enthaltenen Effekte. Alles gesteuert mit einem Loxone Touch Air. Der LED Streifen hängt in meinem Testaufbau einfach an einer Wand. Ich habe hier in der Übergangswohnung keine Möglichkeit den LED Streifen Sinnvoll zu verbauen. Ich bin gespannt ob es jemand nachbauen wird! Freue mich über Fotos oder Videos von einer Installation. 

Demo Video von meinem Testaufbau

Die mit Sternchen (*) gekennzeichneten Links sind sogenannte Affiliate-Links. Wenn du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekomme ich von dem betreffenden Online-Shop oder Anbieter eine Provision. Für dich verändert sich der Preis nicht.

16 Gedanken zu “LoxPixel! RGBW Neopixel Integration in Loxone

  1. Das Projekt sieht ja super aus. Muss ich unbedingt ausprobieren – suche schon lange so etwas.
    Noch eine Frage, die Adapter-Platine sieht so professionell aus. Kann man die irgendwo bestellen – am besten mit Bestückung :-)?
    Danke

  2. Hallo Dennis,
    Mit grossem Interesse hab ich den Artikel von dir gelesen. Ich hab selbst ein „Loxone-Haus“ und ticke ähnlich wie du was Lichteffekte angeht. Ich hab daher beim Hausbau auch schon mehrere LED Stripes im Haus und steuere diese über die DMX Erweiterung an. An einer Stelle habe ich ebenfalls einen WS2812 Stripe eingesetzt weil mich die Möglichkeiten damit faszinieren. Der ursprüngliche Plan sah vor die Steuerung mit einem Raspberry zu machen. Aufgrund fehlender Projekte mit den entsprechenden Möglichkeiten zur Integration in die Loxone Steuerung bin ich da bislang nicht weiter gekommen. Nun hab ich aber deine Website gefunden und mit grossem Interesse den Artikel gelesen. Das ist genau das was ich gesucht habe. Nun besuche ich regelmässig den Onlineshop von cod.m und deine Website. Hast du schon einen Termin wann die Module erworben werden können? Besten Dank im Voraus.

    1. Ich denke das dauert nur noch wenige Tage bis Wochen bis zum Release bei CODM ich habe die Neopixel im kompletten Dachüberstand verbaut. Wird bald ein Video und Infos dazu geben 🙂

  3. Hallo, danke für den super Artikel
    Ich habe aber leider ein Problem, ich habe es mit einem Wemos di mini und einen sk6812 Led Streifen gemacht.
    Dabei habe ich den data PIN über einen 330 Ohm Widerstand angeschlossen.
    Weiß funktioniert bei mir ganz normal, aber sobald ich auf eine Farbe wechsle leuchtet jede dritte LED richtig und die beiden anderen jeweils in einer anderen Farbe.
    Weißt du zufällig eine Lösung dafür?

    Habe es auch auf einem ws2812 12v streifen probiert, dabei funktioniert alles super

    1. Hallo Nico,

      Das klingt für mich danach als sei der LED Stripe Typ falsch eingestellt. Das würde zumindest das Verhalten erklären. Wir haben gerade diese Woche entschieden das LOXpixel Projekt so wie es aktuell ist nicht weiterzuentwickeln und haben stattdessen die Loxone Integration sowie die Lumitech Berechnung in ein bestehendes (viel mächtigeres) Projekt integriert. Es handelt sich dabei aktuell um einen Fork Des WLED Projekts. Bald werden die Funktionen aber vermutlich auch in der Hauptversion zur Verfügung stehen. Du kannst dir den Fork hier runterladen und auf dein Wemos Mini schreiben. Das sollte problemlos funktionieren. Ich werde bald auch einen kleinen Artikel dazu schreiben. Solange findest du den Fork mit Loxone Integration unter : https://github.com/codm/WLED. Und falls du eine passende Platine suchst, gibt es die bald ( evtl. Schon nächste Woche) bei Patrick im Shop: https://shop.codm.de/ 🙂 bei Fragen einfach melden! Mit WLED kannst du deine Stripes besser testen!

  4. Hallo Dennis!
    Schön noch einen leidenschaftlichen Bastler zu sehen. Super ausführlicher Artikel! Bin schon am Überlegen ob ich mir eine Platine zulege 🙂
    Aktuell sitz ich noch in einem „Neubau“ und nach und nach wird gebastelt 🙂 Mein nächstes Projekt wird eine Treppenbeleuchtung. Genauer gesagt soll jede einzelne Treppenkante beleuchtet werden. Am besten mit einem Bewegungsmelder (mal schauen ^^)
    Nur bei der Umsetzung bin ich mir noch unsicher… Ich habe für die Treppe eine einzige BUS Zuleitung, 4 Drähte. Ursprünglich dachte ich mir ich schleife diese Zuleitung einfach von Stufe zu Stufe durch. Jetzt habe ich jedoch vor kurzem gesehen, dass ich eigentlich zu jeder Stufe eine Zuleitung gebraucht hätte … und dementsprechend viele RBGW Dimmer …
    Nun zu einer Frage 😀 denkst du eine Länge von zirka 10 – 15 Metern ist möglich? Und denkst du deine Variante wäre für diesen Anwendungsfall angebracht? Oder hättest du einen Ratschlag bezüglich der Umsetzung? Wie vorhin schon erwähnt habe ich nur ein BUS Kabel zur Treppe über das alles laufen sollte.

    Beste Grüße,
    Patrick

    1. Hallo Patrick!
      Ich habe das gleiche vor mit meiner Kellertreppe und werde dafür auch Neopixel und unsere Controller verwenden. Eine Datenleitung reicht da für 10-15m schon aus. Vielleicht werden die Effekte etwas langsamer aber das fällt kaum auf ohne direkten Vergleich. Was meinst du genau mit Bus Leitung ? Ein CAT Kabel? Für Daten reicht das wie gesagt. Für einen 5V Neopixel Streifen von 15m Länge aber auf keinen Fall. Ich werde die Datenleitung von Stufe zu Stufe durchschleifen und spätestens alle 5m mit einem 2,5mm2 Kabel neu einspeisen. Es gibt 12V Varianten die weniger Querschnitt benötigen aber ein CAT Kabel oder KNX Kabel (2x2x0,8) reichen da auch nicht wirklich.

      1. Hallo Dennis,
        ja mit Bus meine ich die KNX Kabel, die mit 4 Drähten (2x2x0,8) und einfacher Schirmung. Brauchen die LED Strips echt so viel Strom? Oder warum bist du der Meinung, eine 2,5mm² Leitung ist notwendig?
        Und wenn ich deinen Artikel richtig verstanden habe verwendest du dann die Platine + einen 5V Trafo (vermutlich) und den Code. Anschließend verbindest du die Platine über eine Datenleitung zum Miniserver ?! 😀

        lg

        1. Hallo Patrick,
          Das Problem sind die hohen Ströme bei der geringen Spannung von 5V. Die Streifen haben eine Anleitung von ca 15-20W pro Meter. Danach muss das Netzteil und auch der Querschnitt ausgerechnet werden. Wenn man nicht regelmäßig neu einspeist, sieht man Farbunterschiede über die Länge des Streifen. Als Datenleitung für den Streifen kannst du wie gesagt das KNX Kabel nutzen. Nur Strom muss eben extra hin. Die Platine wird in der aktuellen Version einfach via WLAN angebunden.
          Du kannst mir auch gerne einfach mal eine E-Mail schreiben.

Schreibe einen Kommentar

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

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