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.
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.
Ordner erstellen:
webfront/user/geofency
index.php erstellen (code unten)
configuration der index.php anpassen
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.
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;
}
?>
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
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.
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
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
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“ .
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.
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?