自作だっしゅボタンを SORACOM LTE-M Button powered by AWS に置き換えた事でわかったこと


[SORACOM LTE-M Button powered by AWS](https://soracom.jp/products/gadgets/aws_button/) (以下 Button) のアドベントカレンダー 12/20 担当のソラコム松下(Max) です。

過去に [Wio LTE 君と SORACOM Beam で「だっしゅぼたん」を作る](/ma2shita/items/3846b9ec9c27babaab86) というのを紹介しましたが、これを Button で置き換えました。

[![YouTube へ飛びます](http://img.youtube.com/vi/z7pljFujWcI/0.jpg)](http://www.youtube.com/watch?v=z7pljFujWcI)

実装だけでなく利用シーンや運用も変わってきたので、そちらを過去と今で対比しながら紹介していきます。

## 実装

自作だっしゅボタンは以下の通りでした。

![自作ダッシュボタン構成 / Handmade Dash Button](https://docs.google.com/drawings/d/e/2PACX-1vRV9OFmtwhTZxvaP2FVZLMu9F1mTx1GKH3jnjfRWYd8w1Ak-0VTZgVGQFRTbLqAddrq8a18_nXr59Rg/pub?w=892&h=583)

Button での実装は以下の通りです。

![Button 構成 / LTE-M Button + MicroBot Push](https://docs.google.com/drawings/d/e/2PACX-1vQf4EUfdR2ckjFaL1FbPvFAGkmSa7lBRULszDqc2EcO3cAsFwPyKFy_CgMLfJHER8Ehs1N-cXNTzOR5/pub?w=892&h=583)

### Lambda 関数

Lambda 関数は [j3tm0t0/1-click で公開されている IFTTT 連携 Lambda 関数](https://github.com/j3tm0t0/1-click/tree/master/functions/ifttt) を利用させてもらいました。（感謝）

[シングルクリックに割り当てたら、ちょっとしたトラブル](#a)がありました。そのため、ダブルクリックの時に IFTTT の Webhooks が動いてくれるようにするため、ちょっとした小技を入れています。

IFTTT の Webhooks 設定では(受け付けの際の)イベント名を `GARAGEOPEN_DOUBLE` としています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22754/1a5e1030-4f06-00b4-7d9c-c4ce5006fec0.png)

一方 AWS IoT 1-Click のプレイスメント属性では event に `GARAGEOPEN_$clickType` と設定しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22754/89dfea0b-a75c-da28-46e7-e73ddec21cdb.png)

これは [公開されている Lambda 関数](https://github.com/j3tm0t0/1-click/tree/master/functions/ifttt) では、プレイスメント属性に入っている `$clickType` を実際の clickType に置き換えるといった実装がされています。
例えばシングルクリックなら `GARAGEOPEN_SINGLE` という IFTTT の Webhooks イベントを起動できるわけです。これで Lambda 関数を書き換えることなく、3種類の Webhooks を起動できるようになります。

## 置き換えたことによる学び

同じ結果を生むものが２つあるということで、比較ができるようになりました。
そこで得られたことを４つ紹介します。

### 仲介サービスの存在による疎結合化

IFTTT を挟むことでアプトプット側の Raspberry Pi 以降の構成を変更することがありませんでした。
仲介サービスを挟むとインプットとアウトプットを疎結合にできるため、変更に強くなるという事が得られたことです。

### Button は電池を心配しなくてもいいが、応答性能は慎重に

電池の心配をしなくても良くなったのは圧倒的な UX 向上でした。
基本的に車内で利用する事が想定されてるので、電池を持たない自作だっしゅボタンでも帰宅の際に使う時は車から電力供給されているため、双方の UX は全く同じです。

ただ Button は電池内臓となったことにより、帰宅時だけでなく玄関に置いておき、外出時にも指示を出せるようになったことで利用シーンが増えたことが便利になりました。

その一方で、自作だっしゅボタンは通電時に LTE 接続を行う実装にしていたため、ボタン押下から MicroBot Push 動作までの時間が 2秒以内くらいだったことに対し、Button は 10秒程度かかります。
これは Button は省電力を実現するために普段は LTE-M モデムを OFF にしており、ボタン押下をトリガーにモデム ON して電波サーチしてからデータ送信を行うためです。

私の場合は「前よりチョット早めに押す」という運用でクリアできる要件なので問題ありませんでしたが、ユースケースによっては気になるかもしれませんね。

### 押し心地は「UX」そのもの

自作だっしゅボタンはボタンの押し心地が絶妙に良かったです。

![IMG_0181.JPG](https://qiita-image-store.s3.amazonaws.com/0/22754/0b460d2d-77a4-7a2f-7fdc-6113a53e6364.jpeg)

これは「押した！」という達成感が得られます。
Button は「カチっ」とクリック感はありますので、押したか否かはわかりますが、、、なんというか、赤いボタンと比較すると (´・ω・`) といった感じは否めません。これはしょうがない。

やはり「押した！」という実感は、例えば ACK が返ってくるとかそういうのとは違う次元で必要な UX なのだという事を再認識したわけです。

<h3 id="a">取り返しがつきにくい動作にシングルクリックは割り当てないほうが良いかも</a>

動画でもお分かりいただける通り、 MicroBot Push は開ける側にしか割り当てていません。
シャッターを閉じる際の安全確認ができないので、遠隔で閉められないようにしています。※

![image.png](https://qiita-image-store.s3.amazonaws.com/0/22754/f70c5f72-bde3-541b-f7ca-031af4ec2aad.png)

Button に置き換えて数日たったある日、モノのはずみで Button を押下してしまいました。開いちゃうんですよね。。。自作だっしゅボタンの時はボタンに適度な硬さがあったためこういった事が無かったので、完全に盲点でした。

取り返しがつきにくい動作にはダブルクリックや長押しを割り当てるのが良いかと思います。

※実はこちらで指摘されて気が付いた。公開することの良さが！

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">やばい、遠隔でガレージのシャッターを開けてしまった。そう、開ける方にしか仕掛けを入れてないので閉められないのだwwww<br>どうしよう。。。</p>&mdash; Kohei(max)MATSUSHITA (@ma2shita) <a href="https://twitter.com/ma2shita/status/1047715284532879362?ref_src=twsrc%5Etfw">2018年10月4日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## まとめ

同等の動作をするものを別々のアプローチで作ってみると、様々な気付きが得られるということがわかりました。
だからこそ「作らずに創る」を実践することで、より完成形に近づけていけるんじゃないかなーというキレイなまとめでアドベントカレンダー、一件落着。

EoT