Geofency mit Webhook

Ich habe das für die ersten Gehversuche so gemacht:
im Webfront/User Directory ein Unteverzeichnis angelegt, dort ein script rein und das wird dann wie folgt aufgerufen.
http://deineipsdomain.de/user/geofency/?devID=myIphone

das script wertet dann die POST Variablen von geofency aus und schreibt was in IPS rein. Das war’s schon.
Wg. der Sicherheit - könntest du ja noch irgendeine pass variable einbauen oder per authentifzierung arbeiten.

Aber Vorischt: das Passwort ging in diesem Fall unverschlüsselt über’s Netz geht :frowning:

korrekt - außer du hast bei IPS ein Zertifikat drin mit HTTPS

Genau - leider akzeptiert Geofency keine selbst ausgestellten. Oder kann man das evtl. Importieren?

Gesendet von meinem iPhone mit Tapatalk

soweit ich weiß nicht - gibt aber m.E. schlimmeres du kannst ja noch den http header überprüfen - ob alles passt etc.

Echte Zertifikate bekommt ihr bei psw.net für 15€ im Jahr. Die gehen mit fast allen mobilen Geräten.

Ich nutze die schon seit Ewigkeiten für meinen Exchange.

Vielleicht hilft euch das ja weiter bei eurem Zertifikateproblem.

@wgreipl: Danke für die Info, das klingt echt interessant :).

Werde es mir mal die Weihnachtstage über anschauen :).

Hier mal mein Script für Geofency, unterstützt mehrere Devices und Orte.
Anwesenheitsvariablen für die Orte und devices der Werte werden in IPS automatisch angelegt.

  1. Ordner erstellen:
    webfront/user/geofency

  2. index.php erstellen (code unten)

  3. configuration der index.php anpassen

  4. Gefency Orte Anlegen und Webhook setzen auf: http://deinedomain/user/geofency/?device=IphoneHubert
    Kennwort und User setzen für auth (siehe configuration im SCript)
    Über den device Parameter können Standorte für mehrere Geräte übermittelt werden.
    Leider übermittelt Geofency derzeit keinen eindeutigen Identifier des Gerätes mit.

  5. fertig.


<?php
  /* Geofency IPS Script für IP-Symcon 2013 by stele99
  Script nimmt webhooks von der Iphone App Geofency entgegen und erzeugt ein Logfile und oder die Lokationsvariablen in IPS */
  
  $CONF["logfile"]            = "./geofency.log";        // Pfad zum schreiben von LogFiles  
  $CONF["AUTH_USER"]          = "meinuser";          // User für BASIC Authentifizierung
  $CONF["AUTH_PW"]            = "123456";            // PWD für o.g. User
  $CONF["ScriptID"]           = 58228;                   // Script ID oder auch andere OBjektID unter der die Variablen erzeugt werden.
  $CONF["CreateLocationVars"] = true;                    // erzeuge Varialbe unterhalb des Scripts mit Lokationsdaten für jedes Device und Lokation
  $CONF["AllowedDevices"]     = Array("IphoneHubert");  // List of allowed Devices
  
  
  $testmode = (@$_GET["test"] == "1")? true : false;
  
  //Prüfen, ob Authentifizierung
  if(!empty($CONF["AUTH_USER"])){
    if (empty($_SERVER['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="Geofency Submit"');
        header('HTTP/1.0 401 Unauthorized');
        echo '<h1>Not Authorized</h2>';
        die;
    } elseif( ($_SERVER['PHP_AUTH_USER'] == $CONF["AUTH_USER"]) && 
              ($_SERVER['PHP_AUTH_PW']   == $CONF["AUTH_PW"]) ) {
            // Alles passt - nichts weiter tun.
    } else {
        header('WWW-Authenticate: Basic realm="Geofency Submit"');
        header('HTTP/1.0 401 Unauthorized');
        echo '<h1>Not Authorized</h2>';
        die;
    }
  }
  

  // Ein paar Prüfungen 
  if((!stristr($_SERVER["HTTP_USER_AGENT"],"Geofency")) && (!$testmode) ){
      header("Status: 403"); 
      die("WRONG CLIENT");
  }
  // Check if Device is sent and correct
  if(!$testmode){  
      if (isset($_GET["device"])) {
        $t_device = $_GET["device"];
      } else {
        header("Status: 403");
        die("No Device given");
      }
  } else {
    $t_device = "Test";
  }
  
  // Check Allowed Device
  if(!in_array($t_device, $CONF["AllowedDevices"]) && ($t_device != "Test")){
      header("Status: 403"); 
      die("Device Not Allowed");
  }

  if($testmode){
    $t_date       = "2013-12-04T12:14:37Z"; 
    $t_entry      = 0;
    $t_location   = "Test Location";  
    $t_locationID = "5C780537-21E6-41CB-ABFE-5A260AAD4BB3";
    $t_long       = 1.1111 ;
    $t_lat        = 2.2222 ;
  } else {
    $t_date       = @$_POST["date"];
    $t_entry      = (@$_POST["entry"] == "1");
    $t_location   = @$_POST["name"];
    $t_locationID = @$_POST["id"];
    $t_long       = @$_POST["longitude"];
    $t_lat        = @$_POST["latitude"];
  }

  // IPS Array schreiben
  if($CONF["CreateLocationVars"] && (!empty($t_location))){
      $id = CreateVariableByName($CONF["ScriptID"],$t_device." - ".utf8_decode($t_location) ,0);
      setValue($id, $t_entry);
  }
  // Create Log String
  $log_entry = ($t_entry)? 1 : 2;
  $log = date('Y-m-d H:i:s') . ", ActionDate: ".$t_date.", Device: ".$t_device.", Location: ". $t_location . ", LocationID: ".$t_locationID.", Entry: ".$t_entry.", Longitude: ".$t_long.", Latitude: ".$t_lat."
";
  if(!empty($CONF["logfile"]))file_put_contents($CONF["logfile"], $log, FILE_APPEND);
  echo "SUCCESS";


	/* CreateVariableByName -------------------------------------------------------------------------
		id = Wo soll sie hängen
		name = Name der Variablen
		type:  0: boolean
				 1: integer
				 2: float
				 3: string
		profil: Variablenprofi
	*/
	function CreateVariableByName($id, $name, $type, $profile = "")
	{
		# type: 0=boolean, 1 = integer, 2 = float, 3 = string;
	    global $IPS_SELF;
	    $vid = @IPS_GetVariableIDByName($name, $id);
	    if($vid === false)
	    {
	        $vid = IPS_CreateVariable($type);
	        IPS_SetParent($vid, $id);
	        IPS_SetName($vid, $name);
	        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
	        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
	    }
	    return $vid;
	}


?>

Bekomms leider nicht ans Laufen…

  1. ist das hier nicht ein „/“ zuviel vor dem „?device“ ?

[QUOTE=Stele99;212154] http://deinedomain/user/geofency/?device=IphoneHubert

2)Fehlermeldung kommt:

Warning: Cannot modify header information - headers already sent by (output started at D:\IP-Symcon\webfront\geofency\index.php:1) in D:\IP-Symcon\webfront\geofency\index.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at D:\IP-Symcon\webfront\geofency\index.php:1) in D:\IP-Symcon\webfront\geofency\index.php on line 19

Nein das passt so, weil hinter dem slash automatisch vom webserver index.php angehangen wird.
Du kannst es auch so aufrufen:
http://deinedomain/user/geofency/index.php?device=IphoneHubert

Das Liegt daran, dass irgendwo schon im Script eine Ausgabe erfolgt ist.
Liegt meistens daran, dass Du beim Kopieren und Einfügen vor dem ersten <?php noch eine Leerzeile oder ein Leerzeichne hast. Versuche das mal zu ändern und zu speichern. Das erste in der Datei muss <?php sein.

Wieder was gelernt, vielen Dank.

Jetzt läuft das.

Hallo
Toll !
Wer automatische Updates hat , besser weglassen.
Nach automatischen Updates sind alle Einstellungen weg.
Im iStore gibt es auch eine eine Warnung
****please skip this version… bla bla bla

Gesendet von meinem iPad mit Tapatalk HD

Hier die Originalmessage

Abhilfe ist aber vom Programmierer unterwegs:

Tion: Submitted a GEOFENCY hot fix release with an expedited review request. Your tracked data gets fully recovered with this update. So sorry!
Quelle: Twitter vor 5h

Also nur noch eine Frage der Zeit…:slight_smile:

Gute News !
Habs bemerkt als ich an Stelle wo WLAN war , und die App hat sich automatisch aktualisiert.
Nachdem ich diese „Zone“ verlassen habe kam „nichts“ .

Hatte meine Finger auch bereits auf „Alles aktualisieren“, was ich eigentlich blind mache.

Irgendwie hatte ich doch einen Schutzengel.

Ein Update ist verfuegbar, die alten Daten sind wieder da:)

Hallo,
ich habe ein „unschönes“ Problem:
Geofency eingerichtet, script unter user/geofency usw…
Bei geofency im Testmodus (Verbindung testen) schreibt er mir alle Daten schön ins logfile und IPS wertet sie einwandfrei aus.
Wenn ich mich nun bewege kommt zwar beim Erreichen eines Ortes die die Umschaltung in geofency, das Log auf dem iPhone wird einwandfrei geschrieben, aber er sendet keine Daten an den IPS-Rechner.
Muss ich ausser den Einstellungen unter Datenschutz auf dem Telefon noch irgendwas freigeben?
Es funktioniert im WLAN und auch bei 3G mit dem Test-Button auf dem Telefon, aber nicht wenn es die Orte erreicht.

Vielleicht hat noch jemand einen Tip, bevor ich hier alles neu installiere und mich schwarzärgere:mad:…

Viele Grüße und einen schönen Start in die neue Woche.:slight_smile:

Portweiterleitung eingerichtet?!

Hallo, danke für die schnelle Reaktion.
Der Zugriff von aussen auf den IPS-Rechner funktioniert, aber nur wenn ich bei geofency des Verbindung testen Button drücke…Damit schliesse ich die Portweiterleitung aus.
Ich vermute, dass geofency irgendein Problem hat, wenn es im Hintergrund auf dem Telefon läuft (5s, 7.0.4).
Zugrif auf Ort und auf die Datenverbindung ist freigeschaltet, Hintergrundaktualisierung ebenfalls.
Muss ich am Telefon noch was einstellen/freigeben?

Gruß
Thifi:)

Aber Du hast einen Port angegeben und deine Dny- oder NoIP…etc Adresse?! Weil Du meintest Intern funzt es und nur Extern nicht!