On my recent trip, I took Southwest Airlines for the first time in many years. At Indiewebcamp New Haven, I set up Aaron Parecki’s compass project to send my location data to. I have 59MB of location data since March 3oth, 2019.
The problem is transforming the input from Southwest into the format another system can accept. I did not want to write an Android app for this…I wish there was one.
So, instead I used Tasker, an automation app for Android that does have scripting in it.
So, if you retrieve http://getconnected.southwestwifi.com/current.json, you get the following JSON data.
{
"pcent_flt_complete": 0,
"altVal": "-24",
"lon": "-73.867",
"satcomm_status": {
"commlink": "active",
"linkparams": "not-stale"
},
"dtzone": "CDT",
"within_us": true,
"etad": "09:20 AM",
"lat": "40.775",
"gspdVal": "10",
"ttgc": "2h 15m",
"dist_remain": "888",
"actime24": "07:05"
}
The Task I created consists of three actions. It uses the HTTP Request action to get the above JSON. Then it uses the below JavaScriptlet(Tasker allows you to write JavaScript, to convert the data into the GeoJSON that Compass expects. The third action posts that to Compass.
var parsed = JSON.parse( http_data );
var gmt = new Date().toISOString();
var alt = Math.round( parsed.altVal * 0.305 );
var feature = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [parsed.lon, parsed.lat, alt]
},
"properties": {
"timestamp": gmt,
"percent_complete": parsed.pcent_flt_complete,
"dist_remain": parsed.dist_remain,
"source": "flight",
"airline": "wn"
}
};
var compass = { "locations": [feature] };
var featurejson = JSON.stringify( compass );
Now, I am known for not doing much JavaScript work, preferring PHP. But this was simple enough. I could have added more of their parameters, or, since Southwest does not put the flight number into their JSON, allow it to be set.
It is triggered when I am connected to SouthwestWifi, in Airplane Mode, and every 5 minutes. I wasn’t sure if I should poll more often, but 5 minute intervals seemed reasonable. Regrettably, Southwest does not provide more parameters like speed.
I wish some developer would write an app that would do this, partially because, if the wifi goes down, the request will fail and I’ll lose it. I’d rather cache and retry. Also, GPS Logger has some limitations. I wish there was an Android version of Aaron Parecki’s Overland app. Being as he wrote Compass, it works well with that and has those caching features.
I have two flights on two different airlines in the next month, and will see if I can write similar scripts. I enjoy the challenge of trying to write and test it on my phone live.
Next, I need something to display a visualization of this with altitude.