SORACOM LTE-M Button으로 LINE Notify하는 '바다 버튼'을 만들어 보았다

SORACOM LTE-M Button에서 LINE Notify로 메시지를 보내는 "바다 버튼"을 만들어 보았습니다.
SMS나 Slack에 대한 통지는 아래의 가이드가 상세합니다.

버튼의 싱글 클릭, 더블 클릭, 길게 누르기에 따라 「아직이다 😆」 「바꾸어요 🐸」 「대체에 와서 🚗」를 LINE Notify로 알려드립니다.
아이가 외출시에 사용하는 것을 상정하고 있습니다.

(2017-2-20 : python3.6의 lambda와 그 후의 단풍 버튼을 추가했습니다.)

등록 및 초기 설정



이 가이드에 자세히 쓰여져 있기 때문에 쉽게 완료합니다. SMS 전송까지 순식간입니다.
SORACOM LTE-M 버튼을 클릭하여 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 액세스 토큰을 저장하고 사용하고 있습니다.

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에 생성됩니다.

운영



버튼을 누르면 됩니다.
안전 알림이 왔습니다.


깨달은 것


  • 스트랩용 구멍이 있습니다. 뒷 돼지를 제거하고 설치합니다.
  • 아이에게 갖게 해 보면, 오조작에 의한 메세지 송신이 발생했기 때문에 싱글 클릭에는 「아직다」를 할당했습니다.
  • 폭파 스위치는 적어도 길게 눌러 할당하는 것이 좋을지도.



  • 그 후의 「바꾸는 버튼」



    2019년 2월 현재 3개월이 지났습니다. 아이가 배우거나 나갈 때 사용하고 있습니다. 안정적이고 운영 중입니다.

    좋은 웹페이지 즐겨찾기