Helligkeit innerh. 10 Sek. runterdimmen - Chat GPT

Hallo zusammen,
ich versuche gerade mangels Kenntnis ein Skript zum Herunterdimmen von Helligkeitsvariablen (Integer) mit Chat GPT zu erstellen. Ich möchte eine Lampe innerhalb von 10 Sekunden auf 10% runterdimmen. Idealerweise vom aktuellen Helligkeitsstand.

Ich habe mit Chat-GPT mehrfach versucht dies zu realisieren. Komischerweise läuft im Webfront die Prozentanzeige genauso runter, wie ich mir das vorstelle. Die tatsächliche Lampe bleibt aber beispielsweise bei 100% stehen und ist somit nicht mehr synchron zu der Anzeige, nachdem das Skript durchgelaufen ist. Das Webfront widerspricht dann dem tatsächlichen Helligkeitswert der Lampe.

Kann da einer mehr zu sagen? Oder ein funktionierendes Skript zur Verfügung stellen?

<?php
// Objekt-ID der Helligkeit
$lampenObjektID = 11122;

// Gewünschter Dimmwert (0-100), z.B. 10 für 10%
$zielDimmwert = 10;

// Dauer des Dimmvorgangs in Sekunden
$dimmDauer = 1000; // Beispiel: 10 Sekunden

// Aktuellen Dimmwert abrufen
$aktuellerDimmwert = GetValue($lampenObjektID);

// Schrittgröße für die Dimmänderung berechnen
$schrittgroesse = ($zielDimmwert - $aktuellerDimmwert) / ($dimmDauer * 1000); // 1000, da die Dauer in Millisekunden angegeben wird

// Startzeit des Dimmvorgangs festlegen
$startTime = microtime(true);

// Hauptschleife
while ($aktuellerDimmwert > $zielDimmwert) {
    // Aktuelle Zeit und vergangene Zeit seit dem Start des Dimmvorgangs berechnen
    $currentTime = microtime(true);
    $elapsedTime = ($currentTime - $startTime) * 1000; // in Millisekunden umrechnen

    // Neuen Dimmwert berechnen
    $neuerDimmwert = $aktuellerDimmwert + ($elapsedTime * $schrittgroesse);

    // Dimmwert auf Zielwert begrenzen
    $neuerDimmwert = max($zielDimmwert, $neuerDimmwert);

    // Dimmwert setzen
    SetValue($lampenObjektID, $neuerDimmwert);

    // Kurze Pause, bevor die Schleife erneut durchlaufen wird
    IPS_Sleep(50); // In Millisekunden (50ms)

    // Aktuellen Dimmwert aktualisieren
    $aktuellerDimmwert = $neuerDimmwert;
}

// Sicherstellen, dass der Ziel-Dimmwert erreicht wird
SetValue($lampenObjektID, $zielDimmwert);
?>

Viele Grüße
marvus

SetValue schreibt ja nur den Wert in eine Variable. Ein Gerät wird damit aber nicht gesteuert… Du musst schon den passenden Befehl für deine Instanz verwenden. Thema RequestAction…

Was für eine Lampe willst du dimmen?

Gruß
Stephan

Ja, und auch nicht so schnell runterrampen.
Mit 50msec Intervallen kannst leicht dein Bussystem überfordern.

Leider schreibst du nicht welches System du hast. Für viele gibt es fertige Funktionen, üblicherweise wird das rampen dann im Aktor selbst erledigt und dein Bussystem wird nicht belastet.

Kannst nix dafür, aber das sollte in die Gallery, zeigt ja wunderbar das KI doch nicht so schlau ist wie es gehyped wird.

greez
bb

och, wenn man da ein bisschen in die richtige Richtung stupst ich das schon brauchbar.

Aber du hast natürlich mit deinem Einwand und dem Bussystem absolut recht…

<?php

// Objekt-ID der Lampe, die Sie dimmen möchten (passen Sie dies entsprechend Ihrer Konfiguration an)
$lampObjectId = 12345;

// Zielleuchtkraft (10%)
$targetBrightness = 10;

// Dimmzeit in Sekunden
$dimmTime = 10;

// IPSymcon Funktion RequestAction für die Leuchtkraftänderung über Zeit
for ($i = 1; $i <= $dimmTime; $i++) {
    $currentBrightness = $i * ($targetBrightness / $dimmTime);

    // IPSymcon Funktion RequestAction, um die Leuchtkraft der Lampe zu ändern
    RequestAction($lampObjectId, $currentBrightness);

    // Warten Sie für einen Schritt (1 Sekunde)
    IPS_Sleep(1000);
}

echo "Dimmung abgeschlossen.";

?>

Der Plan ist, dass ich die Twinkly Lichterkette (Twinkly Modul) über 10 Sekunden runterdimmen kann, wenn ich den Beamer anschalte.

Bei deinem oberen Skript geht die Lichterkette sofort auf 10%, ohne langsam zu dimmen. Die Wartezeit im Skript (Symcon Haussymbol) dauert aber 10 Sekunden an.

Gibt es denn einen einacheren Weg dies umzusetzen, der das Bussystem nicht so stark belastet? Ich habe es mal über einen Ablauf plan in 5% Schritten versucht. Aber genau so sieht es dann auch aus :joy:

Vielleicht irgendwas mit „Transition“?

Ok, das teil wird über wlan gesteuert. Da musst du dich schon mal nicht um irgend ein Bussystem kümmern. Musst halt testen wie schnell du da Befehle senden kannst. Ich hab gerade mal die inoffizielle API Beschreibung überflogen. Eine Rampe kann man da leider nicht einstellen, der geht immer direkt auf den gesendeten werd. Ich würde es mit deinem ersten Script weiter versuchen. Tausch da einfach den SetValue gegen RequestAction aus und spiel mal mit der Sleep Zeit. Da musst du halt schauen wie schnell du Befehle senden kannst damit der Twinkly noch reagieren kann.

Hab es für Homematic etwas umgeschrieben, geht aber im prinzip wunderbar. Ist aber wirklich etwas zu schnell. Die KNX Männlein fangen bei sowas immer das weinen an… :grin: …bei einer SPS wäre das aber kein Ding.

<?php
// Objekt-ID der Helligkeit
$lampenObjektID = 16460;

// Objekt-ID
$objektID = 38046;

// Gewünschter Dimmwert (0-100), z.B. 0.1 für 10%
$zielDimmwert = 0.1;

// Dauer des Dimmvorgangs in Sekunden
$dimmDauer = 1000; // Beispiel: 10 Sekunden

// Aktuellen Dimmwert abrufen
$aktuellerDimmwert = GetValue($lampenObjektID);

// Schrittgröße für die Dimmänderung berechnen
$schrittgroesse = ($zielDimmwert - $aktuellerDimmwert) / ($dimmDauer * 1000); // 1000, da die Dauer in Millisekunden angegeben wird

// Startzeit des Dimmvorgangs festlegen
$startTime = microtime(true);

// Hauptschleife
while ($aktuellerDimmwert > $zielDimmwert) {
    // Aktuelle Zeit und vergangene Zeit seit dem Start des Dimmvorgangs berechnen
    $currentTime = microtime(true);
    $elapsedTime = ($currentTime - $startTime) * 1000; // in Millisekunden umrechnen

    // Neuen Dimmwert berechnen
    $neuerDimmwert = $aktuellerDimmwert + ($elapsedTime * $schrittgroesse);

    // Dimmwert auf Zielwert begrenzen
    $neuerDimmwert = max($zielDimmwert, $neuerDimmwert);

    // Dimmwert setzen
    HM_WriteValueFloat($objektID, "LEVEL", $neuerDimmwert);


    // Kurze Pause, bevor die Schleife erneut durchlaufen wird
    IPS_Sleep(50); // In Millisekunden (50ms)

    // Aktuellen Dimmwert aktualisieren
    $aktuellerDimmwert = $neuerDimmwert;
}

// Sicherstellen, dass der Ziel-Dimmwert erreicht wird
HM_WriteValueFloat($objektID, "LEVEL", $zielDimmwert)

@qwik bei deinem Skript erhalte ich die Fehlermeldung

Parse error: syntax error, unexpected end of file in /var/lib/symcon/scripts/21791.ips.php on line 47

@da8ter Ich habe jetzt noch einmal dein Skript ausprobiert. Hier habe ich jetzt festgestellt, dass sich doch etwas tut. Es ist allerdings so, dass sich hier die Lichterkette von 0% bis 10% innerhalb von 10 Sekunden hochdimmt.

Kannst du mir das noch einmal andersherum basteln? Also vom aktuellen Wert auf 10% runter? :smiling_face:

Hi,
ich mache das lieber mit einem ScriptTimer

<?php
if($_IPS['SENDER'] == "TimerEvent"){
    if (IPS_GetName($_IPS['EVENT']) == 'ScriptTimer'){
        $aktuell = GetValue(12854);
        $ziel = GetValue(12854);
        $step = GetValue(37795);
        $aktuell += $step;
        if ($step < 0){
            if ($aktuell < $ziel){
                $aktuell = $ziel;
                IPS_SetScriptTimer($_IPS['SELF'], 0);
            }
        }
        else{
            if ($aktuell > $ziel){
                $aktuell = $ziel;
                IPS_SetScriptTimer($_IPS['SELF'], 0);
            }
        }
        RequestAction(12854, $aktuell);
        return;
    }
}
$aktuell = GetValue(12854);
$ziel = GetValue(12854);
$step = ($aktuell - $ziel) / 10;
SetValue(37795, $step);
IPS_SetScriptTimer($_IPS['SELF'], 1);
?>

Mit der 10 in der drittletzten Zeile bestimmt man die Zeit und Schritte. Mit dem Script kann hoch und runter gedimmt werden.

Ralf

Ich bin auch so eines :wink: aber geweint wird da nicht.
Man muss halt seine Geräte kennen. Bei dem KNX Referenz Dimmer Theben kannst zB auch Soft-Dimmen einstellen, das geht auch über Stunden wenn man wollte.
Hat dann auch keine Buslast und braucht nur ein Binär um es zu starten :slight_smile:

Bei 9600 Baud will man nicht rumsauen, aber als limitierend hab ich das nie empfunden. Man sollte halt wissen was man tut.

Hab aber auch schon aus Symcon per Skript zB KNX schalten ein/aus mit 50ms für einen Halloween Effekt getestet. Geht auch, halt nicht gut für die LEDs. Und geht vlt. nicht mit jedem Aktor.

Cheers Seppm