Error Too many running timers

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

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