Help us understand the problem. What is going on with this article?

SORACOM LTE-M ButtonでLINE Notifyする「かえるボタン」を作ってみた

More than 1 year has passed since last update.

SORACOM LTE-M Button からLINE Notifyでメッセージを送る「かえるボタン」を作ってみました。
SMSやSlackへの通知は下記のガイドが詳しいです。

ボタンのシングルクリック、ダブルクリック、長押しに応じて「まだだよ😆」「かえるよ🐸」「むかえにきて🚗」をLINE Notifyでお知らせします。
子供が外出時に使うことを想定しています。

(2017-2-20: python3.6のlambdaとその後のかえるボタンを追記しました。)

登録と初期設定

こちらのガイドに詳しく書かれていますので簡単に完了します。SMS送信まであっという間です。
SORACOM LTE-M ButtonをクリックしてSlack通知にする

LINE Notify の設定

LINEマイページ から アクセストークンを発行しておきます。

こちらが参考になります。
[超簡単]LINE notify を使ってみる

Lambda関数の作成

python3.6

lambda_function.py
# -*- coding: utf-8 -*-
import os
import urllib.request
import urllib.parse

def get_message(data):
    clicktype = data['deviceEvent']['buttonClicked']['clickType']
    if clicktype == 'SINGLE':
        message = u'まだだよ\U0001f606'
    elif clicktype == 'DOUBLE':
        message = u'かえるよ\U0001f438'
    elif clicktype == 'LONG':
        message = u'むかえにきて\U0001f697'
    else:
        message = u'けろけろ'
    return message

def line_notify(msg):
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization" : "Bearer "+ os.environ['LINE_TOKEN']}
    data = urllib.parse.urlencode({"message" :  msg}).encode('utf-8')
    request = urllib.request.Request(url, data=data, headers=headers)
    r = urllib.request.urlopen(request)
    print(r)

def lambda_handler(event, context):
    message = get_message(event)
    line_notify(message)
    return

次に示すpython2.7のlambdaとはhttp postがurllib.request.Request()である点が異なります。python3.6のlambdaではimport urllib を宣言するだけで良くライブラリを自分で追加する必要がありません。こちらの方が手軽なことに後から気付きました。

ボタンから渡されるイベントはクリックに応じて、シングルクリック、ダブルクリック、長押しが clickType に SINGLE, DOUBLE, LONG の3種で渡されます。

click_type = event['deviceEvent']['buttonClicked']['clickType']

AWS Lambdaの環境変数'LINE_TOKEN'へLINE Notifyのアクセストークンを保存して使用しています。
2018-11-05.png

token = os.environ['LINE_TOKEN']

python2.7

lambda_function.py
# -*- coding: utf-8 -*-
from __future__ import print_function
import os
import json
import requests

def get_message(data):
    clicktype = data['deviceEvent']['buttonClicked']['clickType']
    if clicktype == 'SINGLE':
        message = u'まだだよ\U0001f606'
    elif clicktype == 'DOUBLE':
        message = u'かえるよ\U0001f438'
    elif clicktype == 'LONG':
        message = u'むかえにきて\U0001f697'
    else:
        message = u'けろけろ'
    return message

def line_notify(msg):
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization" : "Bearer "+ os.environ['LINE_TOKEN']}
    params = {"message" :  msg}
    r = requests.post(url, headers=headers, params=params)
    print(r)

def lambda_handler(event, context):
    message = get_message(event)
    line_notify(message)
    return

requestsライブラリをpython2.7のLambdaで使用するには lambda_function.py と共にzipしてLambdaへアップロードする必要があります。

linux環境ラズパイなどpython2.7環境で適当なディレクトリを作成し、lambda_function.pyを保存してrequestsライブラリを同じディレクトリに保存します。
全てzipしてzipファイルを作成します。

$ pip install requests -t ./
$ zip -r lambda_line_notify.zip ./

AWS Lambda作成画面でコードエントリタイプの「.zipファイルをアップロード」を選択してこのlambda_line_notify.zipを保存すれば、requestsライブラリを含んだlambda関数一式がAWS Lambdaに作成されます。

運用

ボタンを押すだけです。
無事通知が来ました。
IMG_0643s.jpg

気付いたこと

  • ストラップ用のホールがあります。裏ブタを外して取り付けます。
  • 子供に持たせてみると、誤操作によるメッセージ送信が発生したのでシングルクリックには「まだだよ」を割り当てました。
  • 爆破スイッチはせめて長押しに割り当てた方が良いかも。

IMG_0851.JPG

その後の「かえるボタン」

2019年2月現在、3か月経過しました。子供が習い事や出かける時に使用しています。安定して運用中です。
IMG_1189s.jpg

zoe6120
IoT Engineer, フリーランス / ハンダ付けからクラウドまで設備系の工作に取り組んでいます。
https://zoe6120.com
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした