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…
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
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.
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.
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.
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
Ich versuche es mal etwas besser zu beschreiben, die Installation befindet sich in meinem Bad.
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.
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)
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
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.
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
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.
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 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