Ship Logo Ship Logo
2025/04/01

Sesami(スマートロック)のステータスをLINE通知したい

author picture

Takuya Ujikawa

/

エンジニア

概要

自宅玄関扉にスマートロックであるSesami4を導入中。 自宅のSesamiのステータスを送ってくれるLINE BOTを作る。 (IFFFTでもできそうだけど拡張性等も加味して今回は自力で)

sesami_4_.jpg

背景・課題

  • Sesamiのステータスを監視し、自宅からの締め出しを防止したい
  • 電池残量確認のためわざわざSesamiアプリを見たくない

使用した言語・サービス

開発フロー

Sesami Web APIのテスト

  1. SESAME Bizに登録し、APIキーとUUIDを取得

  2. curlしてみる

    curl -H "x-api-key: {your APIキー}" https://app.candyhouse.co/api/sesame2/{your UUID}
    
  3. Responseがあることを確認する

LINE Messaging API使用準備・APIテストまで

  1. LINE Developersに登録

  2. Providerを作成

    Provider=開発者やサービス提供者の単位 個人開発の場合、 {YourName}開発 などでOK 20250401_2.png

  3. Create a new channel

    channel = LINE BOTとして動かすアカウントそのもの

    20250401_1.png

    channel typeはMessaging APIを選択

    選択すると公式アカウントの作成にページに飛ぶので作成を進める

    Messaging APIの使用には、公式アカウントの作成が必須です

    ※ 公式アカウントとはいっても外部非公開にできますので、プライベートな使い方ができます

  4. 公式アカウントの作成後、Messaging API の使用を有効にする

    20250401_3.png

    ※ Providerの選択が求められるので、先ほど作成したものを選択

  5. 該当のアカウントをQRコードから友達登録

    LINE Developersに戻り、上記のchannelとしてMessaging APIが表示されているので、Messaging APIタブに表示されているQRコードを読み取り友達登録をしておく

  6. Channel access tokenを発行

    Messaging APIタブ最下部からtokenを発行できる 発行し控えておく

  7. curlしてテストメッセージを送ってみる

    curl -X POST https://api.line.me/v2/bot/message/push \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer {Your アクセストークン}" \
    -d '{
        "to": "{Your ユーザーID}",
        "messages":[
            {
                "type":"text",
                "text":"テストメッセージです!"
            }
        ]
    }'
    

    ※ユーザーIDは、LINE Developersの該当のChannelのBasic settingsタブ内 下部に記載あります

  8. 該当のLINEアカウントでメッセージが確認できればOK

20250401_4.jpg

Cloudflare workers実装

いよいよ実装に入ります

  1. ターミナルにて、wranglerのインストール・Cloudflareログイン等を行う

  2. プロジェクト作成

    wrangler init {アプリ名}
    

    TEMPLATEや言語が選択できるので、今回は下記を選択

    ├ What would you like to start with?
    │ category Application Starter
    │
    ├ Which template would you like to use?
    │ type Scheduled Worker (Cron Trigger)
    │
    ├ Which language do you want to use?
    │ lang JavaScript
    

    Typescriptも選択可能です

  3. 環境変数を追加

    各種APIキー等は環境変数で管理しましょう

    開発用:プロジェクトルート直下の.dev.varsファイル

    # .dev.vars
    LINE_ACCESS_TOKEN=hogehoge
    

    本番用:wrangler secret put コマンド

    # 例
    wrangler secret put LINE_ACCESS_TOKEN
    *# プロンプトが表示されるので、値を入力*
    

    で環境変数を管理できます

    今回は下記の5つを環境変数化します

    • LINE_ACCESS_TOKEN

    • LINE_USER_ID

    • SESAME_API_KEY

    • SESAME_DEVICES

      • 機器名
      • UUID
      $ wrangler secret put SESAME_DEVICES
      
      *? Enter a secret value: ›
      
      {
        "sesami-1": {
          "uuid": "{sesami-1のUUID}",
          "name": "sesami-1"
        },
        "sesami-2": {
          "uuid": "{sesami-2のUUID}",
          "name": "sesami-2"
        }
      }*
      
    • {今回のアプリ名}_ACCESS_TOKEN

      今回の通知アプリのアクセストークンとして扱う

      私は例としてSESAMI_LINE_NOTIFY_ACCESS_TOKENで命名

      予測されにくいランダムな文字列で大丈夫です

  4. 通知アプリを実装

    サンプルとして下記で公開

    https://github.com/suama-akdo5317/sesami-line-notify

  5. デプロイ

    wrangler deploy
    
  6. 確認

    wrangler.tomlで設定したスケジュールに合わせて配信されていることを確認

20250401_5.jpg

今後修正・追加したい機能

  • SlackやDiscordへの通知
  • 特定の期間開錠された状態だったらアラート通知
  • LINEのチャット機能からSesamiのステータスを取得できるように
  • バッテリー残量が少なくなった場合に分かりやすく警告が出るようにする
  • LINEのチャット機能で施錠・解錠をできるようにする(セキュリティは頑張る)
SHARE ON ❤️