Error Too many running timers

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

    verschiedene Lampen habe ich mit einem Timer versehen, z.B. Flur für 90 sek an. Um nicht vom ausschalten überrascht zu werden, lasse ich sie 40sek vor Ablauf des Timers zwei mal kurz flackern, dafür habe mir eine Function gebaut.

    Funktioniert prima, aber wenn ich zu oft in kurzer Zeit auf den Schalter drücke, löscht er offenbar nicht den laufenden Timer sondern hängt immer neue an?!

    Wie könnte ich das umgehen, wie kann ich die laufenden Timer wirklich beenden - Timer.clear() scheint nicht die Lösung zu sein...

  • Die Verwendung von Timer.clear() ohne Parameter kenne ich nicht. Was macht das? Das clear() bei den Timern A und B scheint mir ebenfalls unnötig, da ja "repeat" auf false gesetzt ist, d.h. der Shelly räumt diese selber ab. Wer ruft denn "LichtAnmitWarnung" auf? Laufen da Timer weiter?

    EDIT: Nachtrag: Mehr als fünf Timer in einem Script gehen nicht. Wenn da also schon verschiedene Lampen verschieden Timer haben, dann wird es eng.

  • Hallo Hanutaminator,

    in das Problem mit zu vielen Timern läuft man schnell, wenn man ein Flackern als Abschaltindikator haben möchte. ;)

    Ich kann dir hier als Inspiration mein eigenes Script verlinken. Mein Script läuft auf dem jeweiligen Shelly selbst und benötigt somit max. 4 Timer.
    Diese sind nur für das Flacken notwendig, da ich für den Rest die Timer vom Switch selbst nehme. Das Script unterstützt auch das Pro Gerät mit 4 Relais.

    Das Script selbst hat mehrere Features, weil ich es in verschiedensten Anwendungsfällen verwende. Z.b. schaltet mein Garagentor via MQTT das Garagenlicht ein. Und im Treppenhaus bleibt tagsüber das Licht bei Single-Push dunkel um mich daran zu erinnern, dass ich gar kein Licht brauche.

    Ich bin mir jetzt nur nicht sicher, ob mein Script auch dann flackert, wenn man via RPC Call einschaltet. Vielleicht muss das noch angepasst werden. Per MQTT geht es definitiv.

    Wenn Interesse besteht, stelle ich die Features und Konfigurationsmöglichkeiten auch ausführlich vor.

    https://github.com/mgrie/shelly-s…-lightswitch.js


    Viele Grüße,
    Marco

  • Timer.clear(handle) ist die korrekte Methode, um einen Timer zu beenden:

    Code
        // Wenn wir noch ein Handle haben
        if(AUTO_OFF_ALERT_HANDLES[switchId]) {
    	  // Beende den Timer und entferne das Handle    
          Timer.clear(AUTO_OFF_ALERT_HANDLES[switchId]);
          AUTO_OFF_ALERT_HANDLES[switchId] = null;
        }

    Das ist in meinem Script so gebaut, weil es zwei Stellen zum beenden der Timer gibt. Einmal 'regulär' über das Script und einmal von extern z.B. via RPC Call. Sonst könnte das Script auch das Limit der Timer erreichen.

    Einmal editiert, zuletzt von marco.gr (28. Januar 2025 um 16:43)