// on{x} recipe for fastest route to work
// created by jgaikwad@gmail.com
// version 1
// last modified 6/5/2012
// define variables
var time = "07:35 AM";
var wps = [];
var fastestroute = '';
var route1Duration = '';
var route2Duration = '';
var route1Name = 'i635 route';
var route2Name = 'downtown route';
// get fastest route
var getFastestRoute = function () {
// first get route 1
wps[0] = '39.173773,-94.559544';
wps[1] = '39.037003,-94.682968';
feeds.traffic.get(
{wps: wps, unittype: 'i'},
function(traffic, textStatus, response) {
console.info('\n****The traffic warnings are for route2 ' + traffic.warnings[0]);
// duration is given in seconds, modify to minutes
route1Duration = traffic.totalTravelDuration/60;
},
function(response, textStatus) {
console.info('got error : ' + textStatus);
}
);
// then get route 2
wps[0] = '39.172709,-94.552313';
wps[1] = '39.037003,-94.682968';
feeds.traffic.get(
{wps: wps, unittype: 'i'},
function(traffic, textStatus, response) {
console.info('\n****The traffic warnings are for route1 ' + traffic.warnings[0]);
// duration is given in seconds, modify to minutes
route2Duration = traffic.totalTravelDuration/60;
// compare route durations
if (route1Duration < route2Duration) {
fastestroute = route1Name;
} else {
fastestroute = route2Name;
}
// notify of fastest route
var notification = device.notifications.createNotification('Traffic info');
notification.content = 'Fastest route=' + fastestroute;
notification.show();
},
function(response, textStatus) {
console.info('got error : ' + textStatus);
}
);
};
var parseTime = function (timeString) {
if (timeString === '') {
return null;
}
var time = timeString.match(/^(\d+)(:(\d\d))?\s*((a|(p))m?)?$/i);
if (time === null) {
return null;
}
var hours = parseInt(time[1], 10);
if (hours === 12 && !time[6]) {
hours = 0;
} else {
hours += (hours < 12 && time[6]) ? 12 : 0;
}
var d = new Date();
d.setHours(hours);
d.setMinutes(parseInt(time[3], 10) || 0);
d.setSeconds(0, 0);
return d;
};
// get the fastest route every day at the specified time
var firstTime = parseTime(time);
if (firstTime === null) {
console.error('Invalid time format: ' + time + '. Expected: hh:mm or hh:mm AM/PM');
} else {
var now = new Date();
if (firstTime.getTime() < now) {
firstTime.setDate(firstTime.getDate() + 1);
}
console.info('Setting scheduled task to start at ' + firstTime);
device.scheduler.setTimer({
name: 'dailyTrafficTimer',
time: firstTime.getTime(),
interval: 'day',
repeat: true,
exact: true
},
getFastestRoute);
}