tag:blogger.com,1999:blog-2260874069248450762024-03-14T18:07:56.560+01:00Tasker Skripte & TutorialsSkripte und Tutorials für die Android App TaskerAnonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.comBlogger42125tag:blogger.com,1999:blog-226087406924845076.post-85805960985558092662012-08-27T20:03:00.002+02:002012-08-27T20:03:42.254+02:00Tasker Unterforum bei Android-Hilfe.deDa ich in letzter Zeit immer mehr Kommentare und Fragen bekomme, aber leider eher weniger Zeit habe diese auch zu beantworten hier mal ein Link zu einem sehr guten Tasker Forum auf Android-Hilfe.de<br />
<br />
<a href="http://www.android-hilfe.de/tasker/">http://www.android-hilfe.de/tasker/</a>
<br />
<br />
Bei Fragen wendet euch sehr gerne auch dort hin, da es bei mir ein paar Tage fauern kann bis ich alle Kommentare beantwortet habe. Ich werde natürlich trotzdem noch versuchen hier gestellte Fragen zu beantworten.<br />
<br />
Grüße<br />
DanielAnonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com9tag:blogger.com,1999:blog-226087406924845076.post-17024052389163024012012-06-11T22:32:00.001+02:002012-06-11T22:32:31.775+02:00[Profil]KraftstoffverbrauchHeute möchte ich meine kleine Kraftstoffverbrauch-Szene vorstellen. Nach Eingabe von gefahrenen Kilometern und verbrauchtem Kraftstoff, wird der Durchschnittsverbrauch in l/100 km ausgegeben und die Daten werden inkl. Datum in einer .csv Datei abgespeichert. Gibt man also nach jedem Tanken die gefahrenen Kilometer und die getankte Spritmenge ein, kann man über die .csv Datei seine Verbrauchsstatistik recht gut verfolgen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxLs7AQQvdHtu-DcQzxXo83AsImig17JIUcDAmSrHA4I76b2zJrMz1Nm5EzQnkrACSiFAZ_OO2aikLwUxC8_OhG_JgzZr0mmRBNeZEUWHuQ9GBp52XHldmHKKG8uBGsjo8ZHjuHaHFB0/s1600/2012-06-11_21-43-43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxLs7AQQvdHtu-DcQzxXo83AsImig17JIUcDAmSrHA4I76b2zJrMz1Nm5EzQnkrACSiFAZ_OO2aikLwUxC8_OhG_JgzZr0mmRBNeZEUWHuQ9GBp52XHldmHKKG8uBGsjo8ZHjuHaHFB0/s320/2012-06-11_21-43-43.png" width="192" /></a></div>
<br />
<a name='more'></a>Als erstes erstellen wir eine neue Szene "Benzin" (im Reiter Scenes auf + klicken) mit folgenden Elementen:<br />
<br />
<ul>
<li><b>Text</b></li>
<ul>
<li><b>Text: Verbrauch</b></li>
<li><b>Text Size: 22</b></li>
<li><b>Position: Centre</b></li>
</ul>
<li><b>Text</b></li>
<ul>
<li><b>Text: Benzin</b></li>
<li><b>Text Size: 20</b></li>
<li><b>Position: Right</b></li>
</ul>
<li><b>Text</b></li>
<ul>
<li><b>Text: Strecke</b></li>
<li><b>Text Size: 20</b></li>
<li><b>Position: Right</b></li>
</ul>
<li><b>TextEdit</b></li>
<ul>
<li><b>Name: TEliter</b></li>
<li><b>Text: %Benzin</b></li>
<li><b>Text Size: 16</b></li>
<li><b>Position: Centre</b></li>
<li><b>Background/Colour: #FFFAFAFA</b></li>
</ul>
<li><b>TextEdit</b></li>
<ul>
<li><b>Name: TEstrecke</b></li>
<li><b>Text: %Strecke</b></li>
<li><b>Text Size: 16</b></li>
<li><b>Position: Centre</b></li>
<li><b>Backfround/Colour: #FFFAFAFA</b></li>
</ul>
<li><b>Button</b></li>
<ul>
<li><b>Name: Bsave</b></li>
<li><b>Label: Speichern</b></li>
<li><b>Label Size: 16</b></li>
<li><b>Position: Centre</b></li>
</ul>
<li><b>Button</b></li>
<ul>
<li><b>Name: Blog</b></li>
<li><b>Label: Log</b></li>
<li><b>Label Size: 16</b></li>
<li><b>Position: Centre</b></li>
</ul>
</ul>
Nun schließen wir die Szene und Tasker damit die Szene gespeichert und alle Elemente angelegt werden. Danach öffnen wir sie wieder. Nun können wir die Aktionen der einzelnen Elemente bearbeiten:<br />
<br />
<ul>
<li><b>TEliter: Text Changed</b></li>
<ol>
<li><b>Variable -> Variable Set</b></li>
<ul>
<li><b>Name: %Benzin</b></li>
<li><b>To: %new_val</b></li>
</ul>
</ol>
<li><b>TEstrecke: Text Changed</b></li>
<ol>
<li><b>Variable -> Variable Set</b></li>
<ul>
<li><b>Name: %Strecke</b></li>
<li><b>To: %new_val</b></li>
</ul>
</ol>
<li><b>Bsave: Tap</b></li>
<ol>
<li><b>Variable -> Variable Set</b></li>
<ul>
<li><b>Name: %Verbrauch</b></li>
<li><b>To: %Benzin/%Strecke*100</b></li>
<li><b>Do Math: Yes</b></li>
</ul>
<li><b>File -> Write File</b></li>
<ul>
<li><b>File: My Documents/Verbrauch.csv</b></li>
<li><b>Text: %DATE;%Strecke km;%Benzin l</b></li>
<li><b>Append: Yes</b></li>
</ul>
<li><b>Alert -> Popup</b></li>
<ul>
<li><b>Title: Verbrauch:</b></li>
<li><b>Text: %Verbrauch l/100 km</b></li>
<li><b>Timeout (Seconds): 5</b></li>
</ul>
</ol>
<li><b>Blog: Tap</b></li>
<ol>
<li><b>File -> Open File</b></li>
<ul>
<li><b>File: My Documents/Verbrauch.csv</b></li>
</ul>
</ol>
</ul>
Die TextChanged Ereignisse werden genau dann ausgeführt wenn eine Eingabe an dem jeweiligen TextEdit abgeschlossen wird. Der eingegebene Text wird dabei in der internen Variablen %new_val abgespeichert. Da es sich hierbei um eine lokale Variable handelt (alles klein geschrieben) ist sie auch nur in diesem TextEdit bekannt, das heißt also eine Kollision mit dem %new_val eines anderen TextEdit ist nich möglich.<br />
Der Button "Bsave" errechnet nun den Verbrauch (Do Math nicht vergessen) und speichert %Strecke und %Benzin zusammen mit dem aktuellen Datum in einer Datei ab. Durch "Append" wird eine vorhandene Datei nicht ersetzt, sondern der neue Text hinten dran geschrieben. Die Systemvariable "%DATUM" beinhaltet das aktuelle Datum in lesbarer Form. %Verbrauch schreibe ich nicht in die Datei, da es sich jederzeit über Strecke und Benzin errechnen lässt und somit eine unnötige Information zur späteren Weiterverarbeitung in Excel darstellt. Wer will kann %Verbrauch natürlich einfach noch hinten dran hängen.<br />
Zum Schluss wird in einem Popup noch der errechnete Verbrauch kurz angezeigt.<br />
<br />
Nun brauchen wir nur noch einen Task um die Szene zu öffnen. Dazu schließen wir die Szene und wechseln in den Tasks Reiter um einen neuen Task namens "BenzinScene" zu erstellen:<br />
<br />
<ul>
<li><b>Task: BenzinScene</b></li>
<ol>
<li><b>Scene -> Create Scene</b></li>
<ul>
<li><b>Name: Benzin</b></li>
<li><b>Continue Task After Error: Yes</b></li>
</ul>
<li><b>Scene -> Show Scene</b></li>
<ul>
<li><b>Name: Benzin</b></li>
<li><b>Display As: Dialog, Dim Behind</b></li>
<li><b>Show Exit Button: No</b></li>
<li><b>Continue Task Immediately: No</b></li>
</ul>
<li><b>Scene -> Destroy Scene</b></li>
<ul>
<li><b>Name: Benzin</b></li>
</ul>
</ol>
</ul>
<br />
Über "Create Scene" wird unsere Szene erstellt, hierbei sollte "Continue Task After Error" angeklickt sein, sollte die Szene noch existieren, also nicht zerstört wurden sein, kann "Create Scene" nicht ausgeführt werden, ist "Continue Task After Error" nicht ausgewählt wird der Task daraufhin beendet. Mit "Show Scene" zeigen wir die Szene auf dem Bildschirm. Der Typ sollte dabei auf Dialog stehen, dieser ist immer im Vordergrund und lässt sich über die Zurück-Taste vom Android schließen, deswegen brauchen wir auch keinen Exit-Button. "Continue Task Immediately" muss abgewählt sein, nun wird der Task erst nach schließen der Szene fortgesetzt und die letzte Aktion "Destroy Scene" ausgeführt.<br />
<br />
Jetzt kann Tasker geschlossen werden und ein "Task"-Widget im Android erstellt werden. Diesem weißen wir dann den Task "BenzinScene" zu. Nach klicken auf das Widget öffnet sich Szene "Benzin" und wir können unsere Eingaben starten.<br />
<br />
Viel Spaß!Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com28tag:blogger.com,1999:blog-226087406924845076.post-51249108393043071022012-06-10T23:53:00.003+02:002012-06-11T00:00:46.981+02:00[Tutorial]Einführung in SzenenTasker bietet nun schon sein geraumer Zeit ein neues Feature namens "Szenen". Mit Szenen lassen sich Oberflächen erstellen um Benutzereingaben abzufragen oder diverse Informationen anzuzeigen. Im Folgenden möchte ich nun eine kleine Einführung für geben. Dabei soll eine Szene erstellt werden mit der sich die Medienlautstärke anpassen lässt.<br />
<br />
<a name='more'></a><br />
Dafür wählen wir als erstes den Reiter "Scenes" aus und drücken auf "+". In dem folgenden Fenster können wir der Szene einen Namen geben, zBsp "Level". Nach der Bestätigung sehen wir ein leeres Fenster mit einem Rahmen vor uns. Dieser stellt die Größe der Szene dar und kann einfach mit dem FInger vergrößert werden. Um nun ein Element zu platzieren müssen wir zu erst auf die Lupe rechts unten klicken, die Szene wird daraufhin auf den kompletten Bildschirm vergrößert. Mit einem Klick auf "+" können nun verschiedene Elemente hinzugefügt werden:<br />
<ul>
<li><b>Button</b> - Ein typischer Button, man kann den Ereignissen "Tap" (drücken) und "Long Tap" (langes drücken) Aktionen zuordnen.</li>
<li><b>Doodle</b> - Birgt die Möglichkeit ein Bild zu malen. Neben den Ereignissen "Tap" und "long Tap" besitzt es noch "Stroke" (streichen), hierbei kann auf ein Fingerwischen über das Doodle reagiert werden. Allerdings ist es mir noch nicht gelungen dies umzusetzen.</li>
<li><b>Image</b> - Wie Doodle nur dass hier schon vorhandenes Bild ausgewählt werden kann. </li>
<li><b>Map</b> - Bietet die Möglichkeit eine Google Map einzubinden. Es können Zielkoordinaten angegeben werden. Außerdem können die Layer "Satellite" und "Traffic" aktiviert werden. Als Ereignisse stehen wieder "Tap" und "Long Tap" zur Verfügung</li>
<li><b>Menu</b> - Ein Menü mit einer festen oder variablen Mengen an Auswahlmöglichkeiten. Die Möglichkeiten können manuell vergeben oder dynamisch einem Array zugewiesen werden. Einem Klick auf einen Eintrag kann eine Aktion zugewiesen werden. Außerdem stehen wieder "Tap" und "Long Tap" zur Verfügung.</li>
<li><b>Oval/Rectangle </b>- Erstellt ein Rechteck bzw. eine Ellipse. Wie bei Image stehen hier "Tap", "Long Tap" und "Stroke" zur Verfügung.</li>
<li><b>Slider - </b>Verändert den Wert einer Variablen über einen Schieberegler. Über das Ereignis "Value Selected" lassen sich Aktionen an die vollendete Eingabe knüpfen.</li>
<li><b>Text</b> - Zeigt einen statischen Text oder den Inhalt einer Variablen an. Besitzt auch wieder "Tap", "Long Tap" und "Stroke"</li>
</ul>
Für unsere Lautstärke-Einstellung benötigen wir zu erst einen Slider, welchen wir mit "+" hinzufügen.<br />
Nun öffnet sich sein Eigenschaftsfenster. Name und Orientation können bleiben wie sie sind. Die Min Value sollte auf 0 stehen und die Max Value auf die maximal Mögliche Lautstärke, bei mir wäre das 7. Um die eigene maximale Lautstärke herauszufinden könnt ihr entweder die Schritte von minimal zur maximal Zählen oder euch den Inhalt der Variablen %VOL bei maximal Lautstärke ansehen.<br />
Damit Tasker nun unser Element kennt muss die Szene gespeichert werden. Dazu über den Haken links unten die Szene schließen und auch Tasker schließen, dies ist bei Szenen hin und wieder nötig, da Tasker wohl erst beim schließen alle EIgenschaften der neuen Szene umsetzt. nun können wir Tasker wieder öffnen und in die Szene springen.<br />
Das EInstellungsfenster des Sliders öffnen wir indem wir auf den SLider drücken.<br />
Nun wechseln wir zum Reiter "Value Selected". Hier müssen nun die nötigen Aktionen eingetragen werden:<br />
<ol>
<li><span style="color: orange;"><b>Scene -> Test Element</b></span></li>
<ul>
<li><span style="color: orange;"><b>Scene Name: Level</b></span></li>
<li><span style="color: orange;"><b>Element: Slider</b></span></li>
<li><span style="color: orange;"><b>Test: Value</b></span></li>
<li><span style="color: orange;"><b>Store Result In: %VOLtemp</b></span></li>
</ul>
<li><span style="color: orange;"><b>Audio -> Ringer Volume</b></span></li>
</ol>
<ul><ul>
<li><span style="color: orange;"><b>Level: %VOLtemp (über den Doppelpfeil ändert sich das Feld)</b></span></li>
<li><span style="color: orange;"><b>Display: No</b></span></li>
<li><span style="color: orange;"><b>Sound: Yes</b></span></li>
</ul>
</ul>
<br />
Nun sind unsere Aktionen fertig und wir können sie schließen.<br />
Eventuell muss nun noch Größe oder Position des Sliders angepasst werden. Um ihn zu vergrößern reicht es den Rahmen mit dem Finger auseinander zu ziehen. Soll ein Element verschoben werden muss in der unteren Leiste auf den Teddy-Button geklickt und im sich öffnenden Menü "Move" ausgewählt werden.<br />
Mit dem grünen Haken schließen wir nun die Szene und wechseln in den Reiter "Tasks".<br />
<br />
Jetzt muss ein neuer Task erstellt werden um die Szene aufzurufen. Mit "+" fügen wir den neuen Task hinzu und nennen ihn zBsp "LevelScene". Wir benötigen folgende Aktionen:<br />
<ol>
<li><b><span style="color: orange;">Scene -> Create Scene</span></b></li>
<ul>
<li><b><span style="color: orange;">Name: Level</span></b></li>
</ul>
<li><b><span style="color: orange;">Scene -> Show Scene</span></b></li>
<ul>
<li><b><span style="color: orange;">Name: Level (oder wie eure heißt)</span></b></li>
<li><b><span style="color: orange;">Display as: Dialog</span></b></li>
<li><b><span style="color: orange;">Show Exit Button: Yes</span></b></li>
<li><b><span style="color: orange;">Continue Task Immediately: No</span></b></li>
</ul>
<li><b><span style="color: orange;">Scene -> Destroy Scene</span></b></li>
<ul>
<li><b><span style="color: orange;">Name: Level</span></b></li>
</ul>
</ol>
Mit "Create Scene" wird die Szene im Hintergrund erstellt. Nun kann die Szene mit "Show Scene" angezeigt werden. Dabei stehen verschiedene Anzeigemöglichkeiten zur Auswahl. Für die meisten Fälle sollte "Dialog" das richtige sein. Über den Exit Button wird die Szene beendet und zerstört, dazu gleich mehr. "Continue Task Immediately" gibt an ob die nachfolgenden Aktionen sofort ausgeführt werden sollen (Yes) oder erst nachdem die Szene geschlossen wurde (No). Wir wählen hier "No" da wir nach dem schließen der Szene sie gleich noch zerstören wollen. Dies geschieht über "Destroy Scene". Beim zerstören werden alle temporären Daten der Szene gelöscht, dies empfiehlt sich nach jedem Schließen der Szene. Eine nicht zerstörte Szene kann auch nicht neu über "Create Scene" erstellt werden.<br />
<br />
Um unser Werk nun zu bewundern einfach auf den Play Button unten rechts drücken.<br />
Nun sollte sich die Szene öffnen und sich die Lautstärke über den Slider anpassen lassen. Eine Veränderung sollte durch einen Ton angezeigt werden. Sollte etwas noch nicht funktionieren, bitte mal Tasker schließen und wieder öffnen, damit die letzten Änderungen der Szene übernommen werden.<br />
<br />
Zum Schluss noch eine Auswahl der Aktionen aus "Scene":<br />
<ul>
<li><b>Create Scene</b> - Erstellt eine Szene, zeigt sie aber noch nicht an</li>
<li><b>Destroy Scene</b> - Zerstört eine Szene, d.h. löscht alle temporären Dateien</li>
<li><b>Hide Scene</b> - versteckt eine Szene</li>
<li><b>Show Scene</b> - zeigt eine bereits erstellte Szene</li>
<li><b>Test Scene</b> - Überprüft ob die Szene erstellt wurde und angezeigt wird. Möglichkeiten: "uncreated", "hidden", "visible"</li>
<li><b>Element Position</b> - Verändert die Position eines angegebenen Elementes in einer bestimmten Szene. Genauso funktionierten Element Size, Element Text usw.</li>
<li><b>Element Visibility</b> -Ändert die Sichtbarkeit eines Elementes</li>
<li><b>Test Element</b> - Speichert diverse Eigenschaften eines Elementes in einer Variablen, zBsp "Value" (den Wert), "Position"</li>
</ul>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com20tag:blogger.com,1999:blog-226087406924845076.post-53800117595127548262012-01-05T00:07:00.000+01:002012-01-05T00:08:02.111+01:00[Profil] Zeiterfassung mit Widget und DateiexportNach längerer Pause komme ich nun endlich dazu mein neuestes Profil zu posten. Hierbei handelt es sich um ein Profil zur Arbeitszeiterfassung, zBsp für nach Arbeitszeit abgerechnete Außeneinsätze. Ziel dieses Widgets ist es die Arbeitseit über mehrere Tage mit wenig Aufwand zu protokollieren um die Arbeitszeit später ordentlich Abrechnen zu können. Dazu sollen natürlich auch die gemachten Pausen berücksichtigt werden.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-m-77b1AUL8s/TwTM85R8PQI/AAAAAAAABoY/VmNYrx50YQE/s1600/zeiterfassung.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="100" src="http://3.bp.blogspot.com/-m-77b1AUL8s/TwTM85R8PQI/AAAAAAAABoY/VmNYrx50YQE/s320/zeiterfassung.png" width="320" /></a></div>
<br />
<br />
<a name='more'></a>Wie in dem Bild zu erkennen ist, besitzt das Widget 2 Buttons. Der linke Button startet und stoppt die Zeiterfassung. Mit dem rechten Button können die Pausen (es können natürlich mehrere Pausen eingelegt werden) gestartet und beendet werden. Wird die Zeiterfassung gestoppt, errechnet Tasker die gearbeiteten Stunden und zieht automatisch die Pausenzeit ab.<br />
In eine Textdatei werden alle Information mit Datum hinterlegt damit die Zeiten auch nach mehreren Tagen bequem nachvollzogen werden können.<br />
<br />
Als erstes muss mit der App Zoom das Widget erstellt werden, ich habe es Zeiterfassung genannt. Es werden folgende Elemente benötigt:<br />
<br />
<ul>
<li>1. Button: Name: Button_Start</li>
<ul>
<li>Label: Start</li>
<li>Click Action: Tasker Task Zeit Ende</li>
</ul>
<li>2. Button: Name: Button_Pause</li>
<ul>
<li>Label: Pause</li>
<li>Click Action: Tasker Task Zeit Pause</li>
</ul>
<li>1. Textfeld: Name: Start</li>
<li>2. Textfeld: Name: Pause</li>
<ul>
<li>Click Action. Tasker Task Zeit Pause Change</li>
</ul>
<li>3. Textfeld: Name: Ende</li>
<li>4. Textfeld: Name: Zeit</li>
<ul>
<li>Click Action: Tasker Task Zeit Summe</li>
</ul>
</ul>
Die oben aufgeführten Textfelder sollen nur die Uhrzeiten bzw. Pausen- und Gesamtzeit beinhalten. Die Beschriftungen, als "Start:" "Ende:" etc. sollten mit weiteren Textfeldern erstellt werden.<br />
<br />
Als nächstes müssen die Buttons für das Beenden der Pause und der Zeiterfassung analog zu den ersten beiden Buttons hinzugefügt werden. Als Name bietet sich "Button_Ende" und "Button_PauseEnde" die verknüpften Tasks sollten "Zeit Ende" & "Zeit Pause Ende" sein.<br />
<br />
Die Buttons werden nun genau über den schon vorhandenen Buttons platziert, so dass diese vollständig verdeckt sind. Ist dies geschehen müssen diese 2 Buttons ausgeblendet werden. Dazu einfach den jeweiligen Button für ca. 2 Sekunden berühren, im sich öffnenden Popup dann auf "Invisible" klicken. Nun sollte der Button rot eingefärbt sein. Das fertige Widget könnte nun ungefähr so aussehen:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-g5g6GcFUvJg/TwTRLyI6bII/AAAAAAAABok/jQZ--_GOgM8/s1600/zeiterfassung2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="97" src="http://2.bp.blogspot.com/-g5g6GcFUvJg/TwTRLyI6bII/AAAAAAAABok/jQZ--_GOgM8/s320/zeiterfassung2.png" width="320" /></a></div>
<br />
Wenn dem so ist, kann das Widget nun auf dem Homescreen hinzugefügt werden. Nun können wir mit Tasker auf die einzelnen Textfelder zugreifen und somit die Zeiten anzeigen.<br />
<br />
In Tasker müssen wir nun noch die erforderlichen Tasks erstellen:<br />
<br />
<span style="color: orange;"><b>Task 1: Zeit Start</b></span><br />
<br />
<ol>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Start</b></span></li>
<li><span style="color: orange;"><b>To: %TIMES</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Start</b></span></li>
<li><span style="color: orange;"><b>Text: %TIME Uhr</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %StartH</b></span></li>
<li><span style="color: orange;"><b>To: %TIME</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Ende</b></span></li>
<li><span style="color: orange;"><b>Text: --</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Pause</b></span></li>
<li><span style="color: orange;"><b>Text: --</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Zeit</b></span></li>
<li><span style="color: orange;"><b>Text: --</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Visibility</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Button_Stop</b></span></li>
<li><span style="color: orange;"><b>Set: Yes</b></span></li>
</ul>
</ol>
<span style="color: orange;"><b></b></span><br />
<div>
<span style="color: orange;"><b><span style="color: orange;"><b><br /></b></span></b></span></div>
<span style="color: orange;"><b>
Task 2: Zeit Pause:</b></span><br />
<br />
<ol>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %PStart</b></span></li>
<li><span style="color: orange;"><b>To: %TIMES</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Visibility</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Button_PauseEnde</b></span></li>
</ul>
</ol>
<span style="color: orange;"><b></b></span><br />
<div>
<span style="color: orange;"><b><span style="color: orange;"><b><br /></b></span></b></span></div>
<span style="color: orange;"><b>
Task 3: Zeit Pause Ende:</b></span><br />
<br />
<ol>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Pause</b></span></li>
<li><span style="color: orange;"><b>To: %TIMES - %PStart + %Pause*60</b></span></li>
<li><span style="color: orange;"><b>Do Maths: Yes</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Pause</b></span></li>
<li><span style="color: orange;"><b>To: %Pause * 60</b></span></li>
<li><span style="color: orange;"><b>Do Maths: Yes</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Pause</b></span></li>
<li><span style="color: orange;"><b>Text: %Pause min</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Visibility</b></span></li>
<ul>
<li><span style="color: orange;"><b>Zeiterfassung.w / Button_PauseEnde</b></span></li>
<li><span style="color: orange;"><b>Set: No</b></span></li>
</ul>
</ol>
<span style="color: orange;"><b></b></span><br />
<div>
<span style="color: orange;"><b><span style="color: orange;"><b><br /></b></span></b></span></div>
<span style="color: orange;"><b>
Task 4: Zeit Ende:</b></span><br />
<br />
<ol>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Ende</b></span></li>
<li><span style="color: orange;"><b>Text: %TIME Uhr</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Zeit</b></span></li>
<li><span style="color: orange;"><b>To: %TIMES - %Start - %Pause*60</b></span></li>
<li><span style="color: orange;"><b>Do Maths: yes</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Zeit</b></span></li>
<li><span style="color: orange;"><b>To: %Zeit/60/60</b></span></li>
<li><span style="color: orange;"><b>DoMaths: Yes</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Zeit</b></span></li>
<li><span style="color: orange;"><b>Text: %Zeit h</b></span></li>
</ul>
<li><span style="color: orange;"><b>File -> Write File</b></span></li>
<ul>
<li><span style="color: orange;"><b>File: Zeiten.txt</b></span></li>
<li><span style="color: orange;"><b>Text: %DATE: %StartH - %TIME, Pause: %Pause min, Gesamt: %Zeit h</b></span></li>
<li><span style="color: orange;"><b>Append: Yes</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Pause</b></span></li>
<li><span style="color: orange;"><b>To: 0</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Visibility</b></span></li>
<ul>
<li><span style="color: orange;"><b>Zeiterfassung.w / Button_Stop</b></span></li>
<li><span style="color: orange;"><b>Set: No</b></span></li>
</ul>
</ol>
Falls noch nicht geschehen, müssen die Tasks nun den Buttons in Zoom zugeordnet werden. Die Zeiterfassung kann nun beginnen. Bevor der Button Ende gedrückt wird muss auch die eventuell noch laufende Pause beendet werden, da ich einen solchen Fall nicht berücksichtigt habe.<br />
<br />
Als kleines Schmankerl hier noch 2 Zusatztasks. Mit Task 5 lässt sich die gespeicherte Pausenzeit ändern, falls man mal vergessen hat den Button zu drücken. Task 6 zählt alle in Zeiten.txt gespeicherten Arbeitszeiten zusammen und gibt die Summe in einem Popup aus, praktisch wenn man zBsp wissen möchte, wie lange man die Woche schon gearbeitet hat.<br />
<br />
<span style="color: orange;"><b>Task 4: Zeit Pause Change</b></span><br />
<br />
<ol>
<li><span style="color: orange;"><b>Variable -> Variable Query:</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %Pause</b></span></li>
<li><span style="color: orange;"><b>Label: Pause in Minuten</b></span></li>
<li><span style="color: orange;"><b>Input Type: Numeric / Decimal</b></span></li>
<li><span style="color: orange;"><b>Default: %Pause</b></span></li>
</ul>
<li><span style="color: orange;"><b>Zoom -> Element Text</b></span></li>
<ul>
<li><span style="color: orange;"><b>Element: Zeiterfassung.w / Pause</b></span></li>
<li><span style="color: orange;"><b>Text: %Pause min</b></span></li>
</ul>
</ol>
<span style="color: orange;"><b></b></span><br />
<div>
<span style="color: orange;"><b><span style="color: orange;"><b><br /></b></span></b></span></div>
<span style="color: orange;"><b>
Task 5: Zeit Summe</b></span><br />
<br />
<ol>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %summe</b></span></li>
<li><span style="color: orange;"><b>To: 0</b></span></li>
</ul>
<li><span style="color: orange;"><b>File -> Read Line</b></span></li>
<ul>
<li><span style="color: orange;"><b>File: Zeiten.txt</b></span></li>
<li><span style="color: orange;"><b>To Var: &line</b></span></li>
</ul>
<li><span style="color: orange;"><b>Task -> If %line !~ EOF</b></span></li>
<li><span style="color: orange;"><b>Variable -> Variable Split</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %line</b></span></li>
<li><span style="color: orange;"><b>Splitter: Gesamt:</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Split</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %line2</b></span></li>
<li><span style="color: orange;"><b>Splitter: h</b></span></li>
</ul>
<li><span style="color: orange;"><b>Variable -> Variable Set</b></span></li>
<ul>
<li><span style="color: orange;"><b>Name: %summe</b></span></li>
<li><span style="color: orange;"><b>To: %summe + %line21</b></span></li>
<li><span style="color: orange;"><b>Do Maths: Yes</b></span></li>
</ul>
<li><span style="color: orange;"><b>Task -> GoTo</b></span></li>
<ul>
<li><span style="color: orange;"><b>Type: Action Number</b></span></li>
<li><span style="color: orange;"><b>Number: 2</b></span></li>
</ul>
<li><span style="color: orange;"><b>Task -> End If</b></span></li>
<li><span style="color: orange;"><b>Alert -> Popup</b></span></li>
<ul>
<li><span style="color: orange;"><b>Text: Gesamt: %summe h</b></span></li>
</ul>
</ol>
So das wars schon. Viel Spaß :)<br />
<div>
<br /></div>
<div>
Falls Fragen auftauchen einfach einen Kommentar abgeben....</div>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com10tag:blogger.com,1999:blog-226087406924845076.post-20143575914623538942011-10-05T20:18:00.000+02:002011-10-07T19:23:58.956+02:00[Tutorial] Neue Funktionen: Array, For-Schleife usw. erklärtSeit kurzem gibt es die neue v1.1.1 von Tasker. Diese neue Version bringt eine Reihe von sehr nützlichen Neuerungen mit die ich nun kurz Vorstellen und da wo es nötig ist, auch erklären möchte.<br />
<br />
Fangen wir mit einem Überblick über die wesentlichsten Neuerungen an:<br />
<br />
<ul>
<li>lokale & globale Variablen</li>
<li>Else Befehl</li>
<li>Arrays</li>
<li>For Schleifen</li>
<li>%MTRACK Variable - beinhaltet aktuellen Titel</li>
<li>GoTo Sprungfunktion</li>
<li>Cell Near: Merkt sich die letzten Zellen</li>
</ul>
<div>
Auf einige Neuerungen möchte ich nun noch genauer eingehen, da nicht jeder sofort was damit anzufangen wissen wird.</div>
<a name='more'></a><br />
<b><span class="Apple-style-span" style="color: orange;">lokale & globale Variablen:</span></b><br />
In vielen Programmiersprachen unterscheidet man schon zwischen lokalen und globalen Variablen, nun ist auch Tasker dazu in der Lage. Was aber ist der Unterschied? Lokale Variablen sind nur in dem jeweiligen Task bekannt, das heißt wenn nun die lokale Variable %test in Task1 verändert wird, hat dies keinerlei Auswirkungen auf die lokale Variable %test in Task2, da nur der eigene Task diese Variable kennt. Die Variable %test existiert also mehrmals.<br />
<br />
Im Gegensatz dazu wirkt sich eine Veränderung der globalen Variable %Test in Task1 sehr wohl auf diese Variable in Task2 aus. Dies liegt daran dass diese Variable nur ein einziges mal existiert und alle Tasks auf diese eine Variable zugreifen.<br />
<br />
Wer aufmerksam gelesen hat, hat auch schon mitbekommen wie man Tasker nun verklickert um was für einen Variablentyp es sich handelt. Lokale Variablen dürfen nur kleine Buchstaben besitzen, sobald ein großer Buchstabe vor kommt handelt es sich um eine globale Variable.<br />
<br />
<span class="Apple-style-span" style="color: orange;"><b>Else Befehl:</b></span><br />
Der Else Befehl stellt eine Erweiterung zum schon vorhandenen IF Befehl dar. Hier ein Beispiel welches die Funktion veranschaulichen soll:<br />
<br />
<ol>
<li><span class="Apple-style-span" style="color: orange;"><b>If %test ~ 1</b></span></li>
<li><span class="Apple-style-span" style="color: orange;"><b>Popup: "Test ist 1"</b></span></li>
<li><span class="Apple-style-span" style="color: orange;"><b>Else</b></span></li>
<li><span class="Apple-style-span" style="color: orange;"><b>Popup: "Test ist nicht 1"</b></span></li>
<li><span class="Apple-style-span" style="color: orange;"><b>IfEnd</b></span></li>
<li><span class="Apple-style-span" style="color: orange;"><b>Popup: "Ende"</b></span></li>
</ol>
<div>
Der Else-Zweig wird also genau dann erfüllt wenn die If Bedingung nicht zutrifft. Bis jetzt war dies zwar auch über If %test !~ 1 realisierbar, aber der Else Befehl ist da doch die galantere Möglichkeit.</div>
<div>
<br /></div>
<div>
<b><span class="Apple-style-span" style="color: orange;">Arrays:</span></b></div>
<div>
Ein Array ist eine Art Liste. Das heißt in einem Array befinden sich im Gegensatz zu einer Variablen, mehrere Werte. Veranschaulicht schaut dies so aus:</div>
<div>
<ul>
<li>%variable = 1</li>
<li>%array = 1, 5, 7, 9, 3</li>
</ul>
<div>
Um nun auf die einzelnen Elemente eines Array zugreifen zu können, nutzt man deren Index. Zum Beispiel:</div>
</div>
<div>
<ul>
<li>%array2 ~ 5</li>
<li>%array3 ~ 7</li>
</ul>
<div>
Diese Indexfunktion ist schon eine Weile in Tasker integriert. Jeder der schon einmal Variable Split verwendet hat kennt dies. Die zu teilende Variable %teile wird in %teile1, %teile2 usw. geteilt. Mit den neuen Array Funktionen kann man nun jedoch flexibler auf die einzelnen Teile zugreifen. So ist es nun auch möglich auf mehrere Elemte eines Arrays zuzugreifen:</div>
</div>
<div>
<ul>
<li>%array(2:4) ~ 5, 7, 9</li>
</ul>
<div>
Man greift so also auf alle Elemente zwischen dem zweiten und vierten Element zu.</div>
</div>
<div>
<br /></div>
<div>
Weiterhin gibt es die neuen Aktionen "Array Push" und "Array Pop". Mit "Array Push lassen sich Elemente an eine bestimmte Stelle in das Array einfügen, damit kein Element gelöscht wird, rutschten alle nachfolgenden Elemente automatisch eine Position weiter. Ein Beispiel würde folgendermaßen ausschauen:</div>
<div>
<ol>
<li><b><span class="Apple-style-span" style="color: orange;">Variable -> Array Push</span></b></li>
<ul>
<li><b><span class="Apple-style-span" style="color: orange;">Name: %array</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Position: 2</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Value: 0</span></b></li>
</ul>
</ol>
<div>
Nach dieser Aktion beinhaltet unser %array = 1, 0, 5, 7, 9, 3 ein Element mehr, nämlich die 0 an zweiter Stelle. Nun lassen sich bei Position und Value nicht nur absolute Werte eintragen sondern auch Variablen. Dadurch wird ein flexibles arbeiten mit den Arrays ermöglicht.</div>
</div>
<div>
<br /></div>
<div>
Die Aktion "Array Pop" löscht ein angegebenes Element, um die entstehende Lücke auszufüllen rutschen alle nachfolgenden Elemente eine Position nach vorn. Das gelöschte Element kann außerdem in einer Variablen abgespeichert werden. Somit ist es nun möglich jedes Element eines Arrays zu bearbeiten, auch wenn man die Elemente-Anzahl nicht kennt. Man popt einfach so oft das erste Element in eine Hilfsvariable und verarbeitet den Wert, bis das Array leer ist.</div>
<div>
<br /></div>
<div>
Die letzte neue Aktion ist "Array Clear", diese löscht alle Elemente eines Arrays.</div>
<div>
<br /></div>
<div>
<b><span class="Apple-style-span" style="color: orange;">For Schleifen:</span></b></div>
<div>
Schleifen sind Befehle die so lange ausgeführt werden bis eine bestimmte Abbruchbedingung eintritt. Ein Beispiel ist das eben schon genannte einzelne verarbeiten der Array Elemente bis keines mehr da ist.</div>
<div>
In Tasker gibt man in der For Aktion einfach die Werte an für die die nachfolgenden Aktionen ausgeführt werden sollen. Also zum Beispiel:</div>
<div>
<ol>
<li><b><span class="Apple-style-span" style="color: orange;">Task -> For</span></b></li>
<ul>
<li><b><span class="Apple-style-span" style="color: orange;">Variable: %forvar</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Items: 45, %variable, %array(4:7)</span></b></li>
</ul>
<li><b><span class="Apple-style-span" style="color: orange;">Alert -> Popup: "aktuelles Element: %forvar"</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Task -> End For</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Alert -> Popup: "Ende"</span></b></li>
</ol>
<div>
Was geschieht nun? Es werden nacheinander folgende Popups ausgegeben:</div>
<ol>
<li>aktuelles Element: 45</li>
<li>aktuelles Element: 1</li>
<li>aktuelles Element: 7</li>
<li>aktuelles Element: 9</li>
<li>aktuelles Element: 3</li>
<li>Ende</li>
</ol>
<div>
Was hat Tasker gemacht? Tasker ist die Aktion zwischen For und End For für jedes angegebene Item durchgegangen. Vor jedem Durchgang wird das aktuelle Item (Element) in die Variable %forvar eingetragen. Als Item kann man einzelne Werte, Variablen oder Arrays wählen.</div>
</div>
<div>
<br /></div>
<div>
<b><span class="Apple-style-span" style="color: orange;">GoTo Sprungfunktion:</span></b></div>
<div>
Die GoTo Funktion an sich gibt es schon eine Weile, bisher konnte man allerdings nur zu einer bestimmte Aktion springen. Mit der neuen GoTo Aktion kann man verschiedene Sprungziele auswählen:</div>
<div>
<ul>
<li>Action Number</li>
<ul>
<li>Wie bisher die jeweilige Aktion die hinter der Nummer steckt</li>
</ul>
<li>Action Label</li>
<ul>
<li>In einigen Aktionen lassen sich neuerdings Label angeben, zu diesen kann nun gesprungen werden</li>
</ul>
<li>Top of Loop</li>
<ul>
<li>Springt an den Anfang der For Schleife</li>
</ul>
<li>End of Loop</li>
<ul>
<li>Springt an das Ende der For Schleife</li>
</ul>
<li>End of If</li>
<ul>
<li>Springt an das Ende des If Zweiges, also bis zur Aktion EndIf</li>
</ul>
</ul>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
So das war nun meine kleine Einführung in die neuen Tasker Funktionen. Diese bieten, wie ich finde, eine Menge neue Möglichkeiten, die ihr sicher au bald in neuen Profilen von mir sehen könnt :)</div>
Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com19tag:blogger.com,1999:blog-226087406924845076.post-63147507050389963652011-09-05T14:35:00.000+02:002012-06-18T19:47:33.478+02:00[Profil] Medienlautstärke automatisch mit Vibrationsmodus ändern<br />
In letzter Zeit hat mich genervt, dass die Medienlautstärke bei Aktivierung des Vibrationsmodus nicht berücksichtigt wird. Dies führt zum Beispiel dazu, dass Spiele trotz des eingeschalteten Virbationsmoduses lautstark auf sich aufmerksam machen.<br />
<br />
Das folgende Profil verändert nun die Medienlautstärke in Abhängigkeit des Vibrationsmodus.<br />
<ul>
<li><b><span style="color: orange;">Profil: automatische Medienlautstärke</span></b></li>
<ul>
<li><b><span style="color: orange;">Kontext</span></b></li>
<ol>
<li><b><span style="color: orange;">State -> Variable -> Variable Value</span></b></li>
<ul>
<li><b><span style="color: orange;">Name: %SILENT</span></b></li>
<li><b><span style="color: orange;">Op: Doesn't Match</span></b></li>
<li><b><span style="color: orange;">Value: Off</span></b></li>
</ul>
</ol>
<li><b><span style="color: orange;">Entry Task: </span></b></li>
<ol>
<li><b><span style="color: orange;">Variable -> Variable Set</span></b></li>
<ul>
<li><b><span style="color: orange;">Name: %VOLMOLD</span></b></li>
<li><b><span style="color: orange;">To: %VOLM</span></b></li>
</ul>
<li><b><span style="color: orange;">Audio -> Media Volume</span></b></li>
<ul>
<li><b><span style="color: orange;">Level: 0 </span></b></li>
</ul>
</ol>
<li><b><span style="color: orange;">Exit Task:</span></b></li>
<ol>
<li><b><span style="color: orange;">Audio -> Media Volume</span></b></li>
<ul>
<li><span style="color: orange;"><b>Level: 6</b></span></li>
<li><span style="color: orange;"><b>IF %VOLMOLD ~ 0</b></span></li>
</ul>
<li><b><span style="color: orange;">Audio -> Media Volume</span></b></li>
<ul>
<li><b><span style="color: orange;">Level: %VOLMOLD</span></b></li>
<li><b><span style="color: orange;">IF %VOLMOLD > 0</span></b></li>
</ul>
<ul style="color: orange;">
</ul>
</ol>
</ul>
</ul>
Um bei "Level" ein Eingabefeld anstelle des Schiebereglers zu bekommen, muss auf den Button mit dem Doppelpfeil rechts daneben gedrückt werden. Falls dieser nicht vorhanden ist, bitte in den Einstellungen den "Beginner Mode" deaktivieren.<br />
<br />
Die Systemvariable <span style="color: orange;">%SILENT</span> kann drei verschiedene Werte annehmen:<br />
<ol>
<li><b>Off</b></li>
<ul>
<li>Klingeln und Vibrieren aktiviert</li>
</ul>
<li><b>Vibrate</b></li>
<ul>
<li>Nur Vibrieren aktiviert</li>
</ul>
<li><b>On</b></li>
<ul>
<li>Klingel und Vibrieren deaktiviert</li>
</ul>
</ol>
Das Profil wird nun aktiviert wenn <span style="color: orange;">%SILENT</span> nicht den Wert <span style="color: orange;">"Off"</span> beinhaltet, also wenn der Virbations- oder Lautlosmodus aktiviert wurden. Bei Aktivierung wird zuerst die aktuelle Lautstärke in der Variablen <span style="color: orange;">%VOLMOLD</span> abgelegt und danach die Medienlautstärke auf Null gesetzt. Wird das Profil deaktiviert, setzt der Exit-Task die Medienlautstärke auf den alten vorher abgespeicherten Wert.<br />
<br />
<br />
Diesmal nur ein kleines, aber wie ich finde trotzdem recht nützliches Profil von mir. Viel Spaß damit :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com11tag:blogger.com,1999:blog-226087406924845076.post-20512919494971205392011-08-26T11:59:00.000+02:002011-08-26T11:59:02.554+02:00[Tutorial] Automatisieren mit Tasker - Teil 3: Variablen<div style="text-align: justify;">Im dritten Teil meine Tutorial Serie "Automatisieren mit Tasker" möchte ich mich mit Variablen und deren Einsatz beschäftigen.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Fangen wir mit einer ganz grundlegenden Frage an:</div><blockquote><b>Was sind Variablen?</b></blockquote><div style="text-align: justify;">Auf Wikipedia finden wir zwei Definitionen für Variablen. Die erste Definition beschreibt eine Variable in der Mathematik:</div><blockquote>Eine <b>Variable</b> bezeichnet in der Mathematik einen Platzhalter für eine Rechengröße, beispielsweise eine Zahl. Der Name leitet sich vom lateinischen Adjektiv <i>variabilis</i> (veränderbar) ab. <a href="http://de.wikipedia.org/wiki/Variable_%28Mathematik%29">- Wikipedia -</a></blockquote><a name='more'></a><div style="text-align: justify;">Während der Schulzeit sollte jeder schon mal mit Variablen gerechnet haben. Einfachstes Beispiel ist die Formel für die Geschwindigkeit aus dem Physikunterricht:</div><blockquote>v = s/t </blockquote><div style="text-align: justify;">v, s und t stehen hier für veränderliche Größen. Je nach Aufgabe müssen andere Werte für diese Variablen eingesetzt werden. </div><div style="text-align: justify;">In der Informatik funktionieren Variablen nicht anders. Wenn wir eine Größe noch nicht kennen oder wissen, dass diese verschiedene Werte annehmen kann, setzen wir Variablen ein. Im Gegensatz zur Mathematik können sich hinter den Variablen nicht nur Zahlenwerte, sondern zum Beispiel auch Schriftzeichen oder Wortketten befinden. </div><div style="text-align: justify;">So kommen wir zur zweiten Definition auf Wikipedia, diese bezieht sich auf Variablen in der Programmierung:</div><blockquote>In der <a href="http://de.wikipedia.org/wiki/Programmierung" title="Programmierung">Programmierung</a> ist eine <b>Variable</b> im allgemeinsten Sinne einfach ein Behälter für Rechnungsgrößen („Werte“), die im Verlauf eines <a href="http://de.wikipedia.org/wiki/Algorithmus" title="Algorithmus">Rechenprozesses</a> auftreten. Im Normalfall wird eine Variable durch einen Namen bezeichnet und hat eine bestimmte Adresse im Speicher des Rechners. <a href="http://de.wikipedia.org/wiki/Variable_%28Programmierung%29">- Wikipedia -</a></blockquote><div style="text-align: justify;">Bei Variablen handelt es sich also um Platzhalter, welche beim späteren Ausführen des Programmes mit verschiedenen Werten gefüllt werden.</div><div style="text-align: justify;">In Tasker funktionieren Variablen auch nach diesem Prinzip. Damit Tasker zwischen verschiedenen Variablen unterscheiden kann, bekommen diese einen Namen. Dieser Name kann vom Nutzer relativ frei gewählt werden. Ein paar Richtlinien sind dabei jedoch zu beachten:</div><ul><li>Variablen werden immer mit "%" eingeleitet</li>
<li>Variablen dürfen nur Buchstaben oder Zahlen beinhalten, keine Sonderzeichen</li>
<li>Der gewählte Name darf noch nicht vergeben sein </li>
</ul><div style="text-align: justify;">Ein Beispiel für eine korrekt bezeichnete Variable wäre %VAR. </div><div style="text-align: justify;">Neben den vom Benutzer anlegbaren Variablen, besitzt Tasker schon einige eingebaute Variablen, welche verschiedene Systemgrößen beinhalten. Ein Auflistung dieser Variablen inklusive deren Inhalt findet sich hier:</div><blockquote><a href="http://tasker.dinglisch.net/userguide_summary.html#variables.html">http://tasker.dinglisch.net/userguide_summary.html#variables.html</a></blockquote><div style="text-align: justify;">Kommen wir jetzt dazu, wie wir in Tasker mit Variablen umgehen können.</div><div style="text-align: justify;">Tasker stellt verschieden Aktionen zum Umgang mit Variablen bereit. Diese finden sich im Auswahlpunkt "Variables".</div><ul><li><b>Variable Add</b></li>
<ul><li>erhöht den Wert einer Variable um eine angegebene Größe</li>
</ul><li><b>Variable Clear</b></li>
<ul><li>löscht den Wert einer Variable</li>
</ul><li><b>Variable Convert</b></li>
<ul><li>Kovertiert den Wert einer Variable. Zum Beispiel Kilogramm in Pfund.</li>
</ul><li><b>Variable Join</b></li>
<ul><li>Vereint alle Variablen des Types %VAR1, %VAR2, %VAR3 usw. zu einer Variable %VAR</li>
</ul><li><b>Variable List</b></li>
<ul><li>Gibt die Werte aller verwendeten Benutzervariablen aus</li>
</ul><li><b>Variable Query</b></li>
<ul><li>Öffnet ein Eingabefenster, der vom Nutzer eingegebene Wert, wird in einer angegebenen Variable gespeichert</li>
</ul><li><b>Variable Randomize</b></li>
<ul><li>Speichert einen zufälligen Wert in einer angegebenen Variablen ab</li>
</ul><li><b>Variable Set</b></li>
<ul><li>Speichert einen angegebenen Wert in einer Variable ab</li>
</ul><li><b>Variable Split</b></li>
<ul><li>Teilt den Inhalt einer Variable an angegebenen Stellen.</li>
</ul><li><b>Variable Subtract</b></li>
<ul><li>Vermindert den Wert einer Variable um eine angegebene Größe</li>
</ul></ul><div style="text-align: justify;">Die wahrscheinlich wichtigste Aktion stellt hierbei "Variable Set" dar. Denn diese Aktion ermöglicht es eine Variable anzulegen und mit einem Wert zu füllen.</div><br />
<div style="text-align: justify;">Als kleines Beispiel soll nun ein Task gebaut werden der den Nutzer auffordert eine Eingabe zu machen und diese dann über ein Popup wieder ausgibt. Dazu legen wir einen neuen Task an und nennen ihne zum Beispiel "Variablentest".</div><ul><li><b>Task: "Variablentest"</b></li>
<ul><li><b>Variable -> Variable Query</b></li>
<ul><li><b>Name: %EINGABE</b></li>
<li><b>Label: Gib was ein</b></li>
<li><b>Default: genau hier</b></li>
</ul><li><b>Alert -> Popup</b></li>
<ul><li><b>Text: Du hast "%EINGABE" eingegeben.</b></li>
</ul></ul></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKYGaDVEv0q9-3gHSeIYOfVuYC89xkB8Lyb9JYwl46KyGgyBzQa2uEOVQVWNg2gaoKCnsnrFWNm79o_Zwl5C_QuaqDTP34niIszvueqJ_EoEEEDRwK8RVt6rtgxNdsoFMDxT_5kjQH8j8/s1600/2011-08-26_11-13-48.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKYGaDVEv0q9-3gHSeIYOfVuYC89xkB8Lyb9JYwl46KyGgyBzQa2uEOVQVWNg2gaoKCnsnrFWNm79o_Zwl5C_QuaqDTP34niIszvueqJ_EoEEEDRwK8RVt6rtgxNdsoFMDxT_5kjQH8j8/s320/2011-08-26_11-13-48.jpg" width="192" /></a></div><br />
<div style="text-align: justify;">Wenn wir den Task nun mit dem Play-Button starten, erscheint als erstes eine Eingabeaufforderung, wir können nun den Text "genau hier" entfernen und irgendwas anderes hinschreiben. Nach dem Bestätigen des Fensters erscheint ein Popup mit unserer Eingabe. </div><div style="text-align: justify;">An dem Popup sieht man gleich gut, das man Variablen ohne Probleme mit normalem Text vermischen kann. Da eine Variable immer mit % eingeleitet wird und keine Sonderzeichen beinhalten darf, weiß Tasker wo unsere Variable %EINGABE anfängt und wo sie endet.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Als nächstes wollen wir uns der Funktion "Variable Split" widmen. Diese Funktion ist nötig wenn wir aus einer großen Variable nur einen kleinen Teil benötigen. Als Beispiel wollen wir die Systemvariable %TIME verwenden. Diese beinhaltet die aktuelle Uhrzeit in dem Format "HH.MM". Wir wollen nun einen Task bauen der uns die Uhrzeit ansagt. Damit die Sprachausgabe aber nicht "9punkt50" sondern "9 Uhr 50" sagt, müssen wir den Punkt durch ein "Uhr" ersetzen. Dazu teilen wie die Variable %TIME mit "." als Teiler.</div><br />
<div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2SAaj-WnY3VgQO5VZT82RgxpHDSzO3epGbZR3vtMjnIZBwHdRNAsgu9gKAMdK2bGEtg-k8aidGJCldt4_ltoJArsQZGufrQk-HFWUMQwjXpbZpFqOquVFKf3KnkVH-18fj98ZcC6V8UE/s1600/2011-08-26_11-22-43.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2SAaj-WnY3VgQO5VZT82RgxpHDSzO3epGbZR3vtMjnIZBwHdRNAsgu9gKAMdK2bGEtg-k8aidGJCldt4_ltoJArsQZGufrQk-HFWUMQwjXpbZpFqOquVFKf3KnkVH-18fj98ZcC6V8UE/s320/2011-08-26_11-22-43.jpg" width="192" /></a></div>Durch das Aufteilen werden zwei neue Variablen erstellt:<br />
<ul><li>%TIME1 = 09</li>
<li>%TIME2 = 50</li>
</ul><div style="text-align: justify;">Eine Variable kann in maximal 9 Teile geteilt werden. Eine Variable %VAR12 kann trotzdem existieren. Diese entsteht wenn %VAR1 nochmals geteilt wird.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Der Sprachausgabe muss einfach nur der anzusagende Text übergeben werden. Damit die Sprachausgabe funktioniert muss eine entsprechende TTS (Text-to-Speech) Engine installiert sein. Ich verwende dabei die kostenlose Pico-TTS.</div><br />
<br />
<div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicWxKLxWpNwKExBjm-81dm7ZV57JU6ppVN1xVFRq1g3_8rzkKcnqXAbDvS7zGWWrTze4r-LwV1kDNdCV-XlCD89wOrXeOcBYZl6NdPFwfhdRSi4cwz0Yb5RPtlD6xE8Z69hLPVO7hwAfw/s1600/2011-08-26_11-28-42.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicWxKLxWpNwKExBjm-81dm7ZV57JU6ppVN1xVFRq1g3_8rzkKcnqXAbDvS7zGWWrTze4r-LwV1kDNdCV-XlCD89wOrXeOcBYZl6NdPFwfhdRSi4cwz0Yb5RPtlD6xE8Z69hLPVO7hwAfw/s320/2011-08-26_11-28-42.jpg" width="192" /></a></div><br />
Kommen wir nun zum Task:<br />
<ul><li><b>Task: "Zeitansage"</b></li>
<ul><li><b>Variable -> Variable Split</b></li>
<ul><li><b>Name: %TIME</b></li>
<li><b>Splitter: .</b></li>
</ul><li><b>Misc -> Say</b></li>
<ul><li><b>Test: Es ist %TIME1 Uhr %TIME2</b></li>
<li><b>Engine: mit klick auf Lupe auswählen</b></li>
</ul></ul></ul><div style="text-align: justify;">Wenn wir nun den Task starten sollte uns die Zeit halbwegs verständlich angesagt werden, evtl muss die Medienlautstärke vorher noch erhöht werden.</div><br />
<div style="text-align: justify;">Variablen können nicht nur in Aktionen eingesetzt werden, auch als Kontext kann man Variablen verwenden. Dazu existiert zum Beispiel der Kontext "State -> Variable -> Variable Value". Ein entsprechendes Profil wird also dann aktiv, wenn eine bestimmte Variable einen vorgegebenen Wert beinhaltet. Als Beispiel nehmen wir die Variable %EINGABE von vorhin, da wir sie leicht mit unserem vorherigen Task verändern können. Unser Beispielprofil soll nun den Zeitansage Task starten wenn der Inhalt von %EINGABE "Zeit" ist.</div><ul><li><b>Profil "Zeit"</b></li>
<ul><li><b>Kontext:</b></li>
<ul><li><b>State -> Variable -> Variable Value</b></li>
<ul><li><b>Name: %EINGABE</b></li>
<li><b>Op: Matches</b></li>
<li><b>Value: Zeit</b></li>
</ul></ul><li><b>Task: "Zeitansage" </b></li>
</ul></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqCFrtfQGT-GQfLTPoeSSRmXIzE9YYTKi99fgDZBnOe3Ig49HwuyaJRzEHIhjOVLNu12oon8Yb9F1dPltVWfUWQAXmB4TdOfG4_J4Y7V3cV-hAfUg_N_bYGLJXlrtuAgxOA0TXLnBs3ek/s1600/2011-08-26_11-36-03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqCFrtfQGT-GQfLTPoeSSRmXIzE9YYTKi99fgDZBnOe3Ig49HwuyaJRzEHIhjOVLNu12oon8Yb9F1dPltVWfUWQAXmB4TdOfG4_J4Y7V3cV-hAfUg_N_bYGLJXlrtuAgxOA0TXLnBs3ek/s320/2011-08-26_11-36-03.jpg" width="192" /></a></div><div style="text-align: justify;">Wenn wir nun unseren Task "Variablentest" starten und "Zeit" in das Eingabefeld eintragen, sollte uns eine nette Stimme die aktuelle Uhrzeit ansagen :)</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Das war mein Crash-Kurs in Sachen Variablen in Tasker. Ich hoffe ich konnte euch einen guten Einblick geben.</div>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com20tag:blogger.com,1999:blog-226087406924845076.post-16003175513565351632011-08-13T18:06:00.000+02:002011-08-13T18:06:22.561+02:00[Tutorial] Automatisieren mit Tasker - Teil 2: Exit-Task & mehrere KontexteNachdem wir nun in <a href="http://tasker-skripte.blogspot.com/2011/08/tutorial-automatisieren-mit-tasker-teil.html">Teil 1</a> meines Tutorials unser erstes Profil inklusive Task erstellt haben, wollen wir nun etwas tiefer eintauchen. In der Zwischenzeit hat Tasker ein kleines Update bekommen, bei welchem vor allem die Oberfläche überarbeitet wurde, also nicht wundern wenn mein Tasker nun anders aussieht als in Teil 1.<br />
<br />
Zu Erinnerung hier das Profil, welches im ersten Teil erstellt wurde.<br />
<ul><li><b>Profil: "Hallo Welt"</b></li>
<ul><li><b>Kontext:</b></li>
<ol><li><b>State -> Power -> Power</b></li>
</ol><ul><ul><li><b>Type: Any</b></li>
</ul></ul><li><b>Task: "Hallo Welt"</b></li>
<ol><li><b>Alert -> Popup</b></li>
</ol><ul><ul><li><b>Text: Hallo Welt</b></li>
</ul></ul></ul></ul><br />
<br />
<a name='more'></a><br />
Im ersten Schritt soll nun ein Exit-Task hinzugefügt werden. Während normale Tasks, erkennbar an den grünen Pfeilen, ausgeführt werden sobald ein Profil aktiv wird, werden Exit-Tasks (rote Pfeile) ausgeführt wenn das Profil inaktiv wird. In unserem Fall also sobald wir den USB-Stecker vom Handy abziehen.<br />
<br />
Das letzte mal haben wir zuerst einen Task erstellt und diesen danach einem Profil zugewiesen, diese Herangehensweise empfiehlt sich, wenn ein Task in mehreren Profilen eingesetzt wird. Wird ein Task nur in einem Profil eingesetzt, kann man ihn auch direkt erstellen. Dazu klicken wir nun einmal auf den schon erstellten "Hallo Welt" Task in unseren gleichnamigen Profil.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAyFvL1obBscr7PEKB_Z-5bzeC2QcYikhqLBOxCClu5yleF5BHZ5ak4c42KL_ZjrHlnv6wuU6z5uE4_FefuJXqYtpTbDXsLz35HtD_tQ3n2RAeqnw-X0xgF3GxiAuEzOgmbPDd5aZbvH0/s1600/TaskOptions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAyFvL1obBscr7PEKB_Z-5bzeC2QcYikhqLBOxCClu5yleF5BHZ5ak4c42KL_ZjrHlnv6wuU6z5uE4_FefuJXqYtpTbDXsLz35HtD_tQ3n2RAeqnw-X0xgF3GxiAuEzOgmbPDd5aZbvH0/s320/TaskOptions.png" width="201" /></a></div>In dem sich nun öffnenden Fenster, stehen einem verschiedene Optionen zu Verfügung:<br />
<br />
<ul><li><b>Add Exit Task | Add Enter Task</b></li>
<ul><li>einen Exit oder Enter-Task hinzufügen, variiert je nachdem welcher schon vorhanden ist</li>
</ul><li><b>Edit</b></li>
<ul><li>den gerade angeklickten Task bearbeiten</li>
</ul><li><b>Move To Exit | Move To Enter</b></li>
<ul><li>den gerade angeklickten Task in einen Enter bzw. Exit-Task umwandeln</li>
</ul><li><b>Rename</b></li>
<ul><li>Task Umbenennen</li>
</ul><li><b>Reselect</b></li>
<ul><li>Neuen Task auswählen, ersetzt den aktuellen Task</li>
</ul></ul><div>Da wir einen Exit-Task hinzufügen wollen, klicken wir auf den entsprechenden Text. Nun öffnet sich das schon bekannte Fenster, welches alle gespeicherten Tasks auflistet. Da wir einen neuen anlegen wollen, klicken wir auf "New Task", diesmal geben wir ihm aber keinen Namen. Nun haben wir wieder das leere "Task Edit" Fenster vor uns.</div><div><br />
</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzUcPyQWafzZqfdryAANr9JDRadpslbBV-appA-18oZKv-CcbfFEKOskegc3zIDxdhsyeISrdhXSZHtcmNeGmaQPAHDpUS-iTqWa2JIrRamMDQG7Dm6POksCi_e8RxgjTbSvBUhulFjs/s1600/TaskEdit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzUcPyQWafzZqfdryAANr9JDRadpslbBV-appA-18oZKv-CcbfFEKOskegc3zIDxdhsyeISrdhXSZHtcmNeGmaQPAHDpUS-iTqWa2JIrRamMDQG7Dm6POksCi_e8RxgjTbSvBUhulFjs/s320/TaskEdit.png" width="200" /></a></div>Mit einem Klick auf "+" fügen wir eine Aktion hinzu. Diesmal wählen wir "Alert -> Notify Sound", hierbei wird eine Benachrichtigung mit Ton ausgegeben. </div><div><br />
</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAyUKWvcpGvnAajYuxhWCOMT-10wr08l41IsXldaekoC4c01VwD4HtpKHuZIt7UgwSH0nR8QK5LC4dauwJTLIhcuIJDt-bTNOIzCuCjXbcF8OVU9vHQdWA3xsx9D4-GT1fS9jY4__28_w/s1600/NotifySound.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAyUKWvcpGvnAajYuxhWCOMT-10wr08l41IsXldaekoC4c01VwD4HtpKHuZIt7UgwSH0nR8QK5LC4dauwJTLIhcuIJDt-bTNOIzCuCjXbcF8OVU9vHQdWA3xsx9D4-GT1fS9jY4__28_w/s320/NotifySound.png" width="201" /></a></div>Dabei können folgende Eigenschaften der Benachrichtigung eingestellt werden:</div><div><ul><li><b>Title</b></li>
<ul><li>Titel der Benachrichtigung</li>
</ul><li><b> Text</b></li>
<ul><li>Inhalt der Benachrichtigung</li>
</ul><li><b>Icon</b></li>
<ul><li>Ein Icon welches in der Benachrichtigungsleiste angezeigt wird</li>
</ul><li><b>Number</b></li>
<ul><li>Hier kann der Benachrichtigung eine Nummer gegeben werden, wird später eine Benachrichtigung mit der gleichen Nummer erstellt, ersetzt diese die aktuelle Benachrichtigung</li>
</ul><li><b>Sound File</b></li>
<ul><li>Die Datei die abgespielt werden soll wenn die Benachrichtigung ausgegeben wird</li>
</ul><li><b>If</b></li>
<ul><li>Eine Bedingung die erfüllt sein muss damit diese Aktion ausgeführt wird (dazu komme ich später noch)</li>
</ul></ul><div>Als Title habe ich "USB" und als Text "Tschüß USB gewählt, außerdem habe ich noch eine kurze Sounddatei mit Klick auf die Lupe ausgewählt. Mit dem grünen Haken schließen wir nun das "Notify Sound" und danacht das "Task Edit" Fenster. Unser Profil sollte nun folgendermaßen aussehen:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6yewy9FSOp9AskKhmEBki3hKxPmNK4PuFkQmsxacJ9ghrdc-3CB7MUGIFYubjQewhHghQMJKyx_9bsxrMWpkRlxCOHjJ8kcCa_vjulOIgGxGCQINlrTHAF5itZZqS8YxKeocla3p1BRE/s1600/Profil2Tasks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6yewy9FSOp9AskKhmEBki3hKxPmNK4PuFkQmsxacJ9ghrdc-3CB7MUGIFYubjQewhHghQMJKyx_9bsxrMWpkRlxCOHjJ8kcCa_vjulOIgGxGCQINlrTHAF5itZZqS8YxKeocla3p1BRE/s320/Profil2Tasks.png" width="320" /></a></div><div>Da wir dem Exit Task keinen Namen gegeben haben, werden uns in dieser Ansicht die in dem Task vorhandenen Aktionen angezeigt. Nachdem wir mit dem grünen Haken das Tasker Fenster geschlossen haben, können wir das Profil testen. Nun sollte sobald das Handy an einem USB-Kabel angeschlossen wird ein Popup ausgeben und wenn wir das Kabel wieder entfernen eine Benachrichtigung in der oberen Benachrichtigungsleiste.</div></div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNrWInU3a-Qo9RQvNBe8XCx0MQ9pPhMBwqJ_ilTrqg2SYa91RB66laNINfqvmaSPVbYK_YhlKFr1mFupfZMk6Aypb1gwyZOA4chNHoWL03Hj22oVKsDXpkl27GaFSEIcAHk4mUIbk4hk0/s1600/2011-08-13_16-55-41.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNrWInU3a-Qo9RQvNBe8XCx0MQ9pPhMBwqJ_ilTrqg2SYa91RB66laNINfqvmaSPVbYK_YhlKFr1mFupfZMk6Aypb1gwyZOA4chNHoWL03Hj22oVKsDXpkl27GaFSEIcAHk4mUIbk4hk0/s320/2011-08-13_16-55-41.jpg" width="192" /></a></div><div>Mit diesem Profil konnte nun jeder auch bemerken, wie oft ein Task ausgeführt wird, nämlich genau einmal sobald der zugewiesene Kontext aktiv wurde, bzw. inaktiv wenn es um den Exit-Task geht. Das heißt also, so lange wir das Handy am USB hängen haben wird der Task nicht noch einmal ausgeführt werden.</div><div><br />
</div><div>Nun wollen wir einen weiteren Kontext hinzufügen. Dafür klicken wir auf den schon vorhandenen "Power Any" Kontext. Im sich öffnenden Fenster klicken wir auf "Add" und dann auf "Location". Mit Location können wir automatisch Aktionen starten lassen wenn wir uns an bestimmten Orten aufhalten. Zum Beispiel kann zu Hause das W-Lan aktiviert werden oder auf Arbeit der Vibrationsmodus.</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis73M9w0gjn56Lt9uKoSRfBy8xFI7DLu4-QycZ32m-VA0dwBaPTyD9UosKkOKpc3EDtSp3QyuOJKooD_r7Ic7Db5OclDA9_-yAPjNy3Ki58edKofFU6iPHAZWUqvlCg56GzPg6ADnmGdU/s1600/Map.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis73M9w0gjn56Lt9uKoSRfBy8xFI7DLu4-QycZ32m-VA0dwBaPTyD9UosKkOKpc3EDtSp3QyuOJKooD_r7Ic7Db5OclDA9_-yAPjNy3Ki58edKofFU6iPHAZWUqvlCg56GzPg6ADnmGdU/s320/Map.png" width="201" /></a></div><div>Die Fahne auf der Karte zeigt den Ort an, an welchem der Kontext aktiv werden soll. "Net" und "GPS" stehen für die Grundlage mit welcher die Ortsbestimmung ablaufen soll. Ich würde dabei "GPS" immer deaktivieren, da die hohe Genauigkeit meist nicht gebraucht wird und in GEbäuden das GPS eh selten funktioniert. Bei "Net" wird die Position über die Mobilfunkdatenverbindung bestimmt, dies ist hinreichend gennau und verbraucht weniger Strom als "GPS". Nun können wir entweder manuell einen Punkt auf der Karte auswählen indem wir einfach drauf klicken, oder mit dem Button unten rechts unsere aktuelle Position auswählen lassen. Mit "Radius" wird die Genauigkeit angegeben, wenn wir den Button für unsere aktuelle Position nutzen, wird diese automatisch eingetragen. Bei einem manuellen festlegen des Ortes muss diese per Hand eingestellt werden. Dabei ist zu beachten das die Genauigkeit nicht zu gering gewählt wird.</div><div><br />
</div><div>Nachdem wir unsere aktuelle Position bestimmt haben, können wird das Fenster wie gewohnt schließen. Unser Profil sollte nun folgendermaßen ausschauen:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTikDsgVuG5bJ2dlPThnNE85MPjdXjduLC6wPXTOTaiyIpbcB-gBmO2cwyiUwaZ100cPRrQHyI6k5PlAoNDzQWvdys-a4L1RUIG4GSrdS5X7I4dpyz4lslz4JsLrREO50wXGbce8-B6ns/s1600/Profil2Kontexte.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTikDsgVuG5bJ2dlPThnNE85MPjdXjduLC6wPXTOTaiyIpbcB-gBmO2cwyiUwaZ100cPRrQHyI6k5PlAoNDzQWvdys-a4L1RUIG4GSrdS5X7I4dpyz4lslz4JsLrREO50wXGbce8-B6ns/s320/Profil2Kontexte.png" width="320" /></a></div><div>Wenn wir nun Tasker schließen, werden automatisch die Änderungen übernommen. Zum Test nehmen wir nun das Handy vom USB. Dabei wird nun der Kontext "Power Any" und damit das komplette Profil deaktiviert, was wir an der Benachrichtigung erkennen können. Es müssen also immer alle Kontexte aktiv sein, damit ein Profil aktiviert und somit der zugehörige Task ausgeführt wird. Wenn wir nun also den Ort im Lacation-Kontext manuell ändern, wird das Profil nicht aktiv werden, bis wir uns am angegebenen Ort befinden und das Handy mit einem USB-Kabel verbinden.</div><div><br />
</div><div>Damit beende ich den zweiten Teil meiner Tutorial-Reihe. Der nächste Teil wird sich mit Variablen und mit ihrem Umgang beschäftigen.</div><div><br />
</div><div><br />
</div>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com15tag:blogger.com,1999:blog-226087406924845076.post-1238831840072494862011-08-10T15:55:00.000+02:002011-08-10T15:55:54.291+02:00[Tutorial] Automatisieren mit Tasker - Teil 1: EinführungNachdem ich hier nun ein paar Profile gepostet habe und mich auch mal an dem ein oder anderen Tutorial versucht habe, wird es nun Zeit für ein komplettes Tutorial für den Umgang mit Tasker. Dieses soll Anfangs den Einstieg in die Tasker Welt erklären und dann später auch kompliziertere Funktionen von Tasker beschreiben. Ich möchte das Tutorial dabei in mehrere Teile gliedern, welche ich in unregelmäßigen Abständen (je nachdem wieviel Zeit ich gerade habe) veröffentlichen.<br />
<br />
Der erste Teil soll einen allgemeinen Überblick über Tasker geben. Dabei sollen die Einstellungen sowie das Grundprinzip von Tasker erklärt werden.<br />
<a name='more'></a><br />
Bevor es losgeht noch eine Bemerkung. Tasker wird seit einer Weile auch in Deutsch angeboten, jedoch finde ich die Übersetzungen teilweise nicht sehr glücklich gewählt. Außerdem kann es bei bestimmten Tasks zu Fehlern aufgrund der anderen Sprachdatei kommen. Deshalb empfehle ich jedem die Sprache über "Menü -> Einstellungen -> UI" auf "English" einzustellen. Dies ist natürlich kein muss, aber ich werde mich bei meinen weiteren Beschreibungen auf die englischen Bezeichnungen beziehen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1kI9tTyGY__YXK7VRZA4EGlONqeREi1RBLTmvg5P0F3GvzD15AZU4PU3UG5pu9gJVi0OuISAd2j8HVev6kYf9US1mf5fO3kX4DEO2fxY6zeuNv9cbSun6nlMJNMANyoEIQA8l0Iei0AE/s1600/2011-08-10_13-35-12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1kI9tTyGY__YXK7VRZA4EGlONqeREi1RBLTmvg5P0F3GvzD15AZU4PU3UG5pu9gJVi0OuISAd2j8HVev6kYf9US1mf5fO3kX4DEO2fxY6zeuNv9cbSun6nlMJNMANyoEIQA8l0Iei0AE/s320/2011-08-10_13-35-12.jpg" width="192" /></a></div><br />
Dies ist der Startbildschirm von Tasker, hier werden alle angelegten Profile aufgelistet. Tasker bietet dafür folgende verschiedene Ansichten, die man über "Menü -> View" ändern kann:<br />
<ul><li><b>Flat</b></li>
<ul><li>Alle Profile werden untereinander aufgeliset</li>
</ul><li><b>User Tabs </b></li>
<ul><li>Profile können in selbst angelegten Tabs sortiert werden</li>
</ul><li><b>Context Tabs </b></li>
<ul><li>Profile werden automatisch in verschiedenen Tabs abgelegt</li>
</ul></ul>Ich persönlich finde die Ansicht "User Tabs" am sinnvollsten. Jedem ist hierbei selber überlassen wie er seine Profile sortiert bzw. gruppiert. Um einen neuen Tab zu erstellen, einfach eine Weile auf einen vorhandenen Tab klicken und im sich öffnenden Fenster auf "Add Tab" klicken. Es können bis zu 6 Tabs erstellt werden. Die Profile können dann per Drag & Drop auf die erstellten Tabs verteilt werden.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGoh1nxVVxSfFWSaAdZHttsK7l9imu8fYv75b0OuNZA5b7KtPBAYHCCsz6MMi9iIvl3KloiGa_nzELE1gqRdMYy6fME7k18ox3LxnEQE-lSGNFBvmvoeR8z-f5OyuD8CAsfSOSVa04U8/s1600/2011-08-10_14-11-49.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGoh1nxVVxSfFWSaAdZHttsK7l9imu8fYv75b0OuNZA5b7KtPBAYHCCsz6MMi9iIvl3KloiGa_nzELE1gqRdMYy6fME7k18ox3LxnEQE-lSGNFBvmvoeR8z-f5OyuD8CAsfSOSVa04U8/s320/2011-08-10_14-11-49.jpg" width="192" /></a></div><br />
<br />
Bevor wir aber unser erstes Profil erstellen, beschäftigen wir uns erst einmal mit den Funktionen von Tasker. Über die "Menü" Taste des Androiden öffnet sich ein kleines Einstellungs-Menü mit folgenden Funktionen:<br />
<ul><li><b>View</b></li>
<ul><li>Ändert die Ansicht</li>
</ul><li><b>Browse Profiles</b></li>
<ul><li>Öffnet ein Fenster mit Links zu verschiedenen Tasker Webseiten</li>
</ul><li><b>Preferences</b></li>
<ul><li>Öffnet die Einstellungen</li>
</ul><li><b>Profile Data</b></li>
<ul><li>Hier können Profile gespeichert und geladen werden. Ein komplettes Backup aller Profile ist auch möglich.</li>
</ul><li><b>Info</b></li>
<ul><li>Zeigt Infos zu Tasker an</li>
</ul><li><b>More</b></li>
<ul><li><b>Check for New Version</b></li>
<ul><li>Nach Updates suchen</li>
</ul><li><b>Order Validation</b></li>
<ul><li>Sollte Tasker nicht über den Market gekauft worden sein, kann hier der Aktivierungscode eingegeben werden</li>
</ul><li><b>Run an Action</b></li>
<ul><li>Führt eine Aktion aus</li>
</ul></ul></ul><br />
Wenden wir uns nun den Einstellungen zu.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikB8rRbC3zGYPW_fI7QWgnto5bE1zkYV8uXfwhk0wSJN9UsQ_3tyVhIpeEIuFFO5Lt_nVC8twm16S05IqMWYR_0f-bgP8r8HWehtKXpjmKAkeWtXUdtNb7lRbahNxKX-pgzM7eISzs7oM/s1600/2011-08-10_13-48-13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikB8rRbC3zGYPW_fI7QWgnto5bE1zkYV8uXfwhk0wSJN9UsQ_3tyVhIpeEIuFFO5Lt_nVC8twm16S05IqMWYR_0f-bgP8r8HWehtKXpjmKAkeWtXUdtNb7lRbahNxKX-pgzM7eISzs7oM/s320/2011-08-10_13-48-13.jpg" width="192" /></a></div><br />
Im Tab "UI" ist vor allem die Spracheinstellung interessant. Diese bezieht sich auf alle Textelemente von Tasker.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXXGYVridsqAl3zC2IQX5UtbRegnna8dDLSOZkWW5USMWwWiLKhL7r2j-wPIWFU9x1JUbGAvt_nOxnZj3BgwLk1uLLxKV7PNmskuzPqa1pgmOJ4MFDInHLGKyxKEDkuE9zYdQjLpjEjpc/s1600/2011-08-10_13-49-26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXXGYVridsqAl3zC2IQX5UtbRegnna8dDLSOZkWW5USMWwWiLKhL7r2j-wPIWFU9x1JUbGAvt_nOxnZj3BgwLk1uLLxKV7PNmskuzPqa1pgmOJ4MFDInHLGKyxKEDkuE9zYdQjLpjEjpc/s320/2011-08-10_13-49-26.jpg" width="192" /></a></div><br />
Damit Tasker auf Ereignisse wie gestartete Apps, verbundenes WLan, aktiviertes GPS etc. reagieren kann, müssen diese regelmäßig abgefragt werden. Hier können die Zeitintervalle dafür eingestellt werden. Ich würde diese aber im Regelfall nicht verändern.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVlLcObfXBocohMwDJsSSJyF3PtAqXjuq7Aqme4l8za5mZ8JP_wAPMZ9-3fQIXs_PE9n2TLfDvQBUNo9cBqrOSoUp_xGdRREH_rs3flQmS-5dKUPlevExDEhsgssikIPC1lcRwkEqu0fo/s1600/2011-08-10_13-56-43.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVlLcObfXBocohMwDJsSSJyF3PtAqXjuq7Aqme4l8za5mZ8JP_wAPMZ9-3fQIXs_PE9n2TLfDvQBUNo9cBqrOSoUp_xGdRREH_rs3flQmS-5dKUPlevExDEhsgssikIPC1lcRwkEqu0fo/s320/2011-08-10_13-56-43.jpg" width="192" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div>Auch hier finden sich Einstellungen die uns am Anfang noch nicht weiter zu interessieren brauchen ;)<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJKW9NxsGgrXvYzBz_c9r5J_61p7Y9k3WCdlaAofJiM3_Dc05E6vnXrjtkW9sDNt9xFYynxUhFMyobVMG_k2iar7iSNjGOuzayjKaKdnTSBqHFKvyz9JR8RMlxdV8MUv5jaGTtv5Z7Nps/s1600/2011-08-10_13-56-33.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJKW9NxsGgrXvYzBz_c9r5J_61p7Y9k3WCdlaAofJiM3_Dc05E6vnXrjtkW9sDNt9xFYynxUhFMyobVMG_k2iar7iSNjGOuzayjKaKdnTSBqHFKvyz9JR8RMlxdV8MUv5jaGTtv5Z7Nps/s320/2011-08-10_13-56-33.jpg" width="192" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
Hier gibt es ein paar wichtige Einstellungen, die ich folgend kurz Erklären möchte.<br />
<ul><li><b>Allow External Access</b></li>
<ul><li>Wird benötigt wenn andere Apps auf Tasker Profile und Tasks zugreifen sollen. Dies ist zum Beispiel für die App "Zoom" notwendig</li>
</ul><li><b>Popup Errors/Warnings</b></li>
<ul><li>Aktiviert, werden Fehlermeldungen angezeigt von Tasks, ist vor allem am Anfang sinnvoll um Fehlern auf den Grund zu gehen</li>
</ul><li><b>Low Memory Notification</b></li>
<ul><li>Tasker benötigt zur Sicherstellung der Funktion etwas Speicher im RAM. Da Android automatisch, bei Platzmangel Speicher frei macht, kann es passieren das Daten von Tasker gelöscht werden. Ist diese Funktion aktiviert, wird dann eine Meldung ausgegeben. Passiert dies öfters, sollte zum Beispiel durch das deinstallieren nicht verwendeter aber im Hintergrund laufender Apps, Speicherplatz im RAM zur Verfügung gestellt werden. </li>
</ul></ul>Nachdem wir Tasker nun nach unseren Bedürfnissen konfiguriert haben, können wir unseren ersten Task erstellen. Dazu klicken wir auf "Tasks" und dann auf "New Task".<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglbXkJEr26sSFEGONn6XdAuER9yW_q7NYVorJfgZI0qwpFNbUtAYRKJRb_Mj7f7DzsssCTj5JHhNS9kzHRzkAFkNM_ek0vNoIRv-B0yj5NBzejKeQ5j6O1aNbHBNOSA6HnG8fJVQ1Krak/s1600/2011-08-10_14-25-26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglbXkJEr26sSFEGONn6XdAuER9yW_q7NYVorJfgZI0qwpFNbUtAYRKJRb_Mj7f7DzsssCTj5JHhNS9kzHRzkAFkNM_ek0vNoIRv-B0yj5NBzejKeQ5j6O1aNbHBNOSA6HnG8fJVQ1Krak/s320/2011-08-10_14-25-26.jpg" width="192" /></a></div><br />
Als erstes müssen wir dem Task einen Namen geben, ich habe "Hallo Welt" gewählt. Mit "Ok" schließen wir das Fenster. Nun sehen wir ein leeres Fenster.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilNyoxGazVOsvON4gJvMnV9f-jhCc3Szjg_uisTRV_D6hhq8VMEpWhLXSACnZm2baWfU5vOOihh73ySYlRUkX4WGmnGRLCm6pcAVClIQPQNdf467-pS-bxMHwFkZv6sKdCCnCoYgsaSko/s1600/2011-08-10_14-26-53.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilNyoxGazVOsvON4gJvMnV9f-jhCc3Szjg_uisTRV_D6hhq8VMEpWhLXSACnZm2baWfU5vOOihh73ySYlRUkX4WGmnGRLCm6pcAVClIQPQNdf467-pS-bxMHwFkZv6sKdCCnCoYgsaSko/s320/2011-08-10_14-26-53.jpg" width="192" /></a></div><br />
Hier können wir nun Aktionen hinzufügen, dazu einfach auf den "+" Button klicken. In dem sich nun öffnenden Fenster kann man sich eine Aktion raussuchen.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMdg2hY3FzKrkeXiZ4xiEOOWgLDWImyz4oM9kREUzWXhFBq7xPXML90E785T-O-dLMFvnYFj5qV3-3XCX0Wj_dhhn96Algtapz4UBXOX-Qer6eB1sZkLYcu5pYoOi3KnLSG3jF0nCrngI/s1600/2011-08-10_14-28-57.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMdg2hY3FzKrkeXiZ4xiEOOWgLDWImyz4oM9kREUzWXhFBq7xPXML90E785T-O-dLMFvnYFj5qV3-3XCX0Wj_dhhn96Algtapz4UBXOX-Qer6eB1sZkLYcu5pYoOi3KnLSG3jF0nCrngI/s320/2011-08-10_14-28-57.jpg" width="192" /></a></div><br />
Tasker unterscheidet dabei zwischen "Settings", also Einstellungen und "Actions", also Aktionen. Wie man schnell erkennen kann gibt es eine vielzahl von Möglichkeiten. Wir fangen aber langsam an. Als erstes soll ein Popup ausgegeben werden, in welchem "Hallo Welt" steht. Die Aktion "Popup" findet sich in der Gruppe "Alert". Mit einem Klick auf "Popup" öffnet sich folgendes Fenster:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2nt5N0sJVsKBQwWFxaASebcfFYgPO3LvShxKDUjbhBa81qUQGF65vCuaopMXQohHHnuY4NCH4KbWqKDP_3R9Xk-KyNnzozrrFlG0UxkzsDck-X0H5GWBhyphenhyphenW8D6v9Y_k59GAFRQ1ne5U0/s1600/2011-08-10_14-35-29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2nt5N0sJVsKBQwWFxaASebcfFYgPO3LvShxKDUjbhBa81qUQGF65vCuaopMXQohHHnuY4NCH4KbWqKDP_3R9Xk-KyNnzozrrFlG0UxkzsDck-X0H5GWBhyphenhyphenW8D6v9Y_k59GAFRQ1ne5U0/s320/2011-08-10_14-35-29.jpg" width="192" /></a></div><br />
Hier können nun verschiedene Eigenschaften des Popups gewählt werden. Einerseits können Titel und Inhalt, aber auch die Textgröße und wie lange das Popup sichtbar sein soll angegeben werden. Als "Text" habe ich "Hallo Welt" gewählt. Wenn wir alles eingestellt haben, bestätigen wir mit "Done". Im "Task Edit" Fenster sollte nun unsere erste Aktion "Popup" auftauchen.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-5h2nX4UtXqZqttpOHpbC8IP_zc0rBtvSmNoyOBsVJks9jos8YlR7BxfEdAdCtUgpR_0CtEDtiBPxJ4l2U18mBWsCcvBUxWL1sXSBw1-d1p2eeNZmOqZctAJL0cZrcIn_TyWevW4LnmA/s1600/2011-08-10_14-35-59.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-5h2nX4UtXqZqttpOHpbC8IP_zc0rBtvSmNoyOBsVJks9jos8YlR7BxfEdAdCtUgpR_0CtEDtiBPxJ4l2U18mBWsCcvBUxWL1sXSBw1-d1p2eeNZmOqZctAJL0cZrcIn_TyWevW4LnmA/s320/2011-08-10_14-35-59.jpg" width="192" /></a></div><br />
Mit einem klick auf "Test" können wir unseren Task starten. Es sollte "Hallo Welt" ausgegeben werden.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAv0MrE3hRaR3jvPKyFGn5eoUKhVHvSnChqWnDlBsziY5uklZWRGkZfA94YLoHyrHQ304YUyn2DjYSjsDQixuhJ30Z3q1qVONBL_SXiEr3297AMIhU5OfYytPawCQbRPN12kjeXD-SjbA/s1600/2011-08-10_14-37-00.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAv0MrE3hRaR3jvPKyFGn5eoUKhVHvSnChqWnDlBsziY5uklZWRGkZfA94YLoHyrHQ304YUyn2DjYSjsDQixuhJ30Z3q1qVONBL_SXiEr3297AMIhU5OfYytPawCQbRPN12kjeXD-SjbA/s320/2011-08-10_14-37-00.jpg" width="192" /></a></div><br />
Unser Ziel ist es ja nun diesen Task automatisch unter bestimmten Umständen ausführen zu lassen. Dazu muss ein Profil angelegt werden, dazu schließen wir als erstes unseren Task über den Button "Done". Nun legen wir ein neues Profil mit "new" an.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4tkptV-iQSvq_Iv96eecWECILS77l3kTkwFFTPTRbpZLs_dOTfVwNHfkb03qbP1bw8QxQcaR8itVC-4QLqW2s_wwMgfy6RrumhwJdt1q5cb-KKdO3QaC3DzAPXnajJZqeqpOGNjR50KA/s1600/2011-08-10_14-15-08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4tkptV-iQSvq_Iv96eecWECILS77l3kTkwFFTPTRbpZLs_dOTfVwNHfkb03qbP1bw8QxQcaR8itVC-4QLqW2s_wwMgfy6RrumhwJdt1q5cb-KKdO3QaC3DzAPXnajJZqeqpOGNjR50KA/s320/2011-08-10_14-15-08.jpg" width="192" /></a></div><br />
In diesem Popup können wir unserem Profil einen Namen geben. Man sollte dabei immer einen aussagekräftigen Namen wählen, da man sonst bei einer Vielzahl von Profilen schnell den Überblick verliert. Haben wir einen Namen gewählt, bestätigen wir mit "Ok".<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsK859Qw7lIdYgSF22Sjdt2pqnSUq5UsyYJ22cI8wsrTfC2qvoSili6Etdk2IjTsdXsu3AF-siZJVx_7RLYZ9BKoKcGx1CAdz47vKIvPrQ5tdsnK2SkgKGhA7FUM2CvDZnpypD9DExedU/s1600/2011-08-10_14-15-49.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsK859Qw7lIdYgSF22Sjdt2pqnSUq5UsyYJ22cI8wsrTfC2qvoSili6Etdk2IjTsdXsu3AF-siZJVx_7RLYZ9BKoKcGx1CAdz47vKIvPrQ5tdsnK2SkgKGhA7FUM2CvDZnpypD9DExedU/s320/2011-08-10_14-15-49.jpg" width="192" /></a></div><br />
In dem sich nun öffnenden Menü muss ein Kontext gewählt werden. Ein Kontext gibt an wann das Profil aktiv werden soll, also die Aktionen ausgeführt werden sollen. Zur besseren Übersicht sind diese in verschiedenen Gruppen zusammengefasst:<br />
<ul><li><b>Application</b></li>
<ul><li>Eine (oder mehrere) bestimmte App läuft</li>
</ul><li><b>Time</b></li>
<ul><li>Gibt einen Zeitrahmen an in dem ein Task ausgeführt werden soll, auch wiedrholtes Ausführen ist möglich.</li>
</ul><li><b>Day</b></li>
<ul><li>Gibt bestimmte Tage oder Daten an</li>
</ul><li><b>Location</b></li>
<ul><li>Wenn sich das Handy an einem bestimmten Ort befindet</li>
</ul><li><b>State</b></li>
<ul><li>Ein bestimmter Status wie ungelesene SMS oder verpasster Anruf</li>
</ul><li><b>Event</b></li>
<ul><li>Ein bestimmtes Ereignis, wie empfangene Email, eingehender Anruf und noch viel mehr</li>
</ul></ul>Die einzelnen Gruppen werde ich später noch genauer beschreiben. Für unseren ersten Task wählen wir "State -> Power". Dieser Kontext wird aktiv wenn wir das Handy mit einer Stromquelle verbinden, dabei kann zwischen Netzteil ("AC") und PC ("USB") unterschieden werden. Für unser Profil lassen wir "Source" auf "Any", hierbei ist es egal ob wir das Handy mit dem USB Port oder einem Netzteil verbinden.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht_IdMOkYemZ_Zk0HCfajSneSeq0ZlzJhku2RTnwN4OAkAAzGgboAtJrGK1WGXEkanNp0svo9SSvgVO4fLvdeWQOKq4wFSB20zpLV0CsB7uMFHe8bhA4c_gR5DQZsA1FHLwD7wJJeGejw/s1600/2011-08-10_14-43-46.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht_IdMOkYemZ_Zk0HCfajSneSeq0ZlzJhku2RTnwN4OAkAAzGgboAtJrGK1WGXEkanNp0svo9SSvgVO4fLvdeWQOKq4wFSB20zpLV0CsB7uMFHe8bhA4c_gR5DQZsA1FHLwD7wJJeGejw/s320/2011-08-10_14-43-46.jpg" width="192" /></a></div><br />
Nachdem wir mit "Done" das Fenster geschlossen haben, öffnet sich ein neues Auswahlfenster. Hier werden nun alle schon angelegten Tasks angezeigt, außerdem kann ein neuer Task erstellt werden. Wir wählen nun also unseren "Hallo Welt" Task aus. Nun haben wir unser erstes Profil erstellt. Jetzt sollte Tasker über den Button mit der Aufschrift "On" aktiviert werden. Nach klicken auf "Apply" schließt sich Tasker. Wenn wir nun das Handy an ein Ladenetzteil oder USB-Port anschließen, sollte unser Popup erscheinen.<br />
<br />
Dies war nun der erste Teil meines Tutorals, im nächsten Teil werde ich unter anderem erklären was ein Exit-Task ist und wie man einem Profil mehrere Kontexte zuweisen kann. Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com21tag:blogger.com,1999:blog-226087406924845076.post-91854086968207649942011-08-08T14:30:00.001+02:002011-08-08T14:34:18.285+02:00[Profil] Wecker mit Zeitansage und Auto SnoozeNachdem ich schon vor einer Weile meinen<span style="color: orange;"> </span><span style="font-size: small;"><a href="http://tasker-skripte.blogspot.com/2011/06/profil-wecker-mit-standort-wochentags.html" style="color: orange;">Wecker mit Standort-, Wochentags-, Kalenderfunktion und Snooze</a><span style="color: orange;"> </span>vorgestellt habe, folgt nun ein weiterer Wecker mit Zeitansage und Auto Snooze. </span><br />
<br />
<span style="font-size: small;">Mir ist aufgefallen, dass ich die Snooze Funktion immer auf die selbe Art nutze. Ich lasse den Wecker eine halbe Stunde bevor ich aufstehen muss das erste mal klingeln und drücke die Snooze Taste dann die folgenden 30 Minuten bei jedem erneuten klingeln. Also habe ich mir im ersten Schritt einen Wecker programmiert, der 30 Minuten lang, aller 10 Minuten, also insgesamt 4 mal kurz klingelt. Jetzt bestand aber das Problem das ich nicht wusste ob die halbe Stunde nun schon um war. Deshalb habe ich mit Hilfe der Text-to-Speech (TTS) Funktion von Android eine Zeitansage eingebaut. Anstelle eines klingelns wird mir nun regelmäßig die Zeit angesagt.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNwTPd6gcqGzcuY6O5CWOm6O1B6CHegbBlKxIQ_MCwstyVFoq6ak2NTzvj4yMM3QnVXb8Zg1bCGPbY8yeyaxASPhAxktYct-JkPmcz298Fzj8G81iIAHEqDUMX5zxRf-I9odoBRtygHvI/s1600/2011-08-08_14-13-26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNwTPd6gcqGzcuY6O5CWOm6O1B6CHegbBlKxIQ_MCwstyVFoq6ak2NTzvj4yMM3QnVXb8Zg1bCGPbY8yeyaxASPhAxktYct-JkPmcz298Fzj8G81iIAHEqDUMX5zxRf-I9odoBRtygHvI/s320/2011-08-08_14-13-26.jpg" width="192" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizNrphpOJCsHbTq2cB3HLT2X4efAGnVa1yGEM-vPAntUKYEo22qKHM1nVZSVQLFjMrROMJj7t-uvDGtH9vkZIHtg7BTQAIZYVwCEY-IRZRuu28eTJTgYu5xeZWauUSCSVoimnmscI-Hgc/s1600/2011-08-08_14-14-16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><span style="font-size: small;"><a name='more'></a></span><br />
<span style="font-size: small;">Die Auto Snooze Funktion lässt sich recht einfach mit dem Kontext <span style="color: orange;">"Time"</span> realisieren. Ich möchte zum Beispiel 8 Uhr geweckt werden, da ich 8:30 aufstehen will. Dazu trage ich nun im <span style="color: orange;">"Time" </span>Kontext bei <span style="color: orange;">"From:" </span>8:00 Uhr ein und bei <span style="color: orange;">"To:" </span>8:30 Uhr. Bei <span style="color: orange;">"Repeat:"</span> muss nun die Pause zwischen jedem Wecken eingetragen werden, bei mir sind das 10 Minuten. Nun wird der Task also von 8:00 Uhr bis 8:30 Uhr aller 10 Minuten ausgeführt.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Für die Zeitansage habe ich <span style="color: orange;">"Misc -> Say"</span> genutzt. Hier kann man einen anzusagenden Text einfach eingeben. Bei <span style="color: orange;">"Engine:Voice"</span> muss die zu verwendende TTS-Engine angegeben werden. Mit einem Klick auf die Lupe werden alle installierten TTS Stimmen angezeigt. Sollte hier nichts erscheinen muss im Market eine TTS App installiert werden. Bei "Stream" wird das Audio-Modul gewählt über welches die Ansage ausgegeben werden soll, ich würde ich die Standardeinstellung <span style="color: orange;">"Media"</span> nutzen. Mit <span style="color: orange;">"Pitch"</span> lässt sich Stimmenhöhe und mit <span style="color: orange;">"Speed" </span>die Geschwindigkeit der Ansage anpassen, die Standardeinstellung erzielt da bei mir ganz gute Ergebnisse.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Nun brauchen wir aber noch die aktuelle Uhrzeit für unsere Ansage, diese befindet sich in der Variable <span style="color: orange;">%TIME</span> im Format <span style="color: orange;">"HH.MM"</span>. Da die Sprachengine nun den Punkt mit Ansagt müssen wir die Variable noch etwas bearbeiten. Dazu teilen wir <span style="color: orange;">%TIME</span> mit <span style="color: orange;">"Variable Split" </span>und <span style="color: orange;">"."</span> als Splitter in Stunden und Minuten. Die Stunden befinden sich dann in %TIME1 und die Minuten in <span style="color: orange;">%TIME2</span>. Übergeben wir nun der Sprachausgabe <span style="color: orange;">"%TIME1 Uhr %TIME2"</span> wird die aktuelle Uhrzeit verständlich ausgegeben.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Um sicherzustellen das wir die Ansage auch hören, muss vorher die Medienlautstärke auf Maximum gesetzt werden. Die Medienlautstärke bestimmt allerdings auch die Wiedergabelautstärke des Musik Players. Damit uns beim nächsten Musikgenuss nicht die Ohren abfallen soll die Lautstärke nach dem Weckvorgang wieder auf ihren alten Wert zurückgesetzt werden. Dazu speichern wir diesen in <span style="color: orange;">%VOLM</span> hinterlegten Wert, bevor wir die Lautstärke erhöhen, in der Variable <span style="color: orange;">%VOLMOLD</span> ab. Nach dem Wecken soll die Lautstärke auf den gespeicherten Wert zurückgesetzt werden, um bei <span style="color: orange;">"Media Volume"</span> anstelle des Schiebereglers ein Eingabefeld zu bekommen, muss einfach auf das Symbol mit den zwei blauen Pfeilen gedrückt werden. Um nicht unnötigen Speicher zu verbrauchen, löschen wir mit "Variable Clear" die angelegte Variable <span style="color: orange;">%VOLMOLD</span> im letzten Schritt.</span><br />
<span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Hier nun das komplette Profil:</span><br />
<ul style="color: orange;"><li><b><span style="font-size: small;">Profil: "Wecker mit Ansage"</span></b></li>
<ul><li><b><span style="font-size: small;">Trigger:</span></b></li>
<ol><li><b><span style="font-size: small;">Time </span></b></li>
</ol><ul><ul><li><b><span style="font-size: small;">From: 8:00 Uhr</span></b></li>
</ul><ul><li><b><span style="font-size: small;">Repeat: every 10 Minutes</span></b></li>
</ul><ul><li><b><span style="font-size: small;">To: 8:30 Uhr </span></b></li>
</ul></ul><li><b><span style="font-size: small;">Tasks: </span></b></li>
<ol><li><b><span style="font-size: small;">Variable -> Variable Set</span></b></li>
<ul><li><b><span style="font-size: small;">Name: %VOLMOLD</span></b></li>
</ul><ul><li><b><span style="font-size: small;">To: %VOLM </span></b></li>
</ul><li><b><span style="font-size: small;">Audio -> Media Volume</span></b></li>
<ul><li><b><span style="font-size: small;"> Level: 15</span></b></li>
</ul><li><b>Variable -> Variable Split</b></li>
<ul><li><b>Name: %TIME</b></li>
<li><b>Splitter: .</b></li>
</ul><li><b>Misc -> Say</b></li>
<ul><li><b>Text: Aufwachen! Es ist %TIME1 Uhr %TIME2.</b></li>
<li><b>Engine:Voice: [die entspr. Stimme auswählen] </b></li>
</ul><li><b>Audio -> Media Volume</b></li>
<ul><li><b>Level: %VOLMOLD</b></li>
</ul><li><b>Variable -> Variable Clear</b></li>
<ul><li><b>%VOLMOLD </b></li>
</ul></ol></ul></ul>Im Tasker sollte das dann folgendermaßen ausschauen:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizNrphpOJCsHbTq2cB3HLT2X4efAGnVa1yGEM-vPAntUKYEo22qKHM1nVZSVQLFjMrROMJj7t-uvDGtH9vkZIHtg7BTQAIZYVwCEY-IRZRuu28eTJTgYu5xeZWauUSCSVoimnmscI-Hgc/s1600/2011-08-08_14-14-16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizNrphpOJCsHbTq2cB3HLT2X4efAGnVa1yGEM-vPAntUKYEo22qKHM1nVZSVQLFjMrROMJj7t-uvDGtH9vkZIHtg7BTQAIZYVwCEY-IRZRuu28eTJTgYu5xeZWauUSCSVoimnmscI-Hgc/s320/2011-08-08_14-14-16.jpg" width="192" /></a></div><br />
Die in meinem "alten" Wecker beschriebenen Kalender, Standort und Wochentagsfunktionen können natürlich auch hier wieder hinzugefügt werden. Dazu einfach auf den schon angelegten <span style="color: orange;">"Time"</span> Kontext und dann auf<span style="color: orange;"> "Add" </span>klicken. <br />
<br />
Viel Spaß :)<br />
<br />
<ul><ul><ul></ul></ul></ul>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com22tag:blogger.com,1999:blog-226087406924845076.post-74245051176499607162011-08-04T13:17:00.000+02:002011-08-04T13:17:04.219+02:00[Profil] Wo steht mein Auto?Wer kennt das nicht? Nach dem Einkaufbummel steht man auf dem Parkplatz vor einer unübersehbaren Menge von Autos und irgendwo dazwischen steht das eigene, nur leider weiß man nicht mehr so genau wo. Abhilfe soll dieses Tasker Widget schaffen. Nach dem Parken kurz das Widget anklicken, nun wird GPS aktiviert und die aktuelle Position gespeichert. Nach dem einkaufen einfach nochmals klicken und es öffnet sich die Google Navigation, welche einen nun zum Auto führt. Dies ist aber sicherlich nur eine Anwendung für ein solches Profil.<br />
<br />
<a name='more'></a><br />
<br />
Der Task besteht aus zwei Teilen, Teil 1 ermittelt die aktuelle Position und speichert diese ab. Teil 2 öffnet die Google Navigation und zeigt die gespeicherte Position an. Da immer nur ein Teil ausgeführt werden soll, nutzen wir die If-Bedingung. Diese überprüft ob die Position abgespeichert wurde, wenn ja wir die Navigation geöffnet wenn nicht wird die Position gespeichert.<br />
<br />
Hier nun also der Task, um einen neuen Task zu erstellen einfach auf <span style="color: orange;">"Tasks"</span> und dann auf <span style="color: orange;">"Add Task" </span>klicken.<br />
<ul style="color: orange;"><li><b>Task: "Position"</b></li>
<ol><li><b>Tasker -> If %POSITION Is Set</b></li>
<li><b>App -> Open Map</b></li>
<ul><li><b>Mode: Navigate To</b></li>
<li><b>Lat,Long: %POSITION</b></li>
</ul><li><b>Variable -> Variable Clear</b></li>
<ul><li><b>Name: %POSITION</b></li>
</ul><li><b>Tasker -> Set Widget Icon</b></li>
<ul><li><b>Name: Position</b></li>
<li><b>Icon: (was passendes)</b></li>
</ul><li><b>Tasker -> Set Widget Label</b></li>
<ul><li><b>Name: Position</b></li>
<li><b>Label: Save Pos.</b></li>
</ul><li><b>Tasker -> Stop</b></li>
<li><b>Tasker -> End If</b></li>
<li><b>Misc -> Get Location</b></li>
<ul><li><b>Source: GPS</b></li>
<li><b>Timeout: 120 Seconds</b></li>
</ul><li><b>Variable -> Variable Set</b></li>
<ul><li><b>Name: %POSITION</b></li>
<li><b>To: %LOC</b></li>
</ul><li><b>Tasker -> Set Widget Icon</b></li>
<ul><li><b>Name: Position</b></li>
<li><b>Icon: (was schönes)</b></li>
</ul><li><b>Tasker -> Set Widget Label</b></li>
<ul><li><b>Name: Position</b></li>
<li><b>Label: Show Pos.</b></li>
</ul></ol></ul>Die Aktion <span style="color: orange;">"Get Position"</span> aktiviert das GPS und wartet so lange bis die aktuelle Position ermittelt, oder das Timeout überschritten wurde. In der Variable <span style="color: orange;">%LOC</span> befindet sich die letzte über GPS gespeicherte Position, d.h. sie wird überschrieben wenn wir zum Beispiel Maps öffnen und warten bis die Position gefunden wurde. Deshalb speichern wir die eben über <span style="color: orange;">"Get Position"</span> ermittelte Position in einer eigenen Variablen <span style="color: orange;">%POSITION</span> ab.<br />
<br />
Bei <span style="color: orange;">"Set Widget Label"</span> und <span style="color: orange;">"Set Widget Icon"</span> ist zu beachten, dass unter <span style="color: orange;">"Name"</span> der Name des Widgets stehen muss, das verändert werden soll. Ein Widget erhält automatisch den Namen des Task der ausgeführt wird wenn es angeklickt wird. Wer also den Task nicht <span style="color: orange;">"Position"</span> nennt, muss auch unter <span style="color: orange;">"Name" </span>seine Version eintragen.<br />
<br />
Im <span style="color: orange;">"Task Edit"</span> Fenster wählen wir noch mit dem zweiten Button von rechts, also links neben dem roten Kreuz, ein passendes Icon aus. Das Widget erstellen wir indem wir das Widget hinzufügen Menü öffnen und dann <span style="color: orange;">"Task"</span> auswählen. In dem sich öffnenden Fenster wählen wir unseren Task <span style="color: orange;">"Position" </span>aus.<br />
<br />
Bei <span style="color: orange;">"Open Map"</span> kann man statt <span style="color: orange;">"Navigate To"</span> auch <span style="color: orange;">"Point"</span> als Modus wählen, leider zeigt Google Maps dann aber eine Karte ohne Markierung der Position an. Dies hilft uns ja nicht viel weiter, deswegen habe ich als Modus "<span style="color: orange;">Navigate To"</span> gewählt.Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com21tag:blogger.com,1999:blog-226087406924845076.post-34929348140347629052011-08-04T12:25:00.000+02:002011-08-04T12:25:10.520+02:00[Profil] Wiederholte Benachrichtigung bei ungelesener SMS oder verpasstem AnrufDa ich öfters die Benachrichtigung über eine neue SMS nicht bemerke, habe ich nun ein Profil erstellt welches mich so lange über die ungelesene SMS informiert bis ich es dann endlich bemerkt habe. Ein zweites Profil macht das gleiche für einen verpassten Anruf.<br />
<a name='more'></a><br />
Als erstes Erstellen wir den Benachrichtigungstask, da wir ihn für beide Profile nutzen können. Das Smartphone soll akustisch und durch Vibration auf sich aufmerksam machen. Für den Vibrationsalarm habe ich <span style="color: orange;">Alert -> Vibrate Pattern</span> gewählt. Hierbei kann man Einstellen in welchem Rythmus das Handy vibrieren soll. Der Rythmus wird durch Komma getrennte Millisekundenwerte erstellt. Der erste Wert steht für eine Pause, der zweite für die Zeit in der vibriert werden soll, die nächsten Werte stehen dann immer abwechselnd für Pause oder Vibration. Ich habe den Rhythmus zweimal kurz, einmal lang gewählt.<br />
<br />
Für das akustische Signal verwende ich <span style="color: orange;">Media -> Music Play</span>. Hierbei muss einfach nur die abzuspielende Datei ausgewählt werden. Das Problem ist aber das diese auch abgespielt wird wenn das Handy im Vibrationsmodus ist, das ist natürlich nicht gewünscht. In der Variable<span style="color: orange;"> %SILENT</span> wird jedoch abgelegt ob der Vibrationsmodus aktiviert ist, über eine If-Bedingung fragen wir den Zustand der Variable ab und führen <span style="color: orange;">Music Play</span> nur aus wenn der <span style="color: orange;">Silent Mode</span> deaktiviert ist.<br />
<br />
Um den Task zu erstellen einfach auf <span style="color: orange;">"Tasks"</span> und danach auf <span style="color: orange;">"New Task"</span> gehen, ich habe meinen Task <span style="color: orange;">"Verpasst"</span> genannt.<br />
<ul style="color: orange;"><li><b> Task: "Verpasst"</b></li>
<ol><li><b>Alert -> Vibrate Pattern</b></li>
<ul><li><b>0,250,500,250,500,500</b></li>
</ul><li><b>Media -> Music Play</b></li>
<ul><li><b>File: Notifications/3005.mp3</b></li>
<li><b>If %SILENT ~ off</b></li>
</ul></ol></ul>Da ich mir mal ein Tonprofil von HTC runtergeladen habe, konnte ich auf meiner SD-Karte die angegebene Datei finden. Aber es sollte sicher kein Problem darstellen eine kurze Audiodatei im Internet zu finden, die man nehmen kann.<br />
<br />
Kommen wir nun zu den Profilen. Wir benötigen je ein Profil für die verpasste SMS und den verpassten Anruf. Damit der Task nun regelmäßig ausgeführt wird benötigen wir einen Zeit-Kontext der aller paar Minuten aktiv wird. Dafür nehmen wir einfach <span style="color: orange;">"Time"</span> und stellen bei <span style="color: orange;">"Repeat"</span> zum Beispiel 2 Minuten ein. Da man Nachts sicherlich nicht andauernd benachrichtigt werden möchte, habe ich noch eine Start und Endzeit hinzugefügt. Wer dies nicht möchte nimmt die Haken bei <span style="color: orange;">"From" </span>und <span style="color: orange;">"To"</span> einfach raus.<br />
<br />
<ul style="color: orange;"><li><b> Profil 1: verpasste SMS</b></li>
<ul><li><b>Trigger:</b></li>
<ol><li><b>State -> Unread Text</b></li>
<li><b>Time</b></li>
<ul><li><b>From: 08:00</b></li>
<li><b>Repeat: every 2 Minutes</b></li>
<li><b>To: 23:00</b></li>
</ul></ol><li><b>Taks: "Verpasst"</b></li>
</ul><li><b>Profil 2: verpasster Anruf</b></li>
<ul><li><b>Trigger:</b></li>
<ol><li><b>State -> Missed Call</b></li>
<li><b>Time</b></li>
<ul><li><b>From: 08:00</b></li>
<li><b>Repeat: every 2 Minutes</b></li>
<li><b>To: 23:00</b></li>
</ul></ol><li><b>Task: "Verpasst" </b></li>
</ul></ul>Das wars schon, viel Spaß damit :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com16tag:blogger.com,1999:blog-226087406924845076.post-79549154355257342932011-07-06T09:35:00.001+02:002011-07-06T10:00:48.569+02:00[Profil] Email Funktion für das NotizenwidgetIch wollte mir grade eine Notiz in Googles Aufgabenfenster eintragen, da dachte ich mir, eigentlich wäre es doch cool wenn ich die vom PC auf mein <a href="http://tasker-skripte.blogspot.com/2011/06/profil-notizen-widget-mit-txt-datei.html" style="color: orange;">Notizenwidget</a><span style="color: orange;"> </span>übertragen kann. Gesagt getan, mit diesem Profil soll es möglich sein Notizen per Email an das Widget zu senden. Wieterhin sollen die vorhandenen Notizen auch an eine beliebige Email Adresse versendet werden können.<br />
<br />
Da man leider nur auf die Betreffzeile einer eingehenden Email zugreifen kann, muss sich alles dort abspielen. Damit nicht jede Email als Notiz hinzugefügt wird, brauchen wir eine Kennung. Am naheliegensten ist da das Wort <span style="color: orange;">"Notiz"</span>, dann noch ein <span style="color: orange;">":"</span> als Splitter für <span style="color: orange;">"Variable Split" </span>und nun kann die Notiz folgen. Der Rest läuft nun wie im <span style="color: orange;">"Notiz hinzufügen"</span> Task.<br />
<a name='more'></a>Hier das Profil:<br />
<ul style="color: orange;"><li><b>Profil: "Email an Notiz"</b></li>
<ul><li><b>Trigger:</b></li>
<ol><li><b>Event -> K9 Email Received</b></li>
<ul><li><b>From: "Bernd Kellermann" <Bernd@Kellermanns.com></b></li>
</ul></ol><li><b>Tasks:</b></li>
<ol><li><b>Variable -> Variable Split</b></li>
<ul><li><b>Name: %ESUBJ</b></li>
<li><b>Splitter: :</b></li>
</ul><li><b>Tasker -> If %ESUBJ1 ~ Notiz</b></li>
<li><b>Variable -> Variable Add</b></li>
<ul><li><b>Name: %COUNT</b></li>
<li><b>Value: 1</b></li>
</ul><li><b>File -> Write File</b></li>
<ul><li><b>File: Notizen.txt</b></li>
<li><b>Text: %COUNT) %ESUBJ2</b></li>
<li><b>Append: Yes</b></li>
</ul><li><b>Tasker -> Perform Task</b></li>
<ul><li><b>Name: Notizen aktualisieren</b></li>
</ul></ol></ul></ul>Der Absender bei <span style="color: orange;">"K9 Email Received" </span>hat mir ein paar Probleme bereitet. Man muss ihn wirklich genau so angeben wie ihn K9 erhält. Das heißt es reicht nicht nur die Adresse anzugeben. Es muss in dem Schema angegeben werden wie ich es gemacht habe. Wenn natürlich nur die Adresse als Absender übertragen wird, dann reicht diese.<br />
<br />
Die Variable <span style="color: orange;">%COUNT</span> speichert die Anzahl der Notizen. Diese habe ich auch schon im Notizenwidget genutzt, somit enthält sie auch schon den aktuellen Wert. Zum Schluss wird das Widget aktualisiert, d.h. die txt-Datei wird neu eingelesen. Diesen Task habe ich in meinem Beitrag zum <a href="http://tasker-skripte.blogspot.com/2011/06/profil-notizen-widget-mit-txt-datei.html" style="color: orange;">Notizenwidget</a> beschrieben.<br />
<br />
Kommen wir nun zum versenden der Notizen an eine beliebige Email Adresse. Der Task liest alle Notizen ein und schickt diese an die angegebene Email Adresse.<br />
<ul style="color: orange;"><li><b>Task: Notizen versenden</b></li>
<ol><li><b>Variable -> Variable Query</b></li>
<ul><li><b>Name: %MAIL</b></li>
</ul><li><b>File -> Read Paragraph</b></li>
<ul><li><b>File: Notizen.txt</b></li>
<li><b>To Var: %NOTIZEN</b></li>
</ul><li><b>File -> Read Paragraph</b></li>
<ul><li><b>File: Notizen.txt</b></li>
<li><b>To Var: %NOTIZEN</b></li>
<li><b>If %NOTIZEN ~ EOF</b></li>
</ul><li><b>File -> Write File</b></li>
<ul><li><b>File: Tasker/mail.conf</b></li>
</ul><li><b>Misc -> Run Script </b></li>
<ul><li><b>sendemail.py</b></li>
</ul></ol></ul>Nun muss das Widget noch um einen Button erweitert werden, mit welchem der Task dann gestartet werden kann. Ich habe dazu ein weiteres Bild hinzugefügt und als Click Action den oben beschriebenen Task ausgewählt.<br />
<br />
Viel Spaß :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com4tag:blogger.com,1999:blog-226087406924845076.post-90278685228242410782011-07-01T14:37:00.000+02:002011-07-01T14:37:15.572+02:00[Tutorial] 3rd Party AppsDie Entwickler von Tasker haben eine Menge Plugins geschrieben um externe Programme zu steuern oder auf Nachrichten dieser zu reagieren. Inzwischen ist die Anzahl an unterstützten Apps ansehnlich gestiegen. Da es da eine Weile dauert sich durch alle Apps durchzukämpfen habe ich einmal eine Übersicht zu den "3rd Party Apps" erstellt. Einige Apps sind nur als Trigger verwendbar, andere nur als Task. Trotzdem lassen sich sehr interessante Anwendungen realisieren, wenn man eine für sich allein schon nützliche App mit Tasker verbindet. Bei manchen Apps funktioniert die Tasker integration nur mit einer Bezahlversion, da ich die Tasker-Integration da nicht selber testen konnte, habe ich mich da nur im Internet ein bisschen informiert.<br />
<br />
<a name='more'></a><br />
<br />
Die jeweiligen Trigger finden sich unter "Event -> 3rd Party". Die Tasks direkt unter "3rd Party".<br />
<br />
<div style="color: orange;"><b>Android Notifier:</b></div>Mit dieser App lassen sich Benachrichtigungen vom Androiden auf den PC anzeigen. Dazu ist neben der Android App auch ein Programm für den PC notwendig. Mit Tasker lassen sich auch eigene Benachrichtigungen durchschleifen.<br />
<ul style="color: orange;"><li><b>Task: Android Notifier</b></li>
<ul><li><b>Title</b></li>
<li><b>Message</b> </li>
</ul></ul><div style="color: orange;"><b>Astrid:</b></div>Astrid ist ein Aufgabenplaner, mit einer Synchronisierungsfunktion für Google und Producteev, die Synchronisierung kann über Tasker gestartet werden.<br />
<ul style="color: orange;"><li><b>Task: Astrid</b></li>
<ul><li><b>Cmd</b></li>
<ul><li><b>Google Task Sync</b></li>
<li><b>Producteev Syn</b></li>
</ul></ul></ul><div style="color: orange;"><b>BeyondPod:</b></div>BeyondPod ist ein recht starker Podcast Manager. Neue Podcasts werden automatisch gefunden und können über BeyonPod runtergeladen und abgespielt werden. Mit Tasker kann man auf die Abspielfunktionen von BeyonPod zugreifen.<br />
<ul style="color: orange;"><li><b>Task: BeyondPod</b></li>
<ul><li><b>Cmd</b></li>
<ul><li><b>Start Smart Play</b></li>
<li><b>Update Smart Play</b></li>
<li><b>Play</b></li>
<li><b>Pause</b></li>
<li><b>Play Previous</b></li>
<li><b>Skip Forward</b></li>
<li><b>Skip Backward</b></li>
<li><b>Skip To End</b></li>
<li><b>Play Next</b> </li>
</ul></ul></ul><div style="color: orange;"><b>Due Today:</b></div>Ein weitere Aufgabenplaner mit Synchronisierungsfunktion die über Tasker gestartet werden kann.<br />
<ul style="color: orange;"><li><b>Task: Due Today</b></li>
<ul><li><b>Sync</b> </li>
</ul></ul><br />
<div style="color: orange;"><b>Gentle Alarm:</b></div>Gentle Alarm ist ein sehr vielseitiger Wecker, seine Spezialisierung liegt wie der Name schon sagt im sanften Aufwecken des Schläfers.<br />
<br />
Als Trigger kann zum Beispiel der Begin eines Alarms verwendet werden. Aber auch das "Snoozen" bzw. deaktivieren des Alarms.<br />
<ul style="color: orange;"><li><b>Trigger: Gentle Alarm</b></li>
<ul><li><b>Event:</b></li>
<ul><li><b>Alarm Begin</b></li>
<li><b>Alarm Snoozed</b></li>
<li><b>Alarm Dismissed </b></li>
</ul></ul></ul>Über einen Task lassen sich einzelne, oder auch alle Alarma de- und aktivieren.<br />
<ul style="color: orange;"><li><b>Task: Gentle Alarm</b></li>
</ul><div style="color: orange;"><b>Juice Defender:</b></div>Mit Juice Defender lassen sich Profile erstellen um bestimmte Dienste wie Datenmodus unter bestimmten Umständen automatisch zu deaktivieren. Somit kann man ein bisschen die Akkulaufzeit verlängern. Mit Tasker kann man auf die Einstellung für die Datenverbindung zugreifen und Juice Defender an sich starten bzw. stoppen.<br />
<ul style="color: orange;"><li><b>Tasks:</b></li>
<ul><li><b>JD APN - Mobile Data an und aus schalten<br />
</b></li>
<ul><li><b>Set</b></li>
<ul><li><b>Disable APNs</b></li>
<li><b>Enable APNs</b></li>
<li><b>Juice Defender Control - Juice Defender entscheidet<br />
</b></li>
</ul></ul><li><b> JD Status</b></li>
<ul><li><b>Set - Juice Defender de-/aktivieren</b></li>
</ul></ul></ul><div style="color: orange;"><br />
</div><div style="color: orange;"><b>K9 Mail:</b></div>K9-Mail ist eine recht starke Alternative zum Standard GMail-Klienten. Seine Stärken spielt er vor allem beim POP3 / IMAP Import von nicht Google Mailkonten aus. Über Tasker kann auf empfangene Emails von bestimmten Personen bzw. mit bestimmten Absendern, oder generell auf alle Mails reagieren.<br />
<ul style="color: orange;"><li><b>Trigger: K9 Email Received</b></li>
<ul><li><b>From</b></li>
<li><b>Subject</b></li>
</ul></ul><div style="color: orange;"><b>Kaloer Clock:</b></div>Kaloer Clock ist ein weiterer Wecker, der ein paar nützliche Zusatzfunktionen bietet. Mit Tasker kann man auf das Starten des Weckens sowie auf die Nutzereingaben "Snooze" und "Dismiss" reagieren.<br />
<ul style="color: orange;"><li><b>Trigger: Kaloer Clock</b></li>
<ul><li><b>Event:</b></li>
<ul><li><b>Started</b></li>
<li><b>Dismissed</b></li>
<li><b>Snoozed</b></li>
</ul></ul></ul><div style="color: orange;"><b>NewsRob:</b></div>Ein RSS Reader mit Google Reader Sync. Mit Tasker kann die Synchronisierung gestartet und gestoppt werden.<br />
<br />
<ul style="color: orange;"><li><b> Task: NewsRob</b></li>
<ul><li><b>Cmd</b></li>
<ul><li><b>Sync</b></li>
<li><b>Cancel Sync</b></li>
</ul></ul></ul><div style="color: orange;"><b>Office Talk:</b></div>Chatclient für Microsofts Office Communicator Dienst. Eigentlich soll man den eigenen Status ändern können, wenn ich das richtig verstanden habe. Allerdings hat weder das Installieren von "OfficeTalk" noch von "Office Talk Free" die Aktion freigeschalten. Eventuell ist es ein Pro only Feature von "Office Talk".<br />
<ul style="color: orange;"><li><b>Task: OfficeTalk</b></li>
</ul><div style="color: orange;"><b>OpenWatch:</b></div>Mit OpenWatch lassen sich Benachrichtigungen, SMSen und Anrufe an eine unterstützte Bluetooth Uhr weitergeben. Außerdem kann der Medienplayer kontrolliert werden. Mit Tasker ist es nun möglich auf das drücken der verschiedenen Knöpfe an der Uhr zu reagieren. <br />
<ul style="color: orange;"><li><b>Trigger: OpenWatch</b></li>
<ul><li><b>Event:</b></li>
<ul><li><b>Play / Pause</b></li>
<li><b>Fast Forward</b></li>
<li><b>Rewind</b></li>
<li><b>Volume Up</b></li>
<li><b>Volume Down</b></li>
</ul></ul></ul><div style="color: orange;"><b>Pomodroido Pro:</b></div>Pomodoro mit dem Android. Pomodoro ist eine Arbeitsweise, ds heißt kurze Arbeitsintervalle (15 Minuten) gefolgt von Pausen (5 Minuten). Während der Arbeitsintervalle soll man sich durch nichts stören lassen. Promodroido hilft dies umzusetzen. Mit Tasker kann man Aktionen ausführen sobald Promodroido in das Arbeitsintervall wechselt, zBsp. in den Flugmodus wechseln um absolut nicht gestört zu werden.<br />
<ul style="color: orange;"><li><b>Trigger: Pomodroido</b></li>
<ul><li><b>Started</b></li>
</ul></ul><br />
<br />
<div style="color: orange;"><b>Radardroid:</b></div>Ein Blitzerwarner mit Online-Datenbank. Mit Tasker kann auf das starten des Services reagiert werden um zBsp das Navi zu starten.<br />
<ul style="color: orange;"><li><b>Trigger: Alarmdroid</b></li>
<ul><li><b>Started</b></li>
</ul></ul><div style="color: orange;"><b>Reddit Notify:</b></div>Es sollte mal ein Plugin für Reddit geben, wurde aber scheinbar noch nicht umgesetzt, deshalb noch ohne Nutzen.<br />
<br />
<div style="color: orange;"><b>Screebl Pro:</b></div>Mit Screebl lässt sich das Displaytimeout anhand der Orientierung ändern. So kann es auf unendlich gesetzt werden wenn das Handy ungefähr waagerecht in der Leseposition ist. Screebl stellt in der Pro Version ein Event für Tasker zur Verfügung wenn die abgespeicherte Orientierung aktiv wird. So können auch andere Aktionen orientierungsabhängig ausgeführt werden.<br />
<br />
<ul style="color: orange;"><li><b>Trigger: Screebl</b></li>
</ul><div style="color: orange;"><b>Sleep Bot:</b></div>Analysiert den Schlaf indem es Bewegungen während des Schlafens aufzeichnet. Mit Tasker kann der Aufzeichnungsmodus gestartet und gestoppt werden.<br />
<br />
<ul style="color: orange;"><li><b>Task: SleepBot</b></li>
<ul><li><b>Punch - Schlafmodus de-/aktivieren<br />
</b></li>
<ul><li><b>In</b></li>
<li><b>Out</b></li>
</ul></ul></ul><div style="color: orange;"><b>SMS Backup +:</b></div>SMSen und Anrufe nach GMail, GKalender exportieren. Mit Tasker kann die App und somit der Exportvorgang gestartet werden.<br />
<br />
<ul style="color: orange;"><li><b>Task: SMS Backup+ - App starten</b></li>
</ul><div style="color: orange;"><b>TeslaLED Flashlight:</b></div>Eine Taschenlampe die den LED Blitz als Lichtquelle nutzt. Es lassen sich auch Morsezeichen darstellen. Mit Tasker lässt sich die LED aktivieren. So kann zum Beispiel ein Stroboskop programmiert werden.<br />
<br />
<ul style="color: orange;"><li><b>TeslaLED</b></li>
<ul><li><b>Set</b></li>
<ul><li><b>Off</b></li>
<li><b>On</b></li>
<li><b>Toggle</b> </li>
</ul></ul></ul><div style="color: orange;"><b>Widget Locker:</b></div>Mit Widget Locker kann der Sperrbilschirm des Androiden angepasst werden. Es können weitere Schiebebalken hinzugefügt, oder Verknüpfungen zu Apps erstellt werden. Mit Tasker kann man einmal auf das Ent- bzw. Sperren des Bildschirmes reagieren, sowie wenn eine App vom Sperrbildschirm aus gestartet wurde, dieser bleibt dann aktiv ist aber versteckt. Außerdem lässt sich der Sperrbildschirm in einem Task de- und aktivieren.<br />
<ul style="color: orange;"><li><b>Trigger: Widget Locker</b></li>
<ul><li><b>Event: </b></li>
<ul><li><b>Locked</b></li>
<li><b>Unlocked</b></li>
<li><b>Hidden</b></li>
</ul></ul></ul><ul style="color: orange;"><li><b>Task: Widget Locker</b></li>
<ul><li><b>Enable / Disable</b></li>
<li><b>Suspend / Resume</b></li>
</ul></ul>So das waren alle zurzeit von Tasker nativ unterstützten Apps.Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com15tag:blogger.com,1999:blog-226087406924845076.post-36329415688805354142011-06-23T14:39:00.000+02:002011-06-23T14:39:02.279+02:00[Tutorial] Einführung in ZoomDa ich nun schon einige Widgets mit <a href="http://zoom.dinglisch.net/" style="color: orange;">Zoom</a><span style="color: orange;"> </span>erstellt habe, folgt nun ein kleines Tutorial zum Umgang mit dieser App. Für alle die Zoom noch nicht kennen, die App ist vom gleichen Entwickler wie Tasker. Mit ihr lassen sich Widgets erstellen, deren Inhalt komplett frei angepasst werden kann. Mit Hilfe von Tasker lassen sich die Widgets auch automatisiert verändern. So kann man zum Beispiel eingehende Nachrichten auf einem Widget anzeigen lassen. Ein Widget zu erstellen ist dabei gar nicht so schwer.<br />
<br />
<br />
<a name='more'></a>Nach der Installation von Zoom finden sich im Widget Menü eine Menge neuer Zoom Widgets. Zu erst sollte man die zwei Calibration Widgets nacheinander erstellen, damit sich Zoom kalibrieren kann. Führt man diese Widgets nicht aus, kann es zu Fehlern in der Darstellung der Widgets kommen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2ZLgla0fJsc6ipoKNdWIiITdvZfJttWEDYTedctfJmw7-lrn9ensrAqzLkgXkGG73BALL5IHdsw68FOtr5Br4GF_QXWqQKLX2ujaVK-uewm2foqPgh3v_0BSsC0lDy17kD5_gRz90_AA/s1600/snap20110623_134010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2ZLgla0fJsc6ipoKNdWIiITdvZfJttWEDYTedctfJmw7-lrn9ensrAqzLkgXkGG73BALL5IHdsw68FOtr5Br4GF_QXWqQKLX2ujaVK-uewm2foqPgh3v_0BSsC0lDy17kD5_gRz90_AA/s320/snap20110623_134010.png" width="192" /></a></div><br />
Nachdem wir Zoom kalibriert haben können wir unser erstes Widget erstellen. Dazu gehen wir wieder in das <span style="color: orange;">"Widget hinzufügen" </span>Menü und wählen eine Größe aus. Zum Test habe ich das 4x1 Widget gewählt. Als nächstes kommt ein Popup in dem wir entweder aus schon vorhandenen Templates (dazu später mehr) ein Widget auswählen oder ein neues erstellen können. Da wir noch keine Templates haben erstellen wir ein neues Widget. Nun öffnet sich Zoom in der <span style="color: orange;">"Widget Bearbeiten" </span>Ansicht. Als erstes müssen die allgemeinen Eigenschaften des Widget eingestellt werden. Also Name (um später über Tasker darauf zugreifen zu können) und Hintergrundfarbe. Ich nehme immer einen Schwarz-trasparenten Hintergrund, dazu einfach den Schieberegler bei der Farbeinstellung für den Hintergrund ungefähr bis zur Mitte schieben. Als Name wähle ich jetzt<span style="color: orange;"> "Test.w" </span>Mit dem grünen Haken bestätigen wir unsere Einstellungen und schließen das Fenster. Nun sehen wir ein leeres Widget vor uns. Durch längeres drücken auf das Widget erscheint ein Popup indem wir verschiedene Elemente zum hinzufügen auswählen können.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNmTKD21ulVHtD6uiB1-eicjGVw6yk-fsj83MfjEEVvcvRALpI6CYoMgwGlZoc6ulBel8ZALt3lSILL3XVRknPIEK4NlhBdNI0sZ1alkChB-9rU_F77uX0AnyYSyhpAFhcWBJTSZeXaWs/s1600/snap20110623_134249.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNmTKD21ulVHtD6uiB1-eicjGVw6yk-fsj83MfjEEVvcvRALpI6CYoMgwGlZoc6ulBel8ZALt3lSILL3XVRknPIEK4NlhBdNI0sZ1alkChB-9rU_F77uX0AnyYSyhpAFhcWBJTSZeXaWs/s320/snap20110623_134249.png" width="192" /></a></div><br />
Wir haben nun die Wahl zwischen einer Vielzahl an Elementen.<br />
<ul style="color: orange;"><li>Button</li>
<ul><li>Ein Button</li>
</ul><li>Image</li>
<ul><li>Ein Bild, dies kann ein Appicon oder ein Bild aus dem lokalen Verzeichnis sein</li>
</ul><li>Text</li>
<ul><li>Ein Element zum Anzeigen von Texten</li>
</ul><li>Doodle</li>
<ul><li>Ein selbstgemaltes Bild. Nach Klick öffnet sich ein Fenster in welchem das Bild gemalt werden kann.</li>
</ul><li>Oval / Rectangle</li>
<ul><li>Ein geometrischer Körper. Es können Farbe, Größe etc. verändert werden</li>
</ul><li>Switcher</li>
<ul><li>Ähnlich wie ein Button, nur als umlegbarer Schalter ausgeführt</li>
</ul></ul>Alle Elemente lassen sich frei in Größe und Position konfigurieren. Zusätzlich kann man jedem Element ein <span style="color: orange;">"Click"</span> Ereignis hinzufügen. Also was passieren soll wenn das Element berührt wird. Dies kann das Starten einer App oder eines Tasker Tasks sein, sowie das Ändern der Eigenschaften der Elemente. Am besten man schaut sich einfach mal die Liste der Möglichkeiten an, diese sind eigentlich selbst erklärend. Zum Test soll nun ein Text und Bild Element hinzugefügt werden. Nachdem die Elemente positioniert wurden, sollte dies ungefähr so ausschauen:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG-4V4taf73al64ws-xZmTNViwKB90Dx6jc1h3qMoN77gAjiXle5U3AN3HksHyL3XAcHsjQBp1O6yxRENfATyjzoKzOT22IcFBktRlRcaBMUCIm8kUT5x4aUSyDhofoA6xyLqaGMUnY48/s1600/snap20110623_134437.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG-4V4taf73al64ws-xZmTNViwKB90Dx6jc1h3qMoN77gAjiXle5U3AN3HksHyL3XAcHsjQBp1O6yxRENfATyjzoKzOT22IcFBktRlRcaBMUCIm8kUT5x4aUSyDhofoA6xyLqaGMUnY48/s320/snap20110623_134437.png" width="192" /></a></div><br />
Das Bild ist ein in Tasker eingebautes Icon, dieses findet man unter <span style="color: orange;">"Icon Pack -> Tasker built-in"</span>. Mit einem Klick auf den grünen Haken wird das Widget abgespeichert und auf dem Homescreen abgelegt.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhByB9h0dglUOOio92ydFmfYlN9TVzB8Fuj0nPbJh3eHuIs_uzMwYOKF-nr8IlRt7jDGCamEQ0rDp6CpJOdZk9o17i6Glkt5lNL_UbXsgz36l3B-G2QZC8lrVhZes0GUVEDrsCWHh5uweI/s1600/snap20110623_134648.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhByB9h0dglUOOio92ydFmfYlN9TVzB8Fuj0nPbJh3eHuIs_uzMwYOKF-nr8IlRt7jDGCamEQ0rDp6CpJOdZk9o17i6Glkt5lNL_UbXsgz36l3B-G2QZC8lrVhZes0GUVEDrsCWHh5uweI/s320/snap20110623_134648.png" width="192" /></a></div><br />
Da rein statische Widgets ja ziemlich langweilig sind, wollen wir unser Widget nun mit Hilfe von Tasker verändern. Als Beispiel soll nun bei einer eingehenden SMS der Absender und Inhalt der SMS auf dem Widget angezeigt werden. Damit Tasker auf das Widget zugreifen kann muss in den Taskereinstellungen unter <span style="color: orange;">"Misc"</span>, <span style="color: orange;">"Allow External Access"</span> aktiviert werden. Nun erstellen wir im Tasker ein neues Profil. Als Trigger wählen wir <span style="color: orange;">"Text Received"</span>. Die <span style="color: orange;">"Priority" </span>sollte auf Maximum gestellt werden, da es sonst einige Zeit dauern kann bis Tasker auf die eingehende SMS reagiert. Um nun den SMS Inhalt auf dem Widget auszugeben müssen wir auf das Textfeld des Widgets zugreifen, dies geschieht unter <span style="color: orange;">"Zoom -> Element Text"</span>. Nun kann man mit Klick auf die Lupe das entsprechende Element auswählen. In der Variablen <span style="color: orange;">%SMSRN</span> befindet sich der Absender der Nachricht, in <span style="color: orange;">%SMSRB</span> der Inhalt. Das fertige Profil sollte dann folgendermaßen aussehen:<br />
<ul style="color: orange;"><li><b>Profil: SMS auf Widget</b></li>
<ul><li><b>Trigger:</b></li>
<ol><li><b>Event -> Phone -> Received Text</b></li>
<ul><li><b>Type: SMS</b></li>
</ul></ol><li><b>Tasks:</b></li>
<ol><li><b>Zoom -> Element Text</b></li>
<ul><li><b>Element: Test.w / Text1 </b></li>
<li><b>Text: %SMSRN: %SMSRB</b></li>
</ul></ol></ul></ul>Das wars schon. Bei einer ankommenden SMS sollten nun automatisch Absender und Nachricht im Widget angezeigt werden. Als nächstes möchten wir das bei Klick auf das Widget die SMS App gestartet wird und die Nachricht wieder auf dem Widget entfernt wird. Dazu müssen wir zunächst einen entsprechenden Task erstellen. Im Tasker erstellen wir über <span style="color: orange;">"Tasks -> New Task"</span> also einen neuen Task mit folgendem Inhalt:<br />
<ul><li>T<b><span style="color: orange;">ask: "SMS Klick"</span></b></li>
<ol style="color: orange;"><li><b>App -> Load App</b></li>
<ul><li><b>App: Eure SMS App</b></li>
</ul><li><b>Zoom -> Element Text</b></li>
<ul><li><b>Element: Test.w / Text1</b></li>
<li><b>Text: Keine neuen Nachrichten</b></li>
</ul></ol></ul>Nun muss der Task noch als On-Click Ereignis dem Textelement zugewiesen werden. Dazu öffnen wir Zoom und wählen das <span style="color: orange;">Test.w</span> Widget aus. In der sich nun öffnenden Bearbeiten-Ansicht klicken wir auf das Text-Element. In dem Popup scrollen wir ganz runter bis zur <span style="color: orange;">"Click Action"</span>, mit Klick auf die Lupe öffnet sich ein Auswahlfenster. Dort gehen wir auf <span style="color: orange;">"Tasker Task" </span>und suchen dann unseren <span style="color: orange;">"SMS Klick"</span> Task. Mit dem grünen Haken bestätigen wir wieder alles und unser Widget ist fertig. beim Klick auf das Textfeld sollte sich nun die SMS App öffnen.<br />
<br />
Wenn ein Widget nun abgespeichert werden soll, damit es auch nach dem vom Homescreen entfernen noch da ist muss es als Template (also Vorlage) abgespeichert werden. Dazu in Zoom einfach eine Weile den Widget-Titel berühren bis ein Popup mit <span style="color: orange;">"Copy to Templates"</span> kommt. Nun kann das Widget als Vorlage für weitere Widgets verwendet werden.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSnPmyZ7xFuCr2Ei-hH6F_2Ps3ctE-dyoAEtH9HyP4qmA0-4OvJXQCbqNNrxDB2nYPYb-jg0D53LfvEJJfCIL90L778YDPtt5sjnEQpEte1MXhGRir8_NAZlZsqx_LeB3KKZKY6o728H0/s1600/snap20110623_143057.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSnPmyZ7xFuCr2Ei-hH6F_2Ps3ctE-dyoAEtH9HyP4qmA0-4OvJXQCbqNNrxDB2nYPYb-jg0D53LfvEJJfCIL90L778YDPtt5sjnEQpEte1MXhGRir8_NAZlZsqx_LeB3KKZKY6o728H0/s320/snap20110623_143057.png" width="192" /></a></div><br />
Viel Spaß beim erstellen eurer Widgets!<br />
<br />
Hier ein paar Profile von mir welche ein Zoom Widget verwenden:<br />
<ul style="color: orange;"><li><a href="http://tasker-skripte.blogspot.com/2011/06/profil-notizen-widget-mit-txt-datei.html">Notizen Widget mit txt-Datei Import & Export</a> </li>
<li><a href="http://tasker-skripte.blogspot.com/2011/06/profil-haushaltsbuch-mit-widget-und-csv.html">Haushaltsbuch mit Widget und csv-Datei-Export</a> </li>
<li><a href="http://tasker-skripte.blogspot.com/2011/05/profil-nachrichten-widget-mit-zoom.html">Nachrichtenwidget mit Zoom für SMS, Email und Trillian</a> </li>
</ul>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com7tag:blogger.com,1999:blog-226087406924845076.post-56790134294732120332011-06-20T13:13:00.002+02:002011-09-14T14:11:20.947+02:00[Profil] Handy Locator v2 mit aktuellem GPS Link per MailVor einer Weile habe ich schon das Profil für einen Handy Locator vorgestellt. Dieser hat jedoch die Position nur über das Mobilfunknetz bestimmt. Der Vorteil an der Methode ist, das die Positionsbestimmung sehr schnell und auch in Gebäuden funktioniert. Leider ist die Genauigkeit sehr begrenzt. Bei mir lag die Genauigkeit immer bei ca. 600 bis 900 Metern. Dies ist nicht wirklich hilfreich um ein verlorenes Handy wiederzufinden. Deshalb soll nun zuerst die GPS Position <span style="color: orange;">"Get Location"</span> bestimmt werden, insofern innerhalb von 2 Minuten eine Position gefunden wird, soll diese per Email versendet werden. Ansonsten wird wieder die ungenauere Position über das Mobilfunknetz verschickt.<br />
<br />
<br />
<a name='more'></a>Für das automatische versenden der Email kommt wieder das Python Skript zum Einsatz. Wer sich mit Tasker noch nicht so gut auskennt, bzw. das sendemail.py Skript noch nicht benutzt hat, sollte sich erst einmal mein altes <a href="http://tasker-skripte.blogspot.com/2011/05/profil-handy-locator-mit-maps-link-per.html" style="color: orange;">Handy Locator Profil </a>anschauen, dort habe ich alle Grundlagen zum Einsatz des Skriptes und wie man auf eingehende Emails reagiert erklärt.<br />
<br />
<br />
Kommen wir nun zum Profil. Diesmal werden 2 etwas unterschiedliche Konfigurationsdateien für das Email Skript benötigt. Eine falls ein GPS-Fix erfolgt ist und eine für die Positionsbestimmung über Mobilfunknetz. Demzufolge finden sich jetzt 2<span style="color: orange;"> "Write File" </span>Aktionen in dem Task. Hier nun ersteinmal das komplette Profil:<br />
<ul style="color: orange;"><li><b>Profil: "Handy Locator v2"</b></li>
<ul><li><b>Trigger:</b></li>
<ol><li><b>Event -> 3rd Party -> K9 Email Received</b></li>
<ul><li><b>Subject: Wo bist du?</b></li>
</ul></ol><li><b>Tasks:</b></li>
<ol><li><b>Misc -> GPS</b></li>
<ul><li><b>Set: On </b></li>
</ul><li><b>Misc -> Get Location</b></li>
<ul><li><b>Source: GPS</b></li>
<li><b>Timeout: 120</b></li>
</ul><li><b>Variable -> Variable Set</b></li>
<ul><li><b>Name: %AGEGPS</b></li>
<li><b>To: %TIMES - %LOCTMS</b></li>
</ul><li><b>Variable -> Variable Set</b></li>
<ul><li><b>Name: %AGENET</b></li>
<li><b>To: %TIMES - %LOCNTMS</b></li>
</ul><li><b>File -> Write File</b></li>
<ul><li><b>File: Tasker/mail.conf</b></li>
<li><b>Text: "Position per Net"</b></li>
<li><b>If %AGEGPS > 10</b></li>
</ul><li><b>File -> Write File</b></li>
<ul><li><b>File: Tasker/mail.conf</b></li>
<li><b>Text: "Position per GPS"</b></li>
<li><b>If %AGEGPS < 11</b></li>
</ul><li><b>Misc -> Run Script</b></li>
<ul><li><b>Name: sendemail.py </b></li>
</ul></ol></ul></ul>Der Aufbau des Profiles ist recht ähnlich zum alten Handy Locator. Nun wird aber zu Anfang die Position über <span style="color: orange;">"Get Location" </span>bestimmt, dazu wird vorher noch das GPS aktiviert, damit die Positionsbestimmung auch funktioniert sollte das GPS deaktiviert worden sein. Der Timeout steht auf 120 Sekunden. Wenn die Position innerhalb dieser Zeit gefunden wird, kann sie über die Variable <span style="color: orange;">%LOC</span> abgerufen werden. Um nun herauszufinden ob die Positionsbestimmung funktioniert hat, errechnen wir das Alter des letzten GPS-Fix. Dazu benötigen wir die Variable <span style="color: orange;">%LOCTMS</span>, in ihr steht der Zeitpunkt des letzten GPS-Fix, ziehen wir diesen von der aktuellen Uhrzeit ( <span style="color: orange;">%TIMES</span>) ab und legen es in der Variablen <span style="color: orange;">%AGEGPS</span> ab. Liegt der letzte Fix nur ein paar Sekunden zurück (typischerweise 0 bis 2 Sekunden), wissen wir das die Positionsbestimmung funktioniert hat und es kann die Datei mit den GPS Koordinaten geschrieben werden. Ansonsten wird die Datei mit den Net Koordinaten erstellt.<br />
<br />
Die Dateien sehen nun folgendermaßen aus:<br />
<br />
<blockquote style="color: orange;"><span style="color: orange;">Datei 1: "Position per GPS"</span><br />
mailto: %EFROM<br />
subject: Hier bin ich<br />
body:<br />
Koordinaten %LOC<br />
Genauigkeit %LOCACC Meter<br />
Vor %AGEGPS Sekunden per GPS<br />
Geschwindigkeit %LOCSPD kmph<br />
http://maps.google.com/maps?f=q&source=s_q&hl=de&geocode=&q=%LOC<br />
<br />
Datei 2: "Position per Net"<br />
mailto: %EFROM<br />
subject: Hier bin ich<br />
body:<br />
Koordinaten %LOCN<br />
Genauigkeit %LOCNACC Meter<br />
Vor %AGENET Sekunden per Mobilfunknetz<br />
http://maps.google.com/maps?f=q&source=s_q&hl=de&geocode=&q=%LOCN</blockquote><br />
Diese Zeilen müssen nun anstelle von <span style="color: orange;">"Position per GPS"</span> bzw. <span style="color: orange;">"Position per Net" </span>in das Text-Feld der jeweiligen <span style="color: orange;">"Write File" </span>Aktion eingetragen werden. Nach <span style="color: orange;">"body:"</span> sollte außer im Maps-Link kein <span style="color: orange;">":"</span> genutzt werden. Da das Skript diese nutzt um den Inhalt der Datei aufzuteilen, wird dann nicht mehr alles richtig übertragen.Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com19tag:blogger.com,1999:blog-226087406924845076.post-13810004419105571242011-06-16T09:42:00.000+02:002011-06-16T09:42:16.257+02:00[Tutorial] Dateien erstellen, schreiben und löschenDa ich nun schon in den letzten Profilen mir Dateien handiert habe, kommt nun etwas verspätet ein Tutorial zum Umgang mit Dateien in Tasker. Dateien eigenen sich immer dann wenn Informationen daurhaft gespeichert werden sollen, oder an andere Programme exportiert oder von anderen Quellen importiert werden sollen. Tasker bietet dafür die nötigen Funktionen.<br />
<a name='more'></a><br />
Zuerst einmal sollen alle Funktionen kurz vorgestellt werden, sie finden sich im Menü "Files":<br />
<ul><li style="color: orange;"><b>Browse Files</b></li>
<ul><li>Öffnet die App "Magic Explorer" mit dem angegebenen Pfad</li>
</ul><li style="color: orange;"><b>Copy File</b></li>
<ul><li>kopiert eine Datei an einen anderen Ort, auch ein Umbenennen ist möglich</li>
</ul><li style="color: orange;"><b>Create Directory</b></li>
<ul><li>erstellt einen neuen Ordner im angegebenen Pfad, auch ein ganzer Baum ist über "Create All" möglich</li>
</ul><li style="color: orange;"><b>Delete Directory</b></li>
<ul><li>löscht ein angegebenes Verzeichnis, Achtung man kann damit die ganze SD-Karte löschen!</li>
</ul><li style="color: orange;"><b>Move</b></li>
<ul><li>kann zum Verschieben und Umbenennen von Dateien genutzt werden </li>
</ul><li style="color: orange;"><b>Open File</b></li>
<ul><li>Öffnet eine Datei mit der Standardapp</li>
</ul><li style="color: orange;"><b>Read Line</b></li>
<ul><li>liest eine Zeile der angegebenen Datei in die angegebene Variable ein. Liest mit jedem Aufruf automatisch die nächste Zeile bis zum Ende der Datei aus. Auch eine bestimmte Zeile kann mit Hilfe einer Variablen angegeben werden. Wenn das Ende der Datei erreicht ist wird EOF (End of File) in die angegebene Variable geschrieben.</li>
</ul><li style="color: orange;"><b>Read Paragraph</b></li>
<ul><li>Hat die gleiche Funktion wie Read Line, nur das nun ein gesamter Paragraph eingelesen wird.</li>
</ul><li style="color: orange;"><b>UnZip File</b></li>
<ul><li>entpackt ein zip Archiv und löscht dieses danach, wenn angegeben</li>
</ul><li style="color: orange;"><b>Write File</b></li>
<ul><li>schreibt den angegebenen Text oder Inhalt einer Variablen in eine Datei. Auch eine Kombination aus Text und Variable ist möglich. Ist die angegebene Datei schon vorhanden, wird der neue Inhalt in eine neue Zeile geschrieben insofern "Append" gesetzt wurde. Ansonsten wird sie überschrieben.</li>
</ul><li style="color: orange;"><b>Zip File</b></li>
<ul><li>erstellt ein zip Archiv aus einer Datei.</li>
</ul></ul><br />
Meistens wird man wohl <span style="color: orange;">"Read Line" </span>und <span style="color: orange;">"Write File"</span> nutzen. Deswegen hier mal ein kleines Beispiel dafür. Tasker soll nacheinander alle Zeilen der Datei <span style="color: orange;">"datei1.txt" </span>auslesen und mit Zeilennummer in eine neue Datei <span style="color: orange;">"datei2.txt"</span> schreiben.<br />
<ul style="color: orange;"><li><b>1. Variable -> Variable Clear</b></li>
<ul><li><b>Name: %COUNT </b></li>
</ul><li><b>2. Variable -> Variable Add</b></li>
<ul><li><b>Name: %COUNT</b></li>
<li><b>Value: 1 </b></li>
</ul><li><b>3. File -> Read Line</b></li>
<ul><li><b>File: datei1.txt</b></li>
<li><b>To Var: %INHALT</b></li>
</ul><li><b>4. Tasker -> If %INHALT !~ EOF </b></li>
<li><b>5. File -> Write File</b></li>
<ul><li><b>File: datei2.txt</b></li>
<li><b>Text: %COUNT %INHALT</b></li>
<li><b>Append: Yes</b></li>
</ul><li><b>6. Tasker -> Goto</b></li>
<ul><li><b>Action: 2</b></li>
</ul><li><b>7. Tasker -> End If </b></li>
<li><b>8. Alert -> Popup</b></li>
<ul><li><b>Text: %COUNT Zeilen eingelesen</b></li>
</ul></ul>Mit Hilfe von <span style="color: orange;">"Goto"</span> haben wir eine Schleife gebaut, die genau so oft ausgeführt wird, wie Zeilen in der Datei vorhanden sind. Damit wir keine Endlosschleife kreieren brauchen wir eine Abbruchbedingung. Dazu nutzen wie die If-Abfrage. Solange der Inhalt der aktuellen Zeile nicht <span style="color: orange;">"EOF"</span> ist, wird dieser in die neue Datei geschrieben und danach die nächste Zeile eingelesen. Die Variable <span style="color: orange;">%COUNT </span>enthält dabei die aktuelle Zeilennummer. Sie wird nach jedem durchgang um 1 erhöht. Zum Schluss wird noch die Anzahl der eingelesenen Zeilen ausgegeben.<br />
<br />
Neben den Aktionen gibt es auch Datei-Trigger um Profile anzulegen. Diese finden sich unter <span style="color: orange;">"Event -> File"</span>, so kann auf das Öffnen, Bearbeiten, Schließen und Verschieben von Dateien reagiert werden. Dabei muss beachtet werden dass eine Datei immer erst geöffnet wird, dann bearbeitet und dann geschlossen, also auch die Events in der Reihenfolge auftreten. Weiterhin sollte man beachten das ein Kopieren des Dateiinhalts auch ein Öffnen der Datei benötigt. Dass heißt also, wenn ein Profil auf das Öffnen einer Datei reagiert und diese dann kopiert, wird sie wieder geöffnet und somit der Kopiertask wieder aussgeführt. Dies führt zu einer Endlosschleife und Tasker stürzt ab. Um das zu umgehen muss im Profil eine begrenzte Anzahl an Wiederholungen angegeben werden. Dafür einfach in das<span style="color: orange;"> "Profile Properties" </span>Menü gehen und dort bei <span style="color: orange;">"Limit Repeats" </span>eine <span style="color: orange;">"1"</span> eintragen. Nun kann das Profil nur einmal gleichzeitig laufen.<br />
<br />
Viel Spaß beim Lesen und Schreiben von Dateien :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com7tag:blogger.com,1999:blog-226087406924845076.post-53973301879841134482011-06-09T00:06:00.007+02:002011-09-16T16:18:55.846+02:00[Profil] Notizen Widget mit txt-Datei Import & ExportDa ich leider kein Notizenwidget im Market gefunden habe, welches meinen Anforderungen entsprach, habe ich mir selber eins gebastelt. Man kann einfach eine neue Notiz hinzufügen, sowie einzelne oder auch alle Notizen löschen. Die Notizen werden automatisch nummeriert um nicht den Überblick zu verlieren. Zusätzlich werden die Notizen in einer Datei gespeichert, diese kann entweder auf den PC kopiert werden, aber auch dort verändert werden, das Widget übernimmt dann den Inhalt der Textdatei.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQAmJBt67CBvsnr0Obj5oK6ZdaiMTy6FTld0SomYSK4QdlpRFV2gkaAEcNOIwvKuYP4mMc2PJ-jyYFuB1ZbRz1mqQpINcSgF4T-Z0Du6GjGVuN8aQTPiqn_8plJBtNe9uALKnuKNPlAN0/s1600/Unbenannt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQAmJBt67CBvsnr0Obj5oK6ZdaiMTy6FTld0SomYSK4QdlpRFV2gkaAEcNOIwvKuYP4mMc2PJ-jyYFuB1ZbRz1mqQpINcSgF4T-Z0Du6GjGVuN8aQTPiqn_8plJBtNe9uALKnuKNPlAN0/s320/Unbenannt.png" width="313" /></a></div><br />
<a name='more'></a>Als erstes muss ein Widget mit Zoom erstellt werden. WIr brauchen ein großes Textfeld für die Notizen, sowie 2 Buttons (oder Bilder). Einer zum hinzufügen einer Notiz und einer zum entfernen. Haben wir das Widget soweit erstellt können wir die Tasks schreiben. Es werden 3 Tasks benötigt. Wieder je einer zum Hinzufügen und Löschen von Notizen und einer zum Aktualisieren der angezeigten Notizen. Dieser soll ausgeführt werden wenn das Textfeld mit den Notizen angeklickt wird.<br />
<br />
Kommen wir zu den Tasks. Über einen Dialog eingegebene Notizen sollen automatisch in eine Textdatei gespeichert werden. Danach wird die komplette Datei ausgelesen und deren Inhalt unserem Widget übergeben. Zum kompletten Auslesen habe ich <span style="color: orange;">"Read Paragraph"</span> genutzt. Diese Funktion liest einen kompletten Absatz, in unserem Fall die komplette Datei aus. Leider merkt sich "Read Paragraph" wie "Read Line" an welcher Stelle es aufgehört hat die Datei auszulesen und fängt beim nächsten Aufruf an dieser Stelle an. Das heißt also das beim zweiten Aufruf ja schon das Ende der Datei erreicht ist und somit nur <span style="color: orange;">"EOF"</span> (End Of File) ausgelesen wird. Um dies zu umgehen lasse ich die Datei immer noch ein zweites mal auslesen, sollte <span style="color: orange;">"EOF"</span> ausgelesen worden sein.<br />
<br />
Kommen wir nun zum ersten Task:<br />
<ul><li><span style="color: orange;"><b>Task 1: "Notiz hinzufügen"</b></span></li>
<ul><li><span style="color: orange;"><b>1. Variable -> Variable Query</b></span></li>
<ul><li><span style="color: orange;"><b>Name: %NOTIZ</b></span></li>
<li><span style="color: orange;"><b>Label: Notiz hinzufügen</b></span></li>
</ul><li><span style="color: orange;"><b>2. Variable -> Variable Add</b></span></li>
<ul><li><span style="color: orange;"><b>Name: %COUNT</b></span></li>
<li><span style="color: orange;"><b>Value: 1</b></span></li>
</ul><li><span style="color: orange;"><b>3. File -> Write File</b></span></li>
<ul><li><span style="color: orange;"><b>File: Notizen.txt</b></span></li>
<li><span style="color: orange;"><b>Text: %COUNT) %NOTIZ </b></span></li>
<li><span style="color: orange;"><b>Append: Yes</b></span></li>
</ul><li><span style="color: orange;"><b>4. File -> Read Paragraph</b></span></li>
<ul><li><span style="color: orange;"><b>File: Notizen.txt</b></span></li>
<li><span style="color: orange;"><b>To Var: %NOTIZEN</b></span></li>
</ul><li><span style="color: orange;"><b>5. File -> Read Paragraph</b></span></li>
<ul><li><span style="color: orange;"><b>File: Notizen.txt</b></span></li>
<li><span style="color: orange;"><b> To Var: %NOTIZEN</b></span></li>
<li><span style="color: orange;"><b>If %NOTIZEN ~ EOF</b></span></li>
</ul><li><span style="color: orange;"><b>6. Zoom -> Element Text</b></span></li>
<ul><li><span style="color: orange;"><b>Element Notizen.w / Notiz</b></span></li>
<li><span style="color: orange;"><b>Text: %NOTIZEN</b></span></li>
</ul></ul></ul>Es wird ein Popup geöffnet in welches man eine neue Notiz eintragen kann. Die Variable <span style="color: orange;">%COUNT</span> dient zur Nummerierung der einzelnen Notizen. Sie wird mit jeder neuen Notiz um 1 erhöht. Die neue Notiz wird daraufhin an den Inhalt der Datei Notizen.txt angehängt. Zum Schluss wird die komplette Datei eingelesen und der Inhalt auf dem Widget ausgegeben, dadurch werden auch Notizen angezeigt die manuell in die Notizen.txt eingetragen wurden.<br />
<br />
Als nächstes kommt der <span style="color: orange;">"Notiz löschen"</span> Task. In einem Popup soll die gewünschte Notiznummer eingegeben werden. wird eine 0 eingegeben werden alle Notizen gelöscht:<br />
<ul><li><b><span style="color: orange;">Task 2: "Notiz löschen"</span></b></li>
<ul><li><b><span style="color: orange;">1. Variable -> Variable Set</span></b></li>
<ul><li><b><span style="color: orange;">Name: %COUNT</span></b></li>
<li><b><span style="color: orange;">To: 0 </span></b></li>
</ul><li><b><span style="color: orange;">2. Variable -> Variable Query</span></b></li>
<ul><li><b><span style="color: orange;">Name: %NUMMER</span></b></li>
<li><b><span style="color: orange;">Label: Welche Notiz entfernen?</span></b></li>
</ul><li><b><span style="color: orange;">3. If %NUMMER ~ 0</span></b></li>
<li><b><span style="color: orange;">4. File -> Delete File</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen.txt</span></b></li>
</ul><li><b><span style="color: orange;">5. Zoom -> Element Text</span></b></li>
<ul><li><b><span style="color: orange;">Element: Notizen.w / Notiz</span></b></li>
<li><b><span style="color: orange;">Element Text: [Leerzeichen]</span></b></li>
</ul><li><b><span style="color: orange;">6. Tasker -> Stop </span></b></li>
<li><b><span style="color: orange;">7. Tasker -> End If</span></b></li>
<li><b><span style="color: orange;">8. File -> Move File</span></b></li>
<ul><li><b><span style="color: orange;">From: Notizen.txt</span></b></li>
<li><b><span style="color: orange;">To: Notizen_old.txt</span></b></li>
</ul><ul></ul><li><b><span style="color: orange;">9. Variable -> Variable Add</span></b></li>
<ul><li><b><span style="color: orange;">Name: %CHECKNR</span></b></li>
<li><b><span style="color: orange;">Value: 1</span></b></li>
</ul><li><b><span style="color: orange;">10. File -> Read Line</span></b></li>
<ul><li><b><span style="color: orange;">Notizen_old.txt</span></b></li>
<li><b><span style="color: orange;">To Var: %NOTIZEN</span></b></li>
</ul><li><b><span style="color: orange;">11. If %NOTIZEN !~ EOF</span></b></li>
<li><b><span style="color: orange;">12. Variable -> Variable Split</span></b></li>
<ul><li><b><span style="color: orange;">Name: %NOTIZEN</span></b></li>
<li><b><span style="color: orange;">Splitter: )</span></b></li>
<li><b><span style="color: orange;"> If %CHECKNR !~ %NUMMER </span></b><b><span style="color: orange;"> </span></b></li>
</ul><li><b><span style="color: orange;">13. Variable -> Variable Add</span></b></li>
<ul><li><b><span style="color: orange;">Name: %COUNT</span></b></li>
<li><b><span style="color: orange;">Value: 1</span></b></li>
<li><b><span style="color: orange;">If %CHECKNR !~ %NUMMER </span></b></li>
</ul><li><b><span style="color: orange;">14. File -> Write File</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span style="color: orange;">Text: %COUNT) %NOTIZEN2</span></b></li>
<li><b><span style="color: orange;">Append: Yes</span></b></li>
<li><b><span style="color: orange;">If %CHECKNR !~ %NUMMER</span></b></li>
</ul><li><b><span style="color: orange;">15. Tasker -> Goto Action</span></b></li>
<ul><li><b><span style="color: orange;">Number: 9</span></b></li>
</ul><li><b><span style="color: orange;">16. Tasker -> End If</span></b></li>
<li><b><span style="color: orange;">17. File -> Delete File</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen_old.txt</span></b></li>
</ul><li><b><span style="color: orange;">18. File -> Read Paragraph</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span style="color: orange;">To Var: %NOTIZEN</span></b></li>
</ul><li><b><span style="color: orange;">19. File -> Read Paragraph</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen-txt</span></b></li>
<li><b><span style="color: orange;">To Var: %NOTIZEN</span></b></li>
<li><b><span style="color: orange;">If %NOTIZEN ~ EOF</span></b></li>
</ul><li><b><span style="color: orange;">20. Zoom -> Element Text</span></b></li>
<ul><li><b><span style="color: orange;">Element: Notizen.w / Notiz</span></b></li>
<li><b><span style="color: orange;">Text: %NOTIZEN</span></b></li>
</ul><li><b><span style="color: orange;">21. Variable -> Variable Set</span></b></li>
<ul><li><b><span style="color: orange;">Name: %CHECKNR</span></b></li>
<li><b><span style="color: orange;">To: 0</span></b></li>
</ul></ul></ul>Ein recht langer Task aber ich hoffe ihr blickt durch :)<br />
<br />
Als erstes setzen wir unsere Zählvariable zurück. Über ein Popup wird abgefragt welche Notiz gelöscht werden soll. Wird 0 eingegeben wird die ganze Datei gelöscht und das Widget geleert und danach der Task beendet. Ansonsten wird <span style="color: orange;">Notizen.txt</span> kopiert und als <span style="color: orange;">Notizen_old.txt</span> gespeichert. Danach kann Notizen.txt gelöscht werden.<br />
<br />
Die Zählvariable <span style="color: orange;">%CHECKNR</span> stellt die die jeweilige Notiznummer dar. Damit soll erkannt werden welche Notiz nun gelöscht werden soll. Nun wird jede Notiz einzeln eingelesen und überprüft ob sie gelöscht werden soll. Wenn nicht wird die Notiz an den Inhalt von Notizen.txt angehängt. Über <span style="color: orange;">"EOF"</span> kann wieder erkannt werden ob das Ende der Datei erreicht wurde.<br />
<br />
Wenn alle Notizen abgearbeitet wurden. Wird die Notizen.txt komplett eingelesen und der Inhalt an das Widget übergeben. Als letztes wird <span style="color: orange;">%CHECKNR</span> wieder auf 0 gesetzt.<br />
<br />
Als letztes noch der "Notizen aktualisieren Task". Dieser liest einfach nur die Notizen.txt ein und übergibt den Inhalt an das Widget.<br />
<ul><li><b><span style="color: orange;">Task: "Notizen aktualisieren"</span></b></li>
<ul><li><b><span style="color: orange;">1. File -> Read Paragraph</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span style="color: orange;">To Var: %NOTIZEN</span></b></li>
</ul><li><b><span style="color: orange;">2. File -> Read Paragraph</span></b></li>
<ul><li><b><span style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span style="color: orange;">To Var: %NOTIZEN</span></b></li>
<li><b><span style="color: orange;">If %NOTIZEN ~ EOF</span></b></li>
</ul><li><b><span style="color: orange;">3. Zoom -> Element Text</span></b></li>
<ul><li><b><span style="color: orange;">Element: Notizen.w / Notiz</span></b></li>
<li><b><span style="color: orange;">Text: %NOTIZEN </span></b><b><span style="color: orange;"> </span></b><b><span style="color: orange;"> </span></b></li>
</ul></ul></ul>Nun müssen die Tasks nur noch als "On Click" Aktion den Buttons/Bildern des Zoom Widgets zugeordnet werden. Dies geschieht im Konfigurationsfenster von Zoom.<br />
<br />
Update:<br />
<a href="http://www.blogger.com/profile/10130911226748312838">Chillman</a> hat einen Notiz ändern Task erstellt, den ich natürlich niemandem vorenthalten will:<br />
<br />
<ul><li><b><span class="Apple-style-span" style="color: orange;">Task: "Notiz ändern"</span></b></li>
<ol><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Set</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %COUNT</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To: 0</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Query</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %ZEILE</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Label: Welche Notiz ändern?</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Input Type: Numeric Integer</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Read Line</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Line: %ZEILE</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To Var: %OLDNOTE</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Split</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %OLDNOTE</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Splitter: )</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Query</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %NEWNOTE</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Label: Notiz ändern</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Default: %OLDNOTE2</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Move</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">From: Notizen.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To: Notizen_old.txt</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Add</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %CHECKNR</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Value: 1</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Read Line</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">File: Notizen_old.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To Var: %NOTIZEN</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Tasker -> If %NOTIZEN !~ EOF</span></b></li>
<ul></ul><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Add</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %COUNT</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Value: 1</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Write File</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Text: %NOTIZEN</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Append: Yes</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">If %CHECKNR !~ %ZEILE</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Write File</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Notizen.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Text: %ZEILE) %NEWNOTE</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Append: Yes</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">If %CHECKNR ~ %ZEILE</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Tasker -> Goto Achtion</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Number: 7</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Tasker -> End If</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">File -> Delete File</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">File: Notizen_old.txt</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Read Paragraph</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To Var: %NOTIZEN</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">File -> Read Paragraph</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">File: Notizen.txt</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To Var: %NOTIZEN</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">If %NOTIZEN ~ EOF</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Zoom -> Element Text</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Element: Notizen.w / Notiz</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">Text: %NOTIZEN</span></b></li>
</ul><li><b><span class="Apple-style-span" style="color: orange;">Variable -> Variable Set</span></b></li>
<ul><li><b><span class="Apple-style-span" style="color: orange;">Name: %CHECKNR</span></b></li>
<li><b><span class="Apple-style-span" style="color: orange;">To: 0</span></b></li>
</ul></ol></ul><br />
Viel Spaß :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com9tag:blogger.com,1999:blog-226087406924845076.post-12540301473864862452011-06-08T14:06:00.005+02:002011-10-13T00:09:28.465+02:00[Profil] Haushaltsbuch mit Widget und csv-Datei-ExportEs ist generell nicht schlecht zu wissen, wie die aktuellen Monatsausgaben im Verhätlniss zu den Einnahmen stehen. Dafür gibt es schon Haushaltsbuch-Apps wie Sand am Meer. Diese bieten dann eine Vielzahl an Funktionen die ich gar nicht brauche und sind deshalb recht "aufgeblasen". Mein Widget soll mir einfach nur den Monatssaldo anzeigen, sowie eine einfache Möglichkeit bieten einen neuen Eintrag hinzuzufügen. Die Einträge sollen automatisch in einer <span style="color: orange;">".csv"</span> Datei gespeichert werden, sodass ich sie später in Excel importieren kann.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglzEdl5CkSvVFc5kNl_NMzBE_TNIfFTHisB2MVl1buqV4P7FdTyJKSxaw_mLlufKeR__CKX5_MHLhEOF4eNGY3486o-bTomfA9Q1tJrqRNxUme-cAGAPtJCb1BJHLf1CT6tC4X1sJscsU/s1600/ScreenShot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglzEdl5CkSvVFc5kNl_NMzBE_TNIfFTHisB2MVl1buqV4P7FdTyJKSxaw_mLlufKeR__CKX5_MHLhEOF4eNGY3486o-bTomfA9Q1tJrqRNxUme-cAGAPtJCb1BJHLf1CT6tC4X1sJscsU/s320/ScreenShot.png" width="192" /></a></div>
<br />
<br />
<a name='more'></a>Als erstes wird dafür ein neues Widget mit Zoom erstellt. Dieses benötigt mindestens drei Elemente. Ein Textfeld um den Saldo anzuzeigen. Sowie zwei Buttons einer um einen neuen Eintrag zu erstellen und einer um den Saldo neu zu berechnen. <br />
<br />
Nun brauchen wir noch zwei Tasks. Task 1 erstellt einen neuen Eintrag und fragt dafür die benötigten Werte per Dialog ab. Die eingegebenen Werte werden gleich in einer Datei abgelegt. Damit wir immer den Monatssaldo angezeigt bekommen, soll für jeden Monat eine extra Datei angelegt werden. Dazu wird das eingegebene Datum aufgeteilt um Monat und Jahr einzeln zu haben. Ich empfehle auch bei der Werteabfrage immer einen Defaultwert einzutragen, einfach um zu verhindern das leere Einträge entstehen die später Fehler verursachen können.<br />
<br />
Als <span style="color: orange;">"Input Type"</span> für <span style="color: orange;">"Variable Query"</span> würde ich immer "Normal Text" empfehlen, zwar bietet sich beim Betrag <span style="color: orange;">"Number / Decimal"</span> an, aber leider lässt er dann kein <span style="color: orange;">","</span> zu sondern nur <span style="color: orange;">"."</span>, da Excel standardmäßig ein<span style="color: orange;"> "," </span>erwartet ist es aber sinnvoll dieses auch zu nutzen. Ob es sich nun um eine Einnahme oder Ausgabe handelt soll über das Vorzeichen angegeben werden, also einfach bei einer Ausgabe ein <span style="color: orange;">"-"</span> -ohne Leerzeichen- vor den Betrag setzen.<br />
<ul style="color: orange;">
<li><b>Task1: "Haushaltsbuch Neu"</b></li>
<ol>
<li><b>Variable -> Variable Query</b></li>
<ul>
<li><b>Name: %DATUM</b></li>
<li><b>Label: Neuer Eintrag: Datum</b></li>
<li><b>Default: %DATE</b></li>
</ul>
<li><b>Variable -> Variable Query</b></li>
<ul>
<li><b>Name: %KATEGORIE</b></li>
<li><b>Label: Neuer Eintrag: Kategorie</b></li>
<li><b>Default: sonstiges </b></li>
</ul>
<li><b>Variable -> Variable Query</b></li>
<ul>
<li><b>Name: %BETRAG</b></li>
<li><b>Label: Neuer Eintrag: Betrag</b></li>
<li><b>Default: 0 </b></li>
</ul>
<li><b>Variable -> Variable Split</b></li>
<ul>
<li><b>Name: %DATUM</b></li>
<li><b>Splitter: .</b></li>
</ul>
<li><b>File -> Write File</b></li>
<ul>
<li><b>File: My Documents/Haushalt_%DATUM2_%DATUM3.csv</b></li>
<li><b>Text: %DATUM;%KATEGORIE;%BETRAG</b></li>
<li><b>Append: Yes</b></li>
</ul>
<li><b>Tasker -> Perform Task</b></li>
<ul>
<li><b>Name: Haushaltsbuch lesen</b></li>
</ul>
</ol>
</ul>
Als letztes wird nun schon der noch nicht vorhandene Task <span style="color: orange;">"Haushaltsbuch lesen"</span> gestartet. Dieser soll die aktuelle csv Datei einlesen und die Salden zusammenrechnen um den Gesamtsaldo dann auf dem Widget anzuzeigen.<br />
<ul style="color: orange;">
<li><b>Task 2: "Haushaltsbuch lesen"</b></li>
<ol>
<li><b>Zoom -> Element Textcolour</b></li>
<ul>
<li><b>Element: Haushaltsbuch_Widget / Saldo</b></li>
<li><b>Colour: [schwarz]</b></li>
</ul>
<li><b>Zoom -> Element Text</b></li>
<ul>
<li><b>Element: Haushaltsbuch_Widget / Saldo</b></li>
<li><b>Text: Berechne Saldo ...</b></li>
</ul>
<li><b>Variable -> Variable Clear</b></li>
<ul>
<li><b>Name: %SALDO</b></li>
</ul>
<li><b>Variable -> Variable Split</b></li>
<ul>
<li><b>Name: %DATE</b></li>
<li><b>Splitter: .</b></li>
</ul>
<li><b>File -> Read Line</b></li>
<ul>
<li><b>File: My Documents/Haushalt_%DATE2_%DATE3.csv</b></li>
<li><b>To Var: %READ</b></li>
</ul>
<li><b>Tasker -> If %READ ~ EOF</b></li>
<li><b>Zoom -> Element Text</b></li>
<ul>
<li><b>Element: Haushaltsbuch_Widget / Saldo</b></li>
<li><b>Text: %SALDO €</b></li>
</ul>
<li><b>Zoom -> Element Textcolour</b></li>
<ul>
<li><b> Element: Haushaltsbuch_Widget / Saldo</b></li>
<li><b>Colour: [was rotes]</b></li>
<li><b>If %SALDO < 0</b></li>
</ul>
<li><b>Zoom -> Element Textcolour</b></li>
<ul>
<li><b> Element: Haushaltsbuch_Widget / Saldo</b></li>
<li><b>Colour: [was grünes]</b></li>
<li><b>If %SALDO > 0</b></li>
</ul>
<li><b>Tasker -> Stop</b></li>
<li><b>Tasker -> End If</b></li>
<li><b>Variable -> Variable Split</b></li>
<ul>
<li><b>Name: %READ</b></li>
<li><b>Splitter: ;</b></li>
</ul>
<li><b>Variable -> Variable Set </b></li>
<ul>
<li><b>Name: %SALDO</b></li>
<li><b>To: %SALDO + %READ3</b></li>
<li><b>Do Math: Yes</b></li>
</ul>
<li><b>Tasker -> Goto Action</b></li>
<ul>
<li><b>Number: 4</b></li>
</ul>
</ol>
</ul>
Mit <span style="color: orange;">"Read Line"</span> werden nun nacheinander alle Einträge in unserer .csv Datei ausgelesen und in die angegebene Variable geschrieben. Dabei springt <span style="color: orange;">"Read Line"</span> automatisch mit jedem Aufruf eine Zeile weiter, ist die letzte Zeile erreicht wird <span style="color: orange;">"EOF" </span>(End Of File) in unsere Variable geschrieben. Dieser Task ist nun so aufgebaut das er alle Zeilen nacheinander einliest, die jeweilige Zeile teilt und den Betrag zum Saldo hinzu addiert. Ist die letzte Zeile erreicht wird der Saldo ausgegeben und der Task beendet. Dazu wird nach dem Einlesen der Zeile überprüft ob <span style="color: orange;">"EOF"</span> in unserer <span style="color: orange;">%READ</span> Variablen steht. Ist dem so wurden alle Einträge eingelesen und das Ergebnis kann ausgegeben werden. Mit <span style="color: orange;">"Stop"</span> wird der Task dann beendet. Ist das Ende der Datei noch nicht erreicht, in <span style="color: orange;">%READ</span> steht als nicht <span style="color: orange;">"EOF" </span>wird der If Zweig bis <span style="color: orange;">"End If"</span> übersrpungen und mit Aktion 11 weiter gemacht. Nach dem Einlesen und verarbeiten der gerade aktuellen Zeile wird mit <span style="color: orange;">"Goto Action"</span> zur 4. Aktion, also dem Einlesen der nächsten Zeile, gesprungen. Dadurch entsteht eine Schleife die genauso oft ausgeführt wird wie Zeilen in der Datei vorhanden sind.<br />
<br />
Wenn man die App Zoom nicht installiert hat, kann man das Profil auch über ein Tasker Widget realisieren. Ein Tasker Widget ist im Endeffekt nur eine Verknüpfung mit einem Task. Es wird ein Symbol und ein Text darunter angezeigt. Beim Klicken auf das Widget wird der angegebene Task ausgeführt, in unserem Falle sollte das <span style="color: orange;">"Haushaltsbuch Neu" </span>sein. Den Text kann man mit <span style="color: orange;">"Tasker -> Set Widget Label" </span>bearbeiten und somit den aktuellen Saldo ausgeben.<br />
<br />
Um die erstellte csv Datei in Excel zu importieren, genügt es diese auf den PC zu kopieren und mit einem Doppellklick zu öffnen. Daraufhin startet Excel mit einem neuen Tabellenblatt und fügt automatisch unsere Einträge in drei Spalten ein. Alternativ kann man die Werte auch manuell über <span style="color: orange;">"Daten -> Externe Daten Importieren" </span>einfügen.<br />
<br />
Viel Spaß damit :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com8tag:blogger.com,1999:blog-226087406924845076.post-29503264320956786872011-06-01T10:17:00.001+02:002011-06-01T10:22:01.758+02:00[Profil] Wecker mit Standort-, Wochentags-, Kalenderfunktion und SnoozeWer wie ich andauernd vergisst seinen Wecker zu stellen, wird sich sicher über einen komplett automatisierten Wecker freuen. Deshalb hier ein Wecker der sich komplett auf die eigenen Bedürfnisse anpassen lässt. So kann der Wecker nur für bestimmte Orte aktiviert werden, oder nur wenn ein bestimmter Kalendereintrag vorhanden ist. Eine Wochentagsfunktion gibt es natürlich genauso wie das obligatorische 10 Minuten weiterschlafen, genannt Snooze.<br />
<br />
<a name='more'></a><br />
<br />
Bevor wir das Wecker Profil erstellen können brauchen wir erst einmal 3 Tasks. Einen Wecker Task, welcher ein Lied aus unserer Musiksammlung abspielt. Sowie einen Snooze und Wecker-aus Task. Zu Erstellen der Tasks einfach auf <span style="color: orange;">"Task -> New Task"</span> gehen.<br />
<ul style="color: orange;"><li><b>Task 1: Wecker</b></li>
<ol><li><b>Variable -> Variable Set</b></li>
<ul><li><b>Name: %VOLMOLD</b></li>
<li><b>To: %VOLM</b></li>
<li><b>If %VOLMOLD Isn't Set </b></li>
</ul><li><b>Audio -> Media Volume</b></li>
<ul><li><b>Level: 15</b></li>
</ul><li><b>Media -> Music Play Dir</b></li>
<ul><li><b>Dir: Music</b></li>
<li><b>Subdirs: On</b></li>
<li><b>Audio Only: On</b></li>
<li><b>Random: On</b></li>
</ul><li><b>Alert -> Popup Task Names</b></li>
<ul><li><b>Text: Wecker</b></li>
<li><b>Task: Snooze</b></li>
<li><b>Task: Off</b></li>
</ul></ol><li><b>Task 2: Snooze</b></li>
<ol><li><b>Media -> Music Stop</b></li>
<li><b>Tasker -> Wait</b></li>
<ul><li><b>Minutes: 10</b></li>
</ul><li><b>Tasker -> Perform Task</b></li>
<ul><li><b>Name: Wecker</b></li>
</ul></ol><li><b>Task 3: Off</b></li>
<ol><li><b>Media -> Music Stop</b></li>
<li><b>Audio -> Media Volume</b></li>
<ul><li><b>Level: %VOLMOLD</b></li>
</ul><li><b>Variable -> Variable Clear</b></li>
<ul><li><b>Name: %VOLMOLD</b></li>
</ul></ol></ul>Dies sind nun also die 3 nötigen Tasks für unseren Wecker. Bevor die Musik abgespielt wird, wird die Medienlautstärke auf ihr Maximum gesetzt um sicher zu gehen, dass wir den Wecker auch hören. Damit wir uns später beim mp3 hören nicht die Ohren zerstören, soll die Medienlautstärke nach dem Wecken wieder auf ihren alten Wert zurückgesetzt werden. Dazu wird im ersten Schritt die Variable<span style="color: orange;"> %VOLMOLD</span> mit dem aktuellen Lautstärkewert der Medienlautstärke beschrieben. Zum Schluss wird die Medienlautstärke dann wieder zurückgesetzt. Um nun bei <span style="color: orange;">"Media Volume" </span>ein Eingabefeld anstelle des Schiebereglers zu bekommen muss einfach der Button mit den zwei Pfeilen gedrückt werden.<br />
<br />
Kommen wir nun zu den Triggern. Da ein Profil aus mehreren Triggern bestehen kann möchte ich hier nur die möglichen Trigger vorstellen. Ganz zum Schluss gebe ich dann ein Beispielprofil.<br />
<ul style="color: orange;"><li><b>Trigger 1: Time</b></li>
<ul><li><b>From: 08:00 Uhr</b></li>
<li><b>Till: 08:00 Uhr</b></li>
</ul><li><b>Trigger 2: Day</b></li>
<ul><li><b>Mon, Tue, Wed, Thu, Fri</b></li>
</ul><li><b>Trigger 3: Location</b></li>
<li><b>Trigger 4: State -> Calendar Entry</b></li>
<li><b>Trigger 5: State -> Cell Near </b></li>
</ul>Mit diesen fünf Triggern lässt sich eine Menge anstellen. Ein Wecker der nur Wochentags klingelt ist dabei die einfachste Lösung, aber nichts besonderes da dies inzwischen jeder Standard Wecker bieten kann. Interessanter wird es bei <span style="color: orange;">"Location"</span> bzw. <span style="color: orange;">"Cell Near"</span>. Man kann also den Wecker so einstellen, dass er nur zu Hause klingelt, im Urlaub etc. ist er automatisch deaktiviert, da man sich ja nicht am gespeicherten Ort befindet. So kann man nach dem Urlaub nicht vergessen den Wecker wieder zu aktivieren. Für die welche jeden Tag zu einer anderen Zeit aufstehen müssen, bietet sich vielleicht der Trigger <span style="color: orange;">"Calendar Entry"</span> an. Hierbei klingelt der Wecker sobald ein Kalendereintrag aktiv wird. Somit könnte man sich in Google einen Wecker Kalender mit Einträgen für jeden Tag anlegen.<br />
<br />
Nun möchte ich mein Profil mal als Beispiel vorstellen. Mein Wecker soll nur Wochentags wenn ich zu Hause bin 08:00 Uhr klingeln. Der Ort soll über <span style="color: orange;">"Cell Near"</span> ermittelt werden, da ich Nachts W-Lan und Datenverbindung ausgeschalten habe und eine Ortsbestimmun über <span style="color: orange;">"Net"</span> somit nicht funktioniert.<br />
<ul style="color: orange;"><li><b>Profil: automatischer Wecker</b></li>
<ul><li><b>Trigger:</b></li>
<ol><li><b>Time</b></li>
<ul><li><b>From: 08:00 Uhr</b></li>
<li><b>Till: 08:00 Uhr</b></li>
</ul><li><b>Day</b></li>
<ul><li><b>Mon, Tue, Wed, Thu, Fri</b></li>
</ul><li><b>State -> Cell Near</b></li>
</ol><li><b>Task:</b></li>
<ul><li><b>Wecker</b></li>
</ul></ul></ul>Schon fertig. Wer schon ein <span style="color: orange;">"Cell Near" </span>Profil für <span style="color: orange;">"zu Hause" </span>besitzt, kann als dritten Trigger auch <span style="color: orange;">"State -> Variable Value"</span> nutzen und in dem <span style="color: orange;">"zu Hause"</span> Profil eine Variable zBsp. <span style="color: orange;">%HOME</span> auf 1 setzen lassen wenn man zu Hause ist und im Exit Task wieder auf 0 setzen wenn man es verlässt.<br />
<br />
Falls euch noch mehr Trigger einfallen, nur her damit :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com10tag:blogger.com,1999:blog-226087406924845076.post-69861817237737567672011-05-26T12:14:00.000+02:002011-05-26T12:14:51.352+02:00[Profil] SMS an Email weiterleitenHeute mal ein kleines Tasker Profil welches eingehende SMSen an eine Mail Adresse weiterleitet.<br />
Dazu muss Tasker als erstes beigebracht werden, selbständig Emails zu versenden. Wie man dies anstellt habe ich schon einmal in einem Tutorial beschrieben<br />
<div style="color: orange;"><a href="http://www.blogger.com/goog_49307326"><br />
</a></div><div style="color: orange;"><a href="http://tasker-skripte.blogspot.com/2011/05/tutorial-emails-versenden-mit-tasker.html">[Tutorial] Emails versenden mit Tasker und einem Python Skript</a></div><br />
Die Mail soll als Betreff den Absender der SMS haben. Die Nachricht an sich kommt in den Hauptteil der Email.<br />
<br />
<a name='more'></a>Hier nun das Profil:<br />
<ul style="color: orange;"><li><b>Profil 1: SMS to Email</b></li>
<ul><li><b>Trigger</b></li>
<ol><li><b>Event -> Phone -> Received Text</b></li>
</ol><li><b>Tasks</b></li>
<ol><li><b>File -> Write File</b></li>
<ul><li><b>File: Tasker/mail.conf</b></li>
<li><b>Text: siehe Text für mail.conf</b></li>
</ul><li><b>Misc -> Run Script</b></li>
<ul><li><b>sendemail.py</b></li>
</ul></ol></ul></ul>Nun brauchen wir nur noch den Inhalt für die "mail.conf" Datei:<br />
<br />
<br />
<div style="color: orange;"><b>mailto: deinemail@adresse.de</b></div><div style="color: orange;"><b>subject: SMS von %SMSRN</b></div><div style="color: orange;"><b>body:</b></div><div style="color: orange;"><b>%SMSRB</b></div><br />
<span style="color: orange;">%SMSRN </span>enthält den Namen des SMS Absenders, sollte dieser nicht im Telefonbuch vermerkt sein, enthält es die Nummer. <span style="color: orange;">%SMSRB</span> enthält den Inhalt der zuletzt empfangenen SMS.<br />
<blockquote></blockquote>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com6tag:blogger.com,1999:blog-226087406924845076.post-68528360167247638822011-05-24T15:00:00.003+02:002011-05-24T15:01:49.345+02:00[Update][Profil] Updatebenachrichtigung für ein CustomROM mit "HTTP Get"Ich habe nun einen praktikablen Weg gefunden, wie das Updateskript sehr eifnach für jedes ROM angepasst werden kann. Ich habe nun zwei Splitter gefunden mit denen sich der Threadtitel jedes ROM-Threads universell extrahieren lässt. Die einzigen zwei Voraussetzungen sind, dass erstens ein Thread aus dem xda-developers Forum genutzt wird und zweitens dieser mit <span style="color: orange;">"[ROM]"</span> beginnt. Anstelle der <span style="color: orange;">"123456"</span> muss natürlich die Threadnummer. Diese kann einfach aus der Browseradressleiste abgelesen werden.<br />
<br />
<a name='more'></a><br />
<br />
Hier das komplette Update Profil:<br />
<ul style="color: orange;"><li><b>Profil 1: "ROM Update"</b></li>
<ul><li><b>Trigger: "Time" From 09:00 every 2h Till 22:00</b></li>
</ul><ul><li><b>Tasks:</b></li>
<ol><li><b>HTTP Get</b></li>
<ul><li><b>Server:Port: http://forum.xda-developers.com/showthread.php?t=123456</b></li>
<li><b>Timeout: 30</b></li>
<li><b>Mime Type: text/html</b></li>
</ul><li><b>Variable Split</b></li>
<ul><li><b>Name: %HTTPD</b></li>
<li><b>Splitter: [ROM]</b></li>
</ul><li><b>Variable Split</b></li>
<ul><li><b>Name: %HTTPD2</b></li>
<li><b>Splitter: ,</b></li>
</ul><li><b>Notify</b></li>
<ul><li><b>Title: ROM Update verfügbar</b></li>
<li><b>Text: %HTTPD21</b></li>
<li><b>Icon: eins raussuchen</b></li>
<li><b>If %HTTPD21 !~ %ROM</b></li>
</ul><li><b>Variable Set</b></li>
<ul><li><b>Name: %ROM</b></li>
<li><b>To: %HTTPD21 </b></li>
</ul></ol></ul></ul>Viel Spaß damit :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com8tag:blogger.com,1999:blog-226087406924845076.post-7765800976758593842011-05-19T13:44:00.001+02:002011-05-19T13:52:07.005+02:00[Profil] Handy Locator mit Maps Link per Mail oder KlingelnWas tun wenn das Handy nicht auffindbar ist? Meist ist es ja nur irgendwo in der Wohnung verschollen, da würde es meist reichen wenn es sich mal melden würde :). Doch was ist wenn es ganz unauffindbar ist? Dann wäre es doch praktisch zu wissen, wo ungefähr es sich gerade befindet.<br />
<br />
Für beide Fälle habe ich je ein Profil geschrieben, welches auf eine Email mit einem bestimmten Betreff reagiert. Für den Fall, dass das Handy nur in der Wohnung verschollen ist, soll es lautstark auf sich aufmerksam machen, bis es gefunden wurde. Für den Fall, dass es sich wo ganz anders befindet soll es eine Email zurücksenden mit einem Maps Link der aktuellen Position.<br />
<br />
<br />
<a name='more'></a><u style="color: orange;"><b>Fall 1: Handy in der Wohnung verlegt: </b></u><br />
Schauen wir uns als erstes das Profil für den weniger schlimmen Fall an, also dass das Handy nur in der Wohnung verlegt wurde.<br />
<ul style="color: orange;"><li><b>Profil 1: Melde dich</b></li>
<ul><li><b>Trigger</b></li>
<ol><li><b>Event -> 3rd Party -> K9 Email Received</b></li>
<ul><li><b>Subject: Melde dich!</b></li>
</ul></ol><li><b>Tasks</b></li>
<ol><li><b>Audio -> Silent Mode</b></li>
<ul><li><b>Set: Off</b></li>
</ul><li><b>Variable -> Variable Set</b></li>
<ul><li><b>Name: %VOLMOLD</b></li>
<li><b>To: %VOLM</b></li>
</ul><li><b>Audio -> Media Volume</b></li>
<ul><li><b>Level: 15</b></li>
</ul><li><b>Media -> Music Play Dir</b></li>
<ul><li><b>Dir: Music</b></li>
<li><b>Subdirs: On</b></li>
<li><b>Audio Only: On</b></li>
</ul><li><b>Alert -> Popup Task Names</b></li>
<ul><li><b>Test: Gefunden</b></li>
<li><b>Task: Musik Stop</b></li>
</ul></ol></ul></ul>Was passiert also nun:<br />
Wenn eine Mail mit dem Betreff <span style="color: orange;">"Melde dich!" </span>eingeht, wird als erstes das Handy auf klingeln gestellt, um sicherzugehen dass es nicht im lautlos Modus ist. Danach wird die derzeitige Medienlautstärke gespeichert um sie später wieder setzen zu können. Nun kann die Medienlautstärke auf Maximum gesetzt werden und danach Die Musik in einem bestimmten Ordner abgespielt werden. Mit <span style="color: orange;">"Popup Task Names"</span> wird ein Popup erstellt. Dieses zeigt dann einen Button mit <span style="color: orange;">"Musik Stop"</span>, dieser Task soll die Musik stoppen und die Medienlautstärke wieder zurücksetzen. Diesen Task müssen wir natürlich auch noch erstellen:<br />
<ul style="color: orange;"><li><b>Task: Musik Stop</b></li>
<ol><li><b>Media -> Music Stop</b></li>
<li><b>Audio -> Media Volume</b></li>
<ul><li><b>Set: %VOLMOLD</b></li>
</ul></ol></ul>Um bei der Medienlautstärke ein Eingabefeld anstelle des Schiebereglers zu bekommen, muss der Button mit den zwei Pfeilen gedrückt werden.<br />
<br />
<div style="color: orange;"><u><b>Fall 2: Handy verloren </b></u></div>Kommen wir nun zu Fall 2, dass das Handy sich an einem komplett unbekannten Ort befindet. Hierbei soll wieder auf eine eingehende Mail reagiert werden, aber anstatt zu klingeln, soll nun die letzte bekannte Position an den Absender der Mail gesendet werden. Wie man eine Mail mit Tasker versendet habe ich in einem Tutorial schon beschrieben:<br />
<br />
<div style="color: orange;"><a href="http://tasker-skripte.blogspot.com/2011/05/tutorial-emails-versenden-mit-tasker.html">[Tutorial] Emails versenden mit Tasker und einem Python Skript</a></div><br />
Das Handy soll nun auf eine eingehende Email mit dem Betreff <span style="color: orange;">"Wo bist du?"</span> eine Mail an den Absender schicken mit aktueller Position in Koordinaten und einem Google Maps Link. Für das Mail-Skript muss ein Konfigurationsfile mit folgendem Inhalt geschrieben werden:<br />
<br />
<div style="color: orange;">mailto: %EFROM</div><div style="color: orange;">subject: Hier bin ich</div><div style="color: orange;">body:</div><div style="color: orange;">Ort %LOCN</div><div style="color: orange;">Genauigkeit %LOCNACC Meter</div><div style="color: orange;">vor %AGE Sekunden</div><div style="color: orange;">http://maps.google.com/maps?f=q&sources=s_q&hl=de&geocode=&q=%LOCN</div><br />
Die Mail geht also an den Absender der zuletzt empfangenen Email. In die Mail kommt die letzte<span style="color: orange;"> </span><span style="color: red;"><span style="color: orange;">"Net"</span> </span>Position inklusive Genauigkeit und wann sie gemessen wurde. Ich habe <span style="color: orange;">"Net" </span>gewählt, da diese relativ genau ist und automatisch gemessen wird, wenn die Datenverbindung aktiviert ist. Zum Schluss kommt noch ein Google Maps Link mit der aktuellen Position, d.h. beim klicken auf den Link öffnet sich Maps und die Position wird angezeigt. Ich habe mir den Link zusammengebastelt, evtl. gibt es noch eine kürzere Version, dann gerne mal als Kommentar posten.<br />
<br />
Dieser Text muss mit Tasker in eine Datei geschrieben werden, dies geschieht mit der Funktion <span style="color: orange;">"File -> Write File"</span>. Hier nun das komplette Profil:<br />
<br />
<ul style="color: orange;"><li><b>Profil 2: Wo bist du?</b></li>
<ul><li><b>Trigger</b></li>
<ol><li><b>Event -> 3rd Party -> K9 Email Received</b></li>
</ol><li><b>Tasks</b></li>
<ol><li><b>Variable -> Variable Set</b></li>
<ul><li><b>Name: %AGE</b></li>
<li><b>To: %TIMES - %LOCNTMS</b></li>
<li><b>Do Math: Yes</b></li>
</ul><li><b>File -> Write File</b></li>
<ul><li><b>File: Tasker/mail.conf</b></li>
<li><b>Text: (Text für die Mail)</b></li>
</ul><li><b>Misc -> Run Skript</b></li>
<ul><li><b>Name: sendemail.py</b></li>
</ul></ol></ul></ul>Das wars schon. Die Varianle <span style="color: orange;">%AGE</span> gibt an, wann der letzte Positionsfix gespeichert wurde. Dazu wird die Uhrzeit des letzten Fix in Sekunden (<span style="color: orange;">%LOCNTMS</span>) von der aktuellen Uhrzeit in Sekunden (<span style="color: orange;">%TIMES</span>) abgezogen.<br />
<br />
Anstelle einer Mail, lässt sich das ganze auch per SMS lösen. Dazu gibt es den Trigger <span style="color: orange;">"Phone -> Received Text"</span> und die Aktion <span style="color: orange;">"Send SMS"</span>. In der Variablen <span style="color: orange;">%SMSRN </span>befindet sich der Absender der letzten empfangenen SMS.Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com9tag:blogger.com,1999:blog-226087406924845076.post-63134451035364487142011-05-18T14:40:00.003+02:002012-04-23T22:51:46.589+02:00[Tutorial] Emails versenden mit Tasker und einem Python Skript<a href="http://code.google.com/p/android-scripting/downloads/list?can=2&q=&sort=-uploaded&colspec=Filename%20Summary%20Uploaded%20Size%20Type%20DownloadCount"></a>Standardmäßig lässt sich mit Tasker eine Email nur erstellen, um diese zu versenden muss man noch selber auf <span style="color: orange;">"Senden"</span> drücken. Dies kann einen zwar etwas Arbeit ersparen, aber wirklich praktisch wäre es doch wenn eine Mail richtig automatisch versendet werden kann.<br />
<br />
Zum Glück besteht in Tasker die Möglichkeit Skripte auszuführen. Dafür benötigt man den <span style="color: orange;">"Script Layer for Android"</span>, kurz <span style="color: orange;">"SL4A"</span> und einen Interpreter für die gewünschte Programmiersprache. Tasker kann nun <span style="color: orange;">"SL4A" </span>starten und ein Skript ausführen lassen. Mit diesen Skripten kann man die verschiedensten Aufgaben erledigen, zum Beispiel eine Email senden. Dazu gibt es schon die <span style="color: orange;">"sendemail.py"</span>. Um nun eine automatische Email zu versenden, muss erst einmal <span style="color: orange;">"SL4A" </span>und <span style="color: orange;">"Python" </span>installiert werden.<br />
<br />
<br />
<a name='more'></a>Die nötigen APKs findet man in der Goolge-Code Project Seite:<br />
<div style="color: orange;">
<br /></div>
<div style="color: orange;">
<a href="http://code.google.com/p/android-scripting/downloads/list?can=2&q=&sort=-uploaded&colspec=Filename%20Summary%20Uploaded%20Size%20Type%20DownloadCount">http://code.google.com/p/android-scripting/downloads</a></div>
<br />
Aus dieser Liste benötigt man die aktuelle <span style="color: orange;">"sl4a_rX.apk" </span>und die <span style="color: orange;">"PythonForAndroid_rX.apk"</span>, das "X" repräsentiert die aktuelle Releasenummer. Zuerst installiert man das <span style="color: orange;">"SL4A" </span>danach <span style="color: orange;">"PythonForAndroid"</span>. Nun finden sich unter den Apps zwei neue Verknüpfungen, nämlich <span style="color: orange;">"SL4A" </span>und <span style="color: orange;">"Python for Android"</span>. Als erstes müssen noch die nötigen Dateien für Python runtergeladen werden, dazu öffnen wir <span style="color: orange;">"Python for Android"</span> und klicken den obersten Button <span style="color: orange;">"Install"</span>. Nun werden 3 Pakete runtergeladen und installiert. Wenn dies geschehen ist können wir <span style="color: orange;">"SL4A" </span>starten, hier müssten jetzt ein paar Python Skripte gelistet sein. Ist dies der Fall haben wir <span style="color: orange;">"SL4A"</span> und <span style="color: orange;">"Python for Android"</span> richtig installiert.<br />
<br />
Nun muss das <span style="color: orange;">"sendemail.py"</span> Skript runtergeladen werden. Den Link findet ihr am Ende dieses Posts. Diese Datei speichern wir in dem Ordner <span style="color: orange;">"/sdcard/sl4a/scripts"</span>. Damit das Skript genutzt werden kann müssen noch ein paar Zeilen bearbeitet werden, dies kann auf dem PC mit dem Notepad geschehen oder auf dem Androiden mit direkt <span style="color: orange;">"SL4A"</span> oder einem anderen Texteditor. Folgende Zeilen müssen verändert werden:<br />
<br />
<pre><span style="color: orange;"># CHANGE THESE!</span>
<span style="color: orange;"> email_name = '' # Optional - A friendly name for the 'From' field</span>
<span style="color: orange;"> email_user = '<gmail/google apps username>'</span>
<span style="color: orange;"> email_pass = '<gmail/google apps password>'</span></pre>
<br />
Hier müssen die Google Nutzerdaten eingetragen werden.<br />
<br />
<pre style="color: orange;"># Otherwise, default to the following location
conf_file = '/mnt/sdcard/tmp/mailout.conf'</pre>
<br />
Hier muss ein Pfad eingetragen werden in welchen wir später mit Tasker die Konfigurationsdatei erstellen. Ich habe dort einfach den folgenden Pfad eingetragen:<br />
<div style="color: orange;">
<br /></div>
<pre style="color: orange;">'/mnt/sdcard/Tasker/mail.conf'</pre>
<br />
<br />
Nun ist das Skript einsatzbereit. Um nun eine Mail zu versenden muss als erstes eine Konfigurationsdatei mit Empfänger, Betreff und Text erstellt werden. Diese könnte zum Beispiel folgendermaßen ausschauen:<br />
<br />
<pre style="color: orange;">mailto: HansWurst@googlemail.com</pre>
<pre style="color: orange;">subject: Eine automatische Email</pre>
<pre style="color: orange;">body:</pre>
<pre style="color: orange;">Hallo Hans, voll cool was mit Tasker alles geht ;)</pre>
<pre> </pre>
Man beachte dabei, dass der Inhalt der Mail eine Zeile unter <span style="color: orange;">"body:"</span> stehen muss, sonst funktioniert es nicht. Eine solche Datei lässt sich ohne Probleme mit Tasker erstellen. Dazu erstellen wir zunächst einen neuen Task und nennen ihn zum Beispiel <span style="color: orange;">"Send Email"</span>. In diesem Task erstellen wir zuerst eine Konfigurationsdatei und führen dann das Skript aus.<br />
<ul style="color: orange;">
<li><b>Task: "Send Email"</b></li>
<ol>
<li><b>File -> Write File</b></li>
<ul>
<li><b>File: Tasker/mail.conf</b></li>
<li><b>Text: Alles was in die Konfigurationsdatei muss</b></li>
</ul>
<li><b>Misc -> Run Script</b></li>
<ul>
<li><b>Name: sendemail.py</b></li>
</ul>
<li><b>Tasker -> Wait</b></li>
<ul>
<li><b>Minute: 1 </b></li>
</ul>
<li><b>File -> Delete File</b></li>
<ul>
<li><b>File: temp/mail.conf</b></li>
</ul>
</ol>
</ul>
Das wars schon :) Die letzte Aktion dient einfach nur dazu das System wieder zu bereinigen. Bevor die Datei aber gelöscht werden kann, muss etwas gewartet werden um sicher zu gehen, dass die Mail bereits versendet wurde.<br />
<br />
Toll, aber was kann man jetzt damit anstellen?<br />
Man kann diesen Task nach bestimmten Ereignissen ausführen lassen. So könnte man sich zum Beispiel automatisch eine Kopie der gerade empfangenen SMS als Email zusenden lassen. Dazu muss einfach nur in die Konfigurationsdatei die Variable <span style="color: orange;">%SMSRB</span> unter <span style="color: orange;">"body:"</span> eingetragen werden. <span style="color: orange;">%SMSRB</span> enthält den Inhalt der zuletzt empfangenen SMS. Ansonsten gibt es der Möglichkeiten viele :), mir fallen sicher ein paar Sachen ein die ich dann im Blog posten werde :)<br />
<br />
Hier noch ein Tipp von <a href="http://www.blogger.com/profile/03747400736799614765" rel="nofollow">FATlui</a> für alle Nichtgooglemailer:<br />
<dl class="avatar-comment-indent" id="comments-block"><dd class="comment-body" id="Blog1_cmt-5826974161975286166">Hier noch für alle nicht-Googleaccounts die angepasste Python: <br />
<a href="http://forum.xda-developers.com/showthread.php?t=937379" style="color: orange;">http://forum.xda-developers.com/showthread.php?t=937379</a> Profile liegen bei Bedarf auch schon bei. Bei mir funktioniert es einwandfrei! </dd></dl>
<div style="color: orange;">
<b>Quellen:</b></div>
sendemail.py: <a href="http://tasker.wdfiles.com/local--files/sendemail/sendemail.py" style="color: orange;">http://tasker.wdfiles.com/local--files/sendemail/sendemail.py</a><br />
Wiki: <a href="http://tasker.wikidot.com/sendemail" style="color: orange;">http://tasker.wikidot.com/sendemail</a><br />
Scripting Layer for Android: <a href="http://code.google.com/p/android-scripting/" style="color: orange;">http://code.google.com/p/android-scripting/</a>Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com43tag:blogger.com,1999:blog-226087406924845076.post-72713618067079297742011-05-17T11:33:00.002+02:002011-06-01T10:42:35.902+02:00[Profil] automatisch lautlos bei TerminenAuf meinen alten Diamond gab es die Einstellung automatisch das Handy auf lautlos zu stellen, wenn ein Termin ansteht. Diese Möglichkeit habe ich in Android nicht gefunden. Aber zum Glück lässt diese sich ohne Probleme mit Tasker nachbauen und sogar noch verbessern. So kann Tasker zum Beispiel nur bei Terminen von bestimmten Kalendern reagieren, oder nur bei bestimmten Termin Titeln usw.<br />
<br />
<br />
<a name='more'></a>Als Trigger nutze ich dafür "State -> Calendar Entry", hier hat man eine Menge Einstellungsmöglichkeiten.<br />
<ul><li><span style="color: orange;"><b>Title: </b></span>Es wird nur bei einem bestimmten Titel reagiert</li>
<li><span style="color: orange;"><b>Location: </b></span>Es wird nur bei bestimmten Orten (im Kalender angegeben) reagiert</li>
<li><span style="color: orange;"><b>Description:</b></span> Hier könnte man zum Beispiel "lautlos" bei den Terminen eintragen, bei denen Tasker automatisch auf lautlos stellen soll.</li>
<li><span style="color: orange;"><b>Available:</b></span> Ob man als (nicht) verfügbar angegeben hat</li>
<li><span style="color: orange;"><b>Calendar:</b></span> nutzt man mehrere Kalender kann man hier einen einzelnen auswählen</li>
<li><span style="color: orange;"><b>Invert:</b></span> Aktiviert das Profil wenn die oben eingegebenen Ereignisse nicht eintreten</li>
</ul>Hat man alles in "Calendar Entry" eingegeben, kann man den Entry und Exit Task anlegen. Hier das komplette Profil, hierbei wird auf jeden Eintrag reagiert, in welchem ich als nicht verfügbar angegeben bin.<br />
<ul><li><span style="color: orange;"><b>Profil 1: Auto Vibrate</b></span></li>
<span style="color: orange;"><b> </b></span><ul><li><span style="color: orange;"><b>Trigger</b></span></li>
<span style="color: orange;"><b> </b></span><ol><li><span style="color: orange;"><b>Calendar Entry</b></span></li>
<span style="color: orange;"><b> </b></span><ul><li><span style="color: orange;"><b>Available: No</b></span></li>
<span style="color: orange;"><b> </b></span></ul></ol><li><span style="color: orange;"><b>Task</b></span></li>
<span style="color: orange;"><b> </b></span><ol><li><span style="color: orange;"><b>Audio -> Silent Mode</b></span></li>
<span style="color: orange;"><b> </b></span><ul><li><span style="color: orange;"><b>Vibrate</b></span></li>
<span style="color: orange;"><b> </b></span></ul></ol><li><span style="color: orange;"><b>Exit Task</b></span></li>
<span style="color: orange;"><b> </b></span><ol><li><span style="color: orange;"><b>Audio -> Silent Mode</b></span></li>
<span style="color: orange;"><b> </b></span><ul><li><span style="color: orange;"><b>Off</b></span></li>
</ul></ol></ul></ul>Fertig :)Anonymoushttp://www.blogger.com/profile/09198299368853432590noreply@blogger.com11