Shelly Script - Machbarkeitsfrage

Die Verwendung von Skripten liegt im eigenen Ermessen des Benutzers. Unterstützung für Skripte wird vom Autor des Skripts bereitgestellt.
  • Hallo zusammen,

    folgende Ausgangssituation:

    - Mein Garten ist 3 km weit weg und ist mittels Insel-Lösung (Solar und Pufferbatterie) mit 220 Volt versorgt.
    - Der Garten ist über Vodafone + LTE Router verbunden. Leider ist kein VPN möglich, da der Router weder IPv4 noch über IPv6 erreichbar gemacht werden kann (Das wird vom Mobilfunk unterbunden, bei normalen Internetanschlüssen funktioniert das, aber nicht über einen Mobilfunk-Router)
    - Ich möchte mein Dörr-Gerät laufen lassen, nur das zieht 700W/h das halten meine Pufferbatterien nicht solange aus bis wieder genug Sonne am Himmel ist.
    - Je nach Sonnenschein wird die Batterie mal schneller oder eben langsamer geladen (was ein Scheduling beim Shelly ausschließt)
    - Von meiner verbauten Solaranlage bekomme ich Status-Emails über die aktuelle Versorgungsleistung der Batterie in Volt und Ampere. Kritische Voltzahl für den 220V Spannungswandler liegt bei 11,3 - dann schaltet der in den Alarmzustand und schaltet 220V ab - Problem ist, der Piepst permanent was nicht ausgeschaltet werden kann. Und wenn dann mehrere Tage keine ausreichende Sonne kommt, dann piepst das auch so lange und stört meine Nachbarn.
    - Ich möchte aber meine Insel-Lösung gar nicht bis zum Cut-Off aussaugen - da ja auch noch Kühlschrank etc. darüber läuft
    - Ich bekomme auch E-Mail-Statis über den Ladezustand, also ob Solarzufluss "OFF" ist - also in der Nacht passiert da nichts, "LOAD" - die Batterie wird geladen, "BALANCE" die Restladung erfolgt in niedriger Kapazität, "FLOAT" Der produzierte Strom wird verworfen, da Batterien voll sind.
    - Ich weiß, dass ich mein Dörrgerät ca 5-6 Stunden laufen lassen kann wenn der Status BALANCE erreicht wurde, und ca 7-8 Stunden wenn der Status FLOAT erreicht wurde

    Nun würde ich gerne das ganze Scripten (Applescript oder von mir aus auch Shell, ich bau mir das schon um) aber es fehlt mir die Idee wo ich anfange, und ob es überhaupt geht.

    Da ich kein VPN aufbauen kann, kann ich den Shelly nicht mit IP erreichen. Aber über https://control.shelly.cloud/ kann ich meine Shelly bedienen.

    Ich würde gerne wenn ich eine E-Mail erhalte mit der Statusänderung BALANCE den Shelly einschalten. Mehr nicht. Da der Shelly mir 3 Stunden (60*60*3 = 10800 Sekunden) Laufzeit - Auto Off - hinterlegt ist, braucht es nicht mehr als nur diesen einen Script Aufruf. Geht das irgendwie das ich das per Script über den Login auf control.shelly.cloud ausführen kann?
    E-Mail Erkennung mache ich über eine E-Mail-Regel mit Aktion "Starte Script". In dem Script soll dann einfach nur diese eine Aktion stattfinden "Starte Shelly Gerät XY". Fertig

    Und das halt ohne IP-Aufruf sondern über control.shelly.cloud

  • OK, ich brauche Eure Antwort gar nicht mehr, Chat GPT ist einfach nur noch genial - Warum skripte ich eigentlich noch manuell ???

    Antwort von ChatGPT:

    Hier ist eine Schritt-für-Schritt-Anleitung, wie Sie Ihren Shelly-Switch über AppleScript und die Shelly Cloud API ein- und ausschalten können.


    Schritt-für-Schritt-Anleitung


    1. Erstellen Sie einen API-Schlüssel für die Shelly Cloud:

    • Melden Sie sich bei Shelly Cloud an.

    • Gehen Sie zu „User Settings“.

    • Erstellen Sie einen API-Schlüssel, der für die Steuerung Ihrer Shelly-Geräte verwendet wird.

    2. Finden Sie die notwendigen Informationen heraus:

    Server URI: Den Servernamen, z.B. shelly-api-eu.shelly.cloud.

    Device ID: Die ID Ihres Shelly-Geräts.

    API Key: Ihren API-Schlüssel.

    3. Erstellen Sie das AppleScript:

    Erstellen Sie ein neues AppleScript im AppleScript-Editor (Script Editor) auf Ihrem Mac und fügen Sie das folgende Skript ein:

    -- Definieren Sie die Parameter für den POST-Request
    set server to "YOUR_SERVER" -- Ersetzen Sie dies durch Ihren Servernamen
    set channel to "0" -- Ersetzen Sie dies durch den Kanal (z.B. 0 für den ersten Kanal)
    set deviceID to "YOUR_DEVICE_ID" -- Ersetzen Sie dies durch Ihre Geräte-ID
    set apiKey to "YOUR_API_KEY" -- Ersetzen Sie dies durch Ihren API-Schlüssel
    set action to "on" -- "on" zum Einschalten, "off" zum Ausschalten

    -- Überprüfen Sie, ob die Eingabewerte korrekt sind
    if server is "" or channel is "" or deviceID is "" or apiKey is "" then
       display dialog "Bitte stellen Sie sicher, dass alle Werte (Server, Kanal, Geräte-ID, API-Schlüssel) korrekt sind."
       return
    end if

    -- Zusammensetzung der URL und der POST-Daten
    set shellyURL to "https://" & server & "/device/relay/control"
    set postData to "channel=" & channel & "&turn=" & action & "&id=" & deviceID & "&auth_key=" & apiKey

    -- Debug-Ausgabe der URL und der POST-Daten zur Überprüfung
    display dialog "Die URL lautet: " & shellyURL & "\nDie POST-Daten lauten: " & postData

    -- URL-Anfrage senden, um den Shelly-Switch einzuschalten
    try
       set curlCommand to "curl -X POST " & quoted form of shellyURL & " -d " & quoted form of postData
       set curlOutput to do shell script curlCommand
       display dialog "Shelly-Switch wurde erfolgreich eingeschaltet. Antwort: " & curlOutput
    on error errMsg number errNum
       display dialog "Fehler: " & errMsg & " (Nummer " & errNum & ")"
    end try

    3. Erläuterungen des Skripts:

    • set server to "YOUR_SERVER": Setzen Sie hier den Servernamen ein, den Sie von der Shelly Cloud erhalten haben.

    • set channel to "0": Setzen Sie den Kanal (z.B. 0 für den ersten Kanal).

    • set deviceID to "YOUR_DEVICE_ID": Setzen Sie hier die ID Ihres Shelly-Geräts ein.

    • set apiKey to "YOUR_API_KEY": Setzen Sie hier Ihren API-Schlüssel ein.

    • set action to "on": “on” zum Einschalten des Geräts (ersetzen Sie durch “off” zum Ausschalten).

    • set postData to ...: Dies erstellt die POST-Daten für den curl-Befehl.

    • set curlCommand to ...: Dies erstellt den curl-Befehl mit der POST-Anfrage.

    • set curlOutput to do shell script curlCommand: Führt den curl-Befehl aus und erfasst die Antwort.

    4. Passen Sie das Skript an:

    • Ersetzen Sie YOUR_SERVER, YOUR_DEVICE_ID, YOUR_API_KEY und channel durch die tatsächlichen Werte.

    5. Führen Sie das Skript aus:

    • Speichern Sie das Skript und führen Sie es im AppleScript-Editor aus.

    • Ein Dialogfeld zeigt die Antwort des curl-Befehls an, sodass Sie überprüfen können, ob die Anfrage erfolgreich war.


    Zusammenfassung


    Mit diesem AppleScript können Sie Ihren Shelly-Switch über die Shelly Cloud API ein- und ausschalten. Stellen Sie sicher, dass alle Parameter korrekt sind und führen Sie das Skript aus, um die gewünschten Aktionen durchzuführen.