Get Component Status from other Shelly

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.

  • Is it possible read other Shelly's status? If it is possible is there differece depending gen1 or gen2 products? I have code like below which work local devices, but I don't know how I can include other Shelly's IP address to this code.

    Code
    function Loop(){
      try{
          let power = Shelly.getComponentStatus('Switch', 0).apower;
               
          print(power);
      }catch(e){print(e);}
    }
    Timer.set(2000,true,Loop);
  • You can try with an URL and RPC method. At least with Generation 2, remote access should be possible.

    In the callback function you can use the response in JSON format.

    An example - untested

    Code
    Shelly.call('http.get',{url:'http://<remote ip address>/rpc/switch.getstatus?id=0'},
        function(response) {
            let power = response.apower;
            //...
        }
    );

    To use a remote Gen. 1 Shelly, you should study its HTTP communication.

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

  • Thank you for your help, but still I have something what I can't understand. I tried it code like below, but seems that it can't get apower status.

    Code
    Shelly.call('http.get',{url:'http://192.168.1.137/rpc/switch.getstatus?id=0'},
        function(response) {
            let power = response.apower;
            function (response, error_code, error_message, ud) {
    print(JSON.stringify(response));
        }
        }
    );
  • The second, inner function is never processed.

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

  • Hallo,

    dazu hätte ich auch eine Frage.

    Mit dem Aufruf kann ich tatsächlich die Werte eines anderen Shellys über die IP abrufen.

    Code
    Shelly.call('http.get',{url:'http://192.168.xxx.xxx/rpc/switch.getstatus?id=0'},
       function (response, error_code, error_message, ud) {
               print(JSON.stringify(response));
               print(response['body']);
       }
    );

    Wie komme ich aber an die untergeordneten Werte in dem Json-Array?
    Diese beiden Aufrufe funktionieren jedenfalls nicht

    Code
    print(response['body']['apower'])  
    print(response['body']['.']['apower']) 
    print(response['body']) 

    Bei Aufruf nur des Body in der 3. Zeile bekomme ich wenigstens ein Ergebnis:

    "{\"id\":0, \"source\":\"http\", \"output\":true, \"apower\":0.0, \"voltage\":232.2, \"current\":0.000, \"aenergy\":{\"total\":0 17:33:18

    .000,\"by_minute\":[0.000,0.000,0.000],\"minute_ts\":1722439980},\"temperature\":{\"tC\":43.7, \"tF\":110.7}}"

    Wie ich das weiter auswerte, ist mir ein Rätsel - oder muss ich das mit String-Methoden von Javascript selbst parsen?

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