Dieser Artikel ist "Programmieren, um Sie vom Sterben abzuhalten", Und ich wollte fast dasselbe System mit AWS als Backend erstellen. Den detaillierten Inhalt des Systems entnehmen Sie bitte dem Originalartikel.
Ich möchte auch ein System schaffen, das bei Gegenmaßnahmen gegen Katastrophen und bei der Evakuierungsanleitung hilft, und ich plane, Artikel zu den Themen "Evakuierungsberatungssystem mit Drohnen" und "Evakuierungsberatungssystem mit intelligenten Lautsprechern" zu veröffentlichen. Ich hoffe du kannst es auch sehen.
Am Ende habe ich darüber nachgedacht, ein Drohnen-System zu bauen. Machen Sie sich also keine Sorgen, dass das Symbol eine Drohne ist. Wenn Sie die Standortinformationen senden, werden die umliegenden Evakuierungsstellen zurückgegeben. (Ab dem 13. November 2019 werden nur noch Evakuierungsstellen in Ostjapan unterstützt.)
Daten zu Evakuierungsstellen im ganzen Land werden von hier übernommen. Bitte im JSON-Format herunterladen. (https://www.geospatial.jp/ckan/dataset/hinanbasho/resource/5fe3d23c-03fb-49ee-8a65-4f7495a8ea40) Konvertieren Sie es anschließend in eine CSV-Datei, indem Sie auf den Originalartikel verweisen. Dies erleichtert die spätere Verarbeitung mit Pandas in Python.
Ein einfaches Konfigurationsdiagramm dieses LINE-Bots ist unten dargestellt.
Für diejenigen, die AWS noch nicht kennen, sind hier einige wichtige Services aufgeführt, die häufig in AWS verwendet werden. Amazon API Gateway Auf diese Weise können externe Services mit AWS verknüpft werden. Hier erhalten wir Anforderungsdaten, die von der LINE-Talkroom-Aktion mit einem Webhook versehen wurden Amazon S3 Speicher, in dem Daten gespeichert werden. So etwas wie Google Drive. Erinnerungen in menschlichen Begriffen. Hier werden die zuvor erstellten CSV-Daten der Evakuierungsstelle eingegeben. AWS lambda Ein Ort, der Anforderungsdaten verarbeitet. Server. In menschlicher Hinsicht ist es das Gehirn. Der Ausführungszeitpunkt von Lambda kann festgelegt und ausgelöst werden, wenn eine Anforderung an das API-Gateway gesendet wird oder wenn Daten zu S3 hinzugefügt werden. Hier werden die Standortinformationen, die von LINE stammen, zurückgegeben, damit nahe gelegene Evakuierungsstellen auf LINE angezeigt werden können.
Alles was Sie wissen müssen, sind diese drei.
Zuerst müssen Sie den LINE-Bot einrichten, Lambda erstellen und Gateway erstellen. Voraussetzung ist, dass das LINE-Entwicklerkonto und das AWS-Konto im Voraus erstellt werden. Der folgende Artikel ist sehr hilfreich, und ich verwende auch AWS und Python für das Back-End. Daher halte ich es für eine gute Idee, etwas zu erstellen, das zuerst funktioniert. https://xp-cloud.jp/blog/2019/06/24/5560/
Mit Bezug auf diesen Artikel habe ich den Lambda-Code wie folgt implementiert.
import json
import boto3
import urllib
import pyproj
import pandas as pd
import re
import os
#Entfernungsberechnung zwischen zwei Punkten
def calc_distance(ido1, kdo1, ido2, kdo2):
g = pyproj.Geod(ellps='WGS84')
result = g.inv(kdo1, ido1, kdo2, ido2)
distance = result[2]
return round(distance)
def lambda_handler(event, context):
url = "https://api.line.me/v2/bot/message/reply"
method = "POST"
headers = {
'Authorization': 'Bearer ' + os.environ['CHANNEL_ACCESS_TOKEN'],
'Content-Type': 'application/json'
}
if event['events'][0]['message']['type'] == 'location':
s3 = boto3.client('s3')
bucket_name = 'japan-shelter-all'
file_name = 'east.csv'
response = s3.get_object(Bucket=bucket_name, Key=file_name)
df = pd.read_csv(response['Body'])
#Zielen Sie auf Evakuierungsstellen in der Nähe Ihres aktuellen Standorts
ido_from = event['events'][0]['message']['latitude'] - 0.05
ido_to = event['events'][0]['message']['latitude'] + 0.05
kdo_from = event['events'][0]['message']['longitude'] - 0.05
kdo_to = event['events'][0]['message']['longitude'] + 0.05
df_near = df.query(
f'ido > {ido_from} and ido < {ido_to} and kdo > {kdo_from} and kdo < {kdo_to}'
)
#Identifizieren Sie den nächstgelegenen Evakuierungsort von Ihrem aktuellen Standort aus
min_distance = None
min_row = None
for index, row in df_near.iterrows():
hinan_ido = row['ido']
hinan_kdo = row['kdo']
distance = calc_distance(
event['events'][0]['message']['latitude'], event['events'][0]['message']['longitude'], hinan_ido, hinan_kdo
)
if min_distance is None or distance < min_distance:
min_distance = distance
min_row = row
if min_distance != None:
message = [
{
"type": "text",
"text": f"{min_row['name']}Lassen Sie uns evakuieren"
},
{
"type": "location",
"title": f"Zum Evakuierungsort{min_distance}m",
"address": f"{min_row['addr']}",
"latitude": f"{min_row['ido']}",
"longitude": f"{min_row['kdo']}"
}
]
else:
message = [
{
"type": "text",
"text": "Kein Unterschlupf in der Nähe gefunden"
}
]
params = {
"replyToken": event['events'][0]['replyToken'],
"messages": message
}
request = urllib.request.Request(url, json.dumps(params).encode("utf-8"), method=method, headers=headers)
with urllib.request.urlopen(request) as res:
body = res.read()
return 0
Selbst wenn Sie versuchen, Lambda so auszuführen, wie es ist, tritt ein Fehler auf, wenn die externen Bibliotheken von pandas und pyproj nicht geladen werden können. Die Lösung besteht darin, diese zusätzlichen Bibliotheken im Layer-Format in Lambda importieren zu lassen. Installieren Sie diese Bibliotheken auf EC2 (AWS Virtual Machine), laden Sie sie in S3 hoch und fügen Sie sie dann zur Ebene hinzu. (Wenn Sie andere Methoden zusammen sehen möchten, lesen Sie [AWS / Lambda] Python-Methode zum Laden externer Bibliotheken) Informationen zum Verfahren finden Sie im folgenden Youtube-Video. Dies ist ein Video aus Übersee, aber es ist sehr leicht zu verstehen. Vergessen Sie nicht, sowohl pyproj als auch pandas zu installieren. https://www.youtube.com/watch?v=zrrH9nbSPhQ
Wenn Sie danach verschiedene Bibliotheken sicher importieren können, ist dies erfolgreich.
Ich habe eine einfache Anleitung von LINEbot auf AWS unter Bezugnahme auf andere Artikel zusammengefasst. Normalerweise berühre ich AWS nicht selbst. Bitte teilen Sie mir mit, ob Sie die CSV-Datei in DB verwalten sollen. Die App selbst war nach Bestätigung der Kommunikation zufrieden, daher werde ich sie nicht verbessern. Als Folge planen wir die Veröffentlichung von "Disaster Evacuation Advisory System mit Drohne" und "Evacuation Advisory System mit Smart Speaker". Schauen Sie also bitte mal rein. Wenn Sie diesen Artikel hilfreich finden oder eine Fortsetzung erwarten, geben Sie ihm bitte eine hohe Bewertung ^^
Recommended Posts