Standortbestimmung für Android mit Tasker

im Verzeichnis „Webfront“ eine Datei mit Namen „android.php“ erstellen

<?
switch ($type) 
    { 
    case "info": 
    	$info=$_GET ['batt'];
	Setvalue(36565, "$info"); 
     break; 
    case "pos": 
	$standort=$_GET['latlon']; 
	Setvalue(13563, "$standort"); 
    break; 
    }
?>

Variable 13563 ist eine String-Variable

Nun zu Tasker:

Tasks erstellen (Bild „ips-loc“, „ips-var“ und ips-http")

Profil erstellen (Bild „ips-prof“)

Im folgenden Scipt

<?php

//Position in Karte schreiben
$pos= GetValue(13563 /*[Handy\Variablen\Position\POS]*/);

$lon = ltrim(stristr($pos, ','),",");
$lat = substr($pos, 6, 12);
$lat= stristr($pos, ',', true);
//-------------GoogleMaps abfragen ---------------------------------------------
$api = simplexml_load_file(utf8_encode("http://maps.google.com/maps/api/geocode/xml?address=$pos&sensor=false"));
$ort = $api->result->formatted_address;

$ort = preg_replace("/, Switzerland/", "", $ort);
SetValue(29972 /*[Handy\Variablen\Position\Standort]*/, $ort);

SetValue(40818 /*[Handy\Variablen\Position\longitude]*/, $lon);
SetValue(12801 /*[Handy\Variablen\Position\latitude]*/, $lat);

$var1 = '<img src="http://maps.google.com/maps/api/staticmap?center='.$pos.'&zoom=16&size=800x800&maptype=satellite&markers=icon:http://chart.apis.google.com/chart?chst=d_map_pin_icon%26chld=hotel%257C996600%7C'.$pos.'&sensor=false" />';
$var = '<img src="http://maps.google.com/maps/api/staticmap?center='.$pos.'&zoom=15&size=600x400&markers=icon:http://chart.apis.google.com/chart?chst=d_map_pin_icon%26chld=hotel%257C996600%7C'.$pos.'&sensor=true" />';
SetValue(22304 /*[Handy\Variablen\Position\visujuerggross]*/ , $var1);
SetValue(27517 /*[Handy\Variablen\Position\visujuerg]*/ , $var);


if (strpos($ort, 'Sigriswil') !== false)
{
IPS_sethidden(44406 /*[iWohnen\Seite Büro\Spalte a1\Anwesenheit\*]*/, true);
IPS_sethidden(19243 /*[iWohnen\Seite Büro\Spalte a1\Natel Jürg]*/, false);
}
else
{
IPS_sethidden(44406 /*[iWohnen\Seite Büro\Spalte a1\Anwesenheit\*]*/, false);
IPS_sethidden(19243 /*[iWohnen\Seite Büro\Spalte a1\Natel Jürg]*/, true);
}

?>

Variable 29972 = String -> Textbox
Var. 40818 & 12801 = String ohne Profil
Var. 22304 & 27517 = String mit Profil HTML

Wow … super!!! Muß ich bald testen. :smiley:

Ich hatte auch den Ansatz meine Location Data per HTTP Post an IPS zu senden.
Bis jetzt hatte mir aber immer die notwendige Andriod App gefehlt.

Um Batterie zu sparen wäre die Cell-ID (2G oder 3G Netz) für mich ausreichend.

Mein Ansatz für die Aktualisierung der Location Daten waren:
[i]Push Cell Informaton Settings:

  1. regulary, time based ===> defined by configurable number in seconds
  2. when CID has changed
    3a) known CID is entered (checkbox)
    3b) known CID will be left (checkbox)[/i]

Frage: Ist es sowas (Cell-ID) auch mit Tasker möglich???

P.S.: Wirklich super Vorlage. Dieser Ansatz wird viele Location Based Services für IPS möglich machen.

Hallo Jürg,
habe es gerade auch versucht und im Ordner Webfront die Datei android.php mit Deinem Inhalt angelegt. Tasker ist eingerichtet und sendet auch die Daten an android.php. Da kommt jedoch die Fehlermeldung von einer undefinierten Variable. Die String-Variable hatte ich aber vorher in IPS angelegt und in der android.php auch richtig eingetragen.

So sieht meine android.php aus:

<? 
switch ($type)  
    {  
//    case "info":  
//        $info=$_GET ['batt']; 
//    Setvalue(36565, "$info");  
//     break;  
    case "pos":  
    $standort=$_GET['latlon'];  
    Setvalue(47303, "$standort");  
    break;  
    } 
?>

Grüße, Jürgen

Versuch mal im HTTP Post-Task -> Content Type (dann auf die Lupe) -> application/x-www-form-urlenoded

Hallo,

habe den gleichen Fehler wie „immergut“. Der Versuch mit "Content Type … " schlägt leider bei mir fehl.

Gruß Proxima

Also ich würde erst mal die Anführungszeichen von der Variablen nehmen … dann sollte es klappen.

Also …

$standort=$_GET[‚latlon‘];
Setvalue(47303, „$standort“);

nach …

$standort=$_GET[‚latlon‘];
Setvalue(47303, $standort);

ändern.

Ich komm nicht mal bis dahin,
Tasker genau so eingestellt, aber es kommt nix an.

android.php:

<? 
switch ($type)  
    {  
   
    case "pos":  
    $standort=$_GET['latlon'];  
    Setvalue(55646, "$standort");  
    break;  
    } 
?>

Screenshot_2012-11-06-21-34-14.png

Hallo,

also ich habe im Tasker beim HTTP Post die Zeile: „type=pos“ gelöscht und nur noch "latlon= … " stehen lassen.

Im Skript „android.php“ habe ich die ganze SWITCH-Geschichte weg gelassen. Nur noch:

    $standort=$_GET['latlon'];
    Setvalue(59527, $standort);

Proxima

Hallo Proxima,
mit Deiner Methode funktioniert es bei mir auch. Schon mal ein erster Erfolg. Wäre allerdings schon gut, wenn man die case-Methode anwenden könnte, um weitere Tasks von Tasker auswerten zu können.

@muckel,
auf Deinem Foto sehe ich, dass du bei der IP-Adresse keinen Port angegeben hast (192.168.178.28:82)

Hat noch einer eine Idee, wie das mit der Case-Methode noch funktionieren könnte?

Grüße, Jürgen

Also im Prinzip braucht man nur den „HTTP Post“ Task und kann sich die beiden anderen sparen.

Minimalkonfiguration „HTTP Post“ Task:

latlon=%LOC

Die Tasker Systemvariablen (z.B. %LOC) können direkt verwendet werden und müssen nicht zuerst über „Variable set“ einer anderen Variable zugeordnet werden.

Minimalkonfiguration PHP-Seite auf IP-Symcon:

<?
$latlon = $_GET[‚latlon‘];
SetValue(12345, $latlon);
?>

Anschließend ein Profil anlegen um zu definieren wann/wo die Daten per HTTP Post gesendet werden sollen.

Nochmals vielen Dank an jbu !!!
Mit diesem Hinweis konnte ich in wenigen Minuten die von mir schon seit langem gewünsche Positionsbestimmung (Anwesend/Abwesend) umsetzten. Tasker hat mir hier die Lösung gebracht … und ich hatte schon begonnen mit Eclipse selbst ein Android App zu basteln. Mehr als Hello Word ist aber bis dto nicht geworden. Du hast mir viel Zeit gespart !!! :slight_smile: :slight_smile: :slight_smile:
:loveips:

ich hatte Probleme, ohne die Variable weg zu schreiben. Zudem war auch das Ergebniss nicht befriedigend, wenn der GPS Timeout unter 120 Sec war.

@mr_cg
Freut mich, mal jemandem einen Dienst erwiesen zu haben.

@immergut
der Port muss zwingend drin stehen

Die Basic-Authentifizierung ist es gewesen. Habt ihr das ohne laufen ?

Also ich hab nun stundenlang gesucht… Ohne Passwort scheint das nicht zu gehen…hat jemand eine Idee was man machen könnte?

Ja, soweit ich das gesehen habe wird SSL und HTTPS von Tasker nicht unterstützt.
Habe jedenfalls hierzu keine Option finden können.

[b]
Die Standortbestimmung mit Tasker funktioniert so was von genial.
Mit Tasker kann ich jetzt sehr gezielt IP-Symcon mitteilen ob ich Zuhause (anwesen/abwesend) bin oder nicht.
Natürlich können auch noch weitere interessante Standorte eingerichtet werden.

Hierzu muß ich ab sofort keinen Knopf mehr drücken sondern einfach nur mein Android Smartphone mit mir führen.
Was ohnehin der Fall ist.
[/b]

Mist, sowas habe ich mir schon gedacht, dann bringt die Standort Karte im Webfront ja nicht wirklich was… Wo ich wohne weiß ich ja :wink:

Du musst ja nur den Trigger ändern (z.b. Nach Zeit), dann kannst Du auch tracken wo Du gerade bist. Aber das geht auch so über die Google API ohne IPS. Den wahren Benefit in punkto Hausautomation sehe ich eigentlich nur in der Anwesenheit- oder Standorterkennung.

Eventuell mal mit Email versuchen…diese dann auswerten und eben die eine Variable füllen.

Mail geht glaub ich nicht automatisch, die musst du manuell senden. Versuchs doch per FTP, da gibts ja eine App mit Plug-in zu Tasker. Ich hatte das zuerst auch so gelöst.

Ja auch schon bemerkt :frowning:

MAN, immer diese Bastellösungen. Android nur im gerooteten zustand über x Ecken in der Lage Mails zu versenden.
SMS an mein Festnetz bekomm ich nicht ausgewertet…

Kannst du mir da ein paar Ansätze geben mit FTP ?

simpel, aber praktisch:

in der Datei „android.php“ folgender „Case“:

    case "voice": 
    	$stimme=$_GET ['text'];
	Setvalue(57059, "$stimme"); 

in Tasker im HTTP POST unter Data/File

type=voice
text=%VOICE

In IPS eine String-Variable (hier 57059) und ein Script mit Inhalt

$text = GetValue(57059 /*[Handy\Variablen\Speech\Text]*/);
if ($text == "aussen heizung ein")
IPS_RunScript(57843 /*[Küche\Skripte\Strahler-Timer 5 Min.]*/);

dieses bei Variablenaktualisierung 57059 ausführen lassen.

Ich hab zum pröbeln noch den Notifier drin in Tasker, der liefert die Befehle aufs Display.

Mit einem HTTP GET danach kann mann sich das Ergenis auch gleich vorlesen lassen.

Mit der Tasker APP Factory kann man das ganze als eigenständige APP exportieren und so auf mehreren Androids gebrauchen.