Personen bezogene Anwesenheitserkennung ( Geofency ) für Smartha

Da dies der erste Eintrag in Flows, leite ich hiermit das Spiel wer hat die Coolste Funktion und das Sinnvollste Tutorial für Smartha ein, also ein Wettbewerb wer nimmt die Herausforderung an ;). Das ganze stimmen wir hier ab, den wir sind Smartha :wink:.

UPDATE den man lernt immer noch dazu :wink: ( ein Paar kleine Änderungen dank des Tips von @mscheffler ) !!!

Ok da ich leider keine Möglichkeiten habe gewinne zu verteilen, fällt das leider weg, wobei der Preis ist 3 Fragen die ich nach besten wissen und gewissen beantworte ;).
Und wenn der Gewinner nicht von mir 3 Probleme gelöst haben will. Dann bekommt er von mir ein MacMenü aber nicht ein einfaches nein MAXI !!! ;).

Nein Spass beiseite:
Ich habe gestern versucht eine Geofency Lösung über Smartha mit einfachsten Mitteln zu lösen, und das Ergebnis war sehr interessant mit enormen Anwendungsmöglichkeiten.

  1. Geofency direkt in Smartha mit Auslöser über node-blue
  2. Das ganze nicht nur Anwesend nicht anwesend sondern Personen bezogen.
  3. Das ganze ist über die EasySmarthome VPN Lösung Passwort Geschütz.
  4. Keine Cloud zwischen Lösung sondern direkt mit Smartha verbunden.

Ich habe dazu Geofancy für iPhone benutzt, aber ähnliche apps gibts auch für Android.

Benötigt wird:
Natürlich Smartha
cloud connect von Easy Smarthome CloudMatic
Und eine Geofancy App Geofency für iPhone( ich habe hier nur eine iOS version verwendet die sind aber alle ähnlich nur was die übergaben angeht könnten unterschiede sein ich werde auch erklären wie man das feststellen kann). Es gehen aber für die Erkennung selbst auch kostenlose Versionen das ist euch überlassen.

Lange vorrede die wahrscheinlich keiner liesst und es wird nur das flow geladen ;). Fangen wir an:
bild1

Das erste ist eine http-in node mit einen Server auf Port 8002 und für die url ich habe /geofency verwendet.

!!! Update !!!
Dieser muss anschliessend nicht über die Cloudmatic Oberfläche freigestellt werden wie ich ursprünglich dachte, dies ist bereits bei smarta durch öffnen der http-in node geschen bzw. da VPN besteht ja ständig zugriff auf die Ports. Danke noch einmal für die info @mscheffler.
!!! Update !!!

Anschließend kommen die Nodes-Template und http-response. Im Template habe ich lediglich ein OK ins Payload geschrieben. Bei http-response den Port 8002 eingestellt.

bild3

Das waren die Vorbereitungen. Dieses Beispiel beinhaltet nur eine Person Allerdings ist das script so aufgebaut das es beliebig viele sein können.

Zu erstellen ist Pro Person eine Bool variable hier im Beispiel Presence_Michael.

Zusätzlich eine weitere Variable die ich Presence_Data dies ist eine Array Variable, in der die Letzte Aktivität mit allen Daten gespeichert wird. Ich hatte vor diese auch im Beispiel zu verwenden allerdings wird das hier doch gerade grösser als ich dachte ;). Wenn Interesse besteht kann ja noch ein weiters Tutorial machen.

Jetzt kommen wir zur Funktion’s node :


/************ eintragen der daten oder einfach erweitern ************/ 
$user[0]["deviceID"] ="########-#####-#####-#####-#########"; // User1 Device ID
$user[0]["variable"] ="Presence_Michael";                     // User1 Anwesenheits variable
/************ Zu ändern und User hinzufügen ************/ 

/*   Aktions Informationen      */
$array[0]=$message['payload']['entry'];                 // Eintritt oder Verlassen der Zone mit 1 und 0
$array[1]=$message['payload']['date'];                  // Datum und Uhrzeit der Aktion

/*   Geräte Informationen      */
$array[2]=$message['payload']['device'];                // Device ID des iOS gerätes
$array[3]=$message['payload']['motion'];                // Aktion ob in Bewegung Autofahren Laufen Radfahren usw.
$array[4]=$message['payload']['currentLatitude'];       // Aktuelle GPS Koordinaten Latidude
$array[5]=$message['payload']['currentLongitude'];      // Aktuelle GPS Koordinaten Longitude

/*   Zonen Informationen      */
$array[6]=$message['payload']['id'];                    // Identifikaton der Zone
$array[7]=$message['payload']['name'];                  // Name der Zone 
$array[8]=$message['payload']['address'];               // Addresse der Zone

/*   Zonen Konfiguration      */
$array[9]=$message['payload']['latitude'];              // GPS Koordinaten Latidude der Zone
$array[10]=$message['payload']['longitude'];            // GPS Koordinaten Longitude der Zone
$array[11]=$message['payload']['radius'];

/*   Weitere Aktions methode WLAN      */
$array[12]=$message['payload']['wifiBSSID'];            // WIFI MAC Addresse
$array[13]=$message['payload']['wifiSSID'];             // WIFI SSID

/*   Weitere Aktions methode Bluetooth      */
$array[14]=$message['payload']['beaconUUID'];           // Beacon UUID 
$array[15]=$message['payload']['major'];                // Beacon MAJOR
$array[16]=$message['payload']['minor'];                // Beacon MINOR



for($i=0;$i<= sizeof($user);$i++){
    if($array[2] == $user[$i]["deviceID"] && $array[0] == "1"){
        $hg->setValue(0, -1, $user[$i]["variable"], "true");
        $message['event'] ="Zone ".$array[7]." betreten";
        $message['payload']="Sie haben die Zone ".$array[7]." um ".$array[1]." betreten.";
    }elseif($array[2] == $user[$i]["deviceID"] && $array[0] == "0"){
        $hg->setValue(0, -1, $user[$i]["variable"], "false");
        $message['event'] ="Zone ".$array[7]." verlassen";
        $message['payload']="Sie haben die Zone ".$array[7]." um ".$array[1]." verlassen.";
    }
}
$hg->setValue(0, -1, "Presence_Data", $array); // Letzte Aktivität mit allen Daten
return $message;

Da das script zum Grossteil alles automatisch macht. muss nur die deviceID und variable, für die jeweiligen Benutzer eingetragen werden. Ich hoffe es steht im code alles ausführlich genug drin wenn nicht einfach fragen :). Zusätzlch wird eine für die Cloudmatic Push erstellte Information zurückgegeben. In diese node müsst Ihr lediglich den API-Key eintragen und den Rest leer lassen.

So jetzt für die die kein iOS und damit acuh die Geofancy app nicht haben.
Wer eine kennt für Android, die gut ist kann ja ein Kommentar hinterlassen bei Gelegenheit schau ich sie mir an, und werde das Tutorial anpassen. Allerdings könnt Ihr auch ein Debug hinter die Server node setzt, und euch das Ergebnis anschauen, Ihr seht sofort was im script geändert werden muss um es auf eine beliebige app anzuwenden.

bild%204

So das wars ich wünsche euch viel Spass damit.
Und für alle die doch meine scherzhafte :vulcan_salute: Herrausforderung doch angenommen haben ( es fehlt eindeutig ein weisser Fehdehandschuh bei den Emoticon ), mögen die Spiele beginnen und der Beste bzw. die Beste gewinnen :smiling_imp:.

Gruß
Michael
geofency.json (5,0 KB)

2 „Gefällt mir“

Hey @mlandherr,

netter Flow :grin:
Die Einstellungen mit den Netzwerkgeräten unter cloudmatic.de kann man sich allerdings sparen, die braucht man eigentlich nur für den Reverse Proxy auf der CCU. Wichtig ist nur, dass die http-in Node auf 0.0.0.0 “hört” :wink:

– Micha

Interessant. Wie zuverlässig und schnell funktioniert es?
Ich möchte beim Türöffnen sofort das Licht und Radio einschalten.

Ich habe es mit ping realisert. Beim Öffnen der Haustür setze ich grundsätzlich auf “anwesend”, bei schließen warte ich 15 Minuten, sende einen ping und prüfe, ob ich im Netz bin. Mit Smartphone Android funktioniert das ganz gut. Hier sind flow und JSON file. Mit Variable Automation kann ich den Mechanismus deaktivieren (falls Reinigungsdame im Haus ist).

Anwesenheitserkennung

Anwesenheit.json (5,6 KB)

Gruß, Henning

1 „Gefällt mir“

Hallo @Henning,
Das geht schneller als beim Tür öffnen da du ja den Radius angibst. Das heisst wenn du angenommen von der Firma (einen Radius Firma 5km angibst) losfährst 20 min nach Hause brauchst, und beim Verlassne des Radius die Heizung Hochfahren lässt, ist es warm wenn du Zuhause ankommst ;).

Also in deinem fall sagen wir einen Radius 100-200 Meter von zu Hause ( bedenke immer eine Toleranz bei GPS ) ist das Radio und Licht an, wenn du vor der Haustür stehst ;). Und selbstverständlich auch umgekehrt, ich habe es so das wenn ich den Radius Zuhause verlasse wird die Tür abgeschlossen, wenn ich es mal vergessen sollte ;). Zusätzlich könntest du dir eine Push Nachricht machen Fenster sind Offen.
Es gibt viele Möglichkeiten :wink:.

Gruß
Michael