[HTTP Request Shortcuts] Möglichkeiten ohne höheres System

  • Hallo zusammen,

    ich möchte hier mal vorstellen, was mit der HTTP-Request-App im Shellyversum so alles möglich ist:

    Es gab einige Bedingungen, die (für mich) erfüllt werden sollten:

    - kein übergeordnetes System, nur Smartphone und Shelly

    - kein VPN, da bei DS-Lite das schon mal problematisch sein kann, insbesondere bei eingehenden Verbindungen aus dem Mobilfunknetz

    - Geolocation und Geofencing sollten die Trigger sein

    Folgende Apps werden auf dem Smartphone benötigt - zumindest in meinem Lösungsansatz:

    - HTTP-Request

    mit dem letzten Update vom 18.3. - davor laufen Schleifen mit Mehrfachaufrufen nicht ganz sauber durch, wodurch nicht mehrere Shellys hintereinander geschaltet werden können

    - AUTOMATE

    als Überwachungsinstanz für Geolocation und Geofencing und Auslöser für die Scripte. In der "freien" Version können 30 "Blöcke" aktiv laufen, aber das reicht für dieses Projekt. Auch hier sollte die neueste Version genutzt werden, da Google in den neueren Android-Versionen den Benutzern die Intelligenz abspricht, den WLan-Status per App setzten zu lassen.

    Da ich ja den Rest in HTTP-Request laufen lasse, sollte es auch mit Tasker o.ä. funktionieren.

    So, nun mal los:

    Auf dem Smartphone wird in Automate ein so genannter "Flow" geladen und gestartet - der bleibt auch "für immer" aktiv.

    In diesem Flow wird mittels GPS geprüft, ob ich zu Hause bin oder nicht. Verlasse ich nun mein Haus und gehe durch das virtuelle Zauntörchen, wird dies erkannt und über den Aufruf eines HTTP-Request dieser Zeitpunkt im Smartphone vermerkt.

    Irgendwann komme ich wieder nach Hause (hoffe ich jedenfalls). Beim klettern über'n Zaun wird auch das wieder erkannt. Zu diesem Zeitpunkt wird ein weiter HTTP-Request aufgerufen.

    Dieser HTTP-Request (an und für sich nur Scripting) kümmert sich dann um folgendes:

    - Auslesen einer Variablen, in der alle Shellys aufgelistet sind, die ich schalten möchte.

    - Je Shelly wird geschaut, nach welcher Zeit der Abwesenheit er aktiviert oder deaktiviert werden soll - und für wie lange.

    So wird beispielsweise die Wallbox frühestens nach einer halben Stunde der Abwesenheit eingeschaltet.

    - Bei positiver Prüfung wird dann der Shelly geschaltet, wobei hier eine Rolle spielt, ob der Status der gleiche ist, wie der zu erzeugende. Wenn ja, passiert nichts. Warum: wenn jemand das Außenlicht schon angeschaltet hat, ist es nicht sinnvoll, das es 10 Minuten nach meinem Eintreffen aus geht; dann sollte es besser an bleiben.

    Was noch fehlt, ist die Zeitabhängige Steuerung.

    Bei Interesse kann ich versuchen, hier mal die Scripte zu hinterlegen - gestaltet sich komplizierter als gedacht.

    Gruß

    Detlev

    FB 7590, MESH-Repeater, 1*Plug, 4*PlugS, 2*2.5, Dimmer2, 20*Shelly 1, 5*Shelly Plus 1, WiFi-Marker, BT-Scanner, Switchbot, App HTTP-Request, App Automate

  • Hallo,

    das Problem ist nicht das Einstellen des Codes, sondern Exportieren desselben. In den HTTP-Requests sind die Namen der Variablen und Scripte in einem internen Format abgelegt, so das ein einfaches Verteilen mittels Dateien schon problematisch werden kann.

    Aber fangen wir mal an:

    Zunächst läuft der "Flow" "Zuhause_AnAus" auf dem Handy. Leider gibt es da keinen Quellcode zu, nur den Flow oder ein Bild.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Zum Abmelden läuft "Zuhause_Logoff" ("Abmeldung vom Netzwerk"). Damit wird die aktuelle Zeit in einer statischen Variablen gespeichert:

    Code
    // holen aktuelles Datum und Uhrzeit 
    var jetzt = (new Date());
    
    // umsetzen in laufenden Wert 
    var jetztzeit = jetzt.getTime();
    
    // und merken (in Millisekunden seit dem 1.1.1970)
    setVariable("Zuhause_Datum", jetztzeit);

    Zum Anmelden - also beim Wiedereintritt in den umzäunten Bereich, läuft "Zuhause_Logon" ("Anmeldung am Netzwerk"). Dieser ist nur der Aufrufer für den eigentlichen Teil der Arbeit:

    Code
    // aufruf des eigentlichen Scripts
    triggerShortcut("Zuhause_Logon_Aktion");

    In dem Script "Zuhause_Logon_Aktion" ("Anmeldung am Netzwerk: Geräte holen, in Schleife abarbeiten") wird der logische Teil der Arbeit durchgeführt:

    Im folgenden Request "Zuhause_Logon_Aktion_Status" ("Anmeldung am Netzwerk: Gerät Status auslesen") wird der Status abgefragt.

    Hier wird dann auch der 1. HTTP-Request auf einen Shelly abgesetzt:

    Code
    http://{SH_IP_URL}/{SH_IP_Typ}/{SH_IP_Relais}/status

    Nach der Ausführung wird der Response abgearbeitet. Auch der Kommentar am Anfang darf nicht weggelassen werden, da hier durch den Parser Variablen erkannt werden, die später noch Verwendung finden:

    Wenn im Response festgestellt wurde, das eine Aktion erfolgen muss, wird das im letzten HTTP-Request "Zuhause_Logon_Aktion_Exec" ("Anmeldung am Netzwerk: Gerät schalten mit Timer") ausgeführt:

    Code
    http://{SH_IP_URL}/{SH_IP_Typ}/{SH_IP_Relais}/?turn={SH_OnOff}&timer={SH_Duration}

    Im Bereich der HTTP-Request-App müssen diverse statische Variablen definiert werden. Zum Teil werden diese als Speicher verwendet, zum Teil als Parameterübergabe:

    Der Inhalt der Variablen für die Parameterübergaben ist zweitrangig, da diese in den Scripten überschrieben werden

    Code
    SH_IP_URL                // IP des Shellys
    SH_IP_Typ                // Typ des Shellys ("relais")
    SH_IP_Relais             // Nummer des Relais (0)
    SH_OnOff                 // Ein- oder Ausschalten ("on")
    SH_Duration              // Dauer des Einschaltens in Minuten (7)

    Interessanter werden die Variablen, die als Speicher dienen.

    Code
    Zuhause_Datum             // Datum der letzten Abmeldung - Inhalt wird vom Script aktualisiert
    Zuhause_73                // Definition eines Gerätes
                              // IP ; Typ ; Nummer ; Nachzeit ; on/off ; Dauer;
                              // 192.168.2.xx;relais;0;7;on;60
    Zuhause_Geraete           // Summe der Zuhause_xx
                              // {Zuhause_73}"{Zuhause_74}

    Die Variable "Zuhause_Datum" ist der Speicher der letzten Abmeldung. Dagegen wird beim nächsten Wiedereintritt verglichen, ob etwas gestartet werden soll.

    "Zuhause_73" ist vom Namen her unerheblich, sie dient nur der Speicherung der Parameter für einen Shelly, der beim Wiedereintritt beackert wird. Es kann davon (fast) beliebig viele geben.

    "Zuhause_Geaete" ist die von den Scripten ausgewertete Variable, welche die Summe der einzelnen Geräte enthält. Hier werden die einzelnen Variablen eingefügt und durch ein Hochkomma (") getrennt.

    HTH

    Detlev