Geofency mit Webhook

Ich denke die URL stimmt ueberhaupt nicht.

http://192.168.178.32/web/geofency/geo.php

Wo hast du den deine geo.php ?

192.168.178.32 ist deine interne IP-Adresse aber Rest stimmt wohl nicht.
Welche URL hast du in der APP ?

Da habe ich http://home.4ox.de/geofency/geo.php

Wenn ich das im Skript eintrage, kommt zumindest kein Fehler :slight_smile:

Wie sieht deine aktuelle geo.php aus ?
Hast du meine Eintrag uebernommen:

  if ( !isset($_GET["device"] ) )
    {
    if ( $debug ) IPSLogger_Dbg(__FILE__,"Kein Device angegeben");
    echo "Kein Device angegeben";
    return;
    }

dann nimm den mal raus.
Der testet ob ein DeviceName uebergeben wurde, also

http://home.4ox.de/geofency/geo.php?device=iPhone

Also Dein Test-Skript startet die passende geo.php und die sieht so aus:

<!DOCTYPE html>
<html>
<body>

<?php


  if ( isset( $_POST["date"] ) )     $date         =$_POST["date"] ;      else $date="";
  if ( isset( $_POST["name"] ) )     $locationName =$_POST["name"] ;      else $locationName="";
  if ( isset( $_POST["id"] ) )       $locationID   =$_POST["id"] ;        else $locationID="";
  if ( isset( $_POST["longitude"] ) )$longitude    =$_POST["longitude"] ; else $longitude="";
  if ( isset( $_POST["latitude"] ) ) $latitude     =$_POST["latitude"] ;  else $latitude="";
  if ( isset( $_POST["entry"] ) )    $isEntry      =$_POST["entry"] ;     else $isEntry="";

// Daten in die Variablen schreiben

    if ($isEntry)
        $out = date('d.m.Y H:i:s') ." entryDate: " . $date . ", entered at " . $locationName . "
";
        
       SetValueInteger('AnkunftDatumZeit',time());
       SetValueString('Latitude',$latitude);
       SetValueString('Longitude',$longitude);
       SetValueString('LocationID',$locationID);
       SetValueString('LocationName',$locationName);

    else
        $out = date('d.m.Y H:i:s') ." exitDate: " . $date . ", exited  at " . $locationName . "
";

       SetValueInteger('AbfahrtDatumZeit'),time());
       SetValueString('Latitude'),$latitude);
       SetValueString('Longitude',$longitude);
       SetValueString('LocationID',$locationID);
       SetValueString('LocationName',$locationName);

    echo $out;


// Logfile schreiben

    $filename = "geofency.log";   
    $datei = fopen($filename,"a+");
    fwrite($datei, $out . chr(13));
    fclose($datei);



// Example condition:
// Send http request if it's later than 8pm (20:00).
    $hour=substr($date, 8, 2);

    if ($hour > '20' && $isEntry) {
        echo "It’s time to eat <After Eight> and switch on lights.
";
        // Integrate your e.g. house automation system here ...
        // http_get("http://www.mypage.com/switchOnLights.html”);
    }
?>

Und was steht dann im LOG ?

Aktuell gar nix mehr, wenn ich das Test-Skript starte :frowning:

Du bist schon auf dem IPSymcon-Server oder auf einem Linux oä?
Dieses kann zum Schreiben in IPSymcon nicht funktionieren

SetValueString('Latitude'),$latitude);

Dein Script sollte im LOGFenster jede Menge Fehler liefern.
Du solltest mal alle „SetValue…“ ersetzen durch entsprechend zB
IPS_LogMessage(„GeoFency“,$latitude);
und dir es im Logfenster anssehen.

Das waere die minimalste Version

<?php

  if ( isset( $_POST["date"] ) )     $date         =$_POST["date"] ;      else $date="";
  if ( isset( $_POST["name"] ) )     $locationName =$_POST["name"] ;      else $locationName="";
  if ( isset( $_POST["id"] ) )       $locationID   =$_POST["id"] ;        else $locationID="";
  if ( isset( $_POST["longitude"] ) )$longitude    =$_POST["longitude"] ; else $longitude="";
  if ( isset( $_POST["latitude"] ) ) $latitude     =$_POST["latitude"] ;  else $latitude="";
  if ( isset( $_POST["entry"] ) )    $isEntry      =$_POST["entry"] ;     else $isEntry="";

  $out = date('d.m.Y H:i:s') ." entryDate: " . $date . ", entered at " . $locationName . "
";
  
  $filename = "geofency.log";   
  $datei = fopen($filename,"a+");
  fwrite($datei, $out . chr(13));
  fclose($datei);

?>

Der SetValue oben war ein Schreibfehler. Danke fürs finden :slight_smile:

Ich habe das Skript nochmal umgebaut. Jetzt kommt zumindest das „AbfahrtDatumZeit“ in der Variablen an.
Den Rest muss ich jetzt suchen. Log ist eine gute Idee.

<!DOCTYPE html>
<html>
<body>

<?php


  if ( isset( $_POST["date"] ) )     $date         =$_POST["date"] ;      else $date="";
  if ( isset( $_POST["name"] ) )     $locationName =$_POST["name"] ;      else $locationName="";
  if ( isset( $_POST["id"] ) )       $locationID   =$_POST["id"] ;        else $locationID="";
  if ( isset( $_POST["longitude"] ) )$longitude    =$_POST["longitude"] ; else $longitude="";
  if ( isset( $_POST["latitude"] ) ) $latitude     =$_POST["latitude"] ;  else $latitude="";
  if ( isset( $_POST["entry"] ) )    $isEntry      =$_POST["entry"] ;     else $isEntry="";

// Daten in die Variablen schreiben

    if ($isEntry)
       $out = date('d.m.Y H:i:s') ." entryDate: " . $date . ", entered at " . $locationName . "
";
    else
       $out = date('d.m.Y H:i:s') ." exitDate: " . $date . ", exited  at " . $locationName . "
";

    echo $out;


// Logfile schreiben

    $filename = "geofency.log";   
    $datei = fopen($filename,"a+");
    fwrite($datei, $out . chr(13));
    fclose($datei);



// Example condition:
// Send http request if it's later than 8pm (20:00).
    $hour=substr($date, 8, 2);

    if ($hour > '20' && $isEntry) {
        echo "It’s time to eat <After Eight> and switch on lights.
";
        // Integrate your e.g. house automation system here ...
        // http_get("http://www.mypage.com/switchOnLights.html”);
    }


  if ($isEntry)
    {
    SetValueInteger('AnkunftDatumZeit',time());
    SetValueString('Latitude',$latitude);
    SetValueString('Longitude',$longitude);
    SetValueString('LocationID',$locationID);
    SetValueString('LocationName',$locationName);
    }
  else
    {
    SetValueInteger('AbfahrtDatumZeit',time());
    SetValueString('Latitude',$latitude);
    SetValueString('Longitude',$longitude);
    SetValueString('LocationID',$locationID);
    SetValueString('LocationName',$locationName);
    }


?>

</body>
</html>

Wirklich ?
Normalweise braucht der Befehl

SetValueInteger('AbfahrtDatumZeit',time());

Die ID der Variablen. also eher so

SetValueInteger(12345,time());

Stimmt. Das war halt früher mal anders :slight_smile: Da wurden die Variablen noch so angesprochen.

Also wenn ich es so eintrage, kommt jeweils im log und in den Variablen die „1“ an. Anscheinend kommt da nix an. Ich teste das dann morgen nochmal live …

  if ( isset( $_POST["date"] ) )     $date         =$_POST["date"] ;      else $date="1";
  if ( isset( $_POST["name"] ) )     $locationName =$_POST["name"] ;      else $locationName="1";
  if ( isset( $_POST["id"] ) )       $locationID   =$_POST["id"] ;        else $locationID="1";
  if ( isset( $_POST["longitude"] ) )$longitude    =$_POST["longitude"] ; else $longitude="1";
  if ( isset( $_POST["latitude"] ) ) $latitude     =$_POST["latitude"] ;  else $latitude="1";
  if ( isset( $_POST["entry"] ) )    $isEntry      =$_POST["entry"] ;     else $isEntry="1";

Ich hoffe du kommst jetzt weiter. Bin noch ein bisschen da.
Hab eben gerade Feierabend gehabt.
Bei Fragen einfach schreiben :wink:

Vielen Dank für Deine Hilfe. Ich habe gerade Urlaub und endlich mal wieder Zeit für IPS und neue Ideen :slight_smile:
Morgen geht es weiter denn so um 6 Uhr ist die Nacht zu Ende.

Viele Dinge sind schon umgesetzt aber irgendwie gibt es ja immer mal wieder neue Dinge, die unbedingt realisiert werden müssen. Die Anwesenheitskontrolle ist ja schon super lange ein Thema ohne eine wirklich perfekte Lösung.

Ich berichte morgen, ob es jetzt klappt :slight_smile:

Happy Night, Frank

Hallo 1007, hast Du mir bitte noch ein paar weitere Tipps/Hinweise zur Konfiguration mit deinem Script? Mir ist das leider auch zu hoch :wink:

Ich kann das geofency.php problemlos vom Device aus ansprechen, nur taucht im LOG geofency.txt nichts auf, auch kein Leereintrag.

-Was muss ich selbst anlegen ? Variablen ?
-Was im File anpassen ?

Vielen Dank schon mal !

Du hast keine Fehlermeldung im Meldungsfenster ?
Wenn du keine IPSLibrary hast solltest du alle

 IPSLogger_Dbg(__FILE__,$out);

mal durch

IPS_Logmessage('Geofency',$out);

ersetzen.
Das Log wird aber angelegt ?
Im Ordner …\Logs\Geofency\ .
Gestern hab ich meine Version dahin erweitert , dass Kategorien und Variablen automatisch angelegt werden wenn
ich in der App neue Punkte anlege.

Doch, ich die IPSLibrary installiert (2.50.6) und nutze diese auch.

Nein, im IPSLogger finde ich die Daten nicht - evtl. wirds da nicht angelegt ?

Vielleicht liegt es am Logginlevel , aber im Meldungsfenster sollte es auch sein.
Das Script faengt ja so an

	IPSUtils_Include ("IPSLogger.inc.php","IPSLibrary::app::core::IPSLogger");
  
  $debug = true;

  if ( !isset($_GET["device"] ) )
    {
    if ( $debug ) IPSLogger_Dbg(__FILE__,"Kein Device angegeben");
    echo "Kein Device angegeben";
    return;
    }

  if ( !isset( $_POST["date"] ) )
    {
    if ( $debug ) IPSLogger_Dbg(__FILE__,"Verbindungstest");
    echo "Verbindungstest";
    return;
    }

Bei einem Verbindungstest in der App solltest du die Meldung zurueckbekommen „Verbindungstest“ oder ?

Ja, Verbindungstest wird rückgemeldet.