Auf mein erstes Shell Skript war ich auch so stolz dass ich einen neuen Thread eröffnet habe. Interessiert hat es keinen. Zu Dokumentationszwecken für Dich selbst nutze bitte gitlab oder github.
Hallo,
ja, genau das will ich auch: Shelly 3EM pro. Leistung über http beziehen.
Ich bin auch auf die gleiche Lösung gekommen wie der TO:
1
http://192.168.0.151/rpc/EM.GetStatus?id=0
Wenn ich das in meinen Browser eingebe, bekomme ich auch die entsprechende Liste als Antwort.
Ich möchte aber innerhalb eines Python-Scripts auf die einzelnen Werte zugreifen, und komme da nicht weiter. Ich brauche die momentane Gesamtleistung um damit weiter zu rechnen.
Die Doku für den Pro 3EM verwirrt mich mehr, als dass sie mir hilft. Kann mir da jemand weiterhelfen?
Ja.
Du kannst das im shelly parsen und nur den interessanten wert übertragen, oder du kannst das ganze json garbage übertragen und das im client parsen.
Ja.
Du kannst das im shelly parsen und nur den interessanten wert
übertragen, oder du kannst das ganze json garbage übertragen und das im
client parsen.
Ja nun, wenn man sowieso am Ende Python verwenden will, dann lässt man das JSON dort parsen.
Hallo Mathias.
Du wirst es inzwischen wahrscheinlich herausgefunden haben.
Ich wäre an der Lösung interessiert.
Die Antwort mit dem Parsen scheint mir sowieso nicht die richtige gewesen zu sein.
Ich stehe vor einem ähnlichen Problem:
-Sicher funktioniert die Anfrage über den Browser.
-Ich möchte die Anfrage aber aus einem Shelly Script heraus stellen.
-mit
let sta=Shelly.call("http.get", "http://10.0.0.16/rpc/EM.GetStatus?id=0");
bekomme ich aber immer nur Null als Antwort.
...so recht ist mir aber nicht klar, wo sich dieser Code von meinem unterscheidet - scheinbar lässt sich Ergebnis nicht direkt zuweisen?
Naja, ich werde weiter in meinem Java Buch lesen und hoffe, dass es mir etwas weiterhilft, obwohl ich bezweifle ob dies an Java oder eher an Shelly liegt!?
print('Fehler beim Abrufen der Daten von Shelly 3EM')
Dein Code benutzt zwar F-Strings, aber die Variablennamen (192.168.0.15[12]) sind ungültig. In diesem Fall kannst Du Dir die geschweiften Klammern ebenso sparen wie das "f".
Direkte Schlüsselzugriffe wie hier auf 'total_act_power' am Ende eines oder gar mehrerer Befehle... Wie wäre es eine Abfrage mit ".get('total_act_power', None)" mit Prüfung auf "None"?
Besonders häßlich finde ich allerdings, daß Du den Informationsgehalt aller Exceptions wegwirfst und stattdessen eine völlig nichtssagende Fehlermeldung ausgibt. Völlig gleichgültig, ob der Request fehlschlägt, weil der Host nicht erreichbar war, der Host einen unerwarteten HTTP-Statuscode zurückgegeben hat, ob sich der Body der Response nicht als JSON parsen ließ oder Du nicht auf den Schlüssel 'total_act_power' zugreifen konntest, die Fehlermeldung ist immer dieselbe: 'Fehler beim Abrufen der Daten von Shelly 3EM'...
... und so ganz grundsätzlich würde ich bei jeder Art von Netzwerkverbindung niemals ohne Timeout arbeiten. ;-)
Eine eigene Frage?
Dieser Thread ist über 2 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.