セキュリティエンジニア初心者の苦悩

セキュリティ、無線通信、ネットワークなどなど、技術的なことからキャリア形成など綴るブログ

SORACOM LTE-M Buttonを使ってみた

最近あまりネタがなかったのですが、SORACOMが発売したLTE-M Buttonを使ってみたので、どんな感じで使えるかまとめてみます。

 

 

SORACOM LTE-M Buttonって?

LPWAの通信規格の一つであるLTE-Mで通信可能な、単三電池で稼働するボタンデバイスです。AmazonダッシュボタンのLTE-M版ですね。

f:id:tansokun920:20181119223536j:plain

soracom.jp

今なら¥3,980で1年間の通信費(1500回クリック分)も込みで購入できます。個人的にはめっちゃお得な気がします。

回線はKDDIの800MHz帯のみを利用するようです。屋内まで届きやすい周波数帯のみにすることで、デバイスの小型化と利便性どちらも損なわないように作られている感じがします。ちなみに京セラ製です。製品仕様の詳細は以下をご参照ください。

dev.soracom.io

SORACOM LTE-M Buttonで送れるデータ

SORACOM LTE-M Buttonで送れるパターンは3つです。

種別 説明
シングル 短く(1.2秒未満) 1回押す
ダブル 2秒以内にシングルクリックを2回行う
ロング 1.2秒以上押し続ける。

 

送信されるデータはJSON形式で以下のようなフォーマットの様です。こちらはSORACOMのUser Consoleで確認することができます。

{
 "tags": {},
 "operatorId": "ZZZZZZZZZZZZZ",
 "id": "button/XXXXXXXXXXXXXX",
 "productId": "button",
 "serialNumber": "XXXXXXXXXXXXXX",
 "status": "active",
 "terminationEnabled": false,
 "attributes": {
  "contractEndingTime": "2019-11-06T12:33:56Z",
  "firstClickTimestamp": "2018-11-06T12:33:56Z",
  "remainingCount": 1490
 },
 "lastSeen": {
  "batteryLevel": 1,
  "clickEventPropagated": true,
  "clickTime": "2018-11-17T03:03:41.241Z",
  "clickType": "SINGLE" ←ここがクリックに応じて変わる
 },
 "createdTime": 1541508103417,
 "lastModifiedTime": 1541508103417
}

 

AWS IoT 1-clickとの連携

当然のことながらAWSにデバイスを登録して連携させることができます。これがまぁ笑っちゃうくらい便利。QRコードスマホで読み込むだけでAWSに登録できますし、SMSの通知であれば瞬殺でできます。

使い方は以下のページをご参照ください。

dev.soracom.io

 

AWSからLINEメッセージの送信

せっかなのでもう少しカスタマイズして何かやりたいなと思い、毎日送る帰るよLINEをボタン一つでやれないものかと思い調べたところ、すでに同じこと考えてやっている方がいたので参考にして作ってみた。

やることは2つだけです。

  • LINE Notifyでアクセストークンを発行
  • AWSでLINE通知のLambda関数を作成してデバイスと紐付け

 

LINE notifyについては以下のページを参考にしてください。

qiita.com

 

 LINE通知用のAWS Lanbda関数はこんな感じです。Pythonのライブラリにhttp requestを送れるライブラリがあるのでそれを使っています。LINE notifyで取得したアクセストークンは、AWS Lambda関数で使用できる環境変数に設定しています。

# -*- 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

 

 このLambda関数を該当デバイスと紐づけるとこんな感じでメッセージが送られてきます。

f:id:tansokun920:20181119224231p:plain

が、結局こんなのボタンでやらないでと奥さんに言われたため運用できず頓挫・・・

最後に

大したことじゃないけど、最後に使っていて困ったこと。鞄に入れていたら、ボタンが押されてしまって誤送信されることが何度か発生したので、メッセージを通知する場合には自分に通知が行く様にしておかないと誤送信に気付かない可能性があります。また送信キャンセルもできないので、そこは十分留意する必要がありそうです。

 

 

AWSエキスパート養成読本[Amazon Web Servicesに最適化されたアーキテクチャを手に入れる! ] (Software Design plus)

AWSエキスパート養成読本[Amazon Web Servicesに最適化されたアーキテクチャを手に入れる! ] (Software Design plus)