From 68958371ec8685c2d44ccd7a9467bc4eb5907807 Mon Sep 17 00:00:00 2001 From: csigildea Date: Mon, 5 Apr 2021 21:02:15 +0100 Subject: [PATCH] Added automated vitals requests and pump actuation threshold --- automation/handler.py | 40 +++++++++++++++++++++++++++++++++++++++ automation/serverless.yml | 17 +++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 automation/handler.py create mode 100644 automation/serverless.yml diff --git a/automation/handler.py b/automation/handler.py new file mode 100644 index 0000000..2b096ba --- /dev/null +++ b/automation/handler.py @@ -0,0 +1,40 @@ +import json +import boto3 + +def request_all_vitals(event, context): + client = boto3.client('iot-data', region_name='eu-west-1') + + # Read Plant ID Registration table + dynamodb = boto3.resource('dynamodb') + table = dynamodb.Table('iotea_register') + response = table.scan() + + # For each Plant ID, trigger a vitals request + for i in response['Items']: + plantTriggerTopic = 'IoTea/'+i['plantID']+'/triggers' + response = client.publish( + topic=plantTriggerTopic, + qos=1, + payload=json.dumps({"category":"vitals"}) + ) + return { + 'statusCode': 200, + } + +def water_threshold(event, context): + if event['moisturePer'] < 25: + client = boto3.client('iot-data', region_name='eu-west-1') + plantTriggerTopic = 'IoTea/'+event['plantID']+'/triggers' + response = client.publish( + topic=plantTriggerTopic, + qos=1, + payload=json.dumps({"category":"pump", "value":5}) + ) + return { + 'statusCode': 200, + 'message': 'Watered '+event['plantID'] + } + return { + 'statusCode': 200, + 'message': 'No need to water' + } \ No newline at end of file diff --git a/automation/serverless.yml b/automation/serverless.yml new file mode 100644 index 0000000..acd9ffa --- /dev/null +++ b/automation/serverless.yml @@ -0,0 +1,17 @@ +service: automation +frameworkVersion: '2' + +provider: + name: aws + runtime: python3.8 + lambdaHashingVersion: 20201221 + stage: dev + region: eu-west-1 + +functions: + request_all_vitals: + handler: handler.request_all_vitals + events: + - schedule: rate(30 minutes) + water_threshold: + handler: handler.water_threshold