Cet article est le deuxième chapitre d'un article de quatre chapitres.
On suppose que le bouton LTE-M est enfoncé quand quelque chose arrive à un parent âgé qui habite loin. Il y a une fonction pour notifier LINE Notify de SORACOM Lagoon, mais j'ai décidé de faire un LINE Bot car je ne peux pas sélectionner l'action après que la notification soit venue uniquement par SMS. C'est bien d'avoir un mécanisme simple avec un seul bouton comme celui-ci, car même les personnes âgées qui ne sont pas douées pour les machines peuvent le voir visuellement.
Raspberry Pi 3 Model B Python 3.7.3 Flask==1.1.2 line-bot-sdk==1.16.0
Pour un usage spécifique, les officiels Créer un tableau de bord à l'aide de SORACOM Lagoon et [Alerte à l'aide de SORACOM Lagoon] Il est décrit en détail dans Setting, donc je vais l'omettre.
Le bouton LTE-M envoie des données de type Int telles que 1 pour 1 clic, 2 pour double clic et 3 pour appui long. Puisqu'il s'agit d'une urgence, je ne sais pas quel type d'opération de bouton sera effectué. Par conséquent, nous avons décidé d'envoyer une alerte lorsque la valeur est égale ou supérieure à 0,5 (toutes les opérations sur les boutons) (voir image).
Sélectionnez également «Webhook» pour le canal de notification. L'URL sera définie plus tard, donc pour l'instant, utilisez simplement `` https: // test.example ''.
Créez une nouvelle chaîne à partir de LINE Developers. Dans "Choisissez un type de canal pour continuer", utilisez l'API de messagerie. Notez le "Channel secret" dans les "Basic settings" et le "Channel access token" dans "Messaging API" pour une utilisation ultérieure.
Exécutez Flask sur le Raspberry Pi pour recevoir des webhooks et renvoyer des messages. Pour différents paramètres, [Essayez de créer un LINE BOT avec Python / Raspeye! ](Essayez de créer un LINE BOT avec Python / Raspeye!).
Vous pouvez ignorer les paramètres du site ci-dessus et de pyenv-virtualenv, mais assurez-vous de réécrire les autres .bash_profile, etc. Sinon, cela ne fonctionnera pas. Veillez également à définir le secret du canal et le jeton d'accès au canal dans les variables d'environnement comme décrit dans le site ci-dessus.
Vous devez connaître ʻuserId pour envoyer un message Push. Cet ʻuserId
est différent de l'ID défini personnellement utilisé lors de l'ajout d'amis, vous devez donc le connaître d'une autre manière.
Le code suivant renverra ʻuserId` lorsque vous envoyez un message texte.
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)
Si vous pouvez le configurer correctement, vous devriez obtenir un identifiant commençant par U comme celui-ci.
Une fois que vous avez fait cela, il est enfin temps de travailler avec SORACOM Lagoon.
J'ajouterai un peu au code précédent. Vous permet d'envoyer un message Push à l'utilisateur lorsqu'il y a un POST
dans le / webhook
. Veuillez noter que ʻimport` est également ajouté.
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 #ajouter à
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)
#Ajouté ci-dessous
@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(Le userId obtenu plus tôt)"
messages = TextSendMessage(text="J'ai une alerte")
line_bot_api.push_message(user_id, messages=messages)
return request.get_data()
#Jusque là
@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)
Enfin, définissez le canal de notification pour SORACOM Lagoon.
Entrez l'URL du ngrok fonctionnant sur le Raspberry Pi et ajoutez / webhook
à la fin. Cela vous permettra de recevoir des webhooks de Lagoon.
[YouTube] Le bouton SORACOM LTE-M notifiera LINE La réaction est plus rapide que prévu! Avec cela, vous pouvez agir aussi rapidement qu'une seconde en cas d'urgence.
Recommended Posts