DMX Fading

Gibt es mittlerweile eine Möglichkeit ein begonnenes DMX Fading zu unterbrechen und
nach einer Zeit in gleicher oder entgegengesetzter Richtung fortzusetzen?
Also quasi einen Touch Dimmer zu emulieren.
Aktuell realisiere ich das komplett in der untergelagerten Beckhoff SPS, weil das in Symcon
nicht möglich ist/war.

LG
Jürgen

Warum war das nicht möglich? Wenn du einen festen Wert setzt, wird das laufende Fading sofort unterbrochen. Dann kannst du beliebig in eine andere Richtung faden.

paresy

den festen Wert kenne ich ja nicht.
Wenn ich beim (Touch Dimmer) taste: hochdimmen und dann z.B. nach 2s die Taste
loslasse soll er ja beim aktuellen Wert stehen bleiben… Aber woher bekomme ich diesen aktuellen Wert?

LG
Jürgen

Frage dazu:
wenn ich z.B. von 0 auf 128 fade und nachdem der Vorgang abgeschlossen ist auf 255 fade…
Wird dann von 128 auf 255 oder von 0 auf 255 gefadet?

LG
Jürgen

Wenn du einen Fade startest, startet er immer vom aktuellen Wert - nicht von der 0.

paresy

ok, danke das ist schon mal gut zu wissen.
Kommt man an den aktuellen Fade Wert?

LG

Aktuell leider nein. Meiner Meinung nach wäre ein DMX_FadeChannelStop als Funktion die beste Option.

paresy

Ja, genau so sehe ich das auch.
Damit hätte man ne Menge mehr Möglichkeiten.

LG
Jürgen

ist hier mal so eine Funktion geplant…?

Das könntest du wenn ich es richtig sehe mit einem Script lösen?

Ich hatte mir mal ein Test script gebaut, weis aber nicht genau ob das die lösung war.

→ Taster → Symcon → Dimmer

Damit weiß ja Symcon wie lange du gedimmt hast und kann sich diesen Wert merken.

<?php
/***************************************************************
 * Deklaration der relevanten IDs:
 ***************************************************************/
$DMX_ID       = 123456;   // ID der DMX-Variable (Wertebereich 0 - 255)
$LastValue_ID = 456789;   // ID zum Speichern des letzten Helligkeitswertes
$BoolDown_ID  = 234567;   // Boolean-ID für Taste 1 (lang: Runterdimmen)
$BoolUp_ID    = 345678;   // Boolean-ID für Taste 2 (lang: Hochdimmen)

/***************************************************************
 * Eingabeparameter auswerten:
 * Es wird erwartet, dass per $Data-Array übergeben wird:
 * - 'Taste': die gedrückte Taste (1 oder 2)
 * - 'Druckart': 'kurz' oder 'lang' (kurzer bzw. langer Tastendruck)
 ***************************************************************/
$taste    = isset($Data['Taste']) ? $Data['Taste'] : 0;
$druckart = isset($Data['Druckart']) ? $Data['Druckart'] : 'kurz';

/***************************************************************
 * Den aktuellen DMX-Wert ermitteln.
 ***************************************************************/
$aktuellerWert = GetValue($DMX_ID);

/***************************************************************
 * Steuerung basierend auf der gedrückten Taste und Druckart.
 ***************************************************************/
switch ($taste) {
    case 1: // Steuerung für Taste 1
        if ($druckart == 'kurz') {
            /***********************************************
             * Kurzer Tastendruck auf Taste 1:
             * - Falls der aktuelle DMX-Wert nicht 0 ist, wird
             *   dieser gespeichert (damit er beim erneuten
             *   Einschalten wiederhergestellt werden kann).
             * - Anschließend wird der DMX-Wert sofort auf 0 gesetzt.
             ***********************************************/
            if ($aktuellerWert != 0) {
                SetValue($LastValue_ID, $aktuellerWert);
            }
            SetValue($DMX_ID, 0);
            // Falls der Boolean für Runterdimmen aktiv war, wird er zurückgesetzt.
            SetValue($BoolDown_ID, false);
        } elseif ($druckart == 'lang') {
            /***********************************************
             * Langer Tastendruck auf Taste 1:
             * - Setzt den Boolean (ID 234567) auf true, um anzuzeigen,
             *   dass das Runterdimmen aktiv ist.
             * - In einer Schleife wird der DMX-Wert solange schrittweise
             *   verringert, bis entweder der Wert 0 erreicht oder der
             *   Boolean extern wieder auf false gesetzt wird (z.B. bei
             *   Tasterfreigabe).
             ***********************************************/
            // Boolean für langsames Runterdimmen aktivieren
            SetValue($BoolDown_ID, true);
            // Dimmschleife: solange Wert > 0 und Taster weiterhin gedrückt
            while (GetValue($DMX_ID) > 0 && GetValue($BoolDown_ID) == true) {
                // Aktuellen Wert holen
                $wert = GetValue($DMX_ID);
                // Wert um 1 reduzieren
                $wert--;
                SetValue($DMX_ID, $wert);
                // Kurze Pause für einen gleichmäßigen Übergang (50 Millisekunden)
                IPS_Sleep(50);
            }
            // Nach Beendigung der Dimmschleife wird der Boolean zurückgesetzt
            SetValue($BoolDown_ID, false);
        }
        break;
        
    case 2: // Steuerung für Taste 2
        if ($druckart == 'kurz') {
            /***********************************************
             * Kurzer Tastendruck auf Taste 2:
             * - Falls der DMX-Wert aktuell 0 ist, wird der zuletzt
             *   gespeicherte Helligkeitswert (ID 456789) wiederhergestellt.
             * - Andernfalls wird der DMX-Wert sofort auf 255 gesetzt.
             ***********************************************/
            if ($aktuellerWert == 0) {
                $letzterWert = GetValue($LastValue_ID);
                SetValue($DMX_ID, $letzterWert);
            } else {
                SetValue($DMX_ID, 255);
            }
            // Falls der Boolean für Hochdimmen aktiv war, wird er zurückgesetzt.
            SetValue($BoolUp_ID, false);
        } elseif ($druckart == 'lang') {
            /***********************************************
             * Langer Tastendruck auf Taste 2:
             * - Setzt den Boolean (ID 345678) auf true, um anzuzeigen,
             *   dass das Hochdimmen aktiv ist.
             * - In einer Schleife wird der DMX-Wert solange schrittweise
             *   erhöht, bis entweder der Wert 255 erreicht oder der
             *   Boolean extern wieder auf false gesetzt wird (z.B. bei
             *   Tasterfreigabe).
             ***********************************************/
            // Boolean für langsames Hochdimmen aktivieren
            SetValue($BoolUp_ID, true);
            // Dimmschleife: solange Wert < 255 und Taster weiterhin gedrückt
            while (GetValue($DMX_ID) < 255 && GetValue($BoolUp_ID) == true) {
                $wert = GetValue($DMX_ID);
                // Wert um 1 erhöhen
                $wert++;
                SetValue($DMX_ID, $wert);
                // Kurze Pause für einen gleichmäßigen Übergang (50 Millisekunden)
                IPS_Sleep(50);
            }
            // Nach Beendigung der Dimmschleife wird der Boolean zurückgesetzt
            SetValue($BoolUp_ID, false);
        }
        break;
        
    default:
        /***********************************************
         * Wenn keine bekannte Taste gedrückt wird:
         * - Hier könnte z. B. eine Lognachricht geschrieben werden.
         * - Aktuell erfolgt keine Aktion.
         ***********************************************/
        break;
}
?>

Danke für die Antwort,
das wäre vielleicht ein Ansatz.
Müsste mal prüfen, ob die Werte aus der Schleife schnell genug an den DMX (ArtNet) Ausgang übergeben werden, damit man ein gleichmäßiges Fading hinbekommt.
LG
Jürgen