Beiträge von nurmaso

    eiche Für meinen Fall reicht es ja, Status On zu erkennen.

    Verstehe ich das richtig, dass mit diesem Aufruf die Funktion sync getriggert wird? Also wenn das script mit der ID auf dem Ziel-Shelly läuft, wird die Funktion ausgeführt, sobald die Action ausgelöst wird?


    EDIT: getestet, das geht! Geile Sache, danke für den Tipp! 😁

    Nabend und ja, so ist das in dem Script-Beispiel vorgesehen, jedoch läst sich die Funktion "getCurrentState" überall einbauen und aufrufen und ist nicht auf den Aufruf durch diesen einen Eventhandler gebunden.

    Die Funktion von getCurrentState ist mir klar. Ich frage bisher mit einer vergleichbaren Funktion zyklisch ab. Ich suche aber nach einer Möglichkeit, dass man nicht zyklisch überwachen muss, sondern der i4 das sofort mitkriegt, wenn eine Lampe eingeschaltet wird. Was ich bisher kenne, ist über einen Eventhandler einen internen Tastendruck zu erfassen; und den Befehl Shelly:StatusOnChange, der aber nur für Geräte in der Cloud funktioniert. Die nutze ich aber nicht.

    ThomasHRO wenn das Licht nur über den i4 eingeschaltet wird, kann man natürlich mit dem Eventhandler den Tastendruck verarbeiten. Aber ich hab die Lampen auch über Homebridge in Homekit. Wenn man die Lanpen über Siri einschaltet, kriegt man das dann nicht mit.

    eiche Hatte ich mich noch gar nicht mit beschäftigt. Aber so wie ich dich verstehe, könnte man damit zB zum Sunset eine Aktion ausführen. Meine Funktion arbeitet aber von 120 Minuten vor Sunset bis zum Sundet zyklisch.

    Das script läuft munter durch. Ich betrachte den Fehler als gefunden. Dank dir nochmal ostfriese für deine Hilfestellungen. Ich werde das script jetzt weiter optimieren. Die Timer in den Zyklen werd ich rausschmeißen, die waren anscheinend gar nicht nötig; den Zeitabruf evt. nochmal überarbeiten usw.

    Noch ein paar Fragen:

    Ich würde den Zyklus eigentlich auf 10min hochsetzen, das würde ja völlig reichen. Aber dann würde schlechtestenfalls eine Lampe nach dem Einschalten bis zu 10min nicht abgefragt werden. Kann man den Status eines anderen Gerätes überwachen? Ich habe Shelly:StatusOnChange gefunden, aber das geht nur mit der cloud. Die nutze ich nicht. Gibt es da eine andere Möglichkeit?

    Und zu den http.endpoints. Kann man, und wenn ja, wie, die von einem anderen Gerät abrufen? Und sind die bootfest?

    Ich hab einen (den?) Fehler gefunden!

    Im Fehlerfall hatte ich im script immer console.error stehen. Das kennt der shelly wohl nicht. Ich hab das auf console.log korrigiert. Damit wurde die Funktion im Fehlerfall mit Fehlermeldung abgearbeitet und das script lief weiter.

    Ich habe trotzdem noch alle 3 Funktionen, die http.get verwenden, mit timeout und try…catch versehen.

    Bin gespannt, wie lange das jetzt läuft!

    Aber das ist hier doch gegeben? Script sollte im Fehlerfall weiterlaufen, oder nicht?


    Mit den http endpoints hab ich verstanden und erfolgreich getestet.

    Zu den Beschränkungen gehört aber auch, nur 3 scripts können gleichzeitig laufen. Dann wär der i4 voll. Ich hab in dem Raum noch RGBWs mit denen ich das gleiche machen will und was mit dimmen wollte ich auch noch versuchen.

    Also würde ich das gerne in einem script belassen. Was ich weiß: Wenn ich checklampstatus und somit auch setlampcolortemp nicht aufrufe, läuft das script durch. Ich hab den http.get in setlampcolortemp als Verursacher in Verdacht. Kann ich da irgendwie den Fehler fangen, um ihn später auszulesen?

    Danke für die Anregungen. Die Seiten kannte ich tatsächlich nicht. Zu deinen Punkten noch ein paar Nachfragen:

    Welchen Vorteil hätten denn getcomponentstatus.time und .unixtime gegenüber meinem Abruf? Man muss zwar nicht parsen, da das Ergebnis in hh:mm ausgegeben wird. Aber da die Sonnenuntergangszeit in UTC ist, müsste ich beide Zeiten abrufen, und die GMT Differenz errechnen, damit das in Sommer- und Winterzeit funktioniert. Ich glaube, das würde nicht viel kürzer werden.

    Wenn du konkrete Stellen oder Ansätze hast, wo ich das script noch vereinfachen kann, gerne her damit.

    Auf mehrere scripts aufteilen kann ich machen. Ich dachte die Belastung für den Shelly wäre höher, wenn mehrer scripts parallel laufen. Wieviele dürfen das parallel sein?

    Und Variablen übergeben würde ich dann wohl mit kvs.set und get (?)

    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 😃

    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.

    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);

    Ich habe die Duos gar nicht in die Cloud eingebunden. Von dort kann der Fehler also nicht kommen.

    Evt. kommt das bei mir aus einer fehlgeleiteten funktion in einem script, an dem ich gerade bastele. Obwohl das eigentlich nicht sein kann, einen turnon befehl habe ich gar nicht drin. Nur setzten von Farbtemperatur, wenn eingeschaltet . Aber wer weiß . Ich werde das weiter beobachten.