LoxPixel! RGBW Neopixel Integration in Loxone

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.

Schreibe einen Kommentar

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