はじめに
私ごとですが、今秋に新居に引っ越しました。
少しずつ新居で必要な家電を揃えていっているんですが、新居にBeaconがないことに気づきました。
これは問題です!
ということで、家にあったRaspberry Pi Zero W を LINE Simple Beacon にしてしまいたいと思います。
LINE Simple Beaconを選んだ理由は、なんとなく簡単そうだから。
ネット上を探しみても、Raspberry Pi Zero W をLINE Simple Beacon化した記事はまだなさそうだったので、できるかどうかの検証もかねてやってみます。
LINE Simple Beaconとは?
Raspberry Piを使って、自分で LINE Beacon 対応デバイスを製作することが出来る新しいオープンなビーコン仕様、それが「LINE Simple Beacon」です。
Bot開発者が、LINEプラットホームを通じて、Botと連携ずみのLINEユーザがビーコンデバイスに近づいたことをwebhookで受け取ることができます。(引用元:ラズベリーパイでLINE Beaconが作成可能に!「LINE Simple Beacon」仕様を公開しました)
https://github.com/line/line-simple-beacon
開発
前提条件
・LINEのアカウントを持っていること
・初期セットアップが完了したRaspberry Pi Zero Wを持っていること
開発の流れ
- Botの準備
- ビーコンイベントを受信できるようにLINEアプリの設定
- LINE Simple Beacon用のHWIDを発行
- Raspberry Pi Zero W のセットアップ
1.Botの準備
まず最初に、LINE Botのアカウントが必要です。
もしまだお持ちでない場合は、この辺の記事とかいいと思いますので、見ながら作ってみてください。
LINE Botのアカウントを作成後、チャネル基本設定の画面に、
Webhook送信 と Webhook URL という項目がありますので、Webhook送信 にチェックを入れ、Webhook URLにWebhookの送信先を入力します。
今回、私は、Webhookの送信先をGoogle Apps Scriptにし、受信したイベント内容をSlackに飛ばすようにしました。
Google Apps ScriptとSlackの連携は、この辺の記事とかいいと思います。
2. ビーコンイベントを受信できるようにLINEアプリの設定
公式ドキュメントのMessaging APIに説明がありますが、
ビーコンイベントを受信できるようにLINEアプリの設定を行う必要があります。
先ほど準備したBotを友だち追加した上で、以下の手順に従って、設定してみてください。
- スマートフォンのBluetoothをオンにする。
- LINEアプリで[設定]>[プライバシー管理]> [情報の提供]の順に選択し、[LINE Beacon]のチェックボックスをオンにする。
プライバシー管理画面の情報の提供をクリックし、
LINE Beaconにチェックを入れます。
このLINE Beaconのチェックボックスの位置が、公式ドキュメントと異なっており、若干探しました・・・
これで、LINEアプリ側の設定は完了です。
3. LINE Simple Beacon用のHWIDを発行
次に、ここにアクセスして、LINE Simple BeaconのハードウェアIDの払い出しボタンをクリックします。

さらに、ビーコンと連携させたいBotの選択ボタンをクリックし、

ハードウェアID発行ボタンをクリックすると、以下の画面の通り、IDが表示されるので、これをメモっておきます。

4. Raspberry Pi Zero Wのセットアップ
最後に、Raspberry Pi Zero Wをセットアップします。
Linux向けのBluetoothのプロトコルスタックであるbluezおよび関連するパッケージをインストールします。
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
次に、以下のコマンドを実行します。
以下は発行されたHWIDが0116b4370c の場合の例ですので、発行したHWIDに合わせて適宜修正してください。
# 発行されたHWIDを2桁ごとにスペースで区切ったものを指定
HWID='01 16 b4 37 0c'
ADVERTISE_DATA="13 02 01 06 03 03 6F FE 0B 16 6F FE 02 ${HWID} 7F 00"
# Bluetooth HCIを有効にし、初期化します
sudo hciconfig hci0 up
# LE Controller Commands(OGF: 0x08), HCI_LE_Set_Advertising_Data(OCF: 0x0008) を実行し、
# 出力データを設定します
sudo hcitool -i hci0 cmd 0x08 0x0008 ${ADVERTISE_DATA}
# Non connectable undirected advertising(3)で、Bluetooth LEのアドバタイズを有効にします
sudo hciconfig hci0 leadv 3
これで、 Raspberry Pi からのビーコンイベントのwebhookが、先ほどWebhook URL に入力したエンドポイントに届くはずです。
動作確認
ビーコンの電源が入っていることを確認し、LINEアプリを起動したスマートフォンをビーコンに近づけます。
すると、WebhookがGoogle Apps Scriptに送信され、受信したイベント内容が、無事Slackに飛んできました。
まとめ
これで、Botと連携ずみのLINEユーザがビーコンデバイスに近づいたことをwebhookで受け取ることができるようになりました!
帰宅時間でもロギングしてみようかな。
以上


