Termineintrag / Abfrage

Super, vielen Dank, das ist eine gute Basis für mein Vorhaben :)

Allerdings verstehe ich diese If-Anweisung nicht:

Chillmann schrieb:
A1: For [ Variable:%count Items:1:24 ] If [ %tit1 ~ Kalenderwoche*/%tit* ]

Was bewirkt die?
 
Sie dient zum Abbruch der for-schleife. Also solange kein Eintrag gefunden wurde, existiert auch kein array "tit()" und falls man die Kalenderwochen anzeigen lässt, sollen entsprechende Einträge auch nicht zum Abbruch der Schleife führen.
 
Ich steh trotzdem noch etwas auf dem Schlauch. Zum einen, wo die Kalenderwochen anzeigen lassen? Zum anderen, was bedeutet der * nach dem Namen?
 
Man kann, wenn man seinen Kalender mit google synchronisiert, sich neben Geburtstagen und Feiertagen, auch Einträge für dir jeweilige Wochennummer erstellen lassen. Diese werden von Tasker als ganztägiger Kalendereintrag erkannt. Da mein Task, beim ersten gefunden Eintrag die Suche stoppt und die Uhrzeit verarbeitet, hab ich das über die if-Bedingung unterbunden. Der Stern bedeutet, dass eine beliebige Anzahl beliebiger Zeichen, im verglichenen String, folgen dürfen. Mehr dazu unter pattern matching
Im Fall von %tit* verhindert das pattern matching die Auflösung der variablen. D.h. es werden nicht die Inhalte jeglicher Variablen, die mit %tit beginnen ausgewertet, sondern die tatsächliche Zeichenfolge "%tit+irgendwas" wird für dir if-Bedingung verlangt. So erkenne ich, ob die variable %tit1 bereits einen Wert hat oder immer noch ihren eigenen Namen, nach Abfrage zurückgibt.


Gruß

Chillmann
 
Zuletzt bearbeitet:
Vielen Dank für die Erklärung. Werde nun mal versuchen, das ganze so zu erweitern, dass ich alle Termine ausgespuckt bekomme anstatt nur den ersten.
 
Danke Chillmann für den Task.

Ich hab ihn mal für meine Bedürfnisse angepasst.
Man kann in den ersten 3 Zeilen verschiedene Sachen einstellen.
1. Zeile Terminbezeichnung --> es wird nur nach einem Termin gesucht der genau diese Bezeichnung hat
2. Suchintervall --> hier kann in Minuten der Suchintervall angegeben werden (Wichtig für Termine die kleiner 1h z.b. sind)
3. Suchtiefe in Tagen --> wie weit im Kalender nach diesem Termin gesucht werden soll.

Ich benutze diesen Task für mein 2. Handy welches ein Weckersklave für mich ist ;)
Im Hintergrund läuft ne Uhr, ich lege mir dann immer transparente Popups drüber, mit den Weckerinformationen und genau dazu dient dieser Task.
 

Anhänge

  • Next_appointment.tsk.xml.txt
    5,5 KB · Aufrufe: 281
  • Danke
Reaktionen: Chillmann
Erim schrieb:
Danke Chillmann für den Task.

Gerne doch : )

Hatte auch bereits nen Task zum Wecker stellen. Allerdings mit festen Werten auf meine Bedürfnisse abgestimmt. Habe ihn nun, so wie du, zur variablen Nutzung umgebaut und ne App draus gemacht.

Auch von mir ein Dank für gute Anregungen :thumbup:
2. Suchintervall --> hier kann in Minuten der Suchintervall angegeben werden (Wichtig für Termine die kleiner 1h z.b. sind)
3. Suchtiefe in Tagen --> wie weit im Kalender nach diesem Termin gesucht werden soll.

Habe diese beiden Einstellungsmöglichkeiten auch in die App integriert. Da sie den Wecker automatisch stellen soll, ist die Suchtiefe bei mir auf 24 Std begrenzt. Werde mir heute ein paar Testopfer suchen und bei Erfolg die App im Appfactory thread hochladen.
Hier schonmal das Projekt.


Gruß

Chillmann
 

Anhänge

  • Alarm_by_calendar.prj.xml.txt
    35,5 KB · Aufrufe: 296
  • Danke
Reaktionen: icke0801 und ilkaskim
Chillmann schrieb:
Hier ein Task, der von dem Moment seiner Ausführung, die kommenden 24Std des Kalenders auf Einträge überprüft und falls einer vorliegt, eine Rückmeldung macht.


Next appointment (272)
A1: For [ Variable:%count Items:1:24 ] If [ %tit1 ~ Kalenderwoche*/%tit* ]
A2: Variable Set [ Name:%times To:3600*%count+%TIMES Do Maths:On Append:Off ]
A3: Test [ Type:Calendar Title Data:%times Store Result In:%tit ]
A4: End For
A5: Test [ Type:Calendar Start (Seconds) Data:%times Store Result In:%res Continue Task After Error:On ]
A6: If [ %res1 Is Set ]
A7: Variable Convert [ Name:%res1 Function:Seconds to Medium Date Time Store Result In:%dat ]
A8: Variable Split [ Name:%dat Splitter: Delete Base:Off ]
A9: Variable Subtract [ Name:%count Value:1 ]
A10: Variable Subtract [ Name:%times Value:3600 ]
A11: Variable Subtract [ Name:%res1 Value:%times ]
<If-loop>
A12: If [ %res1 > 0 ]
A13: Variable Subtract [ Name:%res1 Value:60 ]
A14: Variable Add [ Name:%min Value:1 Wrap Around:0 ]
A15: Goto [ Type:Action Label Number:1 Label:If-loop ]
A16: End If
A17: Flash [ Text:Nächster Termin "%tit1" in %count Std und %min Min (%dat4 Uhr) Long:On ]
A18: Else
A19: Flash [ Text:Kein Kalendereintrag in den nächsten 24 Stunden Long:Off ]
A20: End If


Auch als Download (.txt vor Import aus dem Dateiname löschen)


Gruß

Chillmann

Hallo Chillmann,
Wenn ich deine bereitgestellte Datei importieren möchte, kommt immer die Meldung "speichern der Importdatei auf der SDKarte fehlgeschlagen". Was mache ich falsch?

Grüße,
LBiker
 
Vermute du hast Android 4.4, dort ist der Zugriff auf die externe SD eingeschränkt.
 
Georgius schrieb:
Vermute du hast Android 4.4, dort ist der Zugriff auf die externe SD eingeschränkt.

Ja das stimmt. Wie kann ich das Profil sonst importieren?
 
hallo leute,

bin jetzt auch auf dem trip gekommen tasker meinen kalender durchforsten zu lassen.

hier sind ja schon interessante projekte entstanden. ich bräuchte zum start allerdings ein klein wenig hilfe. wie komme ich an die uhrzeit des termins?
 
Misc -> Test: Calender Start (Seconds)
Die Ausgabe ist dann in dem gleichen Format wie %TIMES. Mit der Aktion: Variable -> Variable convert kann man was lesbares draus machen.
 
  • Danke
Reaktionen: 44262
super danke! bin jetzt soweit, dass ich durch einen kalendereintrag den wecker stellen kann! basierend auf der uhrzeit des eintrags - 1,25h, die ich zum aufstehen etc brauche :).
Jetzt müsste ich noch wissen, wie ich nach kalendereinträgen suchen kann und nicht erst den wecker stelle, wenn der kalendereintrag aktiv wird :D.

hast du da nochmal ein tipp für mich?

edit: wenn ich über testen die nächsten kalendertitel auslesen lasse, kann ich tasker irgendwie sagen, dass er sich auf einen bestimmten kalender einschränken soll? würde gerne einen extra kalender anlegen, indem nur termine zum wecker stellen drin sind. würde die weitere handhabung deutlich vereinfachen, da man nicht unerwünschte termine ausfiltern muss.
 
Zuletzt bearbeitet von einem Moderator:
Bei meinem Task suche ich nach Einträgen, indem ich den Task jeden Tag um 23:59 starten lasse und die kommenden 10 Stunden des Kalenders via For-Schleife abarbeite. Beispiel

Nen bestimmten Kalender durchsuchen geht glaube nicht.
 
deinen task hab ich mir mal angeschaut. allerdings schein ich die erste for-schleife nicht ganz zu verstehen. wie kommst du auf 10 stunden?
wenn du für count 1:24 setzt, dann durchsuchst du doch die nächsten 24std?

dann hast du die kalenderwochen ausblenden lassen (scheint ja zu funktionieren) allerdings ist mir nicht ganz klar warum. du hast bei der for schleife dafür noch eine if-bedinung mit eingebaut. also das %tit1 ~ Kalenderwoche*/%tit* . aber meines verständnisses nach arbeitet die for schleife nur dann wenn die bedinung erfüllt ist oder?

ich hab (nur um es mal auszuprobieren) mal zusätzlich zur popup-benachrichtigung mein wecker setzen lassen. das funktioniert auch, allerdings steh ich immer noch vor dem problem, dass ich mir nicht sicher bin welcher termin gefunden wird.

wenn ich mit testen calender title termine suche wird mir stets maximal der erste termin am tag und ein ganztägiger termin angezeigt. ich bekomme nichtmal alle termine ausgelesen :-(
 
Ja richtig, in meinem persönlichen Task sind es 10 Std. und im Beispiel 24.

Grade die If-Bedingung sorgt dafür, das die For-Schleife nach dem ersten Treffer (Eintrag im Kalender) stoppt. Und damit nicht der Eintrag mit der Kalenderwoche berücksichtigt wird, ist dieser auch Teil der If-Bedingung.

Um bei einem bestimmten Eintrag zu stoppen müsste als If-Bedingung: %tit1 !~ TitelDesEintrags genügen.

Hier mal die Beschreibung meines aktuellen tasks. Sind tatsächlich 15 Stunden, die auf Einträge überprüft wird.


Set alarm (269)
A1: For [ Variable:%count Items:1:15 ] If [ %tit1 !~ Schicht ]
A2: Variable Set [ Name:%times To:3600*%count+%TIMES Do Maths:On Append:Off ]
A3: Test App [ Type:Calendar Start (Seconds) Data:%times Store Result In:%res Continue Task After Error:On ]
A4: Test App [ Type:Calendar Title Data:%times Store Result In:%tit ]
A5: End For
A6: Stop [ With Error:Off Task: ] If [ %tit1 !~ Schicht ]
A7: Variable Convert [ Name:%res1 Function:Seconds to Medium Date Time Store Result In:%dat ]
A8: Variable Split [ Name:%dat Splitter: Delete Base:Off ]
A9: Variable Split [ Name:%dat4 Splitter:: Delete Base:Off ]
A10: If [ %dat41 < 15 ]
A11: Variable Add [ Name:%dat42 Value:10 Wrap Around:60 ]
A12: If [ %dat42 ~ 0 ]
A13: Variable Subtract [ Name:%dat41 Value:1 ]
A14: Else
A15: Variable Subtract [ Name:%dat41 Value:2 ]
A16: End If
A17: Set Alarm [ Hours:%dat41 Minutes:%dat42 Message: Confirm:Off ]
A18: End If


Mit der letzten tasker-beta wurde die Kategorie "Verschiedenes" komplett aufgelöst und die Aktionen neu einsortiert. Dabei wurde auch die Aktion "Test" in ihre Unterkategorien aufgeteilt. Deswegen heißt die Aktion "Test" nun "Test App"

Da ich meinen Eintrag immer auf 10 min vor dem eigentlichen Schichtbeginn stelle, muss ich die 10 min später wieder drauf packen um zu einer glatten Uhrzeit geweckt zu werden.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: 44262
Hier ist mal mein Profil von Tasker zum Kalender vorlesen, vielleicht hilft es dir ja.


Kalender vorlesen (7)
A1: Say [ Text:Einen Moment bitte Engine:Voice:com.samsung.SMT:deu-DEU Stream:3 Pitch:5 Speed:5 Respect Audio Focus:On Network:Off Continue Task Immediately:Off ]
A2: HTTP Get [ Server:port:http://www.google.com/calendar/feeds/my.email%40googlemail.com/private-keyxxxxxxxxxxxxxxxxxxxkey/basic?futureevents=true&orderby=starttime&sortorder=ascending&max-results=10&singleevents=true Path: Attributes: Cookies: User Agent: Timeout:10 Mime Type:text/html Output File: Trust Any Certificate:Off ]
A3: Variable Split [ Name:%HTTPD Splitter:><title type='html'> Delete Base:Off ]
A4: Variable Set [ Name:%NEVENTS To:6 Do Maths:On Append:Off ]
A5: For [ Variable:%HTTPDA3 Items:%HTTPD(2:%NEVENTS) ]
A6: Variable Search Replace [ Variable:%HTTPDA3 Search: M&amp;auml;r. Ignore Case:Off Multi-Line:Off One Match Only:Off Store Matches In: Replace Matches:On Replace With:März ]
A7: Variable Split [ Name:%HTTPDA3 Splitter:</title><summary type='html'> Delete Base:Off ]
A8: Variable Split [ Name:%HTTPDA32 Splitter:Wann: Delete Base:Off ]
A9: Variable Split [ Name:%HTTPDA322 Splitter:&amp;nbsp; Delete Base:Off ]
A10: Variable Split [ Name:%HTTPDA3221 Splitter:&amp;nbsp; MESZ&lt;br&gt; Delete Base:Off ]
A11: Variable Split [ Name:%HTTPDA3221 Splitter:&amp;nbsp; MEZ&lt;br&gt; Delete Base:Off ]
A12: Variable Set [ Name:%NEXTAPT To:%HTTPDA31 Do Maths:Off Append:Off ]
A13: Variable Set [ Name:%NEXTAPTSTART To:%HTTPDA3221 Do Maths:Off Append:Off ]
A14: Say [ Text:Termin %NEXTAPT am %NEXTAPTSTART Engine:Voice:com.samsung.SMT:deu-DEU Stream:3 Pitch:5 Speed:5 Respect Audio Focus:On Network:Off Continue Task Immediately:Off ]
A15: End For
A16: Variable Clear [ Name:%HTTPD Pattern Matching:Off ]

Bestimmt läßt sich da einiges am Code optimieren, aber da es bei mir ohne Probleme so läuft, habe ich es dabei belassen.
In A4 kann man die Anzahl der Kalender-Einträge bestimmen.( hier 6)
A6 kann ganz entfallen, da habe ich den Umlaut im Wort März ersetzt.

An dieser Stelle herzlichen Dank an Chillmann, der mir mit seinen Ausführungen und Beispielen hier im Thread sehr geholfen hat. :thumbup:

An den den Kalender in A2 kommt man über die Einstellungen im Google-Kalender:
 

Anhänge

  • bild1a.jpg
    bild1a.jpg
    9 KB · Aufrufe: 229
  • Danke
Reaktionen: 44262
danke chillman für den task.
hab ihn jetzt noch ein klein wenig an meine bedürfnisse angepasst aber scheint sehr gut zu funktionieren. werde ihn noch ein wenig testen (will ja nicht verschlafen :) ).

auch dir danke vepman. ich gucke mir deinen task mal an!

Edit: hier mein Task wie ich ihn momentan gedenke einzusetzen.

Setze Wecker (107)
A1: For [ Variable:%count Einträge:1:15 ] If [ %tit1 !~ Uni ]
A2: Variable Setzen [ Name:%times Zu:3600*%count+%TIMES Mathematisch:An Hinzufügen:Aus ]
A3: Testen [ Typ:Calendar Start (Seconds) Daten:%times Ergebnis Ablegen In:%res Task Weiter Ausführen Nach Fehler:An ]
A4: Testen [ Typ:Calendar Title Daten:%times Ergebnis Ablegen In:%tit ]
A5: End For
A6: Stopp [ (Fehler):Aus Task: ] If [ %tit1 !~ Uni ]
A7: Variable Substrahiere [ Name:%res1 Wert:4500 ]
A8: Variable Umrechnen [ Name:%res1 Funktion:Sekunden zu Datum-Zeit (Mittel) Ergebnis Ablegen In:%Dat ]
A9: Variable Aufteilen [ Name:%Dat Teiler: Basis löschen:Aus ]
A10: Variable Aufteilen [ Name:%Dat4 Teiler:: Basis löschen:Aus ]
A11: If [ %Dat41 < 11 ]
A12: Alarm Stellen [ Std.:%Dat41 Minuten:%Dat42 Nachricht: Bestätigen:Aus ]
A13: End If


Ich subtrahiere von res1 direkt 1,25h in Sekunden. Also 75*60=4500. Damit hab ich direkt die richtige weckzeit in dat stehen und muss diese später nicht mehr anpassen. Außerdem stell ich den Wecker nur bis 10:xx, für alles was später ist brauche ich keinen Wecker mehr.
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: icke0801
Hallo zusammen,

ich wollte das File aus Beitrag#27 von Chillmann in meinen Tasker importieren.
Leider kommt immer die Fehlermeldung " Import fehlgeschlagen".
Die Datei liegt als "Alarm_by_calendar.prj.xml" im Ordner Tasker/Projekte.

Was muss ich denn noch beachten, um dieses File zu importieren?
 
Wenn ich mich noch recht erinnere, liegt es an der Scene Variable Query, die schon existiert.
Einfach die schon vorhandene Scene Variable Query umbenennen und dann müsste es gehen.
 

Ähnliche Themen

Viper73
Antworten
1
Aufrufe
242
Cecoupeter
Cecoupeter
Ascona01
Antworten
4
Aufrufe
451
Ascona01
Ascona01
J
Antworten
19
Aufrufe
1.435
RoCo
RoCo
Zurück
Oben Unten