Zyklisches Aufrufen von Funktionen

Die Verwendung von Skripten liegt im eigenen Ermessen des Benutzers. Unterstützung für Skripte wird vom Autor des Skripts bereitgestellt.
  • Hallo,

    Wie kann ich das zyklische Ausführen von Funktionen am Besten ausführen?

    Ich kenn mich nicht gut aus mit JavaScript, und versuche mir das Stück für Stück zu erarbeiten, aber hier komme ich nicht weiter.

    Ich möchte:

    1. Funktion A aufrufen. Da ich hier eine url abfrage und parse, dauert es ein paar Sekunden, bis die Funktion abgearbeitet ist; deshalb

    2. Funktion B aufrufen mit einem Delay, da sie Variablenwerte braucht, die in Funktion A beschrieben wurden.

    3. Funktion A dann alle 24h ausführen,

    4. Funktion B alle 60s ausführen.

    Es scheitert bei mir schon beim Delay. Das einzige, was ich mit Zeitverzögerung hinbekommen habe, war über Timer.Set.

    Hier ist es aber so, dass das Script entweder stehen bleibt ohne Fehler, oder abbricht mit der Meldung To Many Timers, wenn ich 2, 3 und 4 mit Timern aufbaue.

    Einzeln laufen beide Funktionen. Noch zu 2., logischer wäre es eigentlich, wenn der Aufruf kommt, wenn A abgearbeitet ist. Aber das hab ich erstrecht nicht hinbekommen.

    Wie würde man so etwas aufbauen?

    Hier noch Beispielhaft, was ich versucht habe, ist bei mir ganz am Ende des Scripts:

    Code
    // Aufrufe
        FunktionA();
        Timer.set(24 * 60 * 60 * 1000, true, FunktionA);
        Timer.set(10 * 1000, 0, FunktionB);
        Timer.set(60 * 1000, true, FunktionB);

    2 Mal editiert, zuletzt von nurmaso (5. Mai 2024 um 17:25)

  • Waren das nicht 5 Timer pro script?

    Ich habe das jetzt, bzw. bin noch dabei in Gruppenarbeit mit Chat GPT 😃 das zu erarbeiten und hab das script fast fertig stabil am laufen.

    Callbacks auch für asynchrone funktion wie http.get ist das Stichwort.

    Kann ich gerne hier posten, wenn es stabil läuft. Bis dahin melde ich mich, falls ich auf unüberwindbare Probleme stoße.

  • ostfriese und natürlich gern auch alle anderen, hier mein aktuelles script.

    Kurze Erläuterung: ich realisiere hiermit HCL, genauer gesagt den abendlichen Wechsel von Kaltweiß zu Warmweiß für 3 Duo Leuchten auf einem i4, beeinflussbar durch ein paar User Parameter.

    Dafür müssen natürlich ein paar Sachen abgerufen und berechnet werden. Der Hauptablauf ist einmal die Funktion initscript, die beim Start und dann einmal täglich die nötigen Funktionen aufruft, und die Funktion gradientcycle, die zyklisch (zum Test alle 60s) die entsprechenden Aufrufe macht. Mittels den Verschachtelungen habe ich es erreicht, dass die Funktion einzeln erst abgearbeitet werden, und erst danach (plus Wartezeit) die nächste Funktion aufgerufen wird. Das ist somit meine am stabilsten laufende Version des scripts, aber auch das hält gerne nach ein paar Stunden an.

    Hier das script, bei Unklarheiten bitte fragen:

    (zum Testen einfach oben in den Variablen 3 echte ip Adressen von Lampen eintragen, sollte so überall laufen)

    Für allgemeine Vorschläge zur Vereinfachung bin ich ebenso offen 😃

  • Uff, harter Tobak. Kennst du die Api?

    Z.B.

    Shelly.getComponentStatus("sys").time

    oder

    Shelly.getComponentStatus("sys").unixtime

    Und, dein Skript ist so megakompliziert, weil GPT zwar Javascript 'kann'*, aber die Shelly Api nicht kennt.

    Skript in sinnvolle Funktionseinheiten auf 2 oder 3 Skriptr aufteilen, Daten zwischen den Skripten austauschen über z.B.http-Endpoints <- auch in der Api zu finden.


    Ist als Anregung gemeint, nicht als Kritik.


    *und das auch eigentlich nicht wirklich.

  • Dieses Thema enthält 21 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.