LTE-M Button管理にはQRコード

# はじめに
[SORACOM LTE-M Button powered by AWS Advent Calendar 2018 - Qiita](https://qiita.com/advent-calendar/2018/soracom)
の５日目です。

# あのボタンとは
[SORACOM LTE-M Button powered by AWS - SORACOM](https://soracom.jp/products/gadgets/aws_button/)

# さっき開けて電池をいれました。
**オイコラ、( ﾟДﾟ)ﾄﾞﾙｧ!!**

![IMG_6953_2.png](https://qiita-image-store.s3.amazonaws.com/0/10647/e3afd4fc-0c11-b9da-1626-575ce82e65b2.png)

# 登録から初期設定は
2018/12/02のアドカレを参考にしました。

[SORACOM LTE-M Button powered by AWS 「ご購入、利用開始方法」のチュートリアル #SORACOM – サーバーワークスエンジニアブログ](http://blog.serverworks.co.jp/tech/2018/12/02/soracom_lte-m_button_advent_calendar/)

# ボタンで何をするか？

## そもそも何ができるの？

[AWS IoT エンタープライズボタン ユーザーガイド - AWS IoT 1-Click](https://docs.aws.amazon.com/ja_jp/iot-1-click/latest/developerguide/button-guide.html)

- シングルクリック
- ダブルクリック
- 長押し

の３種類のみです。

３種類でどうするか？
長押しをキャンセルとすると２つしかありません。
ここは悩みどころですね。

# さて今回何をやるのか
[国内初！セルラー通信内蔵「AWS IoT 1-Click」対応ボタン「SORACOM LTE-M Button powered by AWS」1年間1,500回分の通信込みで3,980円、10月17日より発売開始](https://soracom.jp/press/2018101701/)
こちらに、

> 例：オフィスビル内数箇所に設置されたゴミ箱の回収時期を発見者がボタンを1回押すことで通知、作業員の到着を作業者が2回押すことで通知というシステム

とありますので、必要なものは

どのボタンが
どう押されたか

です。シンプルですが、難しいところでもあります。

![scVkCarO1Nm4NmJrMnkjfQw.png](https://qiita-image-store.s3.amazonaws.com/0/10647/0462609d-1eec-1d5f-a118-f893093f9b26.png)

[JAWS FESTA 2018 OSAKA \| 世界一早い（？）「SORACOM LTE-M Button powered by AWS」…](https://www.slideshare.net/SORACOM/jaws-festa-2018-osaka-soracom-ltem-button-powered-by-aws/25)

であったように、カオスになります。
そこで今回は、デバイスごとにQRを生成したいと思います。

# 準備
QRを生成する環境は、Macでやります。

```shell
[f_prg@Documents] $ brew install qrencode
```

# デバイス情報を取得する
AWS CLIで取得します。

```
[f_prg@Documents] $ aws --region=us-east-1 iot1click-devices list-devices

Could not connect to the endpoint URL: "https://devices.iot1click.us-east-1.amazonaws.com/devices"
```

ほうほう。。。

[AWS のリージョンとエンドポイント - アマゾン ウェブ サービス](https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html)

|リージョン名|リージョン|エンドポイント|プロトコル|
|:---:|:---:|:---:|:---:|
|米国西部 (オレゴン)|us-west-2|devices.iot1click.us-west-2.amazonaws.com|HTTPS|

```shell
[f_prg@Documents] $ aws --region=us-west-2 iot1click-devices list-devices
{
    "Devices": [
        {
            "Attributes": {
                "projectName": "anodebug",
                "projectRegion": "us-east-1",
                "placementName": "anodebug",
                "deviceTemplateName": "anobutton"
            },
            "Type": "button",
            "Enabled": true,
            "DeviceId": "SSSSSSSSSSSSS",
            "RemainingLife": 98.5
        },
        {
            "Attributes": {
                "projectName": "soracom-lte-m-button",
                "projectRegion": "us-east-1",
                "placementName": "soracom-lte-m-button",
                "deviceTemplateName": "soracom-lte-m-button"
            },
            "Type": "button",
            "Enabled": true,
            "DeviceId": "QRDEVICEID",
            "RemainingLife": 99.86666666666667
        }
    ]
}
[f_prg@Documents] $ aws --region=us-west-2 iot1click-devices describe-device --device-id QRDEVICEID
{
    "DeviceDescription": {
        "Attributes": {
            "projectName": "soracom-lte-m-button",
            "projectRegion": "us-east-1",
            "placementName": "soracom-lte-m-button",
            "deviceTemplateName": "soracom-lte-m-button"
        },
        "Type": "button",
        "Enabled": true,
        "DeviceId": "QRDEVICEID",
        "RemainingLife": 99.86666666666667
    }
}
```

AWS CLIでフィルタできないので、jqで絞り込びます。

上記で例に挙げた
`オフィスビル内数箇所に設置されたゴミ箱の回収時期` に対して
デバイスのプロジェクト名`soracom-lte-m-button` が 
`ボタンで何をするのか` という想定です。

```shell
[f_prg@Documents] $ aws --region=us-west-2 iot1click-devices describe-device --device-id QRDEVICEID |jq -r '.|if .DeviceDescription.Attributes.projectName == "soracom-lte-m-button" then .DeviceDescription.DeviceId else empty end'
"QRDEVICEID"
```

デバイスIDから、QRを生成します。（管理上、デバイスIDのままでいいかどうかは割愛します。）

```shell
qrencode -o QRDEVICEID.png -t PNG QRDEVICEID
```

![QRDEVICEID.png](https://qiita-image-store.s3.amazonaws.com/0/10647/7dc4beb7-6bfa-b4dc-1755-d7c49ba5a5f3.png)

となります。

# 最後に
今回はデバイスを管理する際に、必要そうなことを書いてみました。
QRと文字を一緒にしたり、
テプラとか連結してみたいけど、どっかに方法はあるはずかと。

ではでは。