Geofencig Workaround

Ich denke Micha hat sich ein wenig in der Wortwahl vergriffen, er meinte nicht aktivieren sondern auslösen. Aktiviren und deaktivieren ist im Moment leider noch nicht möglich.

Sorry , da hast du recht !
Es geht nur über Umwege , webhook aktiviert einen Aktor und dieser kann dann als
Bedingung für die Alarmanlage genommen werden !

VG Micha

Automagic ist bislang das Beste, was ich mit WebHooks getestet habe. Allerdings nutze ich die Aktion WebURL.

Bei mir läuft IFTTT geofencing absolut unzuverlässig bis gar nicht. Gestern bin ich dann auf die kostenlose Android App “EgiGeoZone” gestoßen…zwar kann ich noch kein wirkliches Urteil über die Zuverlässigkeit geben, aber ein erster Test heute morgen war erfolgreich. Und zwar besser, als es mit IFTTT je der Fall war, denn: man kann in der App einen viel kleineren Radius einstellen, als man das bei IFTTT tun kann - bzw. ich hinbekommen habe. In dem Serverprofil der App kann man einfach die Webhook-Adresse aus IFTTT reinkopieren.

Ich wohne z.B. in einem Altbau-Hinterhaus und möchte natürlich gerne, dass sich die Alarmanlage erst ausschaltet, wenn ich auch wirklich in der Nähe bin (z.B. im Innenhof oder vor dem Vorderhaus). Aber trotzdem auch dann anschaltet, wenn ich nur im Restaurant um die Ecke sitze. Das konnte ich mit IFTTT nicht einstellen - abgesehen davon, dass die Webhooks nur am Anfang sporadisch auslösten und dann überhaupt nicht mehr.

PS: Für die Apple-Freunde soll es die App wohl auch - unter anderem Namen - geben.

Ich habe mittels IFTTT auch eine Geofencing gemacht. Ich habe es groß genug gewählt das wenn ich mit dem Auto nach Hause komme immer die Alarmanlage aus ist bis ich vor der Tür stehe.

Hallo

Ich erprobe derzeit ein ganz einfaches Konzept um festzustellen ob eine Person @home ist oder nicht. Vielleicht hatte die Idee aber auch schon jemand.

Es gibt zwei Webhooks:
Person A anwesend
Person A nicht anwesend

Auf einem Raspberry läuft über Cron minütlich ein kleines Skript was versucht das Smartphone der entsprechenden Person anzupingen. Gelingt das wird der erste Webhook aufgerufen. Wenn nicht der zweite. Dazu sollte der heimische DHCP natürlich so konfiguriert sein dass die Smartphones immer die gleiche IP bekommen oder man geht nicht auf die IP sondern den Gerätenamen im Netz.

Bis jetzt ist das nur die Idee. Sobald es läuft werde ich das Script mal posten.

Vorteil zu IFTTT ist dass man keine zusätzliche App benötigt die den Akku leer saugt weil GPS permanent läuft.

Natürlich wäre es schick wenn man die Anwesenheit eines WLAN Gerätes über Homee direkt heraus finden könnte. Dazu müssten die Programmierer aber eine neue Gerätekategorie einführen.

Bye
Marcus

@marjue: Ich bin in der Hinsicht eher ein einfacher Anwender :slight_smile:. Daher kann ich zu deinem Vorhaben technisch nichts beitragen. Ich würde es natürlich begrüßen, wenn homee irgendwann selbst Geofencing unterstützt, sodass ich komplett auf andere Apps verzichten kann, aber IFTTT klappt bei mir leider nicht zuverlässig. Die o.g. App kommt zudem noch ohne Registrierung aus. Wenn diese App zuverlässiger läuft, schmeiße ich IFTTT wieder vom Handy runter. Von Webhook-Auslöser zu Webhook-Aktion habe ich mit IFTTT hingegen keine Probleme.

Nur die WLAN-Verbindung zu prüfen, ist m.E. auch nicht ausreichend. Ich habe im Eingang meiner Wohnung kein WLAN, will aber gerade dann natürlich nicht, dass der Alarm los geht.

@Baschtl: Bei mir ist der Fall so geartet, dass ich oft direkt bei mir vor der Haustür bin, d.h. einen kleinen Radius benötige. Wenn ich allerdings mit dem Auto komme, bräuchte ich allerdings wegen erschwerter Parkplatzsuche einen größeren Radius. Klar, kann man ggf. über verschiedene Webhooks lösen, aber wie gesagt…IFTTT läuft bei mir in Bezug auf Geofencing leider überhaupt nicht.

Hallo

Klar ist die WLAN Lösung nur Geofencing Light. Deine Anforderung würde erstens einen kürzeren Polling Intervall als eine Minute benötigen. Außerdem muss man das WLAN über Repeater natürlich über den benötigten Bereich aufspannen.

Bye
Marcus

Hallo

Mein Geofencing Lite für’s WLAN ist nun bei mir daheim am Start. Auf einen Raspberry läuft ein durch die Crontab getriggertes Script was versucht die im WLAN befindlichen Smartphones zu finden. Ändert sich der Erreichbarkeitsstatus wird je ein Webhook aufgerufen für Ankommen und Verlassen.

Ich habe es in /root/homee_hostwatchdog/ installiert. Es besteht im wesentlichen aus dem Script selbst (homee_hostwatchdog.sh), der Konfigurationsdatei (homee_hostwatchdog.conf) und einem leeren Verzeichnis (statfiles) in dem Statusdateien abgelegt werden.

./statfiles/
./statfiles/statfile.petra (wird generiert)
./statfiles/statfile.marcus (wird generiert)
./homee_hostwatchdog.conf (Configdatei)
./homee_hostwatchdog.sh (Skript)

In der Konfigdatei für jeden Homee User der “überwacht” werden soll einen Eintrag bestehend aus dem Homee-User-Namen und dem Namen oder IP des jeweiligen Smartphones durch Komma getrennt.

USERNAME,GERÄT
z.B.
marcus,iphone-marcus
alicia,iphone-alicia
petra,android-petra

Dann muss es korrespondierend auf dem Homee für jeden User zwei Webhooks geben einen wenn er kommt und einen wenn er geht. USERNAME muss durch den jeweiligen Usernamen ersetzt werden.

anwesenheit_USERNAME_on
anwesenheit_USERNAME_off
z.B.
anwesenheit_marcus_on
anwesenheit_marcus_off
anwesenheit_petra_on
anwesenheit_petra_off

Hier das Script ansich. Die Parameter bei ‘Anzupassende Werte’ müssen angepasst werden gemäß der eigenen Webhook URL.


#!/bin/bash

# Name:    homee_hostwatchdog.sh
# Nutzen:  Ermittelt die Erreichbarkeit von IP Adressen im Netz
#          Ändert sich der Status der Erreichbarkeit wird ein Webhook angetriggert.
# Version: 0.3 23.10.2016
# Autor:   Marcus Jüttner

# Dokumaentation:
# base:        Wo liegt das Skript im Dateisystem (Verzeichnis)
# webhook_url: der reine URL Anteil im Webhook
# webhook_key: Der reine Key Anteil im Webhook
#
# Webhook:     Für jeden User muss ein Anwesenheits- und Abwesenheits-Webhook eingerichtet werden mit folgendem Namen
#              anwesenheit_USERNAME_on
#              anwesenheit_USERNAME_off

# Voraussetzungen:
# nmap muss installiert sein (apt install nmap)

# -----------------------------------------------------------------------------------

# Anzupassende Werte
base=/root/homee_hostwatchdog
webhook_url='https://xxxxxxxxxxxxx.hom.ee/api/v2/webhook_trigger'
webhook_key='XXXXXXXXXXXXXXXXXXGTEMHKLIREKHUTXXXXXXXXXXXXXDQWEQQEXXXXXXXXXXXXX'

# -----------------------------------------------------------------------------------

# Interne Werte
statefile=${base}/statfiles/statfile
conffile=${base}/homee_hostwatchdog.conf
counter=0

if [ -e /var/run/homee_hostwatchdog ]; then
    echo "Es läuft noch ein Prozess"
    exit
else
    touch /var/run/homee_hostwatchdog
fi

# Check ob Statfiles Verzeichnis vorhanden
if [ -d "${base}/statfiles/" ]; then
    echo "OK:Verzeichnis existiert"
else
    mkdir "${base}/statfiles/"
    if [ $? -ne 0 ]; then
        echo "Fehler: Anlegen Verzeichnis ${base}/statfiles/"
        exit 1
        rm /var/run/homee_hostwatchdog
    fi
fi

# Check ob Config File vorhanden
if [ ! -e "$conffile" ]; then
    echo "Fehler: Konfigfile nicht vorhanden"
    exit 1
    rm /var/run/homee_hostwatchdog
fi

cat $conffile | egrep -v '^#' | while read users_entry; do
    username=`echo $users_entry | cut -d ',' -f 1`
    address=`echo $users_entry | cut -d ',' -f 2`
    echo "user:          $username"
    echo "address:       $address"

    # Statusfiles anlegen falls nicht vorhanden
    if [ ! -e ${statefile}.${username} ]; then
        touch  ${statefile}.${username}
    fi

    # Letzten Status ermitteln
    content=`cat ${statefile}.${username}`
    if [ "$content" == "on" ]; then
        last_state=on
    else
        last_state=off
    fi
    echo "last state:    $last_state"



     # Aktuellen Status ermitteln nmap
     echo -n "suche:         "
     while [ $counter -lt 60 ]; do
         nmap -Pn $address -p 62078 | grep '1 host up' > /dev/null 2>&1
         if [ $? -eq 0 ]; then
             current_state=on
             break
         else
             current_state=off
         fi
         let counter=counter+1
         echo -n "."
         sleep 2
     done
     if [ $current_state == "on" ]; then
         echo " :-)"
     elif [ $current_state == "off" ]; then
         echo " :-("
     fi
     echo "current state: $current_state"
     counter=0

    # Homee triggern und Status speichern
    if [ "$last_state" == "off" ] && [ "$current_state" == "off" ]; then
        echo "result:        stayed off"
        echo 'off' > ${statefile}.${username}
    elif [ "$last_state" == "on" ] && [ "$current_state" == "on" ]; then
        echo "result:        stayed on"
        echo 'on' > ${statefile}.${username}
    elif [ "$last_state" == "off" ] && [ "$current_state" == "on" ]; then
        echo "result:        swtched to on"
        echo 'on' > ${statefile}.${username}
        curl "${webhook_url}?webhooks_key={$webhook_key}&event=anwesenheit_${username}_on"
    elif [ "$last_state" == "on" ] && [ "$current_state" == "off" ]; then
        echo "result:        swtched to off"
        echo 'off' > ${statefile}.${username}
        curl "${webhook_url}?webhooks_key={$webhook_key}&event=anwesenheit_${username}_off"
    fi

    echo "----------"
done

rm /var/run/homee_hostwatchdog

Das Skript kann dann über diesen Crontab Eintrag minütlich laufen

* * * * * /root/homee_hostwatchdog/homee_hostwatchdog.sh > /dev/null 2>&1

Die Erkennung läuft über einen Port der auch bei schlafenden IPhones zumindest nach mehreren Versuchen antwortet. Ich habe es getestet mit IOS 10 und einem älteren Android 4.x. Das hier ist natürlich nur was für Leute mit etwas Linux und Netzwerk Erfahrung. Wenn man im Heimischen DHCP keine festen IP’s zuweist sollte man unbedingt mit dem Namen und nicht der IP arbeiten.

Bye
Marcus

4 „Gefällt mir“

Prima funktioniert!!! DAAANKE!

So mit einem IPhone 6+ läuft super…auch wenn es schläft , bekomme ich keine Off Meldung.
Beim IPhone 5 , bekomme ich nach ca. 5min eine Off Meldung.

Habe den Fehler beim IPhone meiner Frau gefunden… der Port über den abgefragt wird, auch wenn das IPhone schläft, ist derjenige , der für WLAN Sync verantwortlich ist. Der war ausgeschaltet.
Einfach an iTunes anschließen, WLANsync aktivieren. Danach hat es auch mit dem 5s funktionier.

@marjue
den Counter hast du extra etwas länger gewählt? Der Job wird alle Minute ausgeführt, und dann wird gesucht und bis 60 gezählt. Bei 60 angekommen, wird der Status auf Off gesetzt, sofern kein Gerät gefunden wird.
Nutzt du das ganze in Verbindung mit einer Alarmscharfstellung?

Die Verzögerung bis das Gerät wieder erkannt wird, ist zu lange , je nachdem zu welchem Zeitpunkt der Abfrage ich zuhause auftauche… hast du eine Idee ob man das noch beschleunigen kann?
Gruß Chris

Könnte man das Skript nich alle 10sekunden laufen lassen, über eine Schleife?

#!/bin/bash
for ((i=1; i<=10; i++))
do
echo “Alle 10Sekunden” &
sleep 10
done

Mit 2.9 gibt es ja jetzt viele tolle neue Möglichkeiten. So habe ich meine Alarmanlage jetzt stark vereinfachen können und die Aktivierung über den Wall-Plug als Umweg eliminieren können. Schalte die verschiedenen Alarm-Homeegramme nun direkt mit der FFB.

Fein wäre es jetzt, wenn man hier statt der FFB auf Geofencing setzen könnte, so wie oben schon mal beschrieben… Für mich las es sich allerdings so, als wäre das via IFTTT nicht wirklich zuverlässig. Könnt Ihr das nach wie vor bestätigen? Sonst würde ich das nämlich gerne umstellen. :wink:

Hallo

Ich habe die Schleife bewusst so lange gewählt. In der Nacht scheint das IPhone in einen noch tieferen Schlaf zu gehen. Möglicherweise bin ich aus Sicherheit etwas über das Ziel hinausgeschossen. Ich werde mal ein Log mit einbauen um die Zeiten wann das iPhone erkannt wird mit zu protokollieren. Ich kann aber sagen das 10s nicht reichen aus meiner Erfahrung heraus.

Die Schleife bricht beim Finden auch sofort ab. Problem ist nur wenn das erste Gerät in der Liste nicht gefunden wird weil die Person außer Haus ist und dann dauert es halt recht lange bis das zweite gefunden wird.

Ich sehe hier folgende Möglichkeiten …

  1. man installiert das Script mehrfach in unterschiedlichen Verzeichnissen mit jeweils nur einem Gerät in der Konfiguration.
  2. man baut es um so dass es die Prüfungen für alle Geräte parallel ausführt und zudem nicht mehr über Cron gestartet wird sondern in einer Endloschleife läuft.

Ich bevorzuge da Lösung 2 :slight_smile: … wenn ich Zeit habe baue ich es mal um … mit dem wait Befehl kann man scheinbar auf Hintergrundprozesse warten. Vielleicht kommst du ja aber auch dazu.

Übrigens danke für die Info dass es sich hier um den WLANSync Port handelt.

Ich nutze es übrigens nicht um einen Alarm aus zu schalten. Dafür ist die Erkennung über diese Methode zu träge denke ich. Mein Plan ist es das für die Heizung zu nutzen. Wenn man das schneller haben will führt glaube ich kein Weg an einem eigenen DHCP Server vorbei den man irgendwie überwacht.

Bye
Marcus

1 „Gefällt mir“

Erstmal TOP , dass du uns das Skript zur Verfügung gestellt hast! Danke dafür!!!

Vielleicht kommst ja mal dazu… Lösung zwei würde ich auch bevorzugen…

Was meintest Du hier mit “WebURL”? Das kann ich in Automagic nicht finden.
Ich habe “URL im Browser öffnen” probiert. Das ist die einzige Variante, die bei mir für Webhooks funktioniert. Allerdings ist blöd dabei, dass immer das Browser-Fenster auf geht.
Die Aktionen “Download URL” und “HTTP Request” funktionieren bei mir nicht. Im Log steht, dass die Aktion erfolgreich war, aber beim Homee kommt nichts an.

Moin @faeki83,

ich habe mich auch zuerst an der Geofencing-Variante mit IFTTT versucht - mäßig erfolgreich.
Nach allem was man im Netz zur Geolocation-Funktion von IFTTT unter Android liest, ist diese (zumindest aktuell) nicht zu gebrauchen. In meinem Fall hat es genau einmal funktioniert…

Alternativ habe ich dann die App EgiGeoZone ausprobiert.
Diese funktioniert bereits deutlich zuverlässiger als IFTTT und man kann ebenfalls Webhooks für das Betreten bzw. Verlassen eines Radius auslösen lassen.
In den Einstellungen der App kann man dann noch definieren, nicht die Google Play-Services zur Standort-Bestimmung zu nutzen, sondern ein alternatives Verfahren - “Pathsense”.

Diese Methode scheint vergleichsweise energiesparend und genau zu arbeiten.
Ein Radius lässt sich bis auf 50m genau definieren und die An- bzw. Abwesenheit wird bislang absolut zuverlässig innerhalb weniger Sekunden erkannt. Fehlalarme hatte ich noch keine und bin mit dieser Lösung top zufrieden :sunglasses::thumbsup:

Mich interessiert mal euer UseCase fuer das Geofencing.
Was bildet ihr damit ab?

Ich nutze es um zum Besipiel die Heizung bei Abwesenheit abzusenken oder verschiedene Beleuchtungen an und abzuschalten.

Klingt spannend. Das wäre was für das Android meiner Frau! Die regt sich eh immer schon auf, dass sie die Alarmanlage per Smartphone de-/aktivieren muss :wink: Die Variante mir der Devolo-FFB sind nämlich im Dauereinsatz leider gescheitert. Hat einfach nicht zuverlässig geklappt. Das geht mit der App besser… oder eben dann ggf. per Geofencing! :slight_smile:

Wenn ich das richtig gesehen habe, gibt es diese App aber nicht fürs iPhone oder?