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))