[TUT] Tasker – Google Calendar Widget (via Minimalistic Text) | Optional AutoNav V2

Search This thread

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
Profile Aim

Tasker reads your calendar creating a home screen widget via Minimalistic Text. Reacting to a future ‘meeting’ entry, it queries Google to find out the route information and journey time. Using the journey time information and meeting start time, it calculates what time you will have to leave and loads Sav Nav with the preselected route 5 minutes before you are due to depart.

Now FULLY Functional

Whilst creating the ‘Ultimate Alarm Clock’ I wanted the speech engine to read out the details of my meetings for the coming day from my calendar. I was a little disappointed that Tasker did not yet have the functionality to do that and despite delving into the calendar data base files; I could not find a way to achieve it. Damn.

When Tasker is able to read calendar entries in future releases, the tasks described below can be easily adapted to make sure you have a ready to go profile, but in the mean time, and I hope as always, this tutorial is full of handy Tasker tips and tricks…

New to Tasker? Download your free trial here

MT Google Calendar Widget only

If you don't want the AutoNav, I've included a download below with just the MT widget in. There is therefore only limited preparation you'll need to perform:

* Download the Minimalistic Text (MT) Plugin free from the market.

* Following the simple instructions in this link and get the private url output of your calendar in xml format. Remove the https://www. from the beginning and test it in your device's browser.

* At the end of the URL after 'basic' put '?max-results=3&futureevents=true&orderby=starttime&sortorder=ascending' (without the ' ) and that should order the calendar by the next three events.

* Edit action #2, #3 & #4 in GCAppTime to replace the time-zone abbreviation with that relevant to your location. It currently splits at 'BST'. Check the output file googlecal.txt on your storage card if you're unsure.

Head to the download link!

Initial Full Preparation (very simple)

* A Gmail account and calendar.
* Download the Minimalistic Text (MT) Plugin free from the market.

V3 PREP: Following the simple instructions in this link and get the private url output of your calendar in xml format. Remove the https from the beginning and test it in your device's browser. Tasker will be extracting your calendar data from this.

At the end of the URL after 'basic' put '?max-results=3&futureevents=true&orderby=starttime&sortorder=ascending' (without the ' ) and that should order the calendar by the next three events.

So you don't have to change the all the icons I've used, download them directly to your device from here and unzip to folder level inside sdcard/Tasker/.icn

Overview

We are going to use the Google calendar private xml output to provide details of our up and coming calendar events. Tasker will react to a keyword of *meeting* within the title field and extract the relevant details to populate a widget and get your sat nav ready to take you there, loading up when you are due to leave.

First Shortfall (doh!)

Tasker does not yet have the functionality to trigger a profile when a created variable such as %MEETING_DEPARTURE_TIME = %TIME (current time). As a work-around, a new calendar entry is created to trigger the navigation to load.

Secondary Preparation (very simple)

We have to structure the content within the Google calendar so that it is constant. The XML feed will need to be split apart to extract the information we need. Tasker cannot adapt to changes in format, so until you are comfortable enough with the variable splits that take place, you’ll need to follow these instructions.

In the ‘title field’, put this text: Meeting - Bank Manager

In the ‘where field’ you want to put a location that is obvious to Google Maps and wouldn’t give you choices if you put the same query in a browser.

Example: in the ‘where field’, put: Oxford+UK

Do not leave spaces between the location information. Join them with ‘+’ symbols. Post codes work in the UK too, but I’m not sure about ZIP codes etc abroad. Just experiment in a browser first if needs be.

The ‘description’ field (although extracted) is not used in these profiles, so you can populate that how you like.

Ensure you have at least one of the above formatted events and another two calendar entries of any kind.

Installation

Download and import the following 12 tasks:

GCAppLoc
GCAppDesc
GCAppTime
GCAppTit
(lol?)
GCGetJD
GCJD
GCJT
GCAT
GCJTMaths
GCNavMaths
GCEntry
GCMT


Download and import the following 2 profiles:

Google-Calendar
Google-AutoNav


The .zip folder also contains the file Google_calendar_mtpref. This should be dragged into the sdcard/MinimalisticTextPreferences folder. It can then be selected in the MT Preference Manager or by selecting the 'restore' option when creating a new MT widget.

Customisation
  • Set the profile GoogleCalendar to however often you wish to pull the feed.
  • Edit action #2 in GCgetDatato the URL of your private XML feed. Don't forget drop the https://www. from the beginning and add the URL extension detailed above to the end.
  • Edit action #4, #5 & #6 in GCAppTime to replace the time-zone abbreviation with that relevant to your location. It currently splits at 'BST'. Check the file Googlecal.txt if you're unsure
  • Edit action #5 in GCJD to replace the splitter ',UK' with your country. You may need to view this in a browser to see how Google handles this.
  • Edit action #22 in GCEntry to the calendar you wish to use for the reminder.
That’s it!

Testing

In each of the tasks after a STOP action, I've left in various 'flash' and 'list' actions that I used when creating the tasks. If anything goes wrong, you can drag these up the list to see where/why a task might be failing.

The tasks are numbered in the notification bar, so should something go wrong, you'll be able to see on which task the profiles failed.

Tick the profiles to active them and apply out of Tasker!

Make sure your data connection/wifi is turned on and ‘Use GPS satellites’ and ‘Use wireless networks’ is ticked under ‘Location & Security’ in settings. You’ll be getting a GPS fix, so get ready to hang out of a window!

Press 'test' in the task GCGetData and you're off!

The icons in the notification bar tick down from 11 until the departure time is displayed and then check your calendar for the entry that will trigger the navigation to start!

If you are testing multiple times, you'll need to variable set %GCNAV to 1 each time. If this variable is set to 2, Tasker will ONLY update the MT calendar widget.

Job done….
 
Last edited:

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
Tutorial & Task Explanation

Google-Calendar

The initial profile is trigger is time based. You can set it to update how every frequently you want the Minimalistic Text widget to refresh.

GCGetData

First up, this task pulls the XML feed from your calendar. The output is written to a text file sdcard/Googlecal.txt. You can view the file in an explorer to see the data it pulls.

GCAppLoc

Splitting apart the XML feed (having transferred it to a created variable %GCFEED for good housekeeping), we extract the three appointment locations and place them in:

%GCLOC1
%GCLOC2
%GCLOC3


GCAppDesc

As above, this time extracting the description field to:

%GCDESC1
%GCDESC2
%GCDESC3


GCAppTime

As above, placing the calendar entry date and time into:

%GCTIME1
%GCTIME2
%GCTIME3


GCAppTit (lol?)

The final splitting task, that gets us the three titles:

%GCTIT1 (lol?)
%GCTIT2 (lol?)
%GCTIT3 (lol?)

You'll notice at action #18 there is a GOTO IF %GCNAV = 2. This variable is set to 1 when the navigation calendar entry triggers. IF it is still set to 2, then Tasker knows you already have a pending navigation entry and won't create another one. The GOTO skips all of the other tasks and goes straight to refreshing the MT widget with the above data, before stopping.

Assuming %GCNAV isn't set to 2, the task continues and checks if each of the %GCTITs (lol?) MATCHES 'Meeting*' (the '*' being a wild card to allow further body text after). If it does, it sets the main %GCTIT (lol?) to its contents and is told to perform the task %GCGetJD.

You'll note that IF %GCTIT1 (lol?) does match 'Meeting*' the perform task action has a STOP on, so Tasker will not get to consider the contents of %GCTIT2 (lol?) & %GCTIT3 (lol?). This avoids multiple requests for navigation entries.

GCGetJD

If Tasker did find 'Meeting*' in the title fields, a location request is actioned as your assumed starting point (this will change in V3). Once the location information is received, Tasker needs to know which of the three %GCLOC# variables it needs to include in the URL as the destination.

This is achieved by asking on each HTTP GET action, IF the corresponding %GCTIT# (lol?) entry contained 'Meeting*'. Using the same GOTO principle as above, the correct %GCLOC# can be set to %GCLOC and is therefore requested in the URL for the direction details.

The output file is written to SDCard/Journey.txt which you can view with a file explorer should you wish.

GCJD

This task reads from the file Journey.txt and splits it to populate %JOURD with the journey distance.

GCJT

Similar to the above, this time we populate %JOURT with the journey time.

GCAT

Using similar GOTO and IF actions to previous tasks, we establish which of the calendar events is the meeting and populate the information to %CALDTD so we can manipulate it.

The start time of the calendar entry is used for the arrival time and after some variable splits, is set again to %CALDTD

Note: Variable splits can be difficult to understand at first. Often when testing, I add a 'Variable List' action followed by a STOP action after each split. This way I can see what is happening to the data when I split it and the Variable List that appears details all of the parts I may either wish to use or clear for good housekeeping.

GCJTMaths

This is where it started to get a little tricky... As structured as the data is, there are of course many eventualities when it comes to the possible journey time:
Code:
# mins
1 hour
1 hour 1 min
1 hour # mins
# hours
# hours 1 min
# hours # mins
Using the method I described earlier of listing the variables after each split, I had to look for constants and newly created variables that I could use to cope with each eventuality.

For example, the first split I do is at the instance of 'hour'. Looking above you'll see that we could end up with the following:
Code:
# mins       ~ will create no further variables
1 hour                 ~ will create no further variables
1 hour 1 min         ~ will create a variable of '1 min'
1 hour # mins       ~ will create a variable of '# mins'
# hours               ~ will create a variable of 's'
# hours 1 min       ~ will create a variable of 's 1 min'
# hours # mins     ~ will create a variable of 's #mins'
Splitting further again by the instance of 'min':
Code:
# mins       ~ no further variables     ~ no further variables
1 hour                 ~ no further variables     ~ no further variables
1 hour 1 min         ~ a variable of '1 min'     ~ a variable of '1'
1 hour # mins       ~ a variable of '# mins'   ~ variables of '#' & 's'
# hours               ~ a variable of 's'           ~ no further variables
# hours 1 min       ~ a variable of 's 1 min'   ~ a variable of '1'
# hours # mins     ~ a variable of 's # mins'  ~ variables of '# min' & others
Scrolling through the task, I had to establish which journey time eventualities would lead to which data being populated to which variables! It gave me brain ache, but eventually I cracked with the help of plenty of IF statements and a GOTO action.

The result was having journey time hours (%JOURTDH) and minutes (%JOURTDM) separated into created variables.

GCNavMaths

Knowing my arrival time and the journey time, next up was to calculate what time I would need to depart. Unfortunately, simply subtracting one from the other isn't a possibility. An example arrival time of 14:30 with a journey time of 2 hours and 38 minutes may have Tasker trying to get you to leave at 12:-8; if at any time at all!

It's necessary to first deal with possible minus numbers and such issues as 3 hours before 01:00 not being at time of -2.00

Here's a working example:

If the appointment time is #:30 and the journey minutes are 40, then the we are after a departure time of #:50 rather than -10 if Tasker was left to its own devices. Seeing that the journey minutes are greater than (>) the arrival minutes, this gives us a chance to prevent the minus number occurring by adding 60 to the appointment minutes. This of course has to take place after the appointment time has been split apart into hours and minutes...
Code:
30 + 60 - 40 = 50 ~ The desired departure minutes
Using IF statements to establish whether the above scenarios are true, gives us the opportunity to take the action of adding 60 only IF journey minutes are greater than arrival minutes.. IF not, the action is skipped.

IF we've had to add 60 to the minutes, we can therefore deduce that we need to reduce the hour by 1. The exact same IF action above tells Tasker whether to perform this or not.

When we are finally left with separate departure time hours and minutes we need to variable join them into a time format. As a note, Tasker uses #.# rather than #:# as a time separator. Joining the hours and minutes using '.' would just be too easy wouldn't it... If the departure time is 02.09 in the morning for example, Tasker currently has them stored separately as 2 and 9. Joining them in this state would give us 2.9 which is no good of course...

We solve this issue by joining the hours to a leading zero IF they are less than 10, giving us '02'. We join the minutes to '.0' IF they are less than 10, or just '.' otherwise. We now have 02.09 stored in the created variable %DEPTD. Sorted.

GCEntry

It would be fantastic if the departure time above (%DEPTD) could be triggered when it equals the inbuilt time variable %TIME, but alas, that's not yet implemented in Tasker. The work-around to this is to trigger the navigation to start when a calendar entry becomes active with the departure details contained inside it.

The problem to this is that Tasker only enables you to set a calendar entry using 'minutes from now', so yes our example of 02.09 above is currently useless. I'm sure this will change in future releases so I persisted with GoogleNavMaths despite this, but regardless, next we have to convert the departure time into the number of minutes from now... Oh joy...

It involves a similar practice to GCNavMaths where we split the hours and minutes of the actual %TIME along with our example of 02.09, convert them both into minutes and find the difference between them. For the example below, lets say the current time is 19.38.

Code:
02.09
02 * 60 = 120
120 + 09 = 129

19.38
19 * 60 = 1140
1140 + 38 = 1178

129 - 1178 = !ERROR!

You can see that if the departure time is earlier the next day than the current time, we'll end up with incorrect data. The answer to this was quite simple - IF the departure hours are less (<) than current hour, we add 24 to it.

Code:
02.09
(02 + 24) * 60 = 1560
1560 + 09 = 1569

19.38
19 * 60 = 1140
1140 + 38 = 1178

1569 - 1178 = 391 mins

391 = 6 hours and 31 minutes

6 hours and 31 minutes from 19.38 is indeed 02.09

In practice, it was actually easier to deal with the subtraction of the hours and minutes separately and add them together after, but the principle remains the same.

The end result was having the number of minutes stored in %DEPTDCAL which could be used in the insert calendar entry action, along with %GCTIT (lol?) and %GCLOC.

* Check post 3 for current limitations with this task

GoogleMT

Minimalistic Text is a great application that can display any Tasker variable you send to it. The MT calendar widget backup is included in the .zip file. Once you have it on your home screen, you'll have to edit the font sizes etc to make this look good for you - it's currently fugly.

This task splits out some of the useless data such as the current year and passes the variables you would look to use over to MT.

Google-AutoNav

The profile is triggered by the context of a calendar event becoming active with matching matching variables %GCLOC & %GCTIT (lol?).

GCAutoNav

Finally, this task loads up the navigation at the equivalent of %DEPTD with the destination of %GCLOC. It sets %GCNAV to 1 to let Tasker know it can set another navigation entry should it wish on the next refresh...

And off you trot...

Google_calendar_mtpref

This should be dragged into the sdcard/MinimalisticTextPreferences folder. It can then be selected in the MT Preference Manager or by selecting the 'restore' option when creating a new MT widget.
 
Last edited:

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
Download | Change Log | FAQ

Limitations and Shortfalls

1) Have to split via the current month – Needs to be edited every month or use 12 IF variables.
2) Gets current location – may not be where you’re departing from! Need to look at including departure location in 'where' field.
3) A profile cannot currently be triggered by %VARIABLE = %TIME. Pleaded with Tasker Dev.
4) Incoming *meeting* SMS will overwrite the previous data & the widget details. Need some kind of loop to avoid overwriting.
5) Buffer time - didn't include the fact that you may want to leave 15 minutes or so spare...
6) MT widget only receives *meeting* entries. Need to get non-meeting entries into the calendar for a useful widget.
7) Time in seconds until the departure time does not consider days. Python script required to convert date from XML feed format:
'Wed Jun 1, 2011' to '5-30-11' (which is %DATE %TIME). Any volunteers?!
:eek:

FAQ

Q) I just want to use the calendar widget only. Can I do that?
A) Yes, there's a separate download below.

Q) I have many other Tasker questions, can I post them here??
A) To avoid clutter, probably best to use this official Google group

Q) Where can I learn more about Tasker?
A) The manual and Profiles and step-throughs on the Tasker wiki and you’ll be up to speed in no time.

Change Log

V2
Code:
* Private XML calendar feed used, rather than SMS service.
* Full Google Calendar widget via Minimalistic Text 
* Calendar provides default alarm 'buffer time' to navigation start.
* Renamed most tasks
* More intelligent tasks to handle multiple 'meeting' event.
* Prevented multiple navigation entries on refresh by using [B]%GCNAV[/B] set to 2.
V3 - Coming Soon!
Code:
* Profile triggered by [B]%VARIABLE[/B] = [B]%TIME[/B].
* Read departure location from calendar rather than assuming current location
* Python script to navigation events more than 24 hours away

Future Requests

None as yet.

Installation Instructions

Download and import the following 12 tasks:

GCAppLoc
GCAppDesc
GCAppTime
GCAppTit
(lol?)
GCGetJD
GCJD
GCJT
GCAT
GCJTMaths
GCNavMaths
GCEntry
GCMT


Download and import the following 2 profiles:

Google-Calendar
Google-AutoNav


The .zip folder also contains the file Google_calendar_mtpref. This should be dragged into the sdcard/MinimalisticTextPreferences folder. It can then be selected in the MT Preference Manager or by selecting the 'restore' option when creating a new MT widget.

Credits: RichardKemp for prompting me to go RSS hunting.
------------------------------------------------------------------------------------------------------
The thanks meter lets me know I'm appreciated! :eek:
 
Last edited:

richardkemp

Senior Member
Dec 12, 2005
162
19
Sweet, thanks for sharing, I will have a good hunt through this later when I have a moment.

I used to have something similar set up by using google apps script to make a publicly accessible spreadsheet containing my calendar entires, and download that spreadsheet (as a csv) using tasker. Unfortunately this stopped working when Google forced the use of https on all Docs, as neither Tasker nor any other way I could find to do it (I tried curl and wget) would allow https. Any suggestions for this? I would prefer not to use the sms version you mention so as not to clog up my inbox. Another way that almost works is getting the daily email agenda google offers, except Tasker can't access email bodies (only subjects, grr).

I was half considering writing some sort of app to make future calendar data accessible easily to tasker. I may do this over summer.
 
  • Like
Reactions: brandall

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
Sweet, thanks for sharing, I will have a good hunt through this later when I have a moment.

I used to have something similar set up by using google apps script to make a publicly accessible spreadsheet containing my calendar entires, and download that spreadsheet (as a csv) using tasker. Unfortunately this stopped working when Google forced the use of https on all Docs, as neither Tasker nor any other way I could find to do it (I tried curl and wget) would allow https. Any suggestions for this? I would prefer not to use the sms version you mention so as not to clog up my inbox. Another way that almost works is getting the daily email agenda google offers, except Tasker can't access email bodies (only subjects, grr).

I had a quick google on your suggestion and came up with a couple of applications here and here. You've also got me thinking that I must be able to pull a queried RSS feed from the calendar that would support the 'widgets' on the iGoogle home page for example. I'll dig a little further into this, as same with you, I failed when first looking at the 5am agenda email.

EDIT: Your prompting has lead me to this page which has resulted in me being able to get a private url of my agenda in xml or html output! Thank you! Looks like I have another evening of variable splits in front of me.....

I was half considering writing some sort of app to make future calendar data accessible easily to tasker. I may do this over summer.

I've heard a few people screaming out for task and agenda synchronisation from outlook without exchange server use. I don't know if someone has cracked this yet, but a CSV export would surely be pretty easy to convert?
 
Last edited:

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
Version 2 Up!

Change Log

V2
Code:
* Private XML calendar feed used, rather than SMS service.
* Full Google Calendar widget via Minimalistic Text 
* Calendar provides default alarm 'buffer time' to navigation start.
* Renamed most tasks
* More intelligent tasks to handle multiple 'meeting' event.
* Prevented multiple navigation entries on refresh by using [B]%GCNAV[/B] set to 2.
V3 - Coming Soon!
Code:
* Profile triggered by [B]%VARIABLE[/B] = [B]%TIME[/B].
* Read departure location from calendar rather than assuming current location
* Python script to navigation events more than 24 hours away

FAQ

Q) I just want to use the calendar widget only. Can I do that?
A) Yes, there's a separate download link.

Let me know it works folks!
 
Last edited:

richardkemp

Senior Member
Dec 12, 2005
162
19
Glad to have helped in some small way! Also incredibly grateful you actually found a way to make this work, once my exams are over I'll get on it and adapt this to my needs :D

As a suggestion for further uses for this calendar data, what I use it for is automatically setting the time I need to wake in the mornings. Basically, when I go to sleep I run a task which dims the screen, quiets the phone, etc etc. It also sets my alarm time to 7 hours in the future, *or two hours before my first appointment of the day*, whichever is sooner. Currently this uses a series of alarm profiles/tasks in Tasker, but I switch to Gentle Alarm when Tasker support works.

Again, when exams are over I'll (possibly) write up my 'Alarm in Tasker' solution and post here, with comments on how to integrate with your calendar stuff.
 

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
Glad to have helped in some small way! Also incredibly grateful you actually found a way to make this work, once my exams are over I'll get on it and adapt this to my needs :D

As a suggestion for further uses for this calendar data, what I use it for is automatically setting the time I need to wake in the mornings. Basically, when I go to sleep I run a task which dims the screen, quiets the phone, etc etc. It also sets my alarm time to 7 hours in the future, *or two hours before my first appointment of the day*, whichever is sooner. Currently this uses a series of alarm profiles/tasks in Tasker, but I switch to Gentle Alarm when Tasker support works.

Again, when exams are over I'll (possibly) write up my 'Alarm in Tasker' solution and post here, with comments on how to integrate with your calendar stuff.

You certainly gave me a nudge in the right direction!

I'll look forward to your write up and interested to see how you get the alarm to trigger. Good luck in your exams! :eek:
 

richardkemp

Senior Member
Dec 12, 2005
162
19
The alarm trigger is a bit hackish.. basically there's two profiles, one runs each hour if the night variable is set, splits %TIME and checks if %TIME1 matches %ALARMHOUR. If so, it turns on another profile which runs every 5 mins, doing a similar thing to check if %TIME2 is greater than %ALARMMINUTES. If true, turn off profile and run the alarm task.

Prior to that version I was using another little trick Pent recommended me (not quite as good though), I had a profile with the context %TIME > %ALARMTIME, but obviously it didn't check the variables and didn't fire. TO solve this there was another profile which every 15 mins (when %NIGHT is set) would set %ALARMTIME to %ALARMTIME. Apparently re-setting the variable like that triggers the check. The first one I mentioned is a bit more efficient. I have considered switching to using calendar event based triggering, but it wasn't immediately obvious to me how I could edit the alarm event's time once set, short of literally editing the event on the calendar.
 

fragargon

Senior Member
Feb 14, 2011
1,091
283
hi Brandall,

already read me elsewhere isn't it? ;)

FAQ

Q) I just want to use the calendar widget only. Can I do that?
A) Yes, there's a separate download link.

Let me know it works folks!

so I can tell that it works about var and MT but... as i am franch speaking and so GC is french xml tags are to be corrected on splitting task ... where - event status and so one... CEST instead BST for continental (gmt+1)
Also as mentionned early in that thread should use some convenience fullfiling the appointment so could easly to get splitting process....

i'm actually on it .
I stay tuned as soon as it is corrected for french speaking I would give back report about mod I have done...

tks a lot very good way to learn how splitting process works ;)
 

brandall

Senior Member
May 16, 2008
2,679
5,222
Birmingham
The alarm trigger is a bit hackish.. basically there's two profiles, one runs each hour if the night variable is set, splits %TIME and checks if %TIME1 matches %ALARMHOUR. If so, it turns on another profile which runs every 5 mins, doing a similar thing to check if %TIME2 is greater than %ALARMMINUTES. If true, turn off profile and run the alarm task.
Not too hackish! I like it... Hadn't thought of doing that - At worst it triggers the alarm a few minutes late, and doesn't use an additional calendar entry... I'm really hoping the next release will have the context %VAR = %TIME...
Prior to that version I was using another little trick Pent recommended me (not quite as good though), I had a profile with the context %TIME > %ALARMTIME, but obviously it didn't check the variables and didn't fire. TO solve this there was another profile which every 15 mins (when %NIGHT is set) would set %ALARMTIME to %ALARMTIME. Apparently re-setting the variable like that triggers the check. The first one I mentioned is a bit more efficient. I have considered switching to using calendar event based triggering, but it wasn't immediately obvious to me how I could edit the alarm event's time once set, short of literally editing the event on the calendar.
I prefer what you've done to using a calendar entry - It felt messy doing that, although I suppose it can have the appointment title, destination time etc etc in...
 

Top Liked Posts

  • There are no posts matching your filters.
  • 12
    Profile Aim

    Tasker reads your calendar creating a home screen widget via Minimalistic Text. Reacting to a future ‘meeting’ entry, it queries Google to find out the route information and journey time. Using the journey time information and meeting start time, it calculates what time you will have to leave and loads Sav Nav with the preselected route 5 minutes before you are due to depart.

    Now FULLY Functional

    Whilst creating the ‘Ultimate Alarm Clock’ I wanted the speech engine to read out the details of my meetings for the coming day from my calendar. I was a little disappointed that Tasker did not yet have the functionality to do that and despite delving into the calendar data base files; I could not find a way to achieve it. Damn.

    When Tasker is able to read calendar entries in future releases, the tasks described below can be easily adapted to make sure you have a ready to go profile, but in the mean time, and I hope as always, this tutorial is full of handy Tasker tips and tricks…

    New to Tasker? Download your free trial here

    MT Google Calendar Widget only

    If you don't want the AutoNav, I've included a download below with just the MT widget in. There is therefore only limited preparation you'll need to perform:

    * Download the Minimalistic Text (MT) Plugin free from the market.

    * Following the simple instructions in this link and get the private url output of your calendar in xml format. Remove the https://www. from the beginning and test it in your device's browser.

    * At the end of the URL after 'basic' put '?max-results=3&futureevents=true&orderby=starttime&sortorder=ascending' (without the ' ) and that should order the calendar by the next three events.

    * Edit action #2, #3 & #4 in GCAppTime to replace the time-zone abbreviation with that relevant to your location. It currently splits at 'BST'. Check the output file googlecal.txt on your storage card if you're unsure.

    Head to the download link!

    Initial Full Preparation (very simple)

    * A Gmail account and calendar.
    * Download the Minimalistic Text (MT) Plugin free from the market.

    V3 PREP: Following the simple instructions in this link and get the private url output of your calendar in xml format. Remove the https from the beginning and test it in your device's browser. Tasker will be extracting your calendar data from this.

    At the end of the URL after 'basic' put '?max-results=3&futureevents=true&orderby=starttime&sortorder=ascending' (without the ' ) and that should order the calendar by the next three events.

    So you don't have to change the all the icons I've used, download them directly to your device from here and unzip to folder level inside sdcard/Tasker/.icn

    Overview

    We are going to use the Google calendar private xml output to provide details of our up and coming calendar events. Tasker will react to a keyword of *meeting* within the title field and extract the relevant details to populate a widget and get your sat nav ready to take you there, loading up when you are due to leave.

    First Shortfall (doh!)

    Tasker does not yet have the functionality to trigger a profile when a created variable such as %MEETING_DEPARTURE_TIME = %TIME (current time). As a work-around, a new calendar entry is created to trigger the navigation to load.

    Secondary Preparation (very simple)

    We have to structure the content within the Google calendar so that it is constant. The XML feed will need to be split apart to extract the information we need. Tasker cannot adapt to changes in format, so until you are comfortable enough with the variable splits that take place, you’ll need to follow these instructions.

    In the ‘title field’, put this text: Meeting - Bank Manager

    In the ‘where field’ you want to put a location that is obvious to Google Maps and wouldn’t give you choices if you put the same query in a browser.

    Example: in the ‘where field’, put: Oxford+UK

    Do not leave spaces between the location information. Join them with ‘+’ symbols. Post codes work in the UK too, but I’m not sure about ZIP codes etc abroad. Just experiment in a browser first if needs be.

    The ‘description’ field (although extracted) is not used in these profiles, so you can populate that how you like.

    Ensure you have at least one of the above formatted events and another two calendar entries of any kind.

    Installation

    Download and import the following 12 tasks:

    GCAppLoc
    GCAppDesc
    GCAppTime
    GCAppTit
    (lol?)
    GCGetJD
    GCJD
    GCJT
    GCAT
    GCJTMaths
    GCNavMaths
    GCEntry
    GCMT


    Download and import the following 2 profiles:

    Google-Calendar
    Google-AutoNav


    The .zip folder also contains the file Google_calendar_mtpref. This should be dragged into the sdcard/MinimalisticTextPreferences folder. It can then be selected in the MT Preference Manager or by selecting the 'restore' option when creating a new MT widget.

    Customisation
    • Set the profile GoogleCalendar to however often you wish to pull the feed.
    • Edit action #2 in GCgetDatato the URL of your private XML feed. Don't forget drop the https://www. from the beginning and add the URL extension detailed above to the end.
    • Edit action #4, #5 & #6 in GCAppTime to replace the time-zone abbreviation with that relevant to your location. It currently splits at 'BST'. Check the file Googlecal.txt if you're unsure
    • Edit action #5 in GCJD to replace the splitter ',UK' with your country. You may need to view this in a browser to see how Google handles this.
    • Edit action #22 in GCEntry to the calendar you wish to use for the reminder.
    That’s it!

    Testing

    In each of the tasks after a STOP action, I've left in various 'flash' and 'list' actions that I used when creating the tasks. If anything goes wrong, you can drag these up the list to see where/why a task might be failing.

    The tasks are numbered in the notification bar, so should something go wrong, you'll be able to see on which task the profiles failed.

    Tick the profiles to active them and apply out of Tasker!

    Make sure your data connection/wifi is turned on and ‘Use GPS satellites’ and ‘Use wireless networks’ is ticked under ‘Location & Security’ in settings. You’ll be getting a GPS fix, so get ready to hang out of a window!

    Press 'test' in the task GCGetData and you're off!

    The icons in the notification bar tick down from 11 until the departure time is displayed and then check your calendar for the entry that will trigger the navigation to start!

    If you are testing multiple times, you'll need to variable set %GCNAV to 1 each time. If this variable is set to 2, Tasker will ONLY update the MT calendar widget.

    Job done….
    11
    Download | Change Log | FAQ

    Limitations and Shortfalls

    1) Have to split via the current month – Needs to be edited every month or use 12 IF variables.
    2) Gets current location – may not be where you’re departing from! Need to look at including departure location in 'where' field.
    3) A profile cannot currently be triggered by %VARIABLE = %TIME. Pleaded with Tasker Dev.
    4) Incoming *meeting* SMS will overwrite the previous data & the widget details. Need some kind of loop to avoid overwriting.
    5) Buffer time - didn't include the fact that you may want to leave 15 minutes or so spare...
    6) MT widget only receives *meeting* entries. Need to get non-meeting entries into the calendar for a useful widget.
    7) Time in seconds until the departure time does not consider days. Python script required to convert date from XML feed format:
    'Wed Jun 1, 2011' to '5-30-11' (which is %DATE %TIME). Any volunteers?!
    :eek:

    FAQ

    Q) I just want to use the calendar widget only. Can I do that?
    A) Yes, there's a separate download below.

    Q) I have many other Tasker questions, can I post them here??
    A) To avoid clutter, probably best to use this official Google group

    Q) Where can I learn more about Tasker?
    A) The manual and Profiles and step-throughs on the Tasker wiki and you’ll be up to speed in no time.

    Change Log

    V2
    Code:
    * Private XML calendar feed used, rather than SMS service.
    * Full Google Calendar widget via Minimalistic Text 
    * Calendar provides default alarm 'buffer time' to navigation start.
    * Renamed most tasks
    * More intelligent tasks to handle multiple 'meeting' event.
    * Prevented multiple navigation entries on refresh by using [B]%GCNAV[/B] set to 2.
    V3 - Coming Soon!
    Code:
    * Profile triggered by [B]%VARIABLE[/B] = [B]%TIME[/B].
    * Read departure location from calendar rather than assuming current location
    * Python script to navigation events more than 24 hours away

    Future Requests

    None as yet.

    Installation Instructions

    Download and import the following 12 tasks:

    GCAppLoc
    GCAppDesc
    GCAppTime
    GCAppTit
    (lol?)
    GCGetJD
    GCJD
    GCJT
    GCAT
    GCJTMaths
    GCNavMaths
    GCEntry
    GCMT


    Download and import the following 2 profiles:

    Google-Calendar
    Google-AutoNav


    The .zip folder also contains the file Google_calendar_mtpref. This should be dragged into the sdcard/MinimalisticTextPreferences folder. It can then be selected in the MT Preference Manager or by selecting the 'restore' option when creating a new MT widget.

    Credits: RichardKemp for prompting me to go RSS hunting.
    ------------------------------------------------------------------------------------------------------
    The thanks meter lets me know I'm appreciated! :eek:
    1
    Sweet, thanks for sharing, I will have a good hunt through this later when I have a moment.

    I used to have something similar set up by using google apps script to make a publicly accessible spreadsheet containing my calendar entires, and download that spreadsheet (as a csv) using tasker. Unfortunately this stopped working when Google forced the use of https on all Docs, as neither Tasker nor any other way I could find to do it (I tried curl and wget) would allow https. Any suggestions for this? I would prefer not to use the sms version you mention so as not to clog up my inbox. Another way that almost works is getting the daily email agenda google offers, except Tasker can't access email bodies (only subjects, grr).

    I was half considering writing some sort of app to make future calendar data accessible easily to tasker. I may do this over summer.
    1
    Seems like the download for calendar only is 0 bytes. At least for me. I tried 5 times :(