DSmartHome-api Lambda handler: Difference between revisions
From dtype.org
(Created page with " <nowiki> import boto3 import json import time print('Loading function') dynamodb = boto3.resource('dynamodb') def respond(err, res=None): return { 'statusCode...") |
No edit summary |
||
Line 8: | Line 8: | ||
print('Loading function') | print('Loading function') | ||
dynamodb = boto3.resource('dynamodb') | dynamodb = boto3.resource('dynamodb') | ||
location = '829Seabury' | |||
def respond(err, res=None): | def respond(err, res=None): | ||
Line 20: | Line 21: | ||
def lambda_handler(event, context): | def lambda_handler(event, context): | ||
table = dynamodb.Table('dsmarthome') | 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( | table.update_item( | ||
Key={ | Key={ | ||
'location': | 'location': location, | ||
'device': event['device'] | 'device': event['device'] | ||
}, | }, | ||
Line 29: | Line 55: | ||
ExpressionAttributeValues={ | ExpressionAttributeValues={ | ||
':latest': event['value'], | ':latest': event['value'], | ||
':latesttime': | ':latesttime': currenttime | ||
}, | }, | ||
ReturnValues="UPDATED_NEW" | ReturnValues="UPDATED_NEW" | ||
) | ) | ||
</nowiki> | </nowiki> |
Latest revision as of 22:28, 30 July 2017
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" )