DSmartHome-api Lambda handler

From dtype.org
Revision as of 22:28, 30 July 2017 by Drew (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

import boto3
import json
import time

print('Loading function')
dynamodb = boto3.resource('dynamodb')
location = '829Seabury'

def respond(err, res=None):
    return {
        'statusCode': '400' if err else '200',
        'body': err.message if err else json.dumps(res),
        'headers': {
            'Content-Type': 'application/json',
        },
    }

def lambda_handler(event, context):
    table = dynamodb.Table('dsmarthome')
    
    currenttime = int(time.time())
    
    # see if state has changed
    response = table.get_item(
        Key={
            'location': location,
            'device': event['device']
        }
    )
    item = response['Item']
    if (item['latest'] != event['value']):
            # state has changed, write previous state
            table.update_item(
                Key={
                    'location': location,
                    'device': event['device']
                },
                UpdateExpression="set previous = :previous, changetime = :changetime",
                ExpressionAttributeValues={
                    ':previous': item['latest'],
                    ':changetime': currenttime
                },
                ReturnValues="UPDATED_NEW"
            )
    
    table.update_item(
        Key={
            'location': location,
            'device': event['device']
        },
        UpdateExpression="set latest = :latest, latesttime = :latesttime",
        ExpressionAttributeValues={
            ':latest': event['value'],
            ':latesttime': currenttime
        },
        ReturnValues="UPDATED_NEW"
    )