dtype.org
Log in

DSmartHome-api Lambda handler

From dtype.org

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