Jeder hat einmal einen Regenschirm in einer Firma oder Schule hinterlassen, oder? Wenn es am nächsten Tag regnet, bin ich ohne Regenschirm verzweifelt. .. ..
Aus diesem Grund haben wir ein System erstellt, das LINE benachrichtigt, damit Sie Ihren Regenschirm nicht vergessen, wenn Sie nach Hause zurückkehren **!
Es basiert auf dem im folgenden Artikel vorgestellten System, das Sie benachrichtigt, wenn es regnet, morgens einen Regenschirm zu haben.
Zusätzlich zu den oben genannten implementiert: ** Benachrichtigen Sie, dass Sie Ihren Regenschirm am Morgen mitbringen müssen, wenn es regnet. ** + ** Benachrichtigen Sie, dass Sie Ihren Regenschirm nach Hause bringen sollen, wenn Sie nach Hause kommen. ** Unterstützt Regentage!
Starten Sie Lambda jeden Morgen um 7 Uhr morgens im CloudWatch Event. Lambda erhält die Wetterinformationen und fordert LINE auf, einen Regenschirm zu haben, wenn es heute regnet. Bis zu diesem Punkt können Sie es mit obigem Artikel erstellen.
Der Unterschied besteht darin, dass bei Regen eine Datei in S3 erstellt wird. Dies wird zur Benachrichtigung bei der Rückkehr nach Hause verwendet.
Dies ist der Hauptteil, der in diesem Artikel hinzugefügt wird. Starten Sie Lambda zunächst jeden Tag, wenn Sie in CloudWatch Event nach Hause kommen. Lambda überprüft den S3 und wenn die Datei am heutigen Datum erstellt wurde, stellt es fest, dass Sie morgens einen Regenschirm haben, und benachrichtigt LINE, um ihn zurückzubringen.
Es ist sehr einfach! Lass es uns tatsächlich schaffen!
Beziehen Sie das LINE-Benachrichtigungstoken anhand der folgenden Artikel. https://qiita.com/iitenkida7/items/576a8226ba6584864d95
Erstellen Sie ein entsprechendes Verzeichnis im S3-Bucket. In diesem Artikel haben wir das Verzeichnis "Wetter" erstellt.
Das System in diesem Artikel generiert die folgenden Dateien in dem oben erstellten Verzeichnis. Da der Löschvorgang nicht implementiert ist, ist es außerdem praktisch, eine Lebenszyklusregel festzulegen und diese nach einigen Tagen automatisch zu löschen!
Erstellen Sie eine neue Lambda-Funktion. Diesmal ist die Laufzeit Python 3.8.
Bearbeiten Sie die standardmäßig generierte lambda_function.py
und fügen Sie den folgenden Code ein.
lambda_function.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import sys
import urllib.parse
import urllib.request
import datetime
import os
import boto3
# weather's API
WEATHER_URL="http://weather.livedoor.com/forecast/webservice/json/v1?city=%s"
CITY_CODE="130010" # TOKYO
TODAY=0
# LINE notify's API
LINE_TOKEN = os.environ['LINE_TOKEN']
LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"
S3_BUCKET_NAME = os.environ['S3_BUCKET_NAME']
S3_PREFIX = "weather/"
s3 = boto3.resource('s3')
s3Client = boto3.client('s3')
def get_weather_info():
try:
url = WEATHER_URL % CITY_CODE
html = urllib.request.urlopen(url)
html_json = json.loads(html.read().decode('utf-8'))
except Exception as e:
print ("Exception Error: ", e)
sys.exit(1)
return html_json
def set_weather_info(weather_json, day):
min_temperature = None
max_temperature = None
try:
date = weather_json['forecasts'][day]['date']
weather = weather_json['forecasts'][day]['telop']
max_temperature = weather_json['forecasts'][day]['temperature']['max']['celsius']
min_temperature = weather_json['forecasts'][day]['temperature']['min']['celsius']
except TypeError:
# temperature data is None etc...
pass
msg = "%s\nweather: %s\nmin: %s\nmax: %s" % \
(date, weather, min_temperature, max_temperature)
return msg
def send_info(msg):
method = "POST"
headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
payload = {"message": msg}
try:
payload = urllib.parse.urlencode(payload).encode("utf-8")
req = urllib.request.Request(
url=LINE_NOTIFY_URL, data=payload, method=method, headers=headers)
urllib.request.urlopen(req)
except Exception as e:
print ("Exception Error: ", e)
sys.exit(1)
def put_s3():
now = datetime.datetime.now() + datetime.timedelta(hours=9) ## UTC+9
obj = s3.Object(S3_BUCKET_NAME, S3_PREFIX + now.strftime('%Y-%m-%d'))
obj.put()
def was_it_raining():
now = datetime.datetime.now() + datetime.timedelta(hours=9) ## UTC+9
contents = s3Client.list_objects(Bucket=S3_BUCKET_NAME, Prefix=S3_PREFIX)["Contents"]
if contents:
for content in contents:
if content.get("Key") == S3_PREFIX + now.strftime('%Y-%m-%d'):
return True
return False
def lambda_handler(event, context):
if('event_type' not in event):
return {
'statusCode': 400,
'body': json.dumps('event_type does not exist in event')
}
if(event['event_type'] == "morning"):
weather_json = get_weather_info()
msg = set_weather_info(weather_json, TODAY)
if("Regen" in weather_json['forecasts'][0]['telop']):
send_info("\n☔☔☔☔☔☔☔☔\n Es wird heute regnen.\n Vergiss deinen Regenschirm nicht!\n☔☔☔☔☔☔☔☔" + msg)
put_s3()
elif(event['event_type'] == "evening" and was_it_raining()):
send_info("\n☂️☂️☂️☂️☂️☂️☂️☂️\n Nehmen wir den Regenschirm mit nach Hause!\n☂️☂️☂️☂️☂️☂️☂️☂️")
return {
'statusCode': 200,
'body': json.dumps('function finished')
}
Erstellen Sie im CloudWatch-Ereignis zwei Trigger, um Lambda am Morgen (7:00 Uhr) und nach Ihrer Ankunft (17:00 Uhr) zu starten. Klicken Sie auf dem Lambda-Funktionsbildschirm im roten Rahmen unten auf "Trigger hinzufügen".
Wählen Sie CloudWatch Event und erstellen Sie zwei Trigger mit einem geplanten Ausdruck wie folgt:
cron (0 22 * *? *)
→ Beginnt jeden Tag um 7:00 Uhr (UTC 22:00 Uhr)cron (0 8 * *? *)
→ Beginnen Sie jeden Tag um 17:00 Uhr (UTC 8 Uhr)Klicken Sie auf das erstellte Ereignis, um den Bearbeitungsbildschirm anzuzeigen. Stellen Sie dann den Wert, der beim Auslösen von Lambda übergeben werden soll, wie folgt ein.
{"event_type": "morning"}
{"event_type": "evening"}
Dadurch wird der oben festgelegte Wert an die Ereignisvariable von lambda_handler übergeben, wenn jeder Trigger Lambda startet. In Lambda dieses Artikels werden durch bedingte Verzweigung mit diesem Wert die morgendliche Verarbeitung und die Verarbeitung zum Zeitpunkt der Rückkehr nach Hause wie folgt getrennt. Praktisch!
def lambda_handler(event, context):
if(event['event_type'] == "morning"):
#Morgenbearbeitung
elif(event['event_type'] == "evening"):
#Bearbeitung bei der Rückkehr nach Hause
Das ist es! Warten wir auf einen regnerischen Tag!
An Regentagen, am Morgen und als ich nach Hause kam, kamen Benachrichtigungen zu LINE! Dank dessen habe ich das Gefühl, dass ich meinen Regenschirm weniger wahrscheinlich vergesse und ihn unterwegs lasse.
Sie können es mit dem kostenlosen Rahmen von AWS erstellen. Probieren Sie es also aus.
Recommended Posts