def longitude(lng):
return float(lng[:3]) + float(lng[3:])/60.
def latitude(lat):
return float(lat[:2]) + float(lat[2:])/60.
def parseLocalDeviceFormat(raw_data):
"""
The local device format is
XMVT863071010819875#MC,,A,2344.9910,N,09022.1104,E,0.00,136.67,,,,A*60|000000|#
XMVT861262011498734#MC,,V,2346.8525,N,09023.9085,E,0.00,,,,,N*4C|100000|# AFZAL DEVICE
and it has to be converted to
{u'_id': ObjectId('535e2e59e800130ae9c772d3'),
u'ac_sensor': False,
u'active': True,
u'bearing': 0.0,
u'door1_sensor': False,
u'door2_sensor': False,
u'door3_sensor': False,
u'door4_sensor': False,
u'engine_sensor': False,
u'loc': {u'coordinates': [0, 0], u'type': u'Point'},
u'speed': 0.0,
u'status': u'V',
u'temperature_sensor': 0.0,
u'time': datetime.datetime(2014, 4, 28, 16, 32, 57, 741000)}
"""
output = {}
try:
data_ = filter(None, raw_data.split(","))
if len(data_)==9:
output = {
"number": data_[0].split("#")[0],
"status": data_[1],
"loc":{"coordinates":[longitude(data_[4]) if data_[5]=="E" else -1*longitude(data_[4]),latitude(data_[2]) if data_[3]=="N" else -1*latitude(data_[2])],"type":"Point"},
"speed": float(data_[6])*1.852,
"bearing": float(data_[7]),
"ac_sensor": True if data_[8].split("|")[1][0]=="1" else False,
"door1_sensor": True if data_[8].split("|")[1][1]=="1" else False,
"door2_sensor": True if data_[8].split("|")[1][2]=="1" else False,
"door3_sensor": True if data_[8].split("|")[1][3]=="1" else False,
"door4_sensor": True if data_[8].split("|")[1][4]=="1" else False,
"engine_sensor": True if data_[8].split("|")[1][5]=="1" else False,
"temperature_sensor":0.0,
"time": datetime.now(pytz.utc),
"active": True,
}
#raise Exception
if len(data_)<9:
#raise Exception
#w = tzwhere.tzwhere()
#tzone = pytz.timezone(w.tzNameAt(latitude(data_[2]) if data_[3]=="N" else -1*latitude(data_[2]),longitude(data_[4]) if data_[5]=="E" else -1*longitude(data_[4])))
output = {
"number": data_[0].split("#")[0],
"status": data_[1],
"loc":{"coordinates":[longitude(data_[4]) if data_[5]=="E" else -1*longitude(data_[4]),latitude(data_[2]) if data_[3]=="N" else -1*latitude(data_[2])],"type":"Point"},
"speed": float(data_[6])*1.852,
"bearing": 0.0,
"ac_sensor": True if data_[7].split("|")[1][0]=="1" else False,
"door1_sensor": True if data_[7].split("|")[1][1]=="1" else False,
"door2_sensor": True if data_[7].split("|")[1][2]=="1" else False,
"door3_sensor": True if data_[7].split("|")[1][3]=="1" else False,
"door4_sensor": True if data_[7].split("|")[1][4]=="1" else False,
"engine_sensor": True if data_[7].split("|")[1][5]=="1" else False,
"temperature_sensor":0.0,
"time": datetime.now(pytz.utc),
"active": True,
}
except Exception:
output = {}
return output