SORACOM LTE-M Button Plusを使ってLINEに通知してみた!

はじめに

大学との企業連携の取り組みとして、IoT.kyotoが講義を行うことになりました。
そこで、学生さんがIoTを簡単に体験できるIoTシステムを作ることになり
今回はSORACOM LTE-M Button Plusを使って簡単なIoTシステムを作成しました。

使用サービス

デバイス:SORACOM LTE-M Button Plus
SORACOMサービス:SORACOM Funnel
AWSサービス:AWS IoT Core、AWS Lambda
LINEサービス:Messaging API

今回のアーキテクチャ

SORACOM LTE-M Button Plus

SORACOM LTE-M Button Plus は3種類のクリックに応じたアクションをクラウド側で設定できる、自分だけのIoTボタンを作れるデバイスです。
本商品はボタンによるクリック入力に加え、備え付けの接点端子への入力時間にあわせて3種類の出力情報を送信することが可能です。
人間がボタンをクリックする用途だけでなく、マグネットセンサーやフロートセンサーなど接点を活かした応用で活用の幅を広げます。
LTE-M通信を内蔵し、単四電池で駆動しますので、Wi-Fi環境に依存せず、屋外でもご利用いただけます。
https://soracom.jp/store/5207/

今回は、このSORACOM LTE-M Button Plusを押すと、ご自身のLINEへ通知されるという簡単なIoTシステムを作成していきます。

ハンズオン

事前準備

  • SORACOMのユーザーコンソールにSORACOM LTE-M Button PlusのSIMが登録されていること
  • LINEアカウントを持っていること

注意事項

  • 当記事の内容は有料サービスを利用します。発生した料金は実施者負担となりますので、ご理解の上で実施ください。
  • LINEのMessaging APIは無料で使用することができますが、無料で送れるメッセージの通数はプランによって変わりますので詳しくは公式ページをご確認ください。
    https://developers.line.biz/ja/docs/messaging-api/overview/#line-official-account-plan

ステップ1:IAMユーザーを作成する

  1. AWSマネジメントコンソールにサインインする
  2. 「IAM」を開く
  3. 左のタブから「ユーザー」を開く

    IAMユーザーを作成する

  4. [ユーザーを追加]をクリックし、ユーザーを作成する
  5. 「ユーザー名」に「iot-test」と入力し、「アクセスキー」にチェックをつけ、[次のステップ:アクセス権限]をクリックする

    ユーザーを追加する

  6. 既存のポリシーである「AWSIoTDataAccess」をアタッチし、[次のステップ:タグ]をクリックする

  7. 「タグの追加(オプション)」では、何も入力せずに次へ進む
  8. 設定した内容に問題がないことを確認し、[ユーザーを作成する]をクリックする

    IAMユーザーを追加する

  9. csvをダウンロードするか、アクセスキーIDおよびシークレットアクセスキーをメモ帳などに控え、[閉じる]をクリックする

ステップ2:AWS IoT Coreのエンドポイントを確認する

  1. 「IoT Core」を開く
  2. 左のタブから「設定」を開く

  3. 「デバイスデータエンドポイント」に記載されている「エンドポイント」をメモ帳などに控えておく

ステップ3:SORACOMユーザーコンソールで認証情報を登録する

  1. SORACOMユーザーコンソールにログインする
  2. 画面右上に表示されるユーザーのプルダウンメニューを開き、[セキュリティ]をクリックする

  3. 「認証情報ストア」 ー [認証情報を登録]をクリックする

  4. 以下の情報を設定し、[登録]をクリックする
    認証情報ID:iot-test
    概要:iot-test
    種別:AWS認証情報
    AWS ACCESS KEY ID:「IAMユーザーの作成」で取得・メモしたアクセスキーIDを入力
    AWS SECRET ACCESS KEY:「IAMユーザーの作成」で取得・メモしたシークレットアクセスキーを入力

ステップ4:SIMグループを作成する

  1. 画面左上のメニューから、「SORACOM AIR FOR セルラー」 ー 「SIMグループ」をクリックする

  2. [+ 追加]をクリックする

  3. 「iot-test-group」を入力し、[グループ作成]をクリックする

  4. 「基本設定」タブ ー 「SORACOM Air for セルラー設定」を開く
  5. 下へスクロールし、以下を設定し、[保存]をクリックする
    バイナリパーサー:ON
    フォーマット:@button


  6. 「SORACOM Funnel 設定」を開く
  7. 以下を設定し、[保存]をクリックする
    転送先サービス:AWS IoT
    転送先URL:https://<「AWS IoT Coreのエンドポイントを確認する」でメモしたエンドポイント>/button_topic/
    ※画像はエンドポイントが「abcdefghijklmn-opq.iot.ap-northeast-1.amazonaws.com」の場合の例

    認証情報:iot-test
    SIM IDを追加:ON


ステップ5:SIMグループをSORACOM LTE-M Button PlusのSIMに割り当てる

  1. 画面左上のメニューから、「SORACOM AIR FOR セルラー」 ー 「SIM管理」をクリックする

  2. SORACOM LTE-M Button PlusのSIMにチェックをつけ、右クリックする

  3. [所属グループを変更]をクリック

  4. 「新しい所属グループ」で「iot-test-group」を選択し、[グループ変更]をクリックする

  5. これでSORACOMサービスの設定は完了です

ステップ6:LINEの設定

  1. LINE Developersにログインする

  2. [LINEアカウントでログイン] をクリックする

  3. [QRコードログイン] をクリックする

  4. 表示されたQRコードをLINEから読み込む
  5. スマホとパソコンを行き来し、以下の通り設定する
    1. [ログイン] ボタンをタップ(スマホ)

    2. 4桁の番号を確認(パソコン)

    3. 4桁の番号を入力(スマホ)
    4. [本人確認] ボタンをタップ(スマホ)

  6. パソコンの画面に戻り、[LINEビジネスIDを作成] をクリックする

  7. 以下の入力し、[Create my account]をクリックする ※日本語になっている場合があります
    Developer name:任意の名前を入力(yamada)
    Your email:任意のメールアドレスを入力
    I have read・・・:チェックをつける

  8. 以降の手順が日本語のため、右下の「English」を「日本語」に変更する

  9. [新規プロバイダー作成] をクリックする

  10. プロバイダー名に名前(例:yamada)を入力し、[作成] をクリック

  11. [Messaging API]をクリックする

  12. 以下を設定し、[作成]をクリックする
    会社・事業者の所在国・地域:日本
    チャネル名:名前を入力(例:yamada)
    チャネル説明:ハンズオン用
    大業種:個人
    小業種:該当するものを選択
    メールアドレス:任意のメールアドレスを入力
    LINE公式アカウント利用規約の内容に同意します:チェックをつける
    LINE公式アカウントAPI利用規約の内容に同意します:チェックをつける



  13. [OK] をクリックする

  14. [同意する] をクリック

  15. 「チャネル基本設定」タブを下にスクロールし、「あなたのユーザーID」をメモ帳などに控える


  16. 「Messaging API設定」タブへ移動し、「チャネルアクセストークン」の[発行] をクリックする


  17. 「チャネルアクセストークン」をメモ帳などに控える

  18. 「Messaging API設定」タブの上の方へスクロールし、表示されているQRコードをLINEから読み込んで、友だちに追加する

  19. このような画面が表示されれば、LINEの設定は完了です

ステップ7:Lambda関数を作成する

  1. AWSマネジメントコンソールにサインインする
  2. 「Lambda」を開く
  3. 左のタブから「関数」を開き、[関数の作成]をクリックする

  4. 以下を設定し、[関数の作成]をクリックする
    オプション:一から作成
    関数名:iot-test
    ランタイム:Python3.9

  5. 設定画面が表示されるため、下へスクロールし、コードソースへ移動する
  6. コードソースに記載されている内容を全て削除する

  7. 以下のコードをコピーし、貼り付ける
    import json
    import urllib.request
    
    def lambda_handler(event, context):
            print(event)
            text = "ボタンが押されました。"
            url = 'https://api.line.me/v2/bot/message/push'
            headers = {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + 'チャネルアクセストークン'
            }
            body = {
                'to': "あなたのユーザーID",
                'messages': [
                    {
                        "type": "text",
                        "text": text,
                    }
                ]
            }
    
            req = urllib.request.Request(url, data=json.dumps(body).encode(), method='POST', headers=headers)
            urllib.request.urlopen(req)
    
            return {
                'statusCode': 200,
            }
    

     

  8. 「LINEの設定」でメモした以下の内容を変更し、最後に[Deploy]をクリックする
    あなたのユーザーID
    チャネルアクセストークン
    ※ダブルクォーテーション(””)、シングルクォーテーション(’’)を削除しないように注意

  9. ここでアーキテクチャのおさらいをします
  10. あとはIoT Coreの設定をするだけですが、赤枠で囲んだ部分がちゃんと動作するのかを確認しておきます

  11. [Test | ▽] ー [Configure test event]をクリックする

  12. 「イベント名」に「test」を入力し、[保存]をクリックする

  13. [Test | ▽]をクリックする

  14. 以下の画面のように「ボタンが押されました。」とLINEに通知されることを確認する
    ※通知されていない場合は、変更した「あなたのユーザーID」および「チャネルアクセストークン」に誤りがないか確認してみてください

ステップ8:IoT Coreのルールを作成する

  1. AWSマネジメントコンソールにサインインする
  2. 「IoT Core」を開く
  3. 左のタブから「メッセージのルーティング」ー「ルール」を開き、[ルールを作成]をクリックする

  4. 以下を入力し、[次へ]をクリックする
    ルール名:iot_test
    ルール説明:ハンズオン用

  5. 以下を入力し、[次へ]をクリックする
    SQLステートメント:SELECT * FROM ‘button_topic/#’

  6. 以下を設定し、[次へ]をクリックする
    ルールアクション:Lambda
    Lambda関数:iot-test
    ※「Lambda関数を作成する」で作成したLambda関数を指定

  7. 確認画面が表示されるため、[作成]をクリックする

  8. これでIoT Coreの設定は完了です。

ステップ9:SORACOMボタンを押してみよう!

全ての設定が完了したので、SORACOMボタンを押してみましょう!
※ボタンを押した後にオレンジ色のライトが点滅しますが、これはネットワークに接続している最中です。最後に緑点灯になれば、LINEに通知が来るはずです
※緑点灯ではなく、赤点滅や赤点灯の場合は、設定に誤りがあるか電池残量がないので、見直しをしてみてください

まとめ

このようにSORACOM、AWS、LINEを使用することで簡単なIoTシステムを作成することができます。
今回使用したLambda関数内の「ボタンが押されました。」部分を変更すれば、好きなメッセージを通知できますし、SORACOMボタンには3種類のアクション(1回押し、2回押し、長押し)があるので、Lambda内で処理を分岐させたりもできます。
是非、ご自身だけのIoTシステムを作成してみてください!