はじめに
私ごとですが、今秋に新居に引っ越しました。
少しずつ新居で必要な家電を揃えていっているんですが、新居に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で受け取ることができるようになりました!
帰宅時間でもロギングしてみようかな。
以上