Szenenscript für kontinuierlichen Farbwechsel

Mit den folgenden Szenenscripts kann eine bliebige Szene einer Farbleuchte zur Dynamischen Szene gemacht werden, so dass nach dem Aufruf der Szene sich die Farbe kontinuierlich ändert.

Das funktioniert mit allen Arten von Farbleuchten, seien es DALI (gruppierte RGB(W) Einzeldimmer oder DT-8 Farbleuchten), hue an P44-DSB-DEH/D und P44-LC-DE, RGB und RGBW SmartLED-Ketten, DMX-Leuchten und PWM-Ausgänge an P44-xx-X, sowie natürlich auch als Custom Device erstellte Farbleuchten.

Das erste Beispiel lässt die Farbe durch den Farbkreis wandern, indem es den "hue"-Kanal alle 10 Sekunden um 15 Grad (360 Grad = voller Farbkreis, also eine Umdrehung in 360/15*10 = 240 Sekunden = 4 min).

Das zweite Beispiel lässt die Farbe zwischen zwei hue-Werten hin- und herpendeln.

Wie ein Szenenscript eingeben?

Eine detaillierte Anleitung, wie ein Szenenscript auf einem P44-DSB oder P44-LC-Gerät erstellt wird, gibt es hier.

Beispiel 1: Ganzer Farbkreis

Das folgende Skript kann 1:1 kopiert und in das Feld "Script to execute..." im Szenenedit-Dialog eingegeben werden, aber natürlich auch nach Bedarf angepasst werden.

// Langsamer Farbwechsel durch den ganzen hue-Farbkreis (0..360 Grad)
var d = 10 // Anzahl Sekunden für einen 15-Grad Schritt
// Aktuellen Farbwert auf ein ganzzahliges Vielfaches von 15 justieren
// (Nicht unbedingt nötig, aber je nach Leuchte zu empfehlen wenn die
// reinen Rot, Grün, Blau-Farbpunkte erreicht werden sollen)
output.channel('hue',round(output.channel('hue'),15));
// Ab hier soll das Script endlos im Hintergrund laufen, dennoch aber
// der Szenenaufruf abgeschlossen sein. Deshalb wird die laufende Farbänderung
// mit `concurrent` in den Hintergrund verlegt.
concurrent {
  // Endlos, bis eine andere Szene aufgerufen wird
  while(true) {
    // hue (Winkel im Farbkreis) um 15 Grad erhöhen (geht bei 360 wieder auf 0)
    // Mit Überblendzeit = d (s. oben)
    output.dimchannel('hue',15, d)
    // Kanäle auf die Hardware anwenden
    output.applychannels()
    // Überblendzeit abwarten bis der nächste 15-Grad-Schritt gemacht wird
    delay(d)
  }
}

Beispiel 2: Farbwechsel zwischen zwei Werten hin und her

Bei dieser Variante können in den Variablen from und to zwei hue-Farbwerte angegeben werden, zwischen denen die Farbe dann langsam hin- und herwechselt. Mit den Variablen steps und d werden die Anzahl Zwischenschritte und die Schrittdauer (nicht zu kurz, s. Anmerkungen) bestimmt.

Das folgende Skript kann 1:1 kopiert und in das Feld "Script to execute..." im Szenenedit-Dialog eingegeben werden, aber natürlich auch nach Bedarf angepasst werden.

// Langsamer Farbwechsel zwischen hue=from und hur=to
var from = 30 // orange
var to = 140 // grün
var steps = 6 // Anzahl Schritte
var d = 5 // Anzahl Sekunden pro Schritt - 8-ung, nicht zu kurz einstellen (>1 Sek)
// Ab hier soll das Script endlos im Hintergrund laufen, dennoch aber
// der Szenenaufruf abgeschlossen sein. Deshalb wird die laufende Farbänderung
// mit `concurrent` in den Hintergrund verlegt.
concurrent {
  var hue = from
  var step = (to-from)/steps
  // Endlos, bis eine andere Szene aufgerufen wird
  while(true) {
    var i = 0
    // Vorwärts from->to
    while (i<steps) {
      output.channel('hue',from+i*step, d) // Neuen hue-Wert mit Überblendzeit setzen
      output.applychannels() // Kanäle auf die Hardware anwenden
      delay(d) // Überblendzeit abwarten
      i = i+1
    }
    // Rückwärts to->from
    while (i>0) {
      output.channel('hue',from+i*step, d) // Neuen hue-Wert mit Überblendzeit setzen
      output.applychannels() // Kanäle auf die Hardware anwenden
      delay(d) // Überblendzeit abwarten
      i = i-1
    }
  }
}

Anmerkungen

  • Das concurrent ist wichtig für dynamische Szenen, deren Szenenscript die ganze Zeit läuft. Ein Szenenaufruf ist genaugenommen erst abgeschlossen, wenn das Szenenscript ausgeführt ist. Deshalb würde ein endlos weiterlaufenden Szenenscript weitere Szenenaufrufe u.U. blockieren (ab Firmware 2.6.5 passiert das zwar nicht mehr, dennoch sollte concurrent verwendet werden). Mit concurrent wird die endlose laufende Farbwechslerschleife in den Hintergrund (in einen eigenen Thread) verlegt, so dass das Haupt-Szenenscript zuende laufen kann, der Farbwechsel aber trotzdem weitergeht.
  • Der hue-Wert wird in groben Schritten erhöht - damit der Übergang aber kontinierlich erscheint, wird bei output.channel() mit dem dritten Argument ein langsamer Übergang eingestellt.
  • Nicht jede Farbleuchte kann jede Farbe gleich gut darstellen. Insbesondere farbige "hue color" Leuchten haben kein sehr intensives grün und blau.
  • Bei Leuchten mit eigener Intelligenz wie DALI und hue ist die Leuchte selber zuständig, die (vielen kleinen) Zwischenstufen eines Übergangs zu berechnen. Nun ist es aber so, dass ein Farbübergang nicht eindeutig ist, sondern vom Farbraum abhängig ist, in dem er berechnet wird.

    Bei hue-Leuchten z.B. ist es so, dass diese zwar den hue/saturation Farbraum kennen (den klassischen Farbkreis), aber alle Farbübergänge dennoch (genau genommen inkorrekterweise) im CieX/Y Farbraum (die "Farb-Schuhsohle") berechnen. DALI DT-8-Leuchten kennen u.U. überhaupt nur den RGB- oder den CieX/Y-Farbraum, entsprechend sind auch da die Übergänge keine genauen hue-Übergänge. Anders die P44-internen Leuchtentypen wie SmartLEDs, DMX und PWMs, da berechnet die P44-Firmware die Farben und tut das für einen "hue"-Übergang auch im entsprechenden hue/saturation-Farbraum.

    In der Praxis fällt das aber nur auf, wenn man die Leuchte selber grosse Strecken des Übergangs machen lässt. Deshalb nehmen die Beispiele nur relativ kleine hue-Schritte, die auch im CieX/Y ähnlich aussehen wie im hue/saturation oder RGB-Farbraum.

    Wer es genauer will, kann die Schritte verkleinern, allerdings ist bei hue und DALI zu beachten, dass diese Technologien keine sehr kurzen Intervalle zwischen den Befehlen ertragen. Schneller als alle Sekunden ein Befehl ist unrealistisch, und man muss mit berücksichtigen, dass im gleichen hue- oder DALI-System gleichzeitig wahrscheinlich noch andere Aktivitäten laufen sollen (Szenenaufrufe, Dimmen). In der Praxis sind schnelle Farbwechsel höchstens zu Demozwecken sinnvoll - schöne Stimmungen ergeben sich eher aus fast unmerklich langsamen Farbwechseln.

    Die roten Pfeile im folgenden Bild zeigen einen echten hue-Übergang über eine Strecke von 100° von grün zu blau in hue/saturation (rechts) und einen in CieX/Y gerechneten Übergang zwischen denselben Farben (links). Im hue/saturation Farbraum geht der Weg über grünblau und hellblau, in CieX/Y aber durch die mehrheitlich weisse Mitte der "Farbschuhsohle".

    CIE vs HSV Farbübergang

Weitere Infos