はじめてのLINE Things

少し前に、LINE Things development boardを頂く機会がございました。 興味がありましたし、せっかくですので、まずはセットアップをしてみました。

LINE Thingsとは?

LINE Developersに分かりやすい文章がございましたので、引用します。

LINE Thingsは、LINEを介して、チャネルとBluetooth® Low Energy対応デバイスを連携し、操作を可能にするIoTプラットフォームです。

ここでいうチャネルとは、ボットを作成するために使用するLINE Messaging APIのチャネルのことです。

この図にあるように、LINEアプリがデバイスと連携し、LINEのプラットフォームを通じて、LINE BotやLIFF(LINE Front-end Framework)のインタフェース上に情報を表示したり、操作を行えるようになるというものです。LINEだけあって、LINEがユーザーインタフェースになるわけです。

※画像はLINE Developersより引用

セットアップの流れ

LINE Things development boardのおかげで、デバイスそのものを用意する必要はございませんでしたが、他にも色々とやることがあります。

こちらの流れに沿ってやっていきます。

Messaging APIのチャネルの作成

LINE Developersにログインします。アカウントをお持ちでない場合は、アカウントの作成をしてください。

ログインしたら、新規プロバイダー作成を押します。

任意のプロバイダー名を入力し、確認するボタンを押します。

確認したら、作成するボタンを押します。

作成されると下記の画面が表示されます。Messaging APIのチャネル作成するボタンを押します。

画面上の必須項目を入力していき、下にある入力内容を確認するボタンを押します。

下記のような同意画面が出ますので、同意します。

確認画面が出ますので、下にある規約への同意チェックをつけて作成ボタンを押します。

チャネルが作成されたので、選択します。

チャネル基本設定タブを表示します。

そこにあるChannel Secretの値を控えておきます。

あと、アクセストークンを発行するため、再発行ボタンを押します。

とりあえずロングタームなものを取得しておきたいので、24時間を選択しておきます。(任意)

発行されたアクセストークンの値を控えておきます。

システムの準備

LIFFアプリを作成する

イチからLIFF(LINE Front-end Framework)アプリを作る方法もありますが、まずは簡単に済ませたいと思います。そこで、LINE社が公開しているLINE Things development boardのサンプルLIFFのソースを使用します。

サンプルLIFFのソースコードは、HTMLファイル、CSSファイル、JSファイルで構成されているので、ウェブサーバー環境などに配備してください。

LIFFアプリを先ほど作成したチャネルに追加する

チャネルの設定画面のLIFFタブを選択し、LIFFアプリを作成ボタンを押します。

LIFFの追加フォーム上の項目を入力していきます。サイズというのはLIFFアプリの表示サイズのことです。

※画像はLINE Developersより引用

入力したら保存するボタンを押します。

こんな風に登録されます。 LIFF URLline://app/の右側の文字列はLIFF IDというものです。あとで使うので控えておきます。

ボットアプリを作成する

ボットアプリは、デバイス連携・連携解除のイベントを受け取ったり、LINE Thingsのシナリオ実行イベントを受け取ったりします。今回は、とりあえずデバイス連携、連携解除のイベントを受け取ったら、メッセージ通知するものを用意しておきます。

ボットの作成は下記の記事を参考にしてみてください。

LambdaではじめてのLINE Botを作る

LINE Botにお願いしてAmazon Connect APIから電話をかけてもらう

補足

メッセージイベントと同様に、下記のようにLINE Thingsのイベントが通知されるようになります。

$eventData = json_decode($httpRequestBody);
(・・・省略・・・)
foreach ($eventData->events as $event) {    
(・・・省略・・・)
    // Line Thingsイベント
    elseif($event->type === "things"){
        // デバイス連携の場合
        if($event->things->type === "link"){
            $message = "deviceid=" . $event->things->deviceId . "が連携されました!";
        }
        // デバイス連携解除の場合
        else{
            // 念の為typeがunlinkになっているか確認しておく
            if($event->things->type === "unlink"){
                $message = "deviceid=" . $event->things->deviceId . "が連携解除されました!";
            }else{
                //エラー
                $message = "デバイス連携or連携解除イベントでエラー!!!";
            }
        };
        // LINE Botからメッセージを返す
        $response = $bot->replyText($event->replyToken,$message);
    }
} 

デバイスの作成

本来ですと、Bluetooth® Low Energy対応デバイスを用意する必要があるのですが、今回はLINE Things development boardがあるので、それを利用させていただきます。本当にありがたいボードです。

ただし、このLINE Things development boardを先ほど作成したチャネルを通じて連携できるように、下記の操作を行います。

トライアルプロダクト情報を作成する

これは自前でデバイスを用意した場合も行いますが、LINE Things development boardの場合も、サービス探索用service UUIDを取得するために行います。

下記のAPIを投げて登録します。

curl -X POST https://api.line.me/things/v1/trial/products \
-H "Authorization: Bearer {channel access token}" \  ←控えておいたチャネルのアクセストークン
-H "Content-Type: application/json" \
-d '{
  "name": "{trial product name}", ←任意の名前
  "liffId": "{LIFF APP ID}" ←控えておいたLIFF ID
}'

こんなようなレスポンスが返ってきたら成功です。 psdiServiceUuidpsdiCharacteristicUuidはLINE Thingsのトライアル版では共通の値になります。

{
    "id":6******************,
    "name":"linethingsdemo",
    "type":"BLE",
    "channelId":1**********,
    "actionUri":"line://app/1********-*********",
    "serviceUuid":"8******-****-****-****-***********",
    "psdiServiceUuid":"e625601e-9e55-4597-a598-76018a0d293d",
    "psdiCharacteristicUuid":"26e2b12b-85f0-4f3f-9fdd-91d114270e6e"
}
LINE Things development boardに設定されているAdvertising UUIDの値を取得したserviceUuidの値で上書きする

本来ですと、ファームウェアを書き換えないといけないのですが、LINE Things development boardのありがたいのはLIFFアプリから値の変更ができることです。 まず、LINEアプリとLINE Things development boardを接続します。

このページにあるQRコードをLINEアプリで読みます。

LINE Thingsの利用規約が出てくるので、同意します。

同意すると、LINEアプリのメニューにLINE Thingsが出てきます。

まだ何もデバイスが連携されていない状態です。

LINE Things development boardの電源を入れ、スマホのBluetoothをONにしますと、連携可能なデバイスとして出てくるので、選択します。

友達追加します。

今すぐ利用を選択します。

同意画面が出るので、同意します。

自動的に下記のような画面(LIFF)が表示されますので、表示されているデバイスを選択します。

write advertising packetタブを選択し、UUID欄に先ほど取得したserviceUuidの値を入力します。入力したらWrite UUIDボタンを押します。

LINE Things development boardのディスプレイ上にUUID書き換えのメッセージが出たら、ボード上のリセットボタンを押します。そうすることで反映されます。

反映されたら、LINEアプリのLINE Thingsメニューからデバイス連携を解除します。(選択してタップするとメニューが出ます)

解除した後、しばらく待っていると、トライアルプロダクト情報を作成するの手順で登録したデバイスとして連携可能なデバイスが表示されるようになります。再度連携します。

同意画面が出るので、同意します。

LIFFアプリを完成させる

liff-starter.jsの先頭の下記の値をserviceUuidの値に変更します。

const USER_SERVICE_UUID = "*********************";

変更したら、当ファイルをサーバー環境などに配備し、反映させます。

※Android端末の場合はLIFFのファイルがローカルにキャッシュされるそうなので、キャッシュをクリアしてください。

LINE Thingsを試してみる

まず、LINE Botとの連携ですが、デバイス連携を解除したり、連携したりすると、そのタイミングでボットの方から通知されるようになりました。

あと、LINE Thingsのメニュー上のマイデバイスをタップすると、LIFFが起動します。このLIFFは自分がチャネルに登録したLIFFになります。 一覧からデバイスを選択してタップします。

今現在はデバイスに接続するだけなので、サンプリにあるデバイス上から値を取得するには至ってないですが、LIFFの画面上で情報を参照したり、デバイスを制御することが可能になります。

さいごに

これをどう活用するかはアイデア次第だと思いますので、どう使っていくか、いけるかについては漠然としております。

次回はLINE Thingsシナリオ実行イベントを取得する、といったことを試してみたいと思います。