Dieser Artikel ist das zweite Kapitel eines Artikels mit vier Kapiteln.
Es wird angenommen, dass die LTE-M-Taste gedrückt wird, wenn einem älteren Elternteil, der weg wohnt, etwas passiert. Es gibt eine Funktion zum Benachrichtigen von LINE Notify von SORACOM Lagoon, aber ich habe mich für einen LINE Bot entschieden, da ich die Aktion nicht auswählen kann, nachdem die Benachrichtigung nur per SMS erfolgt. Es ist schön, einen einfachen Mechanismus mit nur einem Knopf wie diesem zu haben, denn selbst ältere Menschen, die nicht gut mit Maschinen umgehen können, können ihn visuell sehen.
Raspberry Pi 3 Model B Python 3.7.3 Flask==1.1.2 line-bot-sdk==1.16.0
Für eine bestimmte Verwendung die offiziellen Erstellen eines Dashboards mit SORACOM Lagoon und [Benachrichtigung mit SORACOM Lagoon] Es wird ausführlich in Einstellung beschrieben, daher werde ich es weglassen. Die LTE-M-Taste sendet Daten vom Typ Int, z. B. 1 für 1 Klick, 2 für Doppelklick und 3 für langes Drücken. Da dies ein Notfall ist, weiß ich nicht, welche Art von Tastenbedienung ausgeführt wird. Aus diesem Grund haben wir beschlossen, eine Warnung zu senden, wenn der Wert 0,5 oder mehr beträgt (alle Tastenoperationen) (siehe Abbildung). Wählen Sie außerdem "Webhook" für den Benachrichtigungskanal. Die URL wird später festgelegt. Verwenden Sie daher zunächst nur "https: // test.example". ② Registrieren Sie den LINE-Bot. Erstellen Sie einen neuen Kanal von LINE Developers. Verwenden Sie unter "Wählen Sie einen Kanaltyp aus, um fortzufahren" die Messaging-API. Notieren Sie sich das "Kanalgeheimnis" in den "Grundeinstellungen" und das "Kanalzugriffstoken" in der "Messaging-API" zur späteren Verwendung.
Führen Sie Flask auf dem Raspberry Pi aus, um Webhooks zu empfangen und Nachrichten zurückzugeben. Für verschiedene Einstellungen [Versuchen Sie, einen LINE BOT mit Python / Raspeye zu erstellen! ](Versuche einen LINE BOT mit Python / Raspeye zu machen!).
Sie können die Einstellungen der obigen Site und von pyenv-virtualenv ignorieren, aber stellen Sie sicher, dass Sie andere .bash_profile usw. neu schreiben. Sonst funktioniert es nicht. Stellen Sie außerdem sicher, dass das Kanalgeheimnis und das Kanalzugriffstoken in den Umgebungsvariablen festgelegt sind, wie auf der obigen Site beschrieben.
Sie müssen die Benutzer-ID kennen, um eine Push-Nachricht senden zu können. Diese "Benutzer-ID" unterscheidet sich von der persönlich festgelegten ID, die beim Hinzufügen von Freunden verwendet wird. Sie müssen sie daher auf andere Weise kennen. Der folgende Code gibt eine Benutzer-ID zurück, wenn Sie eine Textnachricht senden.
line_bot.py
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import os
app = Flask(__name__)
LINE_BOT_ACCESS_TOKEN = os.environ["LINE_BOT_ACCESS_TOKEN"]
LINE_BOT_CHANNEL_SECRET = os.environ["LINE_BOT_CHANNEL_SECRET"]
line_bot_api = LineBotApi(LINE_BOT_ACCESS_TOKEN)
handler = WebhookHandler(LINE_BOT_CHANNEL_SECRET)
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
profile = line_bot_api.get_profile(event.source.user_id)
messages = str(profile.user_id)
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=messages))
if __name__ == "__main__":
port = int(os.getenv("PORT", 6000))
app.run(host="0.0.0.0", port=port)
Wenn Sie es richtig einstellen können, sollten Sie eine ID erhalten, die mit U wie diesem beginnt.
Sobald Sie dies getan haben, ist es endlich Zeit, mit SORACOM Lagoon zu arbeiten. Ich werde ein wenig zum vorherigen Code hinzufügen. Ermöglicht das Senden einer Push-Nachricht an den Benutzer, wenn sich ein "POST" im "/ webhook" befindet. Bitte beachten Sie, dass wir auch "Import" hinzugefügt haben.
line_bot.py
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import os
import json #hinzufügen
app = Flask(__name__)
LINE_BOT_ACCESS_TOKEN = os.environ["LINE_BOT_ACCESS_TOKEN"]
LINE_BOT_CHANNEL_SECRET = os.environ["LINE_BOT_CHANNEL_SECRET"]
line_bot_api = LineBotApi(LINE_BOT_ACCESS_TOKEN)
handler = WebhookHandler(LINE_BOT_CHANNEL_SECRET)
#Unten hinzugefügt
@app.route("/webhook", methods=['POST'])
def webhook():
print(json.dumps(request.get_json(), indent=2))
object = request.get_json()
if object['title'] == "[Alerting] Emergency alert":
user_id = "U03xxxxxx(Die zuvor erhaltene Benutzer-ID)"
messages = TextSendMessage(text="Ich habe eine Warnung bekommen")
line_bot_api.push_message(user_id, messages=messages)
return request.get_data()
#Bisher
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
profile = line_bot_api.get_profile(event.source.user_id)
messages = str(profile.user_id)
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=messages))
if __name__ == "__main__":
port = int(os.getenv("PORT", 6000))
app.run(host="0.0.0.0", port=port)
Richten Sie abschließend den Benachrichtigungskanal für SORACOM Lagoon ein.
Geben Sie die URL des auf dem Raspberry Pi ausgeführten ngrok ein und fügen Sie am Ende / webhook
hinzu. Auf diese Weise können Sie Webhooks von Lagoon erhalten.
[YouTube] Der SORACOM LTE-M-Button benachrichtigt LINE Die Reaktion ist schneller als erwartet! Damit können Sie im Notfall so schnell wie eine Sekunde handeln.
Recommended Posts