LINE ThingsやLINE Beaconの立ち位置おさらいなど #linedc #linethings


LINE Things LIFF版、LINE Things 自動通信版、LINE BeaconなどIoT関連のネタが増えて来ているのでその辺のおさらいをしていきます。

背景としては、「LINE ThingsってLINE Beaconと何が違うの？」って声が割とあった印象で、一旦整理しておくといいかもと思った感じです。

今回は[ここの図のイメージ](https://qiita.com/n0bisuke/items/1f552f3508fe8cf22759#%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E7%AB%8B%E3%81%A1%E4%BD%8D%E7%BD%AE%E3%81%AA%E3%81%A9)が伝われば良い気がしています。

---

## この資料について

* LINE Things Meetup Vol1での発表資料です。
	* https://linedevelopercommunity.connpass.com/event/132179/
	* https://linedevelopercommunity.connpass.com/event/132289/
* 間違ってる内容もあるかもしれません。コメントください。
	* 注意受けたら随時追記だったり削除だったりしていきます。

---

## 自己紹介

* のびすけ(n0bisuke)
* dotstudio,inc
	* プロトタイピング専門スクール「[プロトアウトスタジオ](https://prtimes.jp/main/html/rd/p/000000005.000020328.html)」
* LINE API Experts
* Microsoft MVP (Node.js)
* デジタルハリウッド大学大学院教員
* 国内最大のIoTコミュニティIoTLT主催

---

## LINE Things

LINEアプリと外部のBluetoothデバイスを連携させることができる仕組みです。
よくある間違いとしてあるやつですが、 **LINE Thingsというデバイスの名前では無い**です。（ただ、[公式の開発ボード](https://github.com/line/line-things-dev-board/)はあります。）

LINE Thingsを使うことで、Wi-FIやLTEなどの通信機能が無いデバイスでも、LINE（アプリを入れたスマホ）がハブとなってインターネットに接続することができます。

区別が分かりにくい上にやれること的に別物感強いと個人的に思ってるのでこの投稿では、 **従来のLINE Thingsを`LINE Things LIFF`、自動通信機能を`LINE Things Messageと呼ぶことにします。`**

> 参考: [ここ1週間 LINE Thingsで5つのデバイス 触ってみたのでまとめてみる #iotlt](https://speakerdeck.com/n0bisuke/koko1zhou-jian-line-thingsde5tufalsedebaisu-hong-tutemitafalsedematometemiru-number-iotlt-number-linethings)

---

### LINE Thingsの特徴が生きそうなユースケースイメージ

基本的にはBLEの利点である、省電力や電波環境などが挙げられそうです。

* Wi-Fiが無い環境
* LTEなどの通信回線が届かない環境
* 電源が十分に確保できない環境

山の中や農業系で利用できる可能性がありますね。

* 定期的に人の出入りがあるケース

LINEアプリをハブにしてデータ通信を行うので、人が全く通らないケースだと厳しいかもしれません。

* データを即座に反映させたいケース

LINE Things LIFFの場合は、BLEで直接ペアリングするため（たぶん）インターネット側にデータをあげないで即座にデータ反映が出来て反応が早いです。

---

## それぞれの立ち位置など

基本的にはLINE Messaging APIの傘下にあるイメージです。
なので利用にあたり、LINE BOTを作るのが前提になります。

> <img src="https://i.gyazo.com/58e2e9b65cef7e9771ca3cc3e1bcaef5.png" width="600px">

* 追記: 一応、公式見解っぽいコメントもらいました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">一応補足しておくと、LIFF (LINE Front-end Framework) は Messaging API にぶら下がる機能ではないです。(Bot, チャネル に結びつくけど) LINE Things Message と書いてある自動通信機能は Messaging API の機能のひとつで LIFF とは関係ないです。 <a href="https://twitter.com/hashtag/linethings?src=hash&amp;ref_src=twsrc%5Etfw">#linethings</a> <a href="https://twitter.com/hashtag/linedc?src=hash&amp;ref_src=twsrc%5Etfw">#linedc</a> <a href="https://t.co/Kp8zXqTdwJ">https://t.co/Kp8zXqTdwJ</a></p>&mdash; Hirotaka Kawata (@hktechno) <a href="https://twitter.com/hktechno/status/1135880122756673536?ref_src=twsrc%5Etfw">2019年6月4日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

---

### LINE Things LIFF

* LINEとデバイスがBLEで接続できる技術。
* APIの立ち位置としては`Messaging API > LIFF > LINE Things LIFF`という階層イメージです。
* WebBluetoothの仕様を参考に作られているので、詳細はWebBluetoothの仕様を確認すると良さそう。
* LIFFアプリ内で`ブラウザのJavaScript`を用いて開発するのが特徴

---

* 基本はBLEのGATTプロファイルで出来ることが出来る
	* ペリフェラルになることはできない（ホストのみ）

> <img src="https://i.gyazo.com/3b6380d0ca0d944b0105e1847ed7bfb2.png" width="400px">

---

### LINE Beacon

* LINE BOTにビーコンとの接続通知をすることが出来る仕組み
* LINE Thingsが出る前からあった
* **LINEアプリを立ち上げてなくても利用可能**
* **簡単な通知に向いている**
* APIの立ち位置としては`Messaging API > LINE Beacon`という階層イメージです。
* イベントとしてはEnterのみが基本なので簡単な入退室管理や店舗のスタンプカードシステムなどに使えそう
* デバイス側での細かい処理は出来ない。その場合はLINE Thingsを使った方が良さそう
* 公式デバイスがある
	* https://beacon.theshop.jp/items/6617930

---

#### LINE Simple Beacon

* LINE Beaconを独自のデバイスに入れ込むことが出来る仕様。
* ラズパイやESP32系、MacやWindowsなどでも実装可能
* 基本はデバイス版のLINE Beaconと変わらず

> 参考: [ラズベリーパイでLINE Beaconが作成可能に！「LINE Simple Beacon」仕様を公開しました](https://engineering.linecorp.com/ja/blog/line-beacon-raspberry-pie-line-simple-beacon-specification/)

---

### LINE Things Message (自動通信機能)

* LINEとデバイスがBLEで接続できる技術。
* **LINEアプリを立ち上げてなくても利用可能**
* APIの立ち位置としては`Messaging API > (LIFF) > LINE Things Message`という階層イメージです。
* LIFFをカッコ書きにしていますが、LIFFの開発は一切行わずに扱うことができるのでカッコ書きにしています。
* LINE Beaconよりも複雑な処理をしたいときに良さそう
* あまり良くないけど、無限連続通知ができる(後述)

---

## リスト化して比較してみる

|  | LINE Things LIFF | LINE Things Message | LINE Beacon(公式デバイス) | LINE Simple Beacon | 
----|---- |---- |---- | ---- 
| フロント開発 | ○ | - | - | - 
| サーバーサイド開発 | - | ○ | ○ | ○
| メッセージ通知(アプリ起動の必要なし) | - | ○ | ○ | ○
| 自由度 | 高 | 中 | 低 | 低 
| 設定難易度 | 高 | 高 | 易 | 中  
| デバイス側実装 | 必要 | 必要 | **不要** | 必要
| コスト | 1500~5000円程度 | 1500~5000円程度 | 5400円 | 1500~5000円程度

---

## LINE Things Messageをもう少し深く

LINE Things LIFFやLINE Beaconはリリースから時間が経っていて情報が割と出てそうなので、LINE Things Messsageに関して深掘りします。

> [LINE Things 自動通信機能がリリースされました & 使い方紹介](https://engineering.linecorp.com/ja/blog/line-things-automatic-communication/)

### 用語など

LINE Things Messageで新しく出てくる概念・言葉としてシナリオセット、シナリオ、トリガー、アクションがあります。

階層構造にするとこんな感じの認識です。

* シナリオセット
	* シナリオ
		* トリガー
		* アクション

---

トリガーとアクションは、何をしたら何を行う。といったinとoutの処理のことです。
トリガーとアクションをひとまとまりにしたものがシナリオ。シナリオを複数まとめたものがシナリオセットです。図にするとこんなイメージ。

> <img src="https://i.gyazo.com/41a8c6769d163f5d6d7fae19bfd9f9b1.png" width="600px">

---

### トリガー

現状だとこの二つのみの模様です。

* IMMEDIATE
* BLE_NOTIFICATION

実際はだいたい`BLE_NOTIFICATION`になるような気がします。

---

### アクション

* SLEEP
* GATT_READ
* GATT_WRITE

データの読み込みだけの場合はアクションは無しでも設定できます。

> この辺はまだそこまで触りきれてないのでもっと追っていきたい。

---

## 注意点

### LINE Thingsをユーザーに有効にさせましょう

* 使うにはこのリンクを一旦踏んで有効にする必要がある模様。

> https://line.me/R/nv/things/deviceLink?route=line-things-starter
> <img src="https://i.gyazo.com/b561da61e0fc80f566b81a3ee952f420.png" width="200px">

* これで一度有効にするとLINEアプリの設定画面にLINE Thingsの項目が追加されます。
* ここへの導線を用意しておかないとBOTの友達追加QRだけでは利用できないので注意

---

### 無限連続通知が出来るのでこれも注意。

仕様変更があるのか分かりませんが、現時点だと **ユーザーに対して無限連続通知が出来ます。**

BLEのNotifyを無限ループで発火させてしまうとめちゃ通知くるので注意しましょう。(注意されました)

最初、アドバタイズパケットをそのまま通知しちゃってるのかと思ってましたが、デバイス側のソースコードの実装問題でした。

> <img src="https://i.gyazo.com/b67570092fd9b5a0f97a029284774b41.png" width="400px" >

> 資料: [さおりからのLINEがヤバイ](https://speakerdeck.com/n0bisuke/saorikarafalselinegayabai-number-iotlt-vol51)

---

## まとめ

* LINE ThingsとLINE Beaconは別物
* LINE Things LIFFとLINE THings Messageも使い勝手的に別物
* LINE ThingsもLINE BeaconもLINE BOTの仲間です。
* LINE THings Messageの構成要素
	* シナリオセット
		* シナリオ
			* トリガー
			* アクション
* 用途に合わせてLINE BeaconとLINE Thingsは使い分けしましょう
	* シンプルな使い方だとLINE Beaconの方が簡単に出来る場合もあります。

---

## 参考

* [2019年2月版 JavaScript/Node.jsでBluetoothを触れるライブラリやAPIをまとめてみた #html5j #iotlt #linethings](https://qiita.com/n0bisuke/items/67044681dec529c08191)