こんにちは、LINEの古田です。主としてLINE Beaconを担当するエンジニアです。
このたびオープンなLINE Beaconデバイスの仕様である、「LINE Simple Beacon」を公開しましたので、当エントリで紹介します。

なぜ作ったか
LINEは、スマートフォンの外の世界と連動したユーザ体験を提供することを目的に「LINE Beacon」というサービスを展開してきました。これまで公式アカウントとBot開発者向けに提供していたLINE Beaconは、当初ビジネス用途を想定して開発されたため、セキュリティを高める技術を導入した専用デバイスを用いるものでした。しかし、色々なハッカソン等を通じ、ビーコンデバイス自体を自作したり、組み込んだり、電波のタイミングや強さなどを自分で制御したりしたいというご要望を多く頂きました。
そのご要望にお答えする形でつくられた、自分で LINE Beacon 対応デバイスを製作することが出来る新しいオープンなビーコン仕様、それが「LINE Simple Beacon」です。
とりあえず作ってみたい人へ!
Raspberry Pi 3の場合

このエントリーの興味を持たれた皆さんの手元には、おそらくRaspberry Piが何台かあると思います
その中でも特に、Raspberry Pi 3は最初からBluetooth Low Energyに対応したチップを搭載しているため、追加の投資なしでそのまま「LINE Simple Beacon化」することが可能です(LINE Simple BeaconはBluetooth LEを使っています)
ここではその手順を述べていきたいと思います。
Botの準備
まず最初に、LINE Botのアカウントが必要です。もしまだお持ちでない
場合、先日公開したFAQを参考に作成をしてください。
次に、ビーコンイベントを受信できるようにLINEアプリの設定をしてください
最後に、LINE Simple Beacon用のHWIDを発行してください
以上で準備は完了です!
Raspberry Piのセットアップ
Raspberry Pi に、Linux向けのBluetoothのプロトコルスタックであるbluez
および関連するパッケージをインストールします。これだけで環境構築は完了です。
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
実行
次のようなコマンドを実行してください。以下は発行されたHWIDが01deadbeef
の場合の例ですが、発行された値に合わせて適宜HWIDの値を修正してください。
# 発行されたHWIDを2桁ごとにスペースで区切ったものを指定
HWID='01 DE AD BE EF'
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 3からのビーコンイベントのwebhookが、皆さんの管理するBotサーバのAPI Endointに届くはずです。
(Raspberry Pi 2以前であっても、いわゆる「Bluetoothドングル」と呼ばれるような、Bluetooth LEに対応したコントローラをUSBで接続すれば、上記の手順でそのままLINE Simple Beacon化が可能です!)
Macの場合
もし万が一、Raspberry Pi 3が手元にない場合。Macを使えば、Raspberry Piと同じく簡単にLINE Simple Beacon化することができます(Bluetooth LEを搭載している機種限定になります。ここ数年以内に発売されたものならOKです)
サンプルコードを用意しましたので、以下の手順で実行してみてください。
Botの準備
(上記を参照してください)
macOSのセットアップ
事前にXcode, Node.jsをインストールし、以下のコマンドを実行してみてください。これで環境構築は完了です。
git clone https://github.com/line/line-simple-beacon.git
cd ./line-simple-beacon/tools/line-simplebeacon-nodejs-sample
npm install
実行
上記のHWID発行を行った上で、以下のようにコマンドを実行してください(以下は発行されたHWIDが01deadbeef
の場合の例です)。
./simplebeacon.js --hwid=01deadbeef
これで、Macからのビーコンイベントがbotサーバに届くはずです。
(ちなみにこのサンプルコードはRaspberry Piでも動作します!)
もしwebhookが受け取れなかったら?
もしかしたら、デバイスからBluetoothの電波が出ていないかもしれません。
その場合、以下のツールをスマートフォンにインストールして実行すると簡単なチェックが可能です。
これはBluetooth関係のチップを多数手がけているNordic Semicondactorがリリースしているアプリケーションで、周囲のBluetoothデバイスの一覧と電波の受信信号強度(RSSI)をグラフ表示する機能があります。その機能を有効にした状態でLINE Simple Beaconデバイスを近づけると、電波が出ていれば図の赤枠のようにRSSIのグラフが上昇するはずです。

私の机の周りにはBluetoothデバイスが非常にたくさんあって大変ひどいことになっていますが、任意のデバイスの信号だけフィルタして表示する機能もあるので全く問題ありません。また、Android版はより詳細なデバイス情報やパケットのRaw Dataを表示する機能もあるのでおすすめです。
もし何も変化がなければ電波が出ていないということになるので、デバイスのbluetoothがONになっていることをまずはご確認ください。
電波は出ているにもかかわらずwebhookが受け取れないとしたら、LINEアプリの設定か、またはHWIDが間違っている(別のbotのものが使われている)ことが考えられます。
設定についてはhttps://devdocs.line.me/ja/#receiving-webhooks-from-a-line-user を、HWIDについては https://admin-official.line.me/beacon/register を再度ご確認ください。
LINE Simple Beaconで出来ること
LINE Simple Beaconでは以下のことが可能です。これは、これまでBot開発者向けに提供していたのと同じものになります。
Bot開発者が、LINEプラットホームを通じて、Botと連携ずみのLINEユーザがビーコンデバイスに近づいたことをwebhookで受け取ることができる
LINE Beaconには他にも、ビーコンデバイスに近づいたらバナーを出すといった機能もあるのですが、LINE Simple Beaconはセキュアでないため提供ができません、申し訳ないです!逆に、専用デバイスを使ったLINE Beaconでは実現できない、LINE Simple Beaconならではの機能を今後盛り込んでいく予定なので、乞うご期待ください!
また、現状ではテスト公開という位置づけなので一つのBotアカウントに10個までという制限がありますが、これは今後緩和していく予定です。
最後に
今回はLINE Simple Beaconの紹介と、Raspberry Pi、Macを使った実装方法、簡単なデバッグの方法について述べました。また、何ができるかについても述べました。なお、詳細なLINE Simple Beaconのデバイス仕様は以下のLINEのgithubで公開しています(上記のサンプルコードもこちらで公開されています)。これを読むと、上記以外のデバイスでもLINE Simple Beacon化できるはずです。
https://github.com/line/line-simple-beacon
つきましてはハードウェア連携サービスに興味のある開発者のみなさま、ぜひLINE Simple BeaconとLINE Messaging APIを使ってお気軽にLINE Beaconの機能を試していただけたらと思います。
(そして、LINE BOT AWARDS終了までほとんど時間のないタイミングでのリリースとなってしまってごめんなさい!)
(2017.05.12追記)こちらのブログの続報記事を公開しました→LINE Simple Beaconをつかって、ESP32の電源電圧を送ってみる