RGBW868 Steuerung IPS2.5 mit Color Picker und Fade Timer

Hey Hi Hello zusammen,

ich habe jetzt knapp einen Monat IPS und bin trotz null Erfahrung in PHP sehr zufrieden, habe inzw. durch lesen, lesen, lesen hier im Forum vieles hin bekommen und gelernt.

Nachdem ich diesen Beitrag gelesen habe und ich einige RGB LED Strip in meiner Wohnung benutze, habe ich mich entschieden den RGBW von IPS zu kaufen und in diesem Sinne kommt auch mein erster eintrag ins Forum:

erst einmal „DANKE“ an die Programmierer es funktionierte von Anfang an *Respekt

Ich habe inzw. auch die Farben und Button an meine Bedürfnisse angepasst, nun will ich aber gerne mehr Programme als nur die 5 vorhandenen, ich habe da eine Vorstellung von etwa 30 verschiedene wie zb. Rot/Grün/Blau im Wechsel wo ich auch die Schnelligkeit anpassen könnte.

Meine Frage: Ist dies überhaupt möglich mit dem RGBW? Wen JA, Sorry aber ich weiß nicht wie/wo ich anfangen soll.

Hi,

ganz einfach.

Du brauchst von IP-Sycon ein RGB868 Modul und das Script von NickBlue
aus dem ersten Post und schon funzt das.

RGB868 Module kannste nur über Kontaktformular bei Steiner anfragen, sind leider nicht mehr im Shop.

gugstdu hier

RGBW-868: IP-Symcon :: Automatisierungssoftware

@wibo050447:

also es schaut so aus als wenn du versuchst meinen Beitrag zu beantworten?!?

Wen dem so ist glaube ich das du ihn nicht richtig durch gelesen hast, ich habe das Equipment bereits Daheim und im Einsatz.

Ich habe nur keine Ahnung wie ich selbst mehr Programme als nur die vorhandenen erstellen kann.

olla Kalikola,

Ich weiss nicht wie gut deine PHP und Programmierkenntnisse sind.



PJ_DimRGBW(12345,255,0,0,0,0,0,0,0) // Rot mit Null sec FadeTime
// Hier einen Timer. geht auch mit scripttimer. Z.B Warte 10sec

PJ_DimRGBW(12345,0,0,255,10,0,0,0,0) // Grün mit 10 sec FadeTime


Das Beispiel ist kein fertiges Script. Soll nur als Denkanstoß dienen.

Wen das Script (Programm) dann so läuft wie du es willst, erkläre ich dir wie du es in die Steuerung einbaust.

Gruß Nick

Moin Moin zusammen,

also meine Erfahrung und Kenntnisse in .php sind fast null aber ich bin ja lernfähig :wink:

@NickBlue:
mit deinem Denkanstoß, OK. Das habe ich verstanden bin aber mal vom „PJ_DimRGBW“ auf „PJ_SetRGBW“ gegangen damit es zum Anfang nicht zu kompliziert für mich wird.

Ich habe jetzt einfach mal in einem Skript
PJ_SetRGBW (mein Baum]/, 255, 0, 0, 0); //Rot
PJ_SetRGBW (mein Baum]
/, 0, 255, 0, 0); //Grün
PJ_SetRGBW (mein Baum]*/, 0, 0, 255, 0); //Blau
eingegeben und ausgeführt, er läuft das Prg. ab, aber zu schnell und Stoppt zum Schluss.

Wie bekomme ich jetzt es hin das er im 5sec. Takt zur nächsten Farbe wechselt und am Ende des Skript wieder von vorne Startet?

da suchst du am Besten mal im Forum, es gibt dazu schon einige Scripte

na die Scripte würden mich auch interessieren …

Da die automatische Suchmaschine anscheinend keine Lust mehr hat :D, wirst du schon mal selbst rgbw-868 in die SUCHE eingeben müssen.

Was da bei raus kommt, kannst dir ja denken. :eek:

Ich würde mal sagen im einfachsten fall ein

IPS_Sleep (5000);

nur kann man das nicht beliebig oft machen, weil es ja eine maximale Scriptausführungsdauer von standartmäßig 30 Sek. gibt. Dann könnte das script aber nach einer gewissen Zeit sich schlicht selbst wieder triggern (Timer setzen). Muss man natürlich den Zustand wo man gerade ist zwischenspeichern. Oder eine komplette Sequenz in den 30 Sek unterbringen.

Jan

@ Jan sorry muss da mal gegen steuern.

Bitte keine IPS_Sleep Befehle für Funktionen über 1 Sec. Da es sauberer mit Timer Events ist.

@RWN Hättest auch sagen können das es ein script auf der letzten Seite der suche gibt :wink:

http://www.ip-symcon.de/forum/f53/simples-definiertes-farb-script-fuer-rgbw-868-stripe-12157/

Gruß Nick…

ach ja …

so eine Script braucht 2 Dinge.

  1. Eine Steuer Variable (wo bin ich im Script)
  2. Einen Event Handler für die Triggerfunktion.

Huelke hatte damals einen richtig guten Ansatz gemacht.

Weiss aber leider nicht wie er das in seinem Modul umgesetzt hat.

es gab für den Chromoflex einen Programm Befehl.

Programm Add
Programm Clear
Programm Stop
Programm Start

und über add die Funtion Fade, wait, blink usw.
wer mal ne Idee das Teil neu zu schreiben.

wenn man weiß wonach man suchen soll klappt auch die Suchfunktion¸ danke für den "Such"tipp!

Der Skript von „Smudo“ ist ja schon mal Genial und brauchbar aber nur für Effekte die mindestens 1 Sec. laufen, alles was man darunter haben will geht leider nicht da das Skript mit einem Timer läuft.

Vieleicht hat ja jemand eine Idee um schneller Effekte hin zu bekommen.
Ich habe mal den Skript mit beigefügt:

<?

// Installation:
//1. Bei $LEDid die ID der RGBW-868 Instanz eintragen.
//2. RGB Werte, Fade und Pause Zeiten unter $commands eintagen.
//3. Script starten.
//4. Alles so schön bunt hier!

//An-Ausschalten mit:
//1. "Ausführen" Button im Editor oder
//2. IPS_runscript (diese Script-ID) oder
//3. direktes Ändern der Variablen "Aktiv" auf true oder false


$LEDid=27401 /*[Zentrale\RGB LED Strip\RGBW-868 (Stripe)]*/;

$commands =array( //R,G,B, Fade-Zeit, Pause
   array(255,0,0,0,1),
   array(0,255,0,0,1),
   array(0,0,255,0,1),
);

if(($IPS_SENDER == "Runscript")or($IPS_SENDER == "Execute")){ //Script wird durch 'runscript' oder 'execute' gestartet?
   $aktivid = @IPS_GetVariableIDByName("Aktiv", $IPS_SELF); //Variable 'Aktiv' vorhanden?
   if($aktivid===false) { //wenn nicht:
      $aktivid = IPS_CreateVariable(0); //Variable erstellen
      IPS_SetParent($aktivid, $IPS_SELF); //Variable Ort bestimmen
      IPS_SetName($aktivid, "Aktiv"); // Variable Name bestimmen
   }
   $stepid = @IPS_GetVariableIDByName("Step", $IPS_SELF); //Das gleiche wie mit der Variablen 'Aktiv'
   if($stepid===false) {
      $stepid = IPS_CreateVariable(1);
      IPS_SetParent($stepid, $IPS_SELF);
      IPS_SetName($stepid, "Step");
   }
    $eid = @IPS_GetEventIDByName("Aktiv-Event", $IPS_SELF); //Event 'Aktiv-Event' vorhanden?
   if($eid===false) { //wenn nicht:
      $eid = IPS_CreateEvent(0); // Event erzeugen
      IPS_SetEventTrigger($eid, 1, $aktivid); // Event aktivieren
      IPS_SetParent($eid, $IPS_SELF); // Event Ort bestimmen
      IPS_SetName($eid, "Aktiv-Event"); // Event Name bestimmen
      IPS_SetEventActive($eid, true); // Event aktivieren
   }
   SetValue ($aktivid, (GetValue($aktivid) ? false:true)); //Variable 'Aktiv' toggle (Script an/aus schalten)
    }

if($IPS_SENDER == "Variable")    { // Wenn Script durch Variable getriggert:
   $aktivid = @IPS_GetVariableIDByName("Aktiv", $IPS_SELF); //ID der Variablen 'Aktiv' holen
   $aktiv=GetValue($aktivid); // Variable 'Aktiv' auslesen
    if($aktiv){ // Wenn Variable 'Aktiv' 'true' ist:
       $stepid = @IPS_GetVariableIDByName("Step", $IPS_SELF); //ID der Variablen 'Step' holen
       SetValue($stepid,0); //Wert 0 in Variable 'Step' speichern
       IPS_SetScriptTimer($IPS_SELF, 1); //Scripttimer auf 1 Sekunde setzen (Script aktivieren)
        }
    else{  // sonst:
       IPS_SetScriptTimer($IPS_SELF, 0); //Scripttimer löschen und
       PJ_DimRGBW($LEDid,0,0,0,0,0,0,0,0); //LEDs ausschalten
       }
    }

if($IPS_SENDER == "TimerEvent"){  //Wenn Scriptaufruf durch Timer:
   $stepid = @IPS_GetVariableIDByName("Step", $IPS_SELF); // ID der Variable 'Step' auslesen
   $step=GetValue($stepid); // Variable Step auslesen
    PJ_DimRGBW($LEDid,$commands[$step][0],$commands[$step][3],$commands[$step][1],$commands[$step][3],$commands[$step][2],$commands[$step][3],0,0); //Werte aus dem Array 'Command' holen und an die LEDs senden
    IPS_SetScriptTimer($IPS_SELF, ($commands[$step][5]+$commands[$step][4])); // Scripttimer neu setzen für nächsten 'Step' (Wert 3/Fadezeit + Wert 4/Pause)
    $step++; // Variable 'Step' um 1 erhöhen
    if ($step>=count($commands)){SetValue($stepid,0);} // Wenn 'Step' größer als die Anzahl der Befehlszeilen in 'command' dann vorne beginnen
    else{SetValue($stepid,$step);} // Aktuellen 'Step' abspeichern
    }

?>

Hallo Nick Blue,

habe eine Fehler in deinem Script

—>>> ImageColorPicker-receive.php

Die Variable mit der ID >> idrgbfader wird nicht angelegt !!

Zeile 69 SetValue(intval($idrgbfader), hexdec($rgbhex));

Manuell angelegt und zugewiesen funkt es.
Bitte im Installationsscript nachtragen.

Danke

Sie wird auch nicht angelegt.
Sie wird im I Frame im Dateiaufruf übergeben.

Warum Sie bei dir nicht übergeben wird müsste man prüfen.

Gruß Nick

@Kalikola

Hier ein Script an dem ich getüfelt habe für den Zweck. Allerdings noch ohne Steuerung sondern bisher nur ein „dauerrun“ Script mit dem sich sehr kurze Sequenzen abbilden lassen. Punkt ist das belastet schon die CPU. Man sollte an der stelle möglichst wenig IPS Variablen schreiben, da das verhältnismäßig langsam ist, insbesondere wenn die Konsole auf ist.

<?
IPS_SetScriptTimer($IPS_SELF, 0); //Scripttimer aus

SetValue (38809 /*[Lights\Hidden\Dimming/Lichtorgel Test\JKDauerrun\Start]*/,microtime(true));
if (! GetValue(18503 /*[Lights\Hidden\Dimming/Lichtorgel Test\JKDauerrun\run]*/)) exit;
$counter = 0; // sicherheishalber
$start = microtime(true);
$laufzeit = 8;

//IPS_SemaphoreLeave("KritischerPunkt");
while (!IPS_SemaphoreEnter("KritischerPunkt", 50) && $counter < 100)
{
	ips_sleep(50);
	$counter ++;
}
//IPS_SemaphoreLeave("KritischerPunkt");

IPS_SetScriptTimer($IPS_SELF, 0); //Scripttimer aus
SetValue (29086 /*[Lights\Hidden\Dimming/Lichtorgel Test\JKDauerrun\Start after Semaphore]*/,microtime(true));

$end = round ($start+$laufzeit) + 0.10; // So auf ne ganze Sekunde und dann 50ms runter
$once = false;
while ($end >=microtime(true)) {
	if ($end-1.2 <=microtime(true) && !$once) { // timer aktivieren
      IPS_SetScriptTimer($IPS_SELF, 1); //Scripttimer auf 1 Sekunde setzen (Script aktivieren)
      //echo "xxx";
      $once = true;
	}
	//echo  "$end >=".microtime(true)."
";
	ips_sleep(100); // nix tun ;)
}

IPS_SemaphoreLeave("KritischerPunkt");
//echo $start;
SetValue (20915 /*[Lights\Hidden\Dimming/Lichtorgel Test\JKDauerrun\End]*/,microtime(true));
?>

Beschreibung:
Es gibt ein paar Variable die sollten sich aus dem Script mehr oder weniger ergeben. Hauptsächlich zur Beobachtung ob es das macht was es soll :slight_smile:
Die Run Variable ist recht wichtig. Das Script läuft nur wenn die True ist. Dann gibts bei mir ein kleines Script das die auf False setzt und dieses wiederum hängt im IPS Start (Event Handler, Start-Skript). Das is ne Sicherung, wenn man experementiert. Sonst hängt wenne Pech hast IPS mehr oder weniger und du kriegst das Script nicht mehr aus. So ist nach Dienst Neustart definitiv Ruhe und man kann debuggen.

Die Zeit wann per Timer neu gestartet wird liegt hier bei 8 Sekunden. Ich hab das ein bischen höher als 1 Sek gesetzt, damit man nicht so oft die zwar kurzen aber gegebenfalls vorhandenen Unterbechungen vom Skript Neustart hat. Ansonsten wird wird etwas vor Ablauf der letzen Sekunde ein Timer gesetzt. Dann startet der das Script quasi schonmal wärend das andere noch ein bisschen läuft. In der Zeit blockiert die Semaphore einen weiteren Ablauf. Erst wenn die alte Instanz beendet ist startet dann die neue in die Hauptschleife. Also soweit ich das bisher getestet habe klappt das wohl. Was dir jetzt fehlt ist ne Ablaufsteuerung, aber das kriegt man wohl auch noch hin :wink:

Gruß,
Jan

hab es heute mal probiert und ? läuft super.

vielen Dank für die tolle Arbeit.

Sorry das ich mich jetzt erst melde, aber als Frischer IPS Besitzer habe ich gerade sehr viele Baustellen.

Danke für die Mühe Anti, aber ehrlich gesagt versteh ich nur Bahnhof, vieleicht magst du ja mal die Scripte aus den Reihen 4,5,19,35 hochladen. Dann könnte ich es Direkt mal einbinden und Tüffteln.

Wenn Du noch ganz neu bist sollteste vielleicht erst grundlegendere Dinge angehen. Früher oder später wollt ich noch mal was richtung Lichtorgel umsetzen (wenn das schnell genug wird). Wenn das soweit ist und tut werd ichs sicher noch mal komplett posten.

Gruß,
Jan

Yeah, das hätte ja mal was! :slight_smile: