Prinzipiell geht’s mit EgiGeoZone Geofence
aber auch
10.04.2015 11:36:19*| Geofency*| Malformed data: Array
(
)
und $_POST scheint wirklich leer zu sein. Eigene Parameter werden aber auch nicht übergeben, obwohl ich sie an die URL gehängt habe.
Prinzipiell geht’s mit EgiGeoZone Geofence
aber auch
10.04.2015 11:36:19*| Geofency*| Malformed data: Array
(
)
und $_POST scheint wirklich leer zu sein. Eigene Parameter werden aber auch nicht übergeben, obwohl ich sie an die URL gehängt habe.
pass das Modul leicht an…
Gemacht, und geht schon mal für die APP Geofancy.
GUIDs, da habe ich noch keinen Plan, mal viel lesen.
Eigentlich sollte doch
http://....ipmagic.de/hook/geofency?test=12345
dazu führen, dass „test=12345“ bei Malformed… angezeigt wird. Oder wo ist mein Denkfehler?
Ja. Das Modul wertet nur POST Daten aus. Alles was ?.. ist, kommt als GET rein.
paresy
Hallo,
habe mal das Modul schnell zum testen umgestrickt für die App GEOFANCY.
<?
class Geofency extends IPSModule
{
public function __construct($InstanceID)
{
//Never delete this line!
parent::__construct($InstanceID);
//These lines are parsed on Symcon Startup or Instance creation
//You cannot use variables here. Just static values.
$this->RegisterPropertyString("Username", "");
$this->RegisterPropertyString("Password", "");
}
public function ApplyChanges()
{
//Never delete this line!
parent::ApplyChanges();
$sid = $this->RegisterScript("Hook", "Hook", "<? //Do not delete or modify.
include(IPS_GetKernelDirEx().\"scripts/__ipsmodule.inc.php\");
include(\"../modules/SymconMisc/Geofancy/module.php\");
(new Geofency(".$this->InstanceID."))->ProcessHookData();");
$this->RegisterHook("/hook/geofency", $sid);
}
private function RegisterHook($Hook, $TargetID)
{
$ids = IPS_GetInstanceListByModuleID("{015A6EB8-D6E5-4B93-B496-0D3F77AE9FE1}");
if(sizeof($ids) > 0) {
$hooks = json_decode(IPS_GetProperty($ids[0], "Hooks"), true);
$found = false;
foreach($hooks as $index => $hook) {
if($hook['Hook'] == "/hook/geofency") {
if($hook['TargetID'] == $TargetID)
return;
$hooks[$index]['TargetID'] = $TargetID;
$found = true;
}
}
if(!$found) {
$hooks[] = Array("Hook" => "/hook/geofency", "TargetID" => $TargetID);
}
IPS_SetProperty($ids[0], "Hooks", json_encode($hooks));
IPS_ApplyChanges($ids[0]);
}
}
/**
* This function will be available automatically after the module is imported with the module control.
* Using the custom prefix this function will be callable from PHP and JSON-RPC through:
*
* GEO_ProcessHookData($id);
*
*/
public function ProcessHookData()
{
//workaround for bug
if(!isset($_IPS))
global $_IPS;
if($_IPS['SENDER'] == "Execute") {
echo "This script cannot be used this way.";
return;
}
if(!isset($_POST['device']) || !isset($_POST['id']) || !isset($_POST['trigger'])) {
IPS_LogMessage("Geofancy", "Malformed data: ".print_r($_POST, true));
return;
}
$trigger=(($_POST['trigger']));
if ($trigger == "test") {
IPS_LogMessage("Geofancy", "Neue Test Daten: ".print_r($_POST, true));
return;
}
if ($trigger == "exit") {
$anwesend = 0;
}
if ($trigger == "enter") {
$anwesend = 1;
}
// if ($trigger != "test") {
IPS_LogMessage("Geofancy", "Neue Daten: ".print_r($_POST, true));
// }
/*
$deviceID = $this->CreateInstanceByIdent($this->InstanceID, $this->ReduceGUIDToIdent($_POST['device']), "Device");
SetValue($this->CreateVariableByIdent($deviceID, "Latitude", "Latitude", 2), floatval($_POST['latitude']));
SetValue($this->CreateVariableByIdent($deviceID, "Longitude", "Longitude", 2), floatval($_POST['longitude']));
SetValue($this->CreateVariableByIdent($deviceID, "Timestamp", "Timestamp", 1, "~UnixTimestamp"), intval(strtotime($_POST['date'])));
SetValue($this->CreateVariableByIdent($deviceID, $this->ReduceGUIDToIdent($_POST['id']), utf8_decode($_POST['name']), 0, "~Presence"), intval($_POST['entry']) > 0);
*/
$deviceID = $this->CreateInstanceByIdent($this->InstanceID, $this->ReduceGUIDToIdent($_POST['device']), "Device");
SetValue($this->CreateVariableByIdent($deviceID, "Latitude", "Latitude", 2), floatval($_POST['latitude']));
SetValue($this->CreateVariableByIdent($deviceID, "Longitude", "Longitude", 2), floatval($_POST['longitude']));
SetValue($this->CreateVariableByIdent($deviceID, "Timestamp", "Timestamp", 1, "~UnixTimestamp"), intval($_POST['timestamp']));
SetValue($this->CreateVariableByIdent($deviceID, $this->ReduceGUIDToIdent($_POST['id']), utf8_decode($_POST['id']), 0, "~Presence"), intval($anwesend) > 0);
}
private function ReduceGUIDToIdent($guid) {
return str_replace(Array("{", "-", "}"), "", $guid);
}
private function CreateCategoryByIdent($id, $ident, $name)
{
$cid = @IPS_GetObjectIDByIdent($ident, $id);
if($cid === false)
{
$cid = IPS_CreateCategory();
IPS_SetParent($cid, $id);
IPS_SetName($cid, $name);
IPS_SetIdent($cid, $ident);
}
return $cid;
}
private function CreateVariableByIdent($id, $ident, $name, $type, $profile = "")
{
$vid = @IPS_GetObjectIDByIdent($ident, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetIdent($vid, $ident);
if($profile != "")
IPS_SetVariableCustomProfile($vid, $profile);
}
return $vid;
}
private function CreateInstanceByIdent($id, $ident, $name, $moduleid = "{485D0419-BE97-4548-AA9C-C083EB82E61E}")
{
$iid = @IPS_GetObjectIDByIdent($ident, $id);
if($iid === false)
{
$iid = IPS_CreateInstance($moduleid);
IPS_SetParent($iid, $id);
IPS_SetName($iid, $name);
IPS_SetIdent($iid, $ident);
}
return $iid;
}
}
?>
Geht soweit, jetzt muss es mal in „schön“.
dann müsstest du das Modul doch nur auf GET und dein VAR’s abändern, und versuchen, oder ?
Bin mir da unsicher, würde es aber so probieren.
OT
Hm, der Radius bei Geofancy und Geohopper ist einfach zu gross,
Erkennug der Home Zone.
Muss schon einige 200 Meter vom Haus weg sein.
Ist aber kein Probelm von IPS !
Ansonsten klappt das, Versuch war es Wert.
Hallo Paresy,
welche iPhone-App verwendest Du konkret?
Es gibt im AppStore etwas das schreibt sich „Geofency Zeiterfassung“ - sieht aber nach den Screenshots anders aus…
Dann gibt es da etwas das schreibt sich „Geofancy“, sieht dann aber so aus wie das was Thomas gepostet hat…
Joachim
Geofency Zeiterfassung ist die richtige App
Nutze ich seit Ewigkeiten und ist das Geld wirklich wert.
paresy
Ich will mal ein kurzes Feedback geben.
Ich nutze das Modul mit Geofency auf 2 IOS Geräten. Frau und ich. Ich habe es die letzten 4-6 Wochen so weit getrieben, dass ich nicht nur die Anwesenheit damit simuliere sondern auch die Alarmanlage automatisiert an/ausschalte und muss sagen, dass Geofency mittlerweile zu 98 % zuverlässig arbeitet.
Die einzigen Verbesserungsvorschläge wären:
A) Es sollte ein kleinerer Radius Möglich sein.
B) Das Webhook funktioniert beim Verlassen/Betreten der Zonen zu Fuß zu unzuverlässig. Mit dem Auto 100%
Ich hab auch mal ne Frage: Läuft das mittlerweile auch in der Stable Windows Version? Hab nicht gesehen, dass wir im Linux-Testbereich sind. Tapatalk ist schuld Ich habe mir die App grad gekauft…
Baba, due PHP-MODULE sind noch Linux only
hm vielleicht sollte ich doch irgendwann mal auf linux umsteigen, wollte eigentlich warten bis linux stable ist, weil ich noch nicht soo fit in ips bin
Hallo Babba.
Bin mir sicher, dass die zwei Entwicklungsstränge in absehbarer Zeit wieder zusammen wachsen. Also am besten einfach abwarten.
Okay dann werde ich noch weiter warten
Hi,
hab grad mal die App auf dem iPhone installiert und im /webfront/user Verzeichnis 2 PHP Dateien angelegt welche jeweils eine bool Variable (ist anwesend) auf true, bzw. false setzt;
und das ganze unter Windows und ohne Modul, lüppt.
mfg
BerndJ
Cool, würdest du die Dateien zur Verfügung stellen?
Hi,
nicht Dein Ernst, oder?
<?
SetValueBoolean(57628 /*[Technik\Tracking\Geofency\Bernd at Home iP5S]*/, true);
?>
Den Inhalt der zweiten Datei brauch ich hoffentlich nicht kopieren, ein Tausch von true zu false reicht vollkommen aus.
Wichtig ist der Standort und der Name der Datei, denn der muss in Geofency eingetragen werden.
mfg
BerndJ
Hallo Bernd, hatte das irgendwie anders verstanden, hab mit dem /webfront/user/ Verzeichnis bisher noch nichts gemacht, bin noch nicht solange dabei. Das setzten der bool Variablen hätte ich natürlich auch so hinbekommen. trotzdem danke, jetzt klappts auch bei mir
Hallo an alle,
nur so zur Info:
Hab hier 3 iBeacons am Laufen und bildete mir ein: dass ist eine Art GPS im Hausbereich.
Momentan ist dem leider nicht so.
Ich habe allen 3 Beacons die jeweilige Position in der App beigebracht und hatte Hoffnung dass die zurück gemeldete Position in der App aus dem Abstand zu den jeweiligen Beacons errechnet wird.
Weit gefehlt, in IPS sehe ich nur die bei den Beacons hinterlegte Position.
Gibt Geofency dass nicht her?, oder wie soll in der Praxis die genaue Ortung funktionieren?
mfg
BerndJ