Shelly Plus 1PM http request funktioniert im Browser aber im Script nicht

  • Hallo,

    ich habe 2 Shelly plus 1PM mit Addon und DHT22 im Netzwerk. Zugriff, App etc alles OK.

    Wenn ich im Browser http://192.168.2.35/rpc/shelly.GetStatus eingebe bekomme ich den Json zurück. ok

    Jetzt im Script.


    Shelly.call("shelly.GetStatus" , null , function (result, error){
    print((result));
    print((error));
    });

    funktioniert auch. Das ist die Antwort von dem Shelly auf dem das Script auch läuft.

    Jetzt möchte ich auf einem Shelly (IP x.x.x.35) den Status des Anderen x.x.x.60) abholen. Das folgende script läuft auf dem x.x.x.35

    Shelly.call("http://192.168.2.60/rpc/Shelly.GetStatus" , null , function (result, error){
    print((result));
    print((error));
    });

    Anwort ist: undefined und Error 404.

    "http://192.168.2.60/rpc/Shelly.GetStatus" im Browser bringt den json File als Antwort. Aber warum funktioniert das nicht im Script?

    Bin irgendwie am Ende. Habt ihr neahnung wo der Fehler liegt?

    Grüße

    ducis

  • Der folgende Code tut, was du willst:

    JavaScript
    Shelly.call(
     "HTTP.GET",    // führe einen http GET request aus...
     {
       url: "http://192.168.2.60/rpc/Shelly.GetStatus", // ... und zwar auf diese URL
     },
     function (result, error) {
       print(result);
       print(error);
     },
    );

    Es reicht nicht, bei Shelly.call einfach eine URL reinzustecken - du musst sagen, welchen RPC du ausführen willst (in diesem Fall ist das ein HTTP GET Request) und gegebenenfalls die Parameter mitgeben, die dieser RPC verlangt (in diesem Fall ist der Parameter die URL die du aufrufen willst).

  • Danke das funktioniert. fast...

    Ich kann damit die Daten von dem anderen Shelly abholen.

    Aber wenn ich die IP von dem Shelly angebe auf dem das Skript auch läuft, passiert nichts. irgendwann kommt die Fehlermeldung 104. Ich müsste doch auch den eigenen Shelly abfragen können....

    :/

  • Grundsätzlich sollte das funktionieren - Fehler -104 ist ein Timeout und deutet stark darauf hin, dass die IP-Adresse nicht korrekt ist.

    Es ist aber generell keine gute Praxis, das eigene Gerät über seine Netzwerkadresse abzufragen. Es gibt zwei Möglichkeiten, wie du das anders lösen kannst:

    1. Könntest du einfach die IP-Adresse 127.0.0.1 verwenden - das ist die Loopbackadresse, die immer auf das eigene Gerät verweist:

    JavaScript
    Shelly.call(
     "HTTP.GET",
     {
       url: "http://127.0.0.1/rpc/Shelly.GetStatus",
     },
     function (result, error) {
       print(result);
       print(error);
     },
    );

    2. Könntest du GetStatus direkt und ohne Umweg über HTTP.GET aufrufen:

    JavaScript
    Shelly.call("Shelly.GetStatus", {}, function (result, error) {
     print(result);
     print(error);
    });

    Diese Variante hätte den Vorteil, dass in result schon ein fertiges JSON-Objekt steckt und du nicht JSON.Parse() verwenden musst, um die Antwort in ein JSON zu konvertieren.

    Beide Möglichkeiten sollten dich ans Ziel bringen...