IP-Symcon RGBW 868

Hallo,

ich habe eine Frage, vielleicht kann mir jemand helfen, ich versuche es mal zu beschreiben:

Ich habe einen RGBW 868 mit einem weißen LED Streifen und einem RGB Streifen, beides funktioniert perfekt.

Jetzt zu meiner Frage: ich möchte beim öffnen der Tür über einen Magnetkontakt den weißen LED Streifen einschalten
und für 2 Minuten eingeschaltet lassen…

Funktioniert auch, gelöst hab ich die so:

<?

if($_IPS[‚SENDER‘] == „TimerEvent“)
{
//Aus Befehl
PJ_SetRGBW(38186 /[OG\Test\LED]/,0,0,0,0);

//Timer ausschalten
IPS_SetScriptTimer($_IPS['SELF'], 0);

} else {
//An Befehl
PJ_SetRGBW(38186 /[OG\Test\LED]/,0,0,0,200);

//Timer anschalten
IPS_SetScriptTimer($_IPS['SELF'], 120);

}
?>:

Das Problem welches ich habe ist, wenn der RGB Streifen eingeschaltet ist , schaltet das Script das RGB ebenfalls aus.

Ich müsste also im Falle eines Türöffenes abfragen ob der RGB an ist und die Werte in dem Script ergänzen.

Geht sowas.

Ich hoffe ich habe mich verständlich ausgedrückt und danke allen die Meine Gedanken lesen :wink:

Hi,

war auch meine erste Idee:

PJ_GetRGBW();

… den Befehl gibt es anscheinend momentan aber noch nicht!! (STRG + Leertaste)

Daher hilft nur eines:

lege Dir Hilfvariablen mit den drei RGB Werten,
oder aber eine als ~HexColor an, wenn Dir klar ist wie die dann wieder auseinander gebröselt werden,

schreibe beim Setzen der RGB Werte die Daten (! anderes Script für RGB Part) da rein,

und lese Sie in Deinem Script wieder aus, aber im Ausschaltteil,

setze sie dann im Befehl;

dann sollte es funzen.

Hope it helps.

mfg

BerndJ

Moin!

Fast so wie Bernd es beschrieben hat, hab ich auch was an anderer Stelle gemacht.

Auf deinen Fall angepasst bin ich wie folgt vorgegangen:
> RGBW werden eingeschaltet, Hilfsvariable wird auf TRUE gesetzt.
> Die Tür wird geöffnet, ein Skript wird über ein Event ausgelöst und prüft, ob die Hilfsvariable TRUE ist
> Wenn die Hilfsvariable TRUE ist, dann werden sich die Inhalte von „Color“ und „White“ gemerkt.
> Die LED leuchten/blinken in Farbe X.
> Der alte Zustand wird wiederhergestellt (ist das nicht innerhalb der Skriptlaufzeit möglich, wenn du z.B. laaange die Tür offen hast, dann zusätzlich die Inhalte der Variablen „Color“ und „White“ „wegsichern“, wie Bernd geschrieben hat)
> Fertig :slight_smile:

Allerdings musst du den Inhalt von „Color“ und „White“ mit „GetValueFormatted“ wegsichern oder später den Integer-Farbwert wieder in HEX „umrechnen“. Eine Funktion dazu findet sich im „wie kann ich 2.0 - Thread“ (Oder das hier IP-Symcon - Wie kann ich… 2.0 - Seite 8). Glaube mehr habe ich nicht gemacht. Falls du noch Probleme mit der Umsetzung haben solltest, kann ich bei Gelegenheit mal meine Skripte raussuchen.

Grüße,
Chris

Moin,

wozu denn die Sonderschleife mit der Hilfsvariablen und abfragen ob wirklich und so?
Einfach immer alte Werte merken und nachher zurück sichern ist doch viel einfacher - und auch wenn die RGBs vorher aus waren werden sie halt beim Türschließen wieder auf aus gesetzt.

… merken ist das Stichwort - hier ‚Color alt‘
Das folgende Skript lässt den Stripe für eine Minute blinken:


// 0: alles Aus / 1: alles An / 2: Blinken langsam / 3: schnell / 4: Blitzen langsam / 5: schnell / 6: Fade langsam
$id = 15308 /*[RGBW-868 (Stripe) #172]*/;

if($_IPS['SENDER'] <> "TimerEvent"){
	IPS_SetScriptTimer($_IPS['SELF'], 60);
	$ist_rgb = GetValue(22698 /*[RGBW-868 (Stripe) #172\Color]*/); // Color Status Variable vom RGBW
	SetValue(32560 /*[Color alt]*/,$ist_rgb);
	PJ_SetRGBW($id, 200, 200,0,0);
	PJ_RunProgram($id, 5);
}

if($_IPS['SENDER'] == "TimerEvent"){
 	IPS_SetScriptTimer($_IPS['SELF'], 0);
   $ist_rgb = GetValue(32560 /*[Color alt]*/);
	$bl = ($ist_rgb & 255);
	$gr = (($ist_rgb >> 8) & 255);
	$rot = (($ist_rgb >> 16) & 255);
	PJ_SetRGBW($id, $rot, $gr, $bl, 0);
	PJ_RunProgram($id, 1);
}

MST

Ist das ein Test ? :wink: :smiley:

Gruß
Bruno

klar, einmal mit „<>“ und einmal mit „==“, kann man sicherlich auch anders machen, aber so gehts auch :D.

@Bruno,

alte und neue Schreibweise :slight_smile:

Bitte nur noch $_IPS[‚xyz‘] verwenden.
https://www.symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

Danke für die vielen Antworten, aber ich glaube mittlerweile, dass es so nicht funktioniert.

Wenn der RGB Stribe angesprochen wird, während der Timerlaufzeit, ist eine unterbrechnung des Timers
bei mir nicht möglich, ich denke ich werde es mit einem 2. Controllers lösen.

Gruss Jan

Mal in normalen Worten ausgedrückt:

Du hast die LED in GRÜN leuchten, die Tür geht auf und so lange die Tür offen ist sollen die LED in ROT leuchten. Dann geht die Tür wieder zu und dann schalten die LED wieder auf GRÜN.

Korrekt? Das funktioniert 100%ig!

Wie man es umsetzen muss hängt dann von den Details ab:
> Sollen die LED nur kurz ROT leuchten
> Sollen die LED so lange ROT leuchten, wie die Tür offen ist, auch wenn es 15 Minuten sind

Sollten wir alle etwas falsch verstanden haben, dann beschreibe bitte nochmal genauer was du wie haben möchtest und ich bin mir sicher, dass es dafür eine Lösung gibt :slight_smile:

Grüße,
Chris

…ich merke schon Ihr lasst nicht locker.

Ich versuche es mal etwas besser zu beschreiben, die Installation befindet sich in meinem Bad.

  1. der weiße LED Streifen ist für eine Beleuchtung von Stufen. Dieser soll nur 2 Minuten an sein wenn die Tür geöffnet wird.

  2. Der RGB (mit wahlweiser Farbe) ist für die Dusche gedacht.

Szenario 1: Ich betrete das Bad, die Stufenbeleuchtung geht an, danach schalte ich über ein IPad die RGB Beleuchtung an, je nach Befinden eine andere Farbe.

Nach Ablauf des Timers soll nur die Stufenbeleuchtung ausgehen.

Szenario 2: RGB ist an, die Tür wird geöffnet, die Stufenbeleuchtung geht an und nach Ablauf des Timers wieder aus.
Der RGB Streifen soll hiervon unberührt bleiben.

Das ist eigentlich alles.(aber für mich nicht umsetzbar)

Gruss Jan

Ist doch gar kein Problem :slight_smile:

Nur noch mal zum Verständnis. Stufen LED und Bad LED haben jeweils einen RGBW868 und sind getrennt steuerbar (also 2 RGBW868 mit jeweils einer eignen ID per Jumper gesetzt)?
Oder hängen die Bad LED an RGB und die Stufenbeleuchtung and W von einem einzigen RGBW868?

Geht beides, müsste nur jeweils anders gescripted werden, deshalb frage ich lieber vorher, bevor ich den Code runterschreibe :slight_smile:

-Chris-

Das war nicht das Problem :cool:

Ich weiss das … danke für den Zusatzhinweis und die Änderung, da kommt sonst bestimmt wieder einer … :wink:

Hi Chris,

so hab ich seinen ersten Post als Ausgangsbasis verstanden.

mfg

BerndJ

Ich habe nur einen RGBW868, die Stufenbeleuchtung ist nur weiss und hängt an W.

durch den PJ_SetRGBW(38186 /[OG\Test\LED]/,0,0,0,0);Befehl, habe ich das Problem, dass dieser mir ja auch den RGB ausschaltet.
Meine Vorstellung war, dass ich für die ersten drei Nullen, die sich auf den RGB beziehen durch eine Variable ersetzen kann, die ich durch die aktuellen Werte ersetzten kann.

Und vorher eine Abfrage starte die schaut ob der RGB an ist oder nicht, bzw. in den laufenden Timer eingreift.

Gruss Jan

//Aktuelle Farbe
$Color = GetValueInteger(00000 /*[OG\Test\LED\Color]*/);
$rot = (($Color >> 16) & 255);
$gruen = (($Color >> 8) & 255);
$blau = ($Color & 255);

if($_IPS['SENDER'] == "TimerEvent")
{

//Aus Befehl
PJ_SetRGBW(38186 /*[OG\Test\LED]*/,$rot,$gruen,$blau,0);

//Timer ausschalten
IPS_SetScriptTimer($_IPS['SELF'], 0);

} else {

//An Befehl
PJ_SetRGBW(38186 /*[OG\Test\LED]*/,$rot,$gruen,$blau,200);

//Timer anschalten
IPS_SetScriptTimer($_IPS['SELF'], 120);

}

vielen,vielen Dank.

Das funktioniert perfekt.

Eine Frage dazu hätte ich allerdings noch kurz, wenn möglich: warum?

  1. da es völlig uninteressant ist für das Script ob die Tür auf oder zu ist: startet das komplette script nach dem Timerablauf neu?

  2. wie darf ich folgende Abfrage verstehen:
    $rot = (($Color >> 16) & 255);
    $gruen = (($Color >> 8) & 255);
    $blau = ($Color & 255);

Nur damit ich das verstehe für die Zukunft.

Gruss Jan

Moin!

Da hat mir jemand die Arbeit genommen, schön :smiley:

Der Timer wird gestoppt, wenn das Skript per Timer aufgerufen wird, dadurch:
if($_IPS[‚SENDER‘] == „TimerEvent“)
//Timer ausschalten
IPS_SetScriptTimer($_IPS[‚SELF‘], 0);

Wird das Skript erneut durch das Trigger-Event (Tür auf) aufgerufen, startet der Timer neu.

Bzgl. der Farben. Diese stehen in der Variable „Color“ als eine Zahl. Durch diese Code-Zeilen wird in die einzelnen Farben „umgeschlüsselt“, damit man sie dann im Befehl an der RGBW868 wieder einzeln setzen kann. Weil man eben nicht einfach eine Zahl zurückschicken kann, sondern (zum Glück) jede Farbe einzeln setzt.
Und so ist es auch möglich den W-Kanal getrennt von den RGB-Kanälen zu setzen :cool:

Grüße,
Chris

die Erklärung ist top, Danke.

Damit kann ich arbeiten.

Ich hatte immer im Script eine Textausgabe, in der ich sah was das script gerade macht, leider kann ich diese Anzeige nicht mehr einschalten, gibt es diese nicht mehr? Oder verwechsel ich das mit einem anderen Programm. :wink:

Gruss Jan

Um zu sehen wo ein Skript gerade ist oder in welchem IF und welche Werte eine Variable hat gibt es:
> echo "Die Variable hat den Wert: ".$Var; // Ausgabe erscheint am Ende der Skriptausführung unter dem Skript
> print_r($Var); // Ausgabe erscheint am Ende der Skriptausführung unter dem Skript
> var_dump($Var); // Ausgabe erscheint am Ende der Skriptausführung unter dem Skript
> IPS_LogMessage(„Titel“, „Die Variable hat den Wert: $Var“); // Ausgabe erscheint im Meldungen-Fenster der IPS-Console während der Skriptlaufzeit

Du solltest dir dringend mal einige PHP Grundlagen aneignen :wink: Man braucht für IPS nicht viel PHP, aber ein wenig braucht man, ansonsten hat man auf Dauer nicht wirklich Freude damit. Denn nicht immer bekommt man die Lösung auf einem Silbertablett präsentiert :wink:

Deshalb hier ein paar Anlaufstellen für dich:
PHP: PHP-Handbuch - Manual
IP-Symcon - Wie kann ich… 2.0
Befehlsreferenz — IP-Symcon :: Automatisierungssoftware

Grüße,
Chris