Ich glaube entweder ist DMX_FadeChannelDelayed ist ein bisschen buggy, oder es soll halt so.
Beispielcode:
$id_DMX1 = 27132 /*[DMX]*/;
// Kanal auf auf val=50
DMX_FadeChannel($id_DMX1, 165, 50, 0);
// kurz warten
IPS_Sleep(100);
// Hochdimmen auf 100 innerhalb von 5 Sekunden
DMX_FadeChannel($id_DMX1, 165, 100, 5);
// Nach den 5 Sekunden innerhalb von 2 Sekunden auf 250 dimmen
DMX_FadeChannelDelayed($id_DMX1, 165, 250, 2, 5);
Erwartetes Verhalten: Nach den 5 Sekunden wird der Kanal von Wert 100 auf 250 gedimmt.
Beobachtetes Verhalten: Nach den 5 Sekunden wird der Kanal von Wert 50 auf 250 gedimmt.
DMX_FadeChannelDelayed nimmt als Startwert den Wert der zur Ausführung des Befehls auf dem Kanal gesetzt war, statt von dem Wert aus weiter zu machen den der Kanal zu diesem Zeitpunkt hat.
Real World Problem: Mein Badlicht soll Nachts direkt auf niedrigem Wert schnell angedimmt werden und dann langsam auf einen höheren Wert angehoben werden, damit sich die Augen dran gewöhnen.
Baue ich das ohne *delayed, sondern mit IPS_Sleep(5000), funktioniert es wie es soll.
ich denke mal die beiden letzten Befehle werden ja zeitgleich ausgeführt,
deshalb wir der Fade auf 100 überschrieben.
// Hochdimmen auf 100 innerhalb von 5 Sekunden
DMX_FadeChannel($id_DMX1, 165, 100, 5);
// Nach den 5 Sekunden innerhalb von 2 Sekunden auf 250 dimmen
DMX_FadeChannelDelayed($id_DMX1, 165, 250, 2, 5);
Fade von 0 auf 100 in 10 Sekunden.
IPS_Sleep mit 5 Sekunden
Fade Delayed von 100 auf 200 in weiteren 5 Sekunden.
Der Fade Delayed startet dann bei 50, da der erste Fade dort dann angekommen war als der Fade Delayed Befehl abgeschickt wurde.
Die Dimmkurve ist dann 0-100-50-200.
Der Fade Delayed sollte doch wohl zum Zeitpunkt wo der Fade ausgeführt wird vom dann aktuellen Wert aus anfangen zum Zielwert zu dimmen.
ja, aber das ist wohl Definitionssache. Hier wird der Wert genommen zum Zeitpunkt als der Befehl gestartet wurde also
nach 5s und da war der DMX Wert 50. Denke mal das Beste ist zu warten, dass Befehl 1 abgearbeitet ist, wenn der 2. gestartet wird.
Ich habe damals auch viel mit IPS DMX ausgetestet, mich hat immer gestört, dass man einen Fade nicht stoppen kann um z.B. einen Tastdimmer zu emulieren. Seitdem wickel ich die DMX Schiene komplett in der Beckhoff SPS ab.
Das klingt eher nach einem Fehler. Der verzögerte Fade sollte immer relativ vom dann aktuellen Wert loslaufen. Und über die Set-Funktion kann man auch jederzeit alle Fades (inkl. der mit Delay) abbrechen.
Ich werde mir das nächste Woche mal genauer ansehen.
Mit dem Abrechen geht’s wohl aber wenn ich einen Fade von 0…255 bei 128 abreche, möchte ich gerne von diesem
Wert auch up oder down weiterfaden. Außerdem sollte der aktuelle Wert jeweils auszulesen sein, dann wäre es perfekt.
Ja das wär noch cool, wenn die Slider im Webfront während der Fade läuft mit aktualisiert werden würden.
@Paresy, mit DMX_SetChannel bricht er zwar ab, aber geht dann auf den dort gesetzten Wert. Schön wäre DMX_StopFade($id, $channel) bei der der derzeitige Wert vom Fade hängen bleibt.
Dann kann man einfach mit einem Bool Objekt und zwei Ereignissen einen Dimmschalter bauen. Bei TRUE ein Fade auf 255 über 10 Sekunden und bei False den Stop. Der Schalter steht so lange auf TRUE wie er gedrückt wird und geht beim loslassen auf FALSE.
Bin auch am überlegen, ob ich die Dimmer von DMX auf ein KNX/DALI oder KNX/DMX Gateway umbaue, aber diese fein gesteuerten Fades in einem Script sind schon ne ganz andere Hausnummer.
Magst du das im Thread für Funktionswünsche nochmal seperat aufführen.
Das ist definitiv eine Funktion die mit reinkommen sollte, aber damit dies nicht untergeht einfach nochmal in den Thread mit reinpacken.
Bietet uns einfach mehr Überblick und wird nicht vergessen. https://www.symcon.de/forum/forums/78-IP-Symcon