wait(seconds) Implementierung stürzt ab?

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.

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

  • Hallo Zusammen,

    in einem größeren Projekt benötige ich eine wait bzw. sleep Funktion, damit ich nicht die maximale Anzahl gleichzeitiger RPC's überschreite. Leider funktioniert mein Ansatz (hier reduziert auf das eigentliche Problem) nicht, weil der Code ohne Rückmeldung auf einem Shelly Plus1 (aktuelle Firmware 0.12.0) abstürzt. Wäre toll, wenn jemand eine Erklärung dafür hätte.

    Gruß Martin

    [script][/script]

    [script]let Shellyunixtime = 0; [/script]

    [script]let updateShellytimeInterval = 5 * 1000; [/script]

    [script]
    [/script]

    [script]function getShellyTime(){ [/script]

    [script]Shelly.call("Shelly.GetStatus", {}, [/script]

    [script]function (res, error_code, error_msg, ud ) { [/script]

    [script]Shellyunixtime = res.sys.unixtime; [/script]

    [script]print("Shellyunixtime:",Shellyunixtime); [/script]

    [script]}, [/script]

    [script]null); [/script]

    [script]} [/script]

    [script]
    [/script]

    [script]function wait(seconds) { [/script]

    [script]let start = Shellyunixtime; [/script]

    [script]let now = start; [/script]

    [script]while (now <= (start + seconds)) { [/script]

    [script]now = Shellyunixtime; [/script]

    [script]} [/script]

    [script]} [/script]

    [script]
    [/script]

    [script]function testwait() { [/script]

    [script]print("Start wait"); [/script]

    [script]wait(10); [/script]

    [script]print("End wait"); [/script]

    [script]} [/script]

    [script]
    [/script]

    [script]// Keep ShellyTime up to date [/script]

    [script]Timer.set(updateShellytimeInterval, true, function () { [/script]

    [script]getShellyTime(); [/script]

    [script]}); [/script]

    [script]
    [/script]

    [script]// Test wait [/script]

    [script]Timer.set(updateShellytimeInterval*2, true, function () { [/script]

    [script]testwait(); [/script]

    [script]});[/script]

    [script][/script]

  • Seems to be a basic error of while. The following simple code will crash also:

    [script][/script]

    [script]let n = 0; [/script]

    [script]while (n < 500000) { [/script]

    [script]n = n + 1; [/script]

    [script]} [/script]

    [script]print("End");[/script]

    [script][/script]

  • Syntax und Semantik einer while Schleife sind dem Interpreter bekannt. Reduziert man die Schleifendurchläufe, läuft es auch durch. Das Problem scheint woanders zu liegen.

    [script][/script]

    [script]let n = 0; [/script]

    [script]while (n < 5000) { [/script]

    [script]n = n + 1; [/script]

    [script]} [/script]

    [script]print("End");[/script]

    [script][/script]

  • Auch eine for Schleife läuft nicht durch, wenn die Anzahl der Zyklen groß ist (Siehe Code). Scheint ein grundsätzliches Problem zu sein.

    Also a for loop will crash if the number of cycles is large (see code). Seems to be a fundamental problem.

    [script][/script]

    [script]let n = 0; [/script]

    [script]for (let i=0; i < 500000; i++) { [/script]

    [script]n = n + 1; [/script]

    [script]} [/script]

    [script]print("End");[/script]

    [script][/script]

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