LINE Thingsでオフィスの備品の在庫管理(的ななにか)



去年の11月に公開されたLINE Thingsに興味あったんですが、なかなか触る機会がありませんでした。

夏の終わりにハンズオンに参加したら、LINE ThingsよりM5Stackが面白くなってしまって、まんまと千石電商に通いつめていろんなパーツを買ってしまうはめになり脱線😅

その後我に帰って手持ちのパーツを消化しつつ、LINE Thingsで何が出来るか試行錯誤してるうちに、なんとなくできたガラクタについて、取り留めもなく書きます。
自分の備忘録としてアウトプットさせて下さい☺️





# どういう人に読んでほしいか？

- M5Stackを使ったことがあり、Arduino IDEでスケッチの書き込みなどはできる人
- LINE Botを作った事がある人
- センサーをLINE Thingsと連携してIoTしたい人



# 作ったもの　山本さん向けコーラ在庫管理システム

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/da3d8abd-d78d-0967-f877-5b0dee44a5ef.png" width=80%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/dc539d5a-2b91-655b-b926-51b7defa8a6c.png" width=80%>


[完成動画](https://youtu.be/--LdIONDl4s)


一言で言うと、コーラの在庫が足りなくなると、LINE Things経由でメッセージを飛ばすシステムです。

# 材料


- [M5Stack](https://www.switch-science.com/catalog/3647/)
- [ロードセル SC133 20kg](http://akizukidenshi.com/catalog/g/gP-12034/) 
- [hx711使用 ロードセル用ＡＤコンバータ モジュール基板](http://akizukidenshi.com/catalog/g/gK-12370/)
- ジャンパワイヤー オス-メス 4本
- 無印良品の書類ケース(コーラ500mlが4本入るサイズ)
- 100均のMDF合板
- 100均のスノコ
- ネジ・ワッシャ・ナット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/d7bb9fcf-4f41-9a12-85d9-28c165b9540a.png)

API

- LINE Messaging API
- LINE Things

作業環境

- Mac Book Air 11' (OS : High Sierra)
- VS Code
- Arduino IDE
 
工具

- 穴開け機
- はんだごて、はんだ


# 手順

## 1. はんだ付けした

- ターミナルブロックを基板にはんだ付け
- 基板裏のJ3とJ4をショート

参考）[重さを測る その1 - 20kgが測れるロードセル](https://www.denshi.club/cookbook/sensor/g/1-2.html)





## 2. 穴あけと筐体作成した

### 穴あけ、ねじ止め
書類ケースとMDF合板に、ロードセルを固定する為のネジ穴を開け、しっかり止めます。

この穴あけが、全工程の中で一番大変でした😅
**Iotをなめたらあかんぜよ、なぜなら奴らは物理だからだ。**
採寸に失敗して沢山の穴を開けまくりました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/45f0b352-85d2-6135-633f-42dd44362def.png" width=50%>


書類ケースの底。
右側の二つがロードセルを固定してるネジ。
左側の二つは、MDFの下からロードセルを固定するネジ。短いネジならこの穴はいらなかった。雑(^o^;)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/aa57ca95-99a2-9406-6ca9-dada8c87d141.png" width=50%>

板の底。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/0c8079b3-0928-577e-c2ea-88cd36368ccf.png" width=50%>


##3. ロードセルとM5Stackを接続した

非常にわかりやすいサイトがありましたので、参考にさせていただきました。
参考）[M5Stackで始めるセンサ・インターフェーシング (5) 重量センサとHX711](https://www.denshi.club/cookbook/arduino/m5stack/m5stack-5.html)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/5b4a38e2-d584-898d-9ea5-86f645012130.jpeg" width=50%>





## 4. LINEBotとLINE ThingsのID類の発行


 [「はじめてのLINE Things」という神記事の中の「セットアップの流れ」を進めます。](https://dev.classmethod.jp/tool/first-time-line-things/)

| 項目     |      内容 |   
|:-----------------|:------------------|
| プロバイダー       |          Bot開発用 |  
| チャネル          | オフィス用コーラ残量チェッカー | 
|チャネルの種類|Messaging API|
|LIFFアプリ名|cola-checker|


- 「ボットアプリを作成する」の部分は飛ばす。
- 「トライアルプロダクト情報を作成する」の部分は、
[のびすけさんが作られたツールを使わせていただき、]( https://qiita.com/n0bisuke/items/7f3da133a2363b549e3e#line-things-%E3%82%B7%E3%83%8A%E3%83%AA%E3%82%AA%E3%82%BB%E3%83%83%E3%83%88%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E9%9D%9E%E5%85%AC%E5%BC%8F%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B7%E3%83%8A%E3%83%AA%E3%82%AA%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B)ServiceUUidを発行します。

| 項目     |      内容 |  
|:-----------------|:------------------|
| トライアルプロダクトの名前 |   残機確認 |  

「同意すると、LINEアプリのメニューにLINE Thingsが出てきます。」まで進んだら、先ほど作成したLINE BotのQRコードを開いて友達登録しておきます。
（[こちら](https://developers.line.biz/)で Messaging API ＞プロバイダー＞
チャネル＞QRコードをLINEアプリで読み取りして「追加」）


##5. ここからソフトウェア開発だ！ LINE Botつくるど

LINE Botの詳しい作り方は省略しますー。

もしご興味がありましたら、 
[インプレスR&Dの「スマートスピーカーアプリのお品書き」](https://www.amazon.co.jp/dp/B07XT1B6M5/)
という本にも記述がございますので宜しければどうぞ。

<a href="https://www.amazon.co.jp/dp/B07XT1B6M5/"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/5356a4f3-2282-4db6-7a4e-6f8439d7f52f.png"> </a>


。。どさくさでステマしましたが、この本は買わなくても、
素晴らしいqiitaがいくつもございます！(^-^)

さて今回のサンプルコードはGithubにあげました。

```
https://github.com/sitopp/LINEThings_loadcell_slack

LINEThings_loadcell_slack/
　└ lambda/
　　　└ index.js
　　　└ message_object.js
```

API GatewayでURLを発行し、LINE BotのWebhook先として指定をしておきましょー。


## 6. M5StackにLINE Things対応のコードを書き込む

M5Stackのセットアップや、スケッチの書き込み方法などの基本的な使い方は省略しまーす。


M5Stackに書き込んだコードは[こちら](https://github.com/sitopp/LINEThings_loadcell_slack
)。

```
https://github.com/sitopp/LINEThings_loadcell_slack

LINEThings_loadcell_slack/
　├ M5Stack/
 　　└ linethings_loadcell.ino 
```


「linethings_loadcell.ino」をエディタで開き、
27行目にダミー部分があるので、先ほど発行したServiceUUidに置き換えてください。

```
#define USER_SERVICE_UUID "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" //書き換える
```

スケッチを書き込みします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/e22a5f71-326d-2751-2823-e9ab10659e41.png" width=50%>


## 7.動作確認！

LINEアプリのメニュー＞LINE Thingsを開くと、
「連携可能なデバイス」の中に、「トライアルプロダクトの名前」で指定した「残機確認」
が入っているので、連携。

<img width="50%" alt="IMG_5817.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/0c1e670d-8370-ce41-98af-39c9a2dbf20e.png">

コーラを一本づつ外していくと、残りが2本になったところで、LINEにメッセージがきます。
<img width="50%" alt="IMG_5814.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/7160294d-f156-0bb0-782f-b2bbb2ff43d1.png">

「位置情報を送る」をタップすると、近くのランドマークが出てくるので、この中から一つ選んでダブルタップ。
<img width="50%" alt="IMG_5813.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/8fdea561-66ab-3530-d00d-20a04739f205.png">

この後、自分のLINEには「ご協力ありがとうございました」というメッセージが届き、山本さんにはSlackで地図付きのメッセージが送られる、という仕組みです。

・・実はまだSlackへのメッセージ送信がうまくいかなくて、Githubにあげたコードは時間ができたら見直ししますー(^^;)




# 感想、気づき

### LINE Thingsの自動通信機能は、1個のLINEアカウントとしか接続できない？


ずっと試験機一台と自分のアカウント一個だけでテストしてたので、気付かなかったんですが、試してみたら、2個目のアカウントがペアリングができませんでした。

- 1個目：Pixel 4 　OK
- 2個目：iPhone 6　NG

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/fa1e15fd-e243-3f11-fd9a-dd8831fbefe1.jpeg" width=50%">

Pixel4の電池が切れてる間にiPhone6のペアリングを試したら**出来た**のですが、今度はPixel4の方にメッセージが飛んで来なくなってしまいました。うーん。。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/c46326e7-2296-60e5-5285-61b90b5b5f97.png" width=50%">

LINE Thingsの自動通信を使う場合だけこうなのか、LIFFから制御する場合も一対一なのか。
ご存知の方がいたら教えてください m(_ _)m

### ロードセルの調整がしみじみ辛かった

最初はロードセル一個でやろうとしたのですが、コーラのペットボトルが思いのほか重く、苦肉の策でロードセル2個で支える事にしました。
しかしM5Stackに繋いでLINE Things連携してるのは片方だけです。

。。。ですが御察しの通り、「てこの原理」で重さの計算が複雑になってしまいました。
在庫が0になったらアラート、というのなら問題ないのですが、人間の心理として、残機が1個あるうちに気づきたいじゃないですか。しかしうまく「1個だけ」という状態が計算できず断念。ここら辺は改良の余地ありということで。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/d1231191-dc91-9fe0-9095-544f316bd063.png" width=50%>


### がおまるさんへの感謝

今年の9月に行われた、LINE API Exportのがおまるさんのハンズオン講座「M5StickCとLINE ThingsでAmazon Connectで電話をかける」で配布されたサンプルを参考にさせていただきました。

出典へのリンクを書こうとして探したのですが、connnpassのイベント情報が消えてて辿れず。。　
この場を借りてお礼申し上げます。ありがとうございました！(^o^)


# LINE Things(自動通信)の使い所について考える。

## 特徴

今のところわかっている特徴を挙げます。

(1)

・同時に接続できるのは一人だけ
・ペアリング済みであれば、BLEの圏内に入ると自動接続する
→ 一つのLINE Thingsデバイスにペアリングした複数人が
　同じBLE電波圏内にいると一番先に繋がった人しか使えない

(2)

・ガジェット好きの人ならまだしも、一般の人にはペアリングの手順が結構面倒
→ ゆえに、イベントで一回しか使わないものは向いてない。
　繰り返し使うものなら、ペアリングの手間も報われる(^o^)

(3) 

・LINE Thingsガジェット一台に一つづつServiceUUidを発行する必要あり。
発行したServiceUUidは、LINE Thingsガジェットのプログラム中で宣言する必要あり。
たくさん作る場合、けっこう面倒かも。




##知りたい事

・「ペアリング済みのLINE アプリと接続できた」というイベントは取れるか？
・上と逆で、圏外になったというイベントは取れるか？


##LINE Thingsが輝く時

私は、LINE Thingsは、家電操作リモコンとして使うのが理想だと思います。
LINEの入ったスマホだけ持って家をでて、鍵はLINEで開けれたら最高ですよね。また、私が家にいる時だけ、ペアリングした家電が利用可能になるような仕組みも。

(1)デバイスとLINEとの間が(インターネット経由ではなく)直接繋がるので、遅延が少ない。
(2)その場所にいる人にだけ操作を許容したい。セキュア対策とか時間課金のファシリティに魅力

### NordicもWeChatミニアプリと連携する開発ツールを出してる

話は逸れますが、今年5月に深圳のBluetooth Asiaを見にいった時、NordicというBluetoothのチップメーカーが開発ツールを展示しており、WeChatのミニアプリから家電のスイッチのオンオフをするというデモをやっていました。エンジニアのお兄ちゃんが、iPhone6初めてだから動くかどうかわからんよ〜と言いながら、一発で動いたので感動してました。

それが真ん中の写真、ミニアプリのスクショが右。
左のポスターは「何の開発用に使うの？」を表したものです。今現在、大半の家電のリモコンは赤外線リモコンですが、それをBluetoothリモコンで操作するように切り替えようぜ！とあおり、壮大なチップの需要を喚起しようと頑張ってました（というふうに解釈しました。）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/248ab04c-a2c2-40ba-4c96-9aa51f0c3e2d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/b61d3a86-3451-95d7-3db4-99e43253a696.png)


NordicはBluetoothのチップメーカーですから、こうやって展示会に出て家電にチップを組み込んでもらう普及活動をしてるわけですが、 一方、我らがLINEはチップを作ってるわけではないので、NordicかWechat(騰訊)かどちらの立ち位置かといえば騰訊の方です。


チップ　＝＝＝＝＝＝＝＝＝＝　家電　＝＝＝＝＝＝＝＝＝＝　ミニアプリ
（Nordic、Dialog、etc..)　　　　　　　　　　　　　（LINE, WeChat、etc...）

そしてNordicと同じく、家電メーカーに働きかけて、物理を作ってもらうのが普及の王道なんでしょうね。

残念ながら私は家電メーカーの人間じゃないので、LINE Thingsで何かを作るとき、いつも多少の場違い感を感じます。LINE Thingsに対応したスマートデバイスを開発してくれる国内のメーカーさんが現れてくれることを願ってやみません。

そういった人たちの目に止まるような、ぶっ飛んだ案が浮かばないかな。そしたらダッシュでプロトタイプ作りますんで、もちろんM5Stackで。


以上です！
みなさま、来年も良いお年を！(^o^)