Shelly.call ('HTTP.GET, .. an eine passwort geschütze Komponente

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,

    kaum läuft das erste Script, kommen die Probleme mit den nächsten ^^

    Es soll eine last- und temperaturabhängige Heizstarbschaltung auf einen Shelly 2PM Gen3 realisiert werden.

    Dafür möchte ich die Netzeinspeiseleistung von (m)einem Shelly PRO 3em über einen Shelly.call - "HTTP.GET" Befehl ausgelesen.

    Der PRO 3em ist jetzt aber Passwort geschützt, sodass der einfache Shelly.call natürlich ins Leere läuft.


    Wie sende ich das Passwort des PRO 3em aus dem Script des 2PM?

    Meine Suche im Forum mit für mich nicht eindeutige Lösungen aus einem Shelly-Scrip ergeben.

    Gibt es passende Lösungen oder kann mir jemande helfen, wie ich mein Script erweitern muss, damit ich den Passwortschutz freiscahlten kann?


    Danke für weitere Hilfe

    Jochen

    Shelly PRO3 em mit dem Ziel: einfaches Energiemanagement über Scripting (da gibt es noch viel zu lernen für mich... :/)

  • Laut Doku wird Auth direkt unterstützt:

    https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/HTTP/

    Zitat

    Authentication support

    URL strings with username and password elements are supported as defined in WHATWG. The HTTP client will use the authentication credentials for resources protected by the basic and digest authentication schemes.

    Insofern müsste als URL http://user:password@url funktionieren. Das habe ich selber aber noch nie verwendet.

    Alternative "zu Fuß":

    https://shelly-api-docs.shelly.cloud/gen2/Component…TP/#httprequest

    Du kannst mit dem allgemeinen http.request Befehl Header Daten mitsenden. Üblicherweise sendet man das PW über einen Header - je nachdem, wie der Passwortschutz realisiert ist.

    Grob so:

    Code
    Shelly.call(
      "http.request",
        {
          method: "GET",                                
          url: "...",
          headers: {"headername": "value"}

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • Schon mal vielen Dank für deine Hilfreichen Infos :thumbup:

    Ich weiss nicht, ob ich an dieser Stelle mit meiner Copy-and-Past-Programmierkünsten an die Grenzen stosse..

    Zitat

    Insofern müsste als URL http://user:password@url funktionieren. Das habe ich selber aber noch nie verwendet.

    das sollte ja dann in der Form

    Code
    http://192.168.33.1/rpc/HTTP.GET?url="http://admin:supersecretpassword@10.33.53.21/rpc/Shelly.Reboot"

    laut Doku gesendet werden, wobei ich nicht verstehe, warum an 192.168.33.1 die IP zur Freigabe mit 10.33.53.21 gesendet wird. Ich hätte hier jetzt die gleiche IP erwarte, mit der der Shelly angesprochen wird :/

    Ensprechend habe ich versucht eine Funktion zu bauen, die mir diesen String zusammenbaut und zum Shelly sendet:

    Leider bekomme ich damit die Autenfizierung nicht geschaltet und der Responce.Code ist "undefined"


    Ohne Autentifizierung erhalte ich den Responce.Code = 401, wenn ich versuche den "/rpc/Shelly.Getstatus zu senden, was auch zu erwarten ist.

    Und ohne Password am Shelly kann bekomme ich den "/rpc/Shelly.GetStatus" positiv beantwortet..


    Aber ganznebenbei:

    der JSON-String des Shelly PRO 3em schreibt die akutelle Netzleistung in den Roud: "em:0", "total_act_power".

    Wie zur Hö... bekomme ich "em:0" geparst, die ":" will das Script an der Stelle nicht:

    Code
    actualActivePower = parsedData.em:0.total_act_power;


    ... sorry für die ganzen Anfängerfragen :saint:

    Shelly PRO3 em mit dem Ziel: einfaches Energiemanagement über Scripting (da gibt es noch viel zu lernen für mich... :/)

  • der JSON-String des Shelly PRO 3em schreibt die akutelle Netzleistung in den Roud: "em:0", "total_act_power".

    Das geht so:

    Code
    actualActivePower = parsedData["em:0"].total_act_power;

    Einfacher ist es, wenn du /rpc/EM.GetStatus?id=0 nutzt, dann kommt "flaches" JSON nur mit den Energiewerten:

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • wobei ich nicht verstehe, warum an 192.168.33.1 die IP zur Freigabe mit 10.33.53.21 gesendet wird.

    In diesem Beispiel ist 192.168.33.1 die IP des Shellys, auf dem du den /rpc/HTTP.GET ausführen möchtest und 10.33.53.21 die IP des Shelly, auf dem du etwas via dem HTTP.GET ausführen möchtest. Sprich du rufst mit dem Browser Shelly 192.168.33.1 auf und dieser Shelly ruft dann bei 10.33.53.21 etwas auf.

    An sich ist dieses Beispiel aber im Browser nutzlos, weil du du ja auch einfach direkt den Ziel Shelly via 10.33.53.21 ansprechen könntest:

    http://admin:supersecretpassword@10.33.53.21/rpc/Shelly.Reboot

    Das geht aber inzwischen in vielen Browsern nicht mehr, weil diese die URL Version mit username:password@ip nicht mehr unterstützen.

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

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