Sosumi - Find my iPhone

Damit die Zeit passt, sollte man noch in der class.sosumi.php die Zeitzone richtig einstellen.


date_default_timezone_set('Europe/Vienna');

Oder besser ganz auskommentieren.

Da bin ich heute sauber in stolpern gekommen als meine Zeiten in IPS nicht mehr korrekt liefen.

Standardzeitzone ist ja in der php.ini deklariert.

Wäre das möglich, dass jemand diese Sosumi-Geschichte ein wenig klarer für Dummy’s :confused: wie mich kommentiert?

Danke vielmals.

Zur Zeit sind wir eigentlich nur am testen ob diese Lösung aus Sicht des Akku Verbrauchs sinnvoll ist.

Derzeit fragt ein Script (in IP-Symcon) alle 5 Minuten den Standort des iPhones ab und schreibt die Koordinaten in eine MySQL DB.

Das funktioniert soweit problemlos.

Das ganze kann man jederzeit mit den vorhandenen Scripts nachbauen, wenn wir mal eine vernünftige Anwendung für diese Lösung haben dann macht eine vernünftige Installations Dokumentation Sinn, vorher meiner Meinung nach nicht.

Eigentlich ganz einfach.

Das iPhone meldet sich ja in gewissen Abständen bei den Appleservern. Die kannst Du über die iCloud-Dienste mit der genannten API abfragen. Wie genau und wie oft diese Daten sind kann ich im Moment nicht sagen aber lord_nibbler logged diese Daten gerade mit.

Abragen kann man diese Daten relativ einfach.

include("13277.ips.php"); // Sosumi API
$ssm = new Sosumi('dein_apple_account', 'das_apple_passwort');
$loc = $ssm->locate();
echo $loc['latitude'];
echo "
";
echo $loc['longitude'];
echo "
";
echo ($loc['timestamp']);
echo "
";

liefert Dir Längen und Breitengrad inkl. Timestamp der letzten Meldung

Mit der letzten Meldung bin ich mir aber nicht wirklich sicher.

Warten wir mal ab was das Logging von lord_nibbler aussagen wird.

Kann mir auch jemand erklären in welcher Form ich die

$location_info = $ssm->locate(<device number>);

device number angebe. Ist dies die UUID des i-Gerätes?

Hintergrund; auf einem Apple-Account können sich ja mehrer Geräte verstecken.

Bei mir minütlich. Wenn Lord_Nibbler dann eine kleine Doku schreibt, kann es ja im Skripte Bereich (oder Wiki) als fertiges Package gepostet werden,

Das ganze kann man jederzeit mit den vorhandenen Scripts nachbauen, wenn wir mal eine vernünftige Anwendung für diese Lösung haben dann macht eine vernünftige Installations Dokumentation Sinn, vorher meiner Meinung nach nicht.

Dann warte ich wohl besser darauf und freue mich auf positive Tests. :rolleyes:

Glaube das nicht, dass das die UDID ist:



  public function locate($device_num = 0, $max_wait = 300)
        {
            $start = time();

            // Loop until the device has been located...
            while(!$this->devices[$device_num]->latitude || !$this->devices[$device_num]->longitude)

Wenn Du mehrere hast, zähle doch mal 0,1,2…usw…vielleicht werden die einfach der Reihe nach gezählt?

Werde ich mal testen.

Da mein iPad-WiFi ausserhalb meines Hauses rumliegt sollte dies leicht zu erforschen sein.

Danke für den Hinweis.

Mein Akku war gestern Nachmittag um 17.00h 100%, heute morgen leer.
Polling jede Minute, alles über Wifi.

Das Verhalten von wupperi kann ich leider auch bestätigen.

Anscheinend wird bei einem Request der Seite das GPS im iPhone aktiviert was wiederrum das iPhone heute innerhalb von 6 Stunden aussaugte :confused:

Des Weiteren produziert die API eine Menge „Fatal Errors“, habe dazu die Klasse ein wenig angepasst um nicht IPS vollzumüllen. Nun wird das Skript nach 15 Sekunden (Kann man an die Klasse übergeben) mit einer Meldung nach IPS beendet.

Jetzt muss ich nur den optimalen Timer-Intervall testen um den An- und Abwesenheitsstatus für IPS nutzen zu können. Eingebunden wäre es schon nutzbar :slight_smile:

Und Du hattest Recht mit den DeviceID´s. 0,1,2,…

Ich hatte mal auf 5 mins Intervall gestellt. Über Nacht von 100 auf 75 Prozent. Ganz ok.

Ich mache es jetzt dynamsich.

Befinde ich mich innerhalb von 5km um meine Heimat dann alle 2 Minuten, bei größer 5km auf 15 Minuten. Muß mich mit den Parametern evtl. noch ein wenig spielen um die optimale Lösung zu bekommen.

Die Klasse würde genialerweise auch noch die Ladezustand und den Batterieladung anzeigen, aber irgendwo hackt es da noch ein wenig die diese beiden Werte erst aktualisiert werden wenn man eine Nachricht sendet.

Wäre eine saubere Lösung wenn man sagen könnte

[ul]
[li]iPhone lädt => Intervall 1 Minute[/li][li]iPhone lädt nicht => 10 Minunten.[/li][/ul]Mal sehen ob ich aus der Klasse noch was rausbekomme

An der Klasse habe ich auch schon gewerkelt. Aber dafür reichen meine PHP Kenntnisse nicht aus :slight_smile:

Wenn Du mehrere hast, zähle doch mal 0,1,2…usw…vielleicht werden die einfach der Reihe nach gezählt?

Ja fast, die Reihenfolge stimmt zwar nicht, aber wenn man z.b. 2 Geräte hat ist es 0 und 1.

Hier nochmal eine Möglichkeit Texnachrichten zu versenden:

$ssm->sendMessage('Testnachricht', 0, 2);

Die erste Zahl bedeutet:

0 = Nur eine Nachricht ohne Ton

1 = Nachricht mit Ton (Ton wird als Schleife abgespiellt !)

Die zweite Zahl bedeutet:

Das ist die Geräte Nummer, nur wichtig bei mehreren Geräten.

Gibt es eine Möglichkeit Umlaute zu versenden ?

Bei ÖÄÜ kommt ??? an…

Hier mal ein Script für Einsteiger:

<?
/* Anleitung:

Die Datei "class.sosumi.php" muss im IPS Verzeichniss unter Scripts kopiert sein!

Man braucht 3 String Variablen:

1 x mit dem Profil htmlbox (für Googlemaps)
2 x mit dem Profil string ( ob man daheim ist, 2te für Uhrzeit und Datum der GPS Abfrage
*/
// ********************* Hier deine Daten eintragen:

$username = "hier eintragen!";
$password = "hier eintragen!";
$gmaps = 42050  /*[gps\Find my iPhone 4s\iPhone 4S GMap]*/ ; //objektid von der stringvariable mit htmlbox profil !
$datumgps = 44055  /*[gps\Find my iPhone 4s\Letzt Ortung war am :]*/; //objektid von der stringvariable mit string profil !


//***************** Hier startet das Script nichts verändern !**************
    require 'class.sosumi.php';

    $ssm = new Sosumi($username, $password);
    $loc = $ssm->locate(2);
    //$ssm->sendMessage('ÖÄÜ', 0, 2);
 
//echo $loc['latitude'];
//echo "
";
//echo $loc['longitude'];
//echo "
";
//echo ($loc['timestamp']);
//echo "
";

//********************latitude und longitude zusammen fassen****************

$lo= $loc['latitude'];
$lo2= $loc['longitude'];
$loca= "$lo,$lo2";

//************************* Datum in deutsch um wandeln ********************

$akt=($loc['timestamp']);
$datum = substr ($akt, 0, 10);
//echo "$datum";
//echo "
";
$akt2 = explode('-', $datum);
$jahr=$akt2[0];
$monat=$akt2[1];
$tag=$akt2[2];

//print "$jahr";

$uhrz=substr ($akt, 11, 28);
//print "$uhrz";

//****************** In Variablen schreiben*********************************

$maps="http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=";

SetValueString($gmaps , "<iframe src=$maps$loca border=\"0\" frameborder=\"0\" style=\"top:0pt; bottom:0pt; left:0pt; right:0pt; width:100%; height:1000px;\"/></iframe>");

SetValueString($datumgps , " $uhrz , $tag.$monat.$jahr"   );

?>

Und hier ein Beispiel wie man dann per latitude und longitude etwas auslösen kann:

//************************Verarbeitung der Daten **************************

$wert1 = substr ($lo, 0, 7);
$wert2 = substr ($lo2, 0, 6);

//echo "$wert1";
//echo "
";
//echo "$wert2";

if (($wert1 == 45.8154) or ($wert1 == 45.8155) or ($wert1 == 45.8156) or ($wert1 == 45.8157) or ($wert1 == 45.8153) or ($wert1 == 45.8158))
{
if (($wert2 == 7.6441) or ($wert2 == 5.6442))
{
//echo "bin Da";
$ssm->sendMessage('Endlich Zuhause', 0, 2);
SetValue(48774  /*[gps\Find my iPhone 4s\Bin ich Zuhause ?]*/  , "ja");
}
}
else
{
$ssm->sendMessage('Mist immer noch unterwegs..', 0, 2);
SetValue(48774  /*[gps\Find my iPhone 4s\Bin ich Zuhause ?]*/  ,"nein");
}

@wgreipl, wie hast du die Entfernung ausgerechnet bzw. rausbekommen ?