RPC Limit durch RPC Queue vermeiden

  • Hallo Zusammen,

    mit folgendem beispielhaften Code kann man das RPC Limit umgehen. Die RPCs werden in eine Warteschlange eingereiht und über einen Timer nacheinander abgearbeitet. Eventuell kann es jemand auf seine Bedürfnisse anpassen.

    Gruß Martin

  • Update! Nun kann man nicht nur ein Überschreiten des RPC Limits von derzeit 5 vermeiden, sondern zusätzlich ein wait(seconds) zwischen den Shelly.calls vorgeben. In dem Beispiel wird ein Plug s nach definierten Zeiten ein- und ausgeschaltet. Für einen Test bitte nicht die eigene IP in shellyConfig vergessen. Viel Spaß damit!

    Gruß Martin

  • Super, das sieht schon ganz gut aus, aber schau dir mal den letzten Teil der Shelly Skript API an, dort steht:

    Known Issues

    A limitation of the javascript engine that it cannot parse too many levels of nested anonymous functions. With more than 2 or 3 levels the device crashes when attempting to execute the code. To avoid this problem it is recommended that asynchronous callback functions are defined at the top level and passed as a named reference. Also, where possible prefer synchronous calls like Shelly.getComponentStatus and Shelly.getComponentConfig to avoid the need for async callbacks altogether.

    For example, instead of using an anonymous function for a callback:


    Code
    Shelly.call(
      "HTTP.GET",
      {url: "http://example.com/"},
      function(result, error_code, error_message) {
        if (error_code != 0) {
          // process error
        } else {
          // process result
        }
      });

    Prefer a named function:


    Code
      function processHttpResponse(result, error_code, error) {
      if (error_code != 0) {
        // process error
      } else {
        // process result
      }
    }
    
    Shelly.call("HTTP.GET", {url: "http://example.com/"}, processHttpResponse);

    wenn möglich dann versuch keine Unbenannte Funktionen zu nutzen, dein Skript enthält zurzeit noch einige verschachtelten Unbenannten Funktionen. Das könnte zu Problemen führen.

    3 Mal editiert, zuletzt von _[Deleted]_ (26. Januar 2023 um 03:14)

  • Update!


    1. Danke für den Hinweis und die unbenannte Funktion im Callback habe ich entfernt. Hatte zwar nur Level1 Aufrufe, aber man weiß ja nie.
    2. Die Anzahl gleichzeitiger Callbacks kann nun eingestellt werden (default bei mir 2), damit der Shelly nicht überfordert wird.
    3. Der Callback Stack wird nun kontrolliert und falls es ein Problem mit hängenden Callbacks gibt, wird eine Warnung ausgegeben.


    Damit lassen sich nun eine ganze Reihe von Shellys zentral von einem Shelly (quasi 1W Homeserver) steuern, ohne den Shelly selbst zu überfordern. Das Kernstück ist damit soweit ok und ich kann mit dem eigentlichen Projekt beginnen …