mrsample
Ein Schedule Job ist erst einmal kein Shelly call.
Da der Job aber etwas bewirken soll, ergibt er imho ohne eine Methode (im Skript als Shelly.call() nutzbar) keinen Sinn.
Du kannst jede Methode verwenden, die dein Shelly bietet.
Mit http://<IP Adresse>/rpc/Shelly.ListMethods kannst du alle Methoden auflisten lassen, die der Shelly bietet.
Ein Schedule Job arbeitet unabhängig von Skripten, er kann per Methode "Script.Eval" aber eine Anweisung in einem laufenden Skript ausführen lassen.
Zumeist dürfte es zielführend sein, per "Script.Eval" eine Funktion eines laufenden Skripts, ggf. mit Parameter, aufrufen zu lassen.
Das Limit (derzeit 5) für Calls bezieht sich jeweils auf ein Skript und nicht etwa auf den Shelly. Seihe auch Ressource Limits
Ein Call bzw. Methodenaufruf per Schedule Job fällt somit nicht darunter.
Hast du mal die Periode zum Aufruf von checkWifiIP() deutlich verlängert?
Wenn deine Vermutung der "Geister-Calls" auf Grund deren Anhäufung in einer Warteschlange zutreffen sollte, dann müssten diese ab einer genügend langen Periode wegbleiben - nur zwecks Fehleranalyse.
Da der default Timeout-Wert 15s beträgt und du alle 2 Minuten eine Nachricht senden lassen willst, ist trotzdem nicht zu erwarten, dass diese Maßnahme weiterhilft.
Ein Schedule Job, wie ich ihn oben angab, arbeitet eigenständig, weshalb du diesen einmal verwenden solltest, wenigstens zum testen.
Weitere mögliche Schritte zur Fehlersuche
- Läuft noch irgend etwas anderes außer Skript auf deinem Shelly, vielleicht irgendwelche Actions? => Dann deaktiviere diese!
- Ist MQTT aktiviert? => Dann deaktiviere MQTT!
- Ist der Shelly in der Cloud eingebunden? => Dann nimm ihn dort heraus!
- Kommuniziert ein anderes Gerät per HTTP Request mit dem Shelly? => Verhindere dies!
Weil es bisher keine Spur zur Fehlerursache gibt, will ich den Timer nicht ausschließen, auch wenn dies sehr unwahrscheinlich ist.
Vielleicht verändert sich die Timerperiode, aus welchen Gründen auch immer. Angenommen, sie verkürzt sich. Dann könnten die periodisch aufgerufenen Calls irgendwann zu dicht aufeinander folgen.
Hier kann ein Schedule Job Abhilfe schaffen.
Edit:
Man kann auch Ereignisse auslösen lassen. Damit lassen sich bspw. die Aktionen eines Skripts auf mehrere Skripte verteilen.
Eine andere harte Alternative zum Reboot, besteht bspw. darin, das Skript die Funktion checkWifiIP() aufrufen zu lassen und sich nach 30s oder 60s selbst zu beenden. Oder das Skript beendet sich in der innersten callback Funktion, wenn also alles abgearbeitet wurde, was abzuarbeiten ist. Der Ort des Skript Stoppens wäre in deinem Skript die Funktion handleResponse(), selbstverständlich am Ende.
Ein Schedule Job kann in regelmäßigen Abständen dein Skript per Methode "Script.Start" starten, bspw. alle 2 Minuten.