Updated: 12.03.2010
Hi alle zusammen.
Chromoflex wurde hier im Forum schon angesprochen. Dabei handelt es sich um einen RGB Controller mit dem man RGB Stripes oder Spots ansteuern kann.
Ich hab mich damals gleich für die Luxus-Variante entschieden: „RC“ diese baut selbst ein Funknetzwerk auf und kann über einen USB Dongle ferngesteuert werden (Bis zu 8 verschiedene Netze paralel).
Nun ein paar von euch haben die Beta des ChromoflexRC Moduls ja schon erfolgreich am laufen.
Da ich in letzter Zeit immer mehr von Euch das Modul zugeschickt habe, denke ich die Zeit ist nun gekommen die Beta öffentlich zu machen.
An diesem Post findet Ihr für die unterschiedlichen IPS Versionen downloads
Wenn ich die Zeit gefunden habe um weiterzu arbeiten, findet Ihr hier immer die neuste Version der dll.
Changelog:
-beta 0.3 (b0.3):
FadeColor Funktion für weiche Übergänge
Ablaufsteuerung/Programm Funktionen
-beta 0.2 (b0.2):
Variablen hinzugefügt (Farbe, Programm + Dimmer)
-beta 0.1 (b0.1):
Erste Beta mit allen gängigen Funktionen
Es stehen alle Versionen zum Download bereit.
Die b0.3 für IPS 2.2 kommt mit neuen Funktionen:
So gibt es jetzt die Funktion FadeColor, die es ermöglicht über eine definierbare Zeitspanne von der aktuellen Farbe zu einer neuen Überzublenden.
Neu sind auch die Programm Funktionen:
Mit dessen Hilfe kann man selbst eine Ablaufsteuerung definieren und so eigene Programme für das CF entwerfen. Anders als bei den Controller-Internen Programmen wird hier die Steuerung allerdings über IPS und den Dongle vorgenommen. Der Server sendet also alle Änderungen „LIVE“ an die Controller. Um möglichst viel Spielraum bei dem Programm-Entwurf zu gewährleisten ist das ganze etwas komplizierter geworden. Es liegt aber eine Doku bei.
Anleitung
Das ganze ist eine dll Datei (ChromoflexRC.dll) die in den Modules Ordner von IPS gehört.
Wenn die drin ist, Service neu starten und es gibt ein neues Modul.
Barthelme > Chromoflex III RC Stripe und i350.
Ist egal welches man nimmt, ist beides das selbe…aber Ordnung muss sein ^^.
Als Parent wählt man FTDI und in dessen Einstellungen den Chromoflex Dongle aus der Liste.
Da man selber leider noch keine Eigenschaften-Seiten für seine Module bauen kann, müssen die Modul-Einstellungen noch per PHP vorgenommen werden. Mittels SetNet (Netz 8 ist default) und SetDeviceId (s.u.) kann man das Modul einstellen.
Die DeviceID kriegt man momentan nur mit dem Hersteller Tool, dort auf Suche gehen und die so ermittelten IDs (Hexadezimal) mit dem Windows-Taschenrechner (oder aus dem Kopf ;)) in Dezimal-Zahlen umwandeln. Mit google gehts auch: „0xEmpfängerID in decimal“ eingeben (also z.B. „0x1009D2 in decimal“)
Entweder legt man nur ein Chromoflex Modul an und setzt die ID vor jedem Befehl neu oder man legt ein Modul pro Receiver an (so ists gedacht) und setzt die Eigenschaften jeweils einmal mit PHP, danach sollte IPS sich das merken…
###############
# Aktionen #
###############
// An Alle:
ChromoflexRC_BroadcastSetColor($objektID,$r,$g,$b,$dimm);
ChromoflexRC_BroadcastSetProgram($objektID,$program,$dimm); // $program=0 => Chromoflex aus
ChromoflexRC_BroadcastSetDimmer($objektID,$dimm);
// nur an bestimmten Receiver
ChromoflexRC_SetColor($objektID,$r,$g,$b,$dimm); // $dimm: 0...254 0=aus, 254 voll an (alternativ zu 254 geht auch -1)
ChromoflexRC_SetProgram($objektID,$program,$dimm); // $program=0 => Chromoflex aus
ChromoflexRC_SetDimmer($objektID,$dimm);
###############
# Properties #
###############
ChromoflexRC_SetNet($objektID,$NetzId); // $NetzId=> 1..8 Default ist 8.
ChromoflexRC_GetNet($objektID); // Rückgabe: NetzId
ChromoflexRC_SetDeviceId($objektID,$DeviceId); // $DeviceId => Bisher nur zu ermitteln mit CF_3 ColorEditor
ChromoflexRC_GetDeviceId($objektID); // Rückgabe: DeviceId
###############
# Beispiel #
###############
ChromoflexRC_SetDeviceID(47950 /*[ChromoflexRC III Stripe]*/, 1051090); // Device ID setzen (Netz ist 8=Default)
ChromoflexRC_BroadcastSetColor(47950 /*[ChromoflexRC III Stripe]*/ ,255,0,0,254); //Rot, Voll an
Das wars auch schon.
Das Modul ist nach wie vor als Beta zu sehen.
Es fehlen Eigenschaften und die Receiver Suche!
Paresy hatte mir aber schon vor längerer Zeit angeboten eine Eigenschafts-Seite in IPS mit einzukompilieren, ich will aber erst die Suche fertig machen und dazu fehlt’s grad an der Zeit.
Wenn sich das Ändert gibt es hier das neuste Modul.
Na dann machts mal Bunt!
gruß Huelke
Neue Funktionen der Beta 0.3
##### Change-Log / Neue Befehle
//"Stand-Alone"
Chromflex_FadeColor(ObjectId,r,g,b,dimm,duration)
Chromflex_BroadcastFadeColor(ObjectId,r,g,b,dimm,duration)
//"Program"
Chromflex_Program_Length(ObjectId) : integer
Chromflex_Program_IsRunning(ObjectId) : boolean
Chromflex_Program_Add(ObjectId,function,duration)
Chromflex_Program_Clear(ObjectId)
Chromflex_Program_Start(ObjectId,repeat)
Chromflex_Program_StartBroadcast(ObjectId,repeat)
Chromflex_Program_Stop(ObjectId)
######
###### „Stand-Alone“ Funktionen:
Chromflex_FadeColor(ObjectId,r,g,b,dimm,duration)
Chromflex_BroadcastFadeColor(ObjectId,r,g,b,dimm,duration)
/*
Von Aktueller Farbe zu Übergebener Farbe überblenden.
Dauer des Überblendens: duration in Millisekunden, aber nicht unter 50 ms (Chromoflex blendet ohnehin minimal über)
Während des Vorgangs wird die ProgramVariable des Moduls auf "88" gesetzt, nach Ablauf des Programms steht es dann auf 18 => Farbe
Wird während eines Vorgangs eine andre CF Steuer-Funktion (SetColor,SetProgram,usw....) ausgeführt, so wird der Fade abgebrochen.
*/
######
###### Programmfunktionen:
Das Modul bietet nun Zeitgesteuerte Programmfunktionen
Man kann ein eigenes Ablauf-Program zusammenstellen und dieses starten.
Dabei wird allerdings nicht das Interne ROM des Empfängers programmiert sondern der Empfänger wird „LIVE“ angesteuert.
Die Möglichkeiten sind beim Internen Rom zu begrenzt.
Das bedeutet aber das (im Höchstfall) 25 mal pro Sekunde ein Befehl über den Dongle an die Empfänger geschickt wird.
Das klingt krasser als es ist :). Es wird nur ein Befehl gesendet wenn sich die Farbe auch wirklich geändert hat.
Ich habe keine Störungen anderer Geräte feststellen können.
Chromflex_Program_Add(ObjectId,function,duration)
/*
Fügt dem Programm einen weiteren Punkt hinzu.
duration:integer
Dauer der Aktion
function:string
Zurzeit gibt es 3 Funktionen:
"fadeTo(farbe)" // dimm: optional,default:254
//Zu Farbe Überblenden (über die dauer)
"set(farbe)" // dimm: optional,default:254
//Farbe setzen (und für die dauer halten)
"hold"
//Aktuelle Farbe halten (für die dauer)
Die Farbe (farbe) hat grundsätzlich folgendes Format:
r,g,b,dimm
Allerdings kann Sie auch viel mehr sein (siehe dazu unten: Farb-Definitionen)
*/
Chromflex_Program_Clear(ObjectId)
// Program löschen
Chromflex_Program_Start(ObjectId,repeat)
// Starten für die betroffenen Device
// repeat=false => Das Program läuft ein mal und beendet dann den Program Modus
// repeat=true => Das Program wiederholt sich
Chromflex_Program_StartBroadcast(ObjectId,repeat)
// Starten für alle Devices
// repeat=false => Das Program läuft ein mal und beendet dann den Program Modus
// repeat=true => Das Program wiederholt sich
Chromflex_Program_Stop(ObjectId)
// Das Program stoppen (wird auch durch jede andere Funktion die den Receiver ansteuert beendet (SetColor,SetProgram....)
Chromflex_Program_Length(ObjectId) : integer
// Länge des Programms (in Millisekunden)
Chromflex_Program_IsRunning(ObjectId) : boolean
// Läuft grade das Userprogram?
// Alternativ wird auch die ProgramVariable des Moduls auf "99" gesetzt, nach Ablauf des Programms steht es dann auf 18 => Farbe
########### Beispiel „Sonnenaufgang“ (langsam):
// Vor einem neuen Programm: resetten
Chromflex_Program_Clear(11199)
// Sonnen-Aufgang (über ~ 300 Sekunden, dann 10 Sekunden "halten")
ChromoflexRC_Program_Add(11199,'set(255,0,0,0)',100); //Rot und Dunkel machen
ChromoflexRC_Program_Add(11199,'fadeTo(255,205,70,254)',300000); //über 300 Sekunden aufblenden und Farbe auf Warmweiß
ChromoflexRC_Program_Add(11199,'hold',10000); //Tageslicht 10 Sekunden halten (hier unnötig)
// Programm starten: (nicht im Repeat Modus=> False)
Chromflex_Program_Start(11199,FALSE);
Zumindest bei meinen RGB Stripes sind die Schritte bei Dunkelen Farben (rund Ums Schwarz) leider etwas grob und somit stufig.
Theoretisch können beliebig viele Program-Punkte aneinander gereiht werden
###### Farb-Definitionen: (für Program_Add)
Die Farben werden in folgendem Format angegeben, fehlt ein Parameter, so wird der Default-Wert gesetzt.
Farb-Format:
r,g,b,dimm
r:rot : Default = 0
g:grün : Default = 0
b:blau : Default = 0
dimm:dimmer : Default=254
Die einzelnen Werte können Absolut oder auch Zufällig sein:
Wert-Formate:
x Zahl Absolut: x
x-y Zufallszahl x bis y
-y Zufallszahl 0 bis y
x- Zufallszahl x bis 255
-
Zufallszahl 0 bis 255
FarbPaletten:
Anstelle nur einer Farbe können auch Paletten verwendet werden.
Diese machen nur Sinn in sich wiederholenden Programmen!
Hierbei werden die einzelnen „Farben“ mit Semikolon getrennt.
Man hat die Wahl ob eine Zufällige Farbe aus der Palette gewählt werden soll ODER die Farben in Reihe „abgearbeitet“ werden sollen:
(Zufällig)
[farbe1;farbe2;farbe3]
(Reihe)
{farbe1;farbe2;farbe3}
##### Beispiele (alle für den „repeat-modus“ gedacht):
Für alle Beispiele gilt:
Vor dem Adden das alte Programm löschen, also ChromoflexRC_Program_Clear aufrufen - Nach dem Adden muss das Programm noch gestartet werden (siehe oben)
// Kleine Pallette durchwandern: {}
ChromoflexRC_Program_Add(11199,'set({255,0,0; 255,255,0; 0,255,0; 0,255,255; 0,0,255; 255,0,255})',5000); // Nächste Paletten Farbe 5 Sekunden halten
// -geht natürlich auch als Fading -> "Regenbogen":
ChromoflexRC_Program_Add(11199,'fadeTo({255,0,0; 255,255,0; 0,255,0; 0,255,255; 0,0,255; 255,0,255})',5000); // 5 Sekunden zu nächster Paletten Farbe Faden
// Das entspricht im überigen exakt diesem Program - ist aber auf eine Zeile Komprimiert:
ChromoflexRC_Program_Add(11199,'fadeTo(255,0,0)',5000);
ChromoflexRC_Program_Add(11199,'fadeTo(255,255,0)',5000);
ChromoflexRC_Program_Add(11199,'fadeTo(0,255,0)',5000);
ChromoflexRC_Program_Add(11199,'fadeTo(0,255,255)',5000);
ChromoflexRC_Program_Add(11199,'fadeTo(0,0,255)',5000);
ChromoflexRC_Program_Add(11199,'fadeTo(255,0,255)',5000);
// Gleiche Palette aber diesmal ist Reihenfolge zufällig [] - das kann man nicht durch ein alternativ Programm lösen
ChromoflexRC_Program_Add(11199,'set([255,0,0; 255,255,0; 0,255,0; 0,255,255; 0,0,255; 255,0,255])',5000); // 5 Sekunden zu nächster Paletten Farbe Faden
### Nun Zufällige Farbwerte
// Zufall Farben r,g,b je 0 bis 255
ChromoflexRC_Program_Add(11199,'set(-,-,-)',10000); // Zufälltige Farbe 10 Sekunden halten
// Zufall Farben Primär Rot (Der Rotanteil liegt bei 200 - 255)
ChromoflexRC_Program_Add(11199,'set(200-,-,-)',10000); // Zufälltige Farbe 10 Sekunden halten
// Zufall Farben diesmal noch definierter (rot: 100 bis 200 - grün: 10 bis 100 - blau: 200-230
ChromoflexRC_Program_Add(11199,'set(100-200,10-100,200-230)',10000); // Zufälltige Farbe 10 Sekunden halten
// Natürlich kann man auch den Dimmer auf Zufall setzen (hier 100 bis 200)
ChromoflexRC_Program_Add(11199,'set(255,190,230,100-200)',10000);
// Man kann Zufällige Zahlen auch in Paletten verwenden (Hier ein Zufälliger RotTon gefolgt von Weiß ... usw.)
ChromoflexRC_Program_Add(11199,'set({200-,-100,-70; 255,255,255})',10000);
### Hier noch einmal ein paar Beispiele
// Weicher Wechsel
ChromoflexRC_Program_Add(11199,'fadeTo(100-,100-,100-)',3000); // 3 Sekunden zu Zufälltiger Farbe überblenden
ChromoflexRC_Program_Add(11199,'hold',10000); // Farbe 10 Sekunden halten (für Repeat Modus)
// FlashChange: Ein RotTon gefolgt von einem GrünTon dann ein BlauTon, Dazwischen jeweils ein kurzes aufblitzen in Weiß
ChromoflexRC_Program_Add(11199,'set({200-,-100,-100;-100,200-,-100;-100,-100,200-})',5000 );
ChromoflexRC_Program_Add(11199,'set(255,255,255)',100 );
// So etwas wie Blob:
ChromoflexRC_Program_Add(11199,'fadeTo({200-,-100,-100;-100,200-,-100;-100,-100,200-})',3000 );
ChromoflexRC_Program_Add(11199,'fadeTo({200-,-100,-100;-100,200-,-100;-100,-100,200-})',3000 );
### Beispiel für "kompliziertere" Proramme:
// Gewitter: (Nicht so gut wie das "echte" -ein wenig "sanfter"*- aber es geht... (* Das liegt daran das der CF leider IMMER leicht fadet wenn man die Farbe per Funk wechselt)
// Auf diese Weise lässt sich sicherlich auch etwas wie das "Feuer-Program" erstellen.
ChromoflexRC_Program_Add(11199,'fadeTo(-50,-50,200-,-50)',1500 ); // fade zu einem zufälligen dunkelen Blau
ChromoflexRC_Program_Add(11199,'fadeTo(-50,-50,200-,-50)',1500 ); // fade zu einem (weiteren) zufälligen dunkelen Blau
ChromoflexRC_Program_Add(11199,'fadeTo(-50,-50,200-,-50)',1500 ); // fade zu einem (weiteren) zufälligen dunkelen Blau (insg 4,5 Sekunden)
// Das ist quasi das Hintergrund "Rauschen"
// Nun muss ab und zu für einen Blitz gesorgt werden:
// Dafür wird zufällig aus einer Palette aus Farben gewählt. Meistens ist es wieder nur ein weiteres zufälliges Blau. Manchmal aber auch ein reines Weiß:
// Je nachdem wie oft man die Blaue Farbe da mit reinschreibt verringert sich natürlich die Wahrscheinlichkeit für den weißen Blitz...
ChromoflexRC_Program_Add(11199,'set([-50,-50,200-,-50;-50,-50,200-,-50; -50,-50,200-,-50; 255,255,255,254)',100 ); // Kurzer "Flash" wahrscheinlichkeit 3:1 für weiß(=Blitz)
ChromoflexRC_Program_Add(11199,'set([-50,-50,200-,-50; -50,-50,200-,-50; 255,255,255,254)',100 ); // Kurzer "Flash" wahrscheinlichkeit 2:1 für weiß(=Blitz)
ChromoflexRC_Program_Add(11199,'set([-50,-50,200-,-50; -50,-50,200-,-50; 255,255,255,254)',100 ); // Kurzer "Flash" wahrscheinlichkeit 2:1 für weiß(=Blitz)
ChromoflexRC_Program_Add(11199,'set([-50,-50,200-,-50;-50,-50,200-,-50; -50,-50,200-,-50; 255,255,255,254)',100 ); // Kurzer "Flash" wahrscheinlichkeit 3:1 für weiß(=Blitz)
// Weil danach das Programm wiederholt wird wollen wir nicht das die letzte Farbe Weiß war:
ChromoflexRC_Program_Add(11199,'set(-50,-50,200-,-50)',200 ); // Setze Dunkeles Blau (damit nicht vom Weiß eines "Blitzes" 1,5 Sek gefaded wird (repeat)
Der Kreativität sollten keine Grenzen gesetzt sein,
wenn doch: also wenn Ihr ein Ablauf-Programm bauen wollt das Ihr so nicht umsetzten könnt… PN → an HUELKE
Nun denn, bitte Postet doch das ein oder andere Program, welches Ihr erstellt habt.
Ich bin mal gespannt auf eure Ideen.
Die Nutzung geschieht auf eigene Gefahr.
WARNUNG: nicht mehrere Programme die Viel „Funkbedarf“ (~25 Farbänderungen in der Sekunde) haben gleichzeitig laufen lassen.
Der Dauer Test mit einem Einzelnen Programm hat problemlos funktioniert.
Der Stress Test mit 4 Parallen Stressreichen(~25 Farbänderungen in der Sekunde mal 4!!! = 100) Programmen hat zu einer Fehlfunktion des Dongels geführt (nach längerer Laufzeit).
Hier noch ein paar PHP Defines/Variabelen die Ihr brauchen könntet
//Programme
define("cf_program_off",0);
define("cf_program_savecolorandoff",1);
define("cf_program_savedcolor",2);
define("cf_program_colorchange",3);
define("cf_program_medium_colorchange",4);
define("cf_program_slow_colorchange",5);
define("cf_program_blob",6);
define("cf_program_burst",7);
define("cf_program_fire",8);
define("cf_program_flashes",9);
define("cf_program_lsd",10);
define("cf_program_user1",11);
define("cf_program_user2",12);
define("cf_program_user3",13);
define("cf_program_slow_strobo",14);
define("cf_program_strobo",15);
define("cf_program_fast_strobo",16);
define("cf_program_mix",17); // fast colorchange + blob
define("cf_program_color",18); // set by "...SetColor"
//Farbpalette (wie die im Herstellertool)
$cf_color_table=array(
array(255, 0, 0), /*/0: Rot */
array(255, 20, 0), /*/1: Hell3rot */
array(255, 40, 0), /*/2: Hell2rot*/
array(255, 80, 0), /*/3: Hellrot*/
array(255, 120, 0), /*/4: Orange*/
array(255, 255, 0), /*/5: Gelb*/
array(200, 255, 0), /*/6: Gruengelb*/
array(100, 255, 0), /*/7: Hellgruen*/
array(0, 255, 0), /*/8: Reingruen*/
array(0, 255, 80), /*/9: Leicht Indigo*/
array(0, 255, 144), /*/10: Indigo*/
array(0, 255, 255), /*/11: Hellblau*/
array(0, 100, 255), /*/12: Hellblau*/
array(0, 50, 255), /*/13: Dunkelblau*/
array(0, 0, 255), /*/14: Royal*/
array(50, 0, 255), /*/15:*/
array(100, 0, 255), /*/16:*/
array(255, 0, 255), /*/17: Magenta*/
array(255, 0, 100), /*/18 */
array(255, 0, 50), /*/19 */
array(255, 255, 255), /*/ 20 *Weiss */
array(255, 255, 80), /*/ 21 Ungefaehr Weiss*/
array(120, 255, 120), /*/ 22 Ungefaehr Weiss*/
array(190, 255, 180), /*/ 23 Ungefaehr Weiss*/
array(160, 255, 255) /*/ 24 Ungefaehr Weiss */
);
// Passende Funktion für Palette
function ChromoflexRC_SetPalColor($objectId, $palColor, $dimm);
global $cf_color_table;
ChromoflexRC_SetColor($objectId, $cf_color_table[$palColor][0],$cf_color_table[$palColor][1],$cf_color_table[$palColor][2],$dimm);
}
###############
# Beispiel #
###############
ChromoflexRC_SetPalColor(47950 /*[ChromoflexRC III Stripe]*/, 4, 254); // Orange - voll an
Hier das „Ur-Posting“:(um den weiteren Thread nicht zu zerstören )
Nun gibt es zu der alten Kabel-Variante schon länger die Spezifikationen zum Protokol.
Ich habe lange Zeit die Leute von Barthelme bekniet das die auch die Spezifikationen zum Chromoflex III RC rausgeben. Und ich hab sie nun endlich bekommen. Genauer gesagt hab ich die Sourcecodes des ColorEditors bekommen. =)
Das tolle ist, das der USB Dongle vom Chromoflex auch den FTDI Chip benutzt und somit den selben Treiber wie die FHZ 1300 (FS 20) verwendet.
Der IO Treiber (FTDI) zeigt den Chromoflex auch bereits an.
Das bedeutet ich könnte ja theoretisch auf die FTDI IO Unit aufbauen und müsste nur noch den Splitter und ein Modul programmieren.
Und da kommt Ihr ins Spiel, ich hab nämlich keine Ahnung wie genau ich da anfangen soll. Am besten wäre es natürlich die Source von dem FHZ1X00PC Splitter quasi als SDK bekommen könnte (vllt auch ein FS20-Modul dazu), dann könnte ich genau sehen wie die Kommunikation funktioniert.
Ich arbeite allerdings schon mit V2…
Hilfe!
Vielen Dank im Vorraus,
Huelke
Edit von paresy:
Download für IP-Symcon 2.3: http://www.ip-symcon.de/forum/92019-post199.html
ChromoflexRC_b0.1_2.04.rar (242 KB)
ChromoflexRC_b0.1_2.1.rar (242 KB)
ChromoflexRC_b0.2_2.04.rar (243 KB)
ChromoflexRC_b0.2_2.1.rar (243 KB)
ChromoflexRC_b0.3_2.1.rar (248 KB)
ChromoflexRC_b0.3_2.2.rar (249 KB)