Anwesenheitssimulation

  • Hallo, ich bin neu in diesem Forum und hoffe das mit jemand entsprechende Tips geben kann. Trotz Suche habe ich bis jetzt keine Lösung zu meinem Problem gefunden.

    Folgende Situation: mittels Telldus Geofence wird meine AN- bzw. ABwesenheit festgestellt und ein Shelly Schalter AN bzw. AUS geschaltet. Dieser Schalter (EM3) wird als Dummy verwendet. Diese AN-/ABwesenheitsfunktion funktioniert auch ohne Probleme.

    Szene: Wird der Dummy nun eingeschaltet (WENN EM3 => ON, einmalig) werden hintereinander in unterschiedlichen Zimmer in Abständen hintereinander mittels Shelly 1L Lampen eingeschaltet und wieder ausgeschaltet. Dies funktioniert ebenfalls.

    Problem: wenn der Dummy ausgeschaltet wird, werden alle noch offenen Szeneaktionen weiterhin ausgeführt.

    Mein Ziel wäre jedoch: sobald ich nach Hause komme und sich der Dummy ausschaltet sollen auch alle noch offen Aktionen gestoppt werden.

    Für mich sieht das Ganze so aus, dass bei start der Szene diese auf jedenfalls komplett abgearbeitet wird und nicht einfach gestoppt werden kann.

    Für Hilfe und Tipps wäre ich Euch sehr dankbar.

    Screenshot_2023-05-02-09-43-51-718_allterco.bg.shelly.jpg

    Das Ausschalten des Dummys erfolgt mittels Befehl im übergeordneten System Telldus und funktioniert auch.

    LG Michael

  • Du hast also einen Shelly der, wie auch immer, über den Relay Zustand den Status deiner Anwesenheit spiegelt, richtig?

    Und nun willst du ein Skript das deine Szene, bei Relay true ausschaltet oder bei false einschaltet, false klappt schon aber true klappt nicht?

    Bzw. was für ein Skript benötigst du, eine Fake-Anwesenheit-Simulation, mehrere Lichter verzögert an und aus schalten wenn das Relay von einem bestimmten Shelly auf false steht?

    Das ist leicht machbar mit ein paar http Calls und Timern, dafür benötigst du keine Szenen.

  • Danke für die Antwort.

    Das realisiere ich gerne anderwärtig. Ich Versuche mich derzeit gerade in HTTP Befehle einzulesen. Bin aber offensichtlich noch nicht so weit vorgedrungen.

    So ich dass richtig verstehe, wird der Shelly bei jedem Call abgefragt ob dieser auf "false" oder "true" steht und schickt dann den entsprechenden Schaltbefehl (z.B. http://192.168.1.210/relay/0?turn=on bzw Off) an die Lampe. Richtig?

    Könntest du mir bitte so einen http Call für die Abfrage ob "true" oder "false" als Muster schreiben/nennen/geben, sodass ich dann obigen Schaltbefehl - so dieser richtig ist verwenden kann?

    Vielen Dank im Voraus

    Michael

  • Als Skript ?

    Der Link http://192.168.1.210/relay/0?turn=on ist ein Weg, um ein Shelly aufzurufen und ihm den Befehl "relay 0, einzuschalten" zu geben.

    Eine URL hat mehrere Teile, die ihr sagen, was sie tun soll. Der Teil "http://" sagt ihr, dass es sich um eine HTTP-Adresse handelt. Der Teil "192.168.178.23" sagt ihr, wo sich das Gerät/der Server befindet. Der Teil "/relay/0" sagt ihr, wohin genau der Befehl auf dem Gerät/Server gesendet werden soll. Schließlich sagt der Teil "?turn=on" dem Gerät/Server, dass der Schalter eingeschaltet werden soll - das ist der eigentliche Befehl. Ob das Gerät/der Server bereits eingeschaltet ist oder nicht, ist dabei egal, da keine Abfrage stattfindet - es werden nur Befehle an das Gerät/den Server übergeben.

    Nachdem der Befehl ausgeführt wurde, erhältst du eine Rückmeldung vom Gerät/Server, normalerweise in Form von JSON/Text im Browser, bzw body/JSON bei einem http call.

    Wenn du einen Befehl abhängig vom Zustand des Geräts/Servers senden möchtest, musst du zuerst den Status abrufen. Dies erfolgt ebenfalls per Befehl, indem du dem Gerät/Server sagst: "Nenne mir deinen Status!"

    http://192.168.1.210/rpc/Shelly.GetStatus

    In einer URL kannst du zusätzliche Informationen/Befehle in dem "Query-String" Teil hinzufügen, welcher nach dem "?" Zeichen kommt. Dieser Query-String kann Parameter und Werte enthalten. Mehrere Parameter werden durch ein "&" Zeichen voneinander getrennt.

    In der URL http://192.168.1.210/rpc/Switch.Set?id=0&on=true wird der Parameter "id" mit dem Wert "0" angegeben, um dem Gerät/Server zu sagen, für welches Relay der Befehl gilt. Der Parameter "on" mit dem Wert "true" gibt an, ob das Relay ein- oder ausgeschaltet werden soll.

    Es gibt manchmal bestimmte Befehle, die dem Gerät/Server sagen, "Prüfe dies, dann tue das". Unterm Strich bleiben es jedoch Befehle. Bei Shelly gibt es den Toggle-Befehl (Schalte um) sowie einen Toggle-After-Befehl (Schalte...an/aus und schalte nach x Sekunden um).

    Manche APIs achten auf die Reihenfolge der Query-Strings, um zu entscheiden, wie sie auf die Anfrage reagieren sollen, was komplexe Befehlsketten ermöglicht.

    Jedoch unterstützt die Shelly-API so etwas nicht. Hier ist die Reihenfolge egal.

    Wenn du "relay/0" nutzen möchtest, könnte dein Link mit "toggle-after" in etwa so aussehen:

    http://192.168.1.210/relay/0?turn=off&timer=3

    Und so sieht der Link aus, wenn du "rpc/Switch.Set" nutzen möchtest:

    http://192.168.1.210/rpc/Switch.Set?on=false&id=0&toggle_after=3

    Beides wird dieselbe Wirkung haben - es sind nur unterschiedliche Befehle, die das gleiche Ziel verfolgen.

    Kurz gesagt, du kannst jemandem befehlen, "Hole eine Kiste Sprudel aus dem Keller!" oder "Gehe in den Keller und hole eine Kiste Sprudel!". Ob der Sprudel nun tatsächlich im Keller steht, erfährst du erst, wenn der Befehl ausgeführt wurde.

    Wenn du dein Relay 0 wirklich nur einschalten willst wenn es ausgeschalten ist, dann musst du vorher in nem Befehl nach dem Status fragen (Befehl: "Gehe in den Keller und schau ob noch Sprudel da ist!"), diesen Status dann verarbeiten evt. in nem Skript (Anwort:"Ja eine Kiste Sprudel ist noch da.") und kannst dann den Ein/Aus Befehl senden (Befehl: "Gut dann geh nochmal in den Keller und bring eine Kiste Sprudel hoch!") ...... (Antwort: "Hier ist deine verdammte Kiste.")

    So genau muss man jedoch meist den Status vom Relay 0 nicht kenne, es reicht oft Befehle einfach blind zu versenden und dann anhand der Antwort zu prüfen ob das nun geklappt hat oder eben nicht,

    dafür benötigst du jedoch ebenfalls eine Verarbeitung der Antwort evt. in Form eines Shelly Skripts.

    Wenn du jedoch nur den Status des Shellys auf dem das Skript läuft benötigst dann gibt es da auch bessere Möglichkeiten um an den Status ohne http call zu kommen, du kannst das Relay dann auch ohne http call schallten.

    (Und wenn es dir um Endpoints, sowie um die Steuerung von Gen2s über Batterie betriebene Gen1 geht, das ist nochmal ein Thema für sich.)

    15 Mal editiert, zuletzt von _[Deleted]_ (8. Mai 2023 um 23:04)

  • Danke für deine Mühe und Hilfe zu meinem Thema. Das hilft mir sehr, mich in die Thematik der Shellywelt ein zu arbeiten.

    Echt toll wie ausführlich, umfassend und vor Allem leicht verständlich für einen Anfänger du das beschrieben hast.

    Danke

    Michael