LINE Beaconに近づいたらSESAMEを解錠する

[enebularアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/enebular)の1日目の記事です。

# 概要
LINE BeaconとenebularとSESAMEを連携してLINE Beaconに近づいたらSESAMEを解錠したいと思います。

使うものは `LINE Simple Beacon` です。LINE Simple Beaconとは、シンプルなビーコン端末化ができるサービスで、クーポンの配信といった機能は無く、必要最低限の機能しかありませんが、BLE（Bluetooth Low Energy）が使える端末であれば、簡単にLINE Beacon 化することができます。[M5ATOM LITE](https://www.switch-science.com/catalog/6262/) はBLEが使えるので、LINE Beacon 端末化することができます。

## 完成動画

<iframe width="560" height="315" src="https://www.youtube.com/embed/rwQ-zTcHFlo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## 全体構成
![s100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/112597e9-997e-794a-f9cc-6e9beafa29f8.png)

## 必要なもの
* [SESAME 4](https://jp.candyhouse.co/products/sesame4)
* [WiFiモジュール (SESAME3/4対応)](https://jp.candyhouse.co/products/new-wifi)
* [M5ATOM LITE](https://www.switch-science.com/catalog/6262/)
* スマホ

## 1. LINE Beacon化
M5ATOM LITEをLINE Beacon化しましょう。

### 1-1. LINE Messagingチャネル作成
まず、LINE Messagingチャネルを作成してLINE Beaconを設定します。下記へアクセスしてお持ちのLINEアカウントでログインしてください。

https://developers.line.biz/ja/

新規チャネル作成をクリックします。

![s101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/2f643fec-0c5f-f47b-9d7a-dd9f43597bda.png)

Messaging APIをクリックします。
![s102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/dfb8927c-f0d4-05e5-cb60-dd1a36f4d090.png)

チャネル設定項目は下記の通りです。

|項目|設定値
|:--|:--|
|①チャネル名|SESAMEビーコン|
|②チャネル説明|SESAMEビーコン|
|③大業種|個人|
|④小業種|個人（その他）|

![s103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/d3fa8fd1-ff7e-ea90-f24b-5913145aeb45.png)

２つチェックを入れます。

![s104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/14f01fe1-3de7-312f-095d-21dc6df10215.png)

「同意する」をクリックします。
![s105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/b76de001-c46b-5907-9127-0e0aad67696f.png)

### 1-2. チャネルシークレットを取得する
チャネル基本設定の下の方にスクロールすると、チャネルシークレットと記載があるものをメモしておきます。

![s111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/d89dadd5-648b-81ea-4039-d2f9359fb1f8.png)

### 1-3. チャネルアクセストークンを発行する
Messaging API設定をクリック。

![s106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/f02f0425-4e75-8f89-6a34-a4049cebfe8c.png)

画面一番下までスクロールするとチャネルアクセストークンがあります。「発行する」ボタンを押下してアクセストークンを発行してください。
発行したアクセストークンは後ほど使うので、メモしておいてください。

![s107.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/28691191-0f50-38d9-05db-06effc619e9e.png)

### 1-4. ハードウェアID発行
下記へアクセスしてLINE BeaconのハードウェアIDを取得します。

https://manager.line.biz/beacon/register

「LINE Simple BeaconのハードウェアIDを発行」をクリック。
![s108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/ef2cfc73-fef3-21a2-6a01-c2835bd8b494.png)

作成したLINEチャネルを選択します。
![s109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/94ddf68a-e015-135e-9bfb-ebca1d5c9e55.png)

「ハードウェアIDを発行」ボタンを押下して発行されたハードウェアIDをメモしておきます。
![s110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/98b4e25c-f998-297a-d711-fcf802a49314.png)

## 2. SESAMEの情報を取得
SESAMEを遠隔から操作するためのAPI情報を取得します。

### 2-1. APIキーを発行する
下記へアクセスして連携しているSESAMEアカウントを使ってログインしてください。

https://partners.candyhouse.co/

ログインするとAPI_KEYをクリックして表示された値をメモしておきます。
![s200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/e9722713-813f-bb17-929a-26ab2c330a97.png)

### 2-2. UUIDとsecret keyを取得する
SESAME端末のUUITとsecret keyを取得します。SESAMEアプリからQRコードを表示してください。

![s201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/4fcb973e-df06-a13b-bb0d-86825e45445d.png)

下記へアクセスしてQRコードをかざしてください。UUIDとsecret keyが表示されます。

https://sesame-qr-reader.netlify.app/

`UUID` と　`secret key` をそれぞれメモしておきます。
![s202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/d26184ba-f20a-3633-1c7b-b73b162ebc68.png)

## 3. enebularの設定
### 3-1. ノードを追加する
パレットの管理からノードを追加タブをクリックして、 [node-red-contrib-sesame](https://flows.nodered.org/node/node-red-contrib-sesame)を追加します。

![s203.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/e9430330-f895-32d4-4596-975d165364c6.png)

続いて [node-red-contrib-line-messaging-api](https://flows.nodered.org/node/node-red-contrib-line-messaging-api)を追加します。

![s204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/b060d9db-5851-9f4b-b656-173270d0325b.png)

### 3-2. SESAMEノードの設定
IoTカテゴリにあるControlノードをドラッグアンドドロップします。ノードをダブルクリックして、2-1で取得したSESAMEのAPI Keyを設定します。

![s205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/b8f99ce7-00a8-b716-85dd-4751e5b3c2d7.png)

API Keyを追加する
![s206.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/51519259-d862-560f-3095-883dcbd0da5c.png)

続いてSESAMEの設定をします。
![s207.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/f2cb606f-03b9-cba6-53be-b38531ec8b43.png)

2-2で取得したUUIDとsecret keyをそれぞれ設定します。
![s208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/e3096584-dcef-6205-2cc9-43583798afa8.png)

### 3-3. LINE Messaging ノードの設定
LINEカテゴリにある `ReplyMessage` ノードをドラッグアンドドロップして、1-2で取得したチャネルシークレットと1-3で取得したチャネルアクセストークンをそれぞれ設定します。

![s209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/6a54cdcd-584d-2870-23a3-2f7f19437c50.png)

### 3-4. http inノードの設定
LINE Beaconを受信したときのWebhook受け口を用意します。ネットワークカテゴリにある http inノードをドラッグアンドドロップして、下記設定を行います

|項目|値|
|:--|:--|
|メソッド|POST|
|URL|/beacon <br>※「/」スラッシュを含めてください|

![s210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/81a68276-06d8-1f60-5507-e3d78dc2e52b.png)

### 3-5. changeノードの設定
機能カテゴリにある `change` ノードをドラッグアンドドロップします。 `http in`ノードと繋いでください②。ルールに従って値の代入を行います。

|項目|値|
|:--|:--|
|値の代入|replayToken <br>先頭の　「msg.」　はプルダウンメニューから選択してください|
|対象の値|payload.events[0].replyToken<br>先頭の　「msg.」　はプルダウンメニューから選択してください|
![s211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/ed05062e-b92d-6034-bbac-70d21a2d50e4.png)

### 3-6. functionノードの設定
機能カテゴリにある `function` ノードをドラッグアンドドロップします。 `change`ノードと繋いでください。末尾はLINEノードとSESAMEノードにそれぞれ繋ぎます。

コードは下記をコピペしてください。

```javascript
msg.payload = {};
msg.payload.user = "解錠";    // SESAMEアプリの履歴に残す文字列
msg.payload.cmd = "unlock";  // SESAME解錠コマンド
msg.payload.events = [
    {
        "type": "message",
        "replyToken": msg.replyToken,
        "message": 
        {
            'type': 'text', 
            'text': '鍵を開けました！'
        }
    }
];
return msg;
```

![s212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/8bf304f4-511b-724d-bd28-f46d1dd7d182.png)

### 3-7. デプロイ
設定がすべて完了したら、画面右上にある 「デプロイ」　ボタンをクリックします。

![s213.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/fa130a91-3608-cad4-89df-7b2bc7867cf0.png)

デプロイが完了したら「i」マークにマウスカーソルを当てると、エンドポイントURLが表示されますのでメモしておきます。
![s214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/e211ae8d-d210-6d58-a2f7-149e064a4269.png)

## 4. Webhookの設定
### 4-1. WebhookのURLを設定する
再度LINE Developersページを表示してください。応答メッセージを編集します。
![s300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/1a129215-0c5e-4933-00ac-6a382aa53d2f.png)

応答メッセージは `オフ`、Webhookは `オン`に設定します。設定したら 「Messagin API設定」ボタンをクリックします。

![s301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/8b831aff-2a4c-d75f-1f35-57a28c496441.png)

Webhook URLに3-7でメモしたenebularのエンドポイントURLを貼り付けます。末尾に「/beacon」をつけ忘れないようにしてください。設定したら「保存」ボタンをクリックします。
![s302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/7ff6e200-6de8-3b10-6f88-a2a853585f8d.png)

### 4-2. LINEと友だちになる
Messaging API設定にあるQRコードをご自身のLINEから読み取って友だちになっておいてください。

![s303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154355/6f541f29-a82b-8e95-6291-05758b96bfe2.png)

## 5. M5ATOM LITEをLINE Beacon化する
LINE Beacon化する記事はこちらに詳しく記載されております。

https://zenn.dev/n0bisuke/articles/e2e400dda8e6eb7b1e9f

### 5-1. LINE Beacon化
Arudinoのライブラリ管理からGreen Beaconと検索し[green-beacon-esp32](https://github.com/ukkz/green-beacon-esp32)をインストール

スケッチは下記の通りです。1-4で取得したハードウェアIDを指定してください。

```c
#include <GreenBeacon.h>

void setup() {
  GreenBeacon beacon = GreenBeacon("xxxxxxxxx"); // 1-4で取得したハードウェアIDを指定
  beacon.start("Hello!");
}

void loop() {
  // put your main code here, to run repeatedly:

}
```

これでLINE Beaconにスマホを持って近づくとSESAMEの鍵が解錠されます。

## まとめ
もう家の鍵を持ち歩かなくてもスマホさえ持っていれば家に近づくだけで鍵が開きます。
スマホだけ忘れないように気をつけてくださいねｗ

システム化のご検討やご相談は弊社までお問い合わせください。

https://i-enter.co.jp/contact/