def main(event, context): my_logging_handler(event, context) did_hex = event["device"] time_msg = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(event["time"]))) logger.info('Received message from device {did} at {time_msg}'.format( did=did_hex, time_msg=time_msg)) payload = event["data"] payload_binary = hexa_to_binary(payload) # Init dynamodb service resource dynamodb = boto3.resource('dynamodb') if len(payload_binary) == 16: data = parse_status(payload_binary) logger.info('Parsed data: {data}'.format(data=data)) table = dynamodb.Table('battery') table.put_item( Item={ 'did': int(event["device"]), 'time_msg': time_msg, 'voltage': Decimal(str(data["battery"])) }) if data["status"] == "alarm" and data["movement"] == "moving": # Generate phone call client = Client(account_sid, auth_token) call = client.calls.create( url= "https://castelnajac-open-data.s3-eu-west-1.amazonaws.com/cartracker/call_config.xml", to=phone_conf[did_hex], from_="+33567349937", method="GET") logger.info("Call id: {cid}".format(cid=call.sid)) if data["battery"] <= battery_threshold: client = boto3.client('ses') response = client.send_email( Source='*****@*****.**', Destination={'ToAddresses': ['*****@*****.**']}, Message={ 'Subject': { 'Data': '[Car Tracker] Low battery' }, 'Body': { 'Html': { 'Data': "Battery level ({bat}) is lower than {thrs}. Please recharge as soon as possible." .format(thrs=battery_threshold, bat=str(data["battery"])) } } }) elif len(payload_binary) >= 60: payload_binary = hexa_to_binary(payload, spec='0>88b') parsed = False # Parse gps data try: data = parse_geoloc(payload_binary) logger.info('Parsed data: {data}'.format(data=data)) parsed = True #try: # # Generate sms with position link # client = Client(account_sid, auth_token) # message = client.messages.create( # body="Device {did} position computed: https://www.google.com/maps/place/{lat}+{lng}".format(did=did_hex,lat=data['lat_text'],lng=data['long_text']), # to=phone_conf[did_hex], # from_='+33567349937' # ) # print(message.sid) #except Exception as e: # logger.error('Could not send sms: {}'.format(e)) except: logger.error('Could not parse binary: {}'.format(payload_binary)) if parsed: client = boto3.client('ses') url = "https://www.google.com/maps/place/{lat}+{lng}".format( lat=data['lat_text'], lng=data['long_text']) response = client.send_email( Source='*****@*****.**', Destination={'ToAddresses': ['*****@*****.**']}, Message={ 'Subject': { 'Data': '[Car Tracker] New position' }, 'Body': { 'Html': { 'Data': "New position received from device {did}. You will find it <a href={url}>here</a>." .format(did=did_hex, url=url) } } }) table = dynamodb.Table('position') table.put_item( Item={ 'did': int(event["device"]), 'time_msg': time_msg, 'source': 'gps', 'lat': Decimal(str(data["lat"])), 'lng': Decimal(str(data["long"])) }) else: logger.warn( 'Payload type not yet supported: {}'.format(payload_binary))