IoTの電源監視にはSORACOM LTE-M Button Plusが最適すぎるので超お勧めする

どんな動作になるか、まずtwitterの動画を見ていただければ。
https://twitter.com/1st_ship/status/1228690959686238213

# はじめに

IoTシステムを構築、運用しているとトラブルが起こることはままあります。サーバー側の問題であれば、比較的簡単に対処できますが、現地に置いてあるデバイスが原因である場合厄介です。遠隔で対処できることもありますが、通信ができていない場合対応できません。

その場合原因の切り分けとしてまず知りたいのは、**「電源が入っているのか」**ではないでしょうか？電源が入っていなければどうすることもできないので、現地で電源復旧してもらう、という判断が速やかにできます。（電源が入っているのに通信できていない、という場合回線やネットワーク障害が考えられますが、こちらは時間経過やデバイスの自己復旧機能でなんとかなるケースがあります）

また、電源の異常が発生していると、センサーデータ収集含む全ての機能が失われてしまうため、早い復旧が望まれます。（ネットワーク系の障害の場合、データ収集自体はされていて、ネットワーク復旧次第回復することが多い）現地の電源監視はIoTの普遍的な課題である、と考えられます。

ところがこの電源監視というのは結構難しいんですよね。なにせ電源がない。

- 自己監視機能が動作しないから通知できない
- ネットワーク機器が電源異常で通信できない
- 監視サーバーが構内にある場合、通知が受け取れない

などという様々なケースが考えられます。電源異常というのは色々なところに影響を及ぼしがちであるため、依存しているコンポーネントのうち全て正常、というのが期待しにくい状況なんですよね。

そうなるとクラウドサービスなど外部からデバイスに対して監視をかけて、応答があるか見る、という方法を取らざるを得ないのですが、この場合は外部からデバイスに何らかの形で到達できる仕組みを用意しなければなりません。外部、特にインターネットからデバイスに通信するのはそんなに簡単ではなく、システム構築、運用の負担はかなり上がることでしょう。

ああ、どこかに、

- 独立した電源で動作して
- 独立したネットワークを持っていて
- 電源の有無を検知して通知することができて
- システム構築が簡単かつ柔軟で
- 手頃な価格で手軽に手に入って
- ランニングコストが安い

デバイスはないものかなあ。いやいや、そんなうまい話あるわけが、、、ってあるじゃん！

![products_soracom-lte-button-plus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/af5976ba-9db1-f8e0-8b75-58c0aedf9701.png)

ということで今回はこれ、[SORACOM LTE-M Button Plus](https://soracom.jp/products/gadgets/button_plus/)、通称「ひげボタン」を使った電源監視について書きます。

# SORACOM LTE-M Button Plusとは

まずソラコム公式の紹介はこちら
https://soracom.jp/products/gadgets/button_plus/

> SORACOM LTE-M Button Plus はIoT SIM(plan-KM1)内蔵のボタンおよび接点入力を備えたデバイスです。
plan-KM1による LTE-M 通信を使用し、乾電池(交換可能)で駆動します。
SORACOM Beam,SORACOM Funnel,SORACOM Harvestを使用することができます。
Beam、Funnel、Harvestを使用し、自社サーバーやクラウドサービスなど任意の接続先にデータを送信することができます。また、自社ロゴなどをラベリングし、自社ブランドとして提供することができます。
価格 7,380円（税別・送料別)

| 状態 | 準備完了 | 使用中 / 休止中(*) | 利用開始待ち | 解約済み |
|:--|:--|:--|:--|:--|
| 基本料金 | 0 円 | 100 円 / 月(アクティブSIM(*) 100枚まで)<br>90 円 / 月(アクティブSIM(*) 101枚以上) | 0 円 | 0 円 |


この説明から以下のことが分かります。

- 独立した電源（乾電池）で動作する
- 独立したネットワーク（LTE-M回線接続、SIM内蔵）を持っている
- 電源の有無を検知（接点入力に変換すれば検知できる）して通知することができる
- システム構築が簡単かつ柔軟（SORACOMサービスで簡単に各種クラウドやオンプレに接続可能）
- 手頃な価格(7,380円が手頃かどうかは意見分かれると思いますが、モデムやSIMまでオールインワンと考えると十分手頃だと考えます)でSORACOMコンソールから個人でも簡単に注文できる
- 基本料金は月100円、だが使い方を工夫すると**0円**

とても重要なことなのですが、これを使って電源監視システムを構築した場合の最低ランニングコストは**「月0円」**です。マジです。説明すると、SORACOMの一部のSIMには、利用開始待ち、という状態があります。これは、回線を使わない間は基本料金を0円にできますよ、その代わり、その利用開始待ち状態から1回でも通信すると再開手数料200円かかって使用中(月100円)になりますよ、というものです。

従って、常時通電されていることがわかっている環境で、停電が一度も発生しなければ、ランニングコストは月0円に抑えられます。0円の状態が1年続くと更新に200円かかるため、年200円がより正確ですが、それでも格安、というか、これ何？という感じがします。停電が３ヶ月に1回以上ある場合は普通に月100円払った方がよいですが、それでも携帯回線を使ったシステムのランニングコストとしては安いと言えるでしょう。

どうでしょうか。他の全てが動作しないかも知れない、という状態で、独力でインターネットに到達できる、というのが頼もしく、「電源監視に最適」という感じが伝わってこないでしょうか。（もちろんLTE-M回線が届く場所、という限定はあるのですが）

では、具体的にどうするかを書いていきましょう。

# 購入

以下のように、ソラコムコンソールから購入することができます。

![スクリーンショット 2020-02-16 20.26.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/4a888693-2985-01f2-488b-7781a67e888a.png)

![スクリーンショット 2020-02-16 20.27.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/49c8856a-d370-786f-4cd9-294b80d7c0fb.png)

![スクリーンショット 2020-02-16 20.29.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/28dba6d8-9ac1-fcd3-3bfa-aac573f31057.png)

この後次へ進むをクリックし、お届け先を選んでから、注文を確定します。早ければ翌日には届くでしょう。

# 接点入力の準備

SORACOM LTE-M Button Plusは接点入力をすることにより、ボタンを押したのと同じ動作をさせることができます。接点入力というのは、電気的につながっているかどうかを判定する入力形式です。このボタンの場合、具体的には以下のような特性です。

|項目|内容|
|:--|:--|
|接点入力条件|Open:端子間抵抗1MΩ以上<br>Close:端子間抵抗200Ω以下|
|信号検知|Open→Closeの片エッジ|
|極性|無し|

電源監視の場合、停電の時に信号検知させたいので、
「電源電圧がある時はOpen」「電源が電圧がない時はClose」
となるようにする必要があります。

日本国内では電源は交流100Vが多いですが、交流をそのまま使うと面倒なので、ACアダプタを使ってDCに変換してから検知するようにします。使ってないUSB 5V出力のACアダプタは家に10個くらいは転がってるものなので、とりあえずそれを使えば良いです。

5Vを接点に変えるのは一番簡単に思いつくのはメカニカルリレーです。フォトモスリレーやアナログスイッチ、MOS-FETなどでもいけそうな感じはしますが、まずは一番手堅い方法で実現します。

メカニカルリレーについては、こちらの記事を引用します。
https://ac-blog.panasonic.co.jp/nyumon_relay_mechanicalrelays

電流が流れると内部のコイルが電磁石になり、中の接点を引き寄せてくっつくとつながる、電流流れないとバネでもとの位置に戻って離れる、というような仕組みです。動作が分かりやすく、ON抵抗や入力容量などの性能も良い一方、駆動するのに必要な電流が大きめなのと、機械的な動作であるため動作回数に限界があるのが難点です。

接点は以下の区分があります。こちらの記事を引用します。
https://www.fa.omron.co.jp/selector/guide/02/

- a接点：通常はOFFで電流が流れるとON

![img_04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/59972eac-de8b-2f54-2238-65a14290d55c.gif)

- b接点：通常はONで電流が流れるとOFF
![img_05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/1fd5b87b-b850-9f53-a2cc-a371b90709aa.gif)


- c接点：接点が２つありどちらかがON、どちらかがOFF
![img_06.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/285e0f36-a13b-c8c4-340c-6faf5e05d20f.gif)

今回は電流が流れるとOFF、電流がなければONなので、b接点ですね。

5Vでb接点のリレーを適当に探すと、Amazonでこれが見つかりました。(なんでAmazonで電子部品が買えるんだ。。)
[OMRON パワーリレー 耐フラックス形 1a1b接点 DC5V 【G6C-2117P-US-DC5V】](https://www.amazon.co.jp/OMRON-%E3%83%91%E3%83%AF%E3%83%BC%E3%83%AA%E3%83%AC%E3%83%BC-%E8%80%90%E3%83%95%E3%83%A9%E3%83%83%E3%82%AF%E3%82%B9%E5%BD%A2-1a1b%E6%8E%A5%E7%82%B9-%E3%80%90G6C-2117P-US-DC5V%E3%80%91/dp/B016W85HTW)

1a1b接点というのは、１つのパッケージの中にa接点とb接点が1つずつ入っているものなので、これで問題なさそうです。とりあえず購入しました。

![relay.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/82afd45a-ef73-ac02-a17e-18ab22786ead.jpeg)

めっちゃコイル見えてますね。これはコイル自体が抵抗になっているので、そのまま5V入れればいいものです。フォトモスリレーなどでは制限抵抗を入れないといけないものもあるので注意しましょう。

購入してからデータシート読んで、これは負荷電流(今回の場合はボタンに流れる電流)が大きいところに使うパワーリレーで、負荷電流が小さい今回のような用途ではシグナルリレーを使った方がよい、ということがわかりました。多分これとかが正解だったのかな。
https://www.fa.omron.co.jp/product/item/5850/

今回は購入しちゃったものでとりあえず進めます。配線は以下のようになっています。
![E00000945478.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/f23932a8-f69f-1e12-c1e4-fdfb40b32d32.jpeg)

白い印を左に、BOTTOM VIEWなので裏返して見ます。(BOTTOM VIEWたまに間違えるので注意しましょう)左下(8番ピン)がUSBケーブルの5V、左上(1番ピン)がUSBケーブルのGND、電流が流れていない時つながっているのは5番ピンと6番ピンなのでここにボタンからのケーブルをつなぐとよいようです。

USBケーブルはそのへんに転がっているUSBケーブルのB側を切って、赤(VBUS)と黒(GND)を剥いて、リレーのピンに半田付けして、熱収縮チューブをかぶせました。ボタン側につけるケーブルはワニ口クリップつきの線を半田付けして、同じく熱収縮チューブをかぶせました。

![button.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/f0a86d24-c82e-b1ce-2695-ceead9c21798.jpeg)

これでUSBケーブルをACアダプタにつなげ、ワニ口をボタンの線につなげばOKです。

# SORACOM側の準備

ボタン入力を受け付けるためには以下が必要です。

- グループ作成
- SIMの所属グループ変更
- バイナリパーサー設定
- アプリケーションサービス設定(今回はHarvest)

ささっとやっちゃいましょう。

![スクリーンショット 2020-02-16 22.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/83332d88-e08c-a0f9-d455-418f7402d713.png)

![スクリーンショット 2020-02-16 22.58.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/f8be755e-bef9-35a4-edb4-f54f271cc25e.png)

![スクリーンショット 2020-02-16 22.59.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/4d31761f-f2bb-0511-810c-6672a34cc29c.png)

![スクリーンショット 2020-02-16 23.00.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/3ca4ce14-f813-9515-206d-2d1e8f6cba87.png)

![スクリーンショット 2020-02-16 23.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/85d8ba4e-7da0-4e48-aff9-e713f147f2eb.png)

![スクリーンショット 2020-02-16 23.03.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/8a677409-70b6-cf6b-2ab0-edd8f9a811a1.png)

![スクリーンショット 2020-02-16 23.04.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/4a4dfbb0-a9b9-cbed-4c5f-29ad98e721cf.png)

![スクリーンショット 2020-02-16 23.06.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/0d97c326-7125-cafb-5ae2-f44fd9ddc87b.png)

SORACOM HarvestはSORACOMに届いたデータをそのまま保存し、可視化できるサービスです。BeamやFunnel、Funkといったサービスの場合、連携するクラウドやオンプレサーバーの設定が必要ですが、Harvestであれば設定をONにするだけでよいです。今回のように、デバイスからの送信をとりあえず確認する際には最適ですね。

これでSORACOM側の準備も終了です。さっそくボタンを動作させてみましょう。

# 動作確認

最初は電源が入っている状態
![drop1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/c1e3cfd1-56c7-155d-94e9-1ee0441a52dc.jpeg)

電源が落とされると
![drop2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/964718ab-542a-dd60-72c8-9f610db5935f.jpeg)

オレンジの点滅(回線接続)を始めて
![drop3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/1a6662dd-92ba-52da-1699-c07e6553fe8a.jpeg)

緑に点灯する(送信成功)
![drop4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/e2077846-d47f-8742-ab11-caa8ec00c7cc.jpeg)

[twitterに動画が置いてある](https://twitter.com/1st_ship/status/1228690959686238213)ので、そちらの方が動作は分かりやすいですね。

ボタンイベントがSORACOM Harvestに届いているかを確認しましょう。

![スクリーンショット 2020-02-16 23.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/62fb6612-9382-8ae1-cf2d-1ab9047162f7.png)

![スクリーンショット 2020-02-16 23.37.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/09974a4c-b24f-55e1-39f0-3a6f0647adce.png)

clickTypeNameがLONG(長押し)のボタンイベントが届いていることが確認できましたね。あとは、オンプレのサーバーに知らせたければSORACOM Beamを、AWSなどのクラウドに知らせたければSORACOM FunnelやSORACOM Funkを使うことで、ボタンイベントに対する処理を柔軟に設定することができます。ここもSORACOMのボタンの魅力ですね。

# ランニングコスト0円説の検証

先に書いたように、ステータスを「利用開始待ち」にするとランニングコストが0円になります。

![スクリーンショット 2020-02-16 23.46.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/9708cd59-9604-c36a-87ed-e9f2017f3e31.png)

![スクリーンショット 2020-02-16 23.47.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/49dda4bb-9a48-582d-ba6a-59130a1a36d7.png)

![スクリーンショット 2020-02-16 23.48.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/f6b0c3bb-e31e-8e28-75b7-3afc703feb68.png)

「利用開始待ち」になりましたね。初めて見ました。ただ、この状態でボタンが動作しなければ意味が無いですね。やってみましょう。

![drop5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/8d4c4582-3825-5f2a-fc5a-0ca0be57f020.jpeg)

先ほどと同じく、ちゃんと緑に光りました。

![スクリーンショット 2020-02-16 23.55.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/aaf795ed-5d82-6112-a541-630b6cd78188.png)

SORACOM Harvestのデータはちゃんと増えています。

![スクリーンショット 2020-02-16 23.56.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542185/518ba005-a260-fc59-4f54-350b26cb8c9c.png)

そして状態は「使用中」に戻りました。これで「ランニングコスト0円動かしていても、いざという時にはちゃんと動作する」ことが確認できましたね。（僕の200円を犠牲にすることによって）ちなみにSORACOM Harvestは使っていると5円/日の費用が発生するので、0円にするためには他のサービスを使いましょう。SORACOM Funk + AWS Lambdaがお勧めです。AWS Lambdaも待機しているだけなら費用が発生しないサービスなのです。

しかしあれですね。思ったよりヤバいものを見つけてしまったかも知れない。これ電源監視に限らず、「発生頻度は低いけどいざという時には知らせて欲しい」系の監視は、SORACOMのLTE-M回線を使えばランニングコスト0円でできちゃうってことですよね。そんなのいっぱいありそうな気がする。

# その他良いところ

工場とか外部へのネットワークがまったく存在しないところでも（電波が届けば）使えるので、IoT関係なく自動稼働設備の電源監視に使えそうですね。というかボタン自体がIoTですね。

また、ボタンだと送っているのは「ボタンイベントが発生したよ」ということだけなので、漏れる機密情報はないと言っても良さそうです。工場とかセキュリティ厳しいところだと、インターネットにつながったPCとかタブレットとか、IoT用のアプライアンスとか置かせてくれないかも知れませんが、ボタンならそういうところにも入れられるかも知れません。

# 改善点

とりあえず現時点で一番の改善点は、電源が入っていない限りボタンがCloseになりっぱなしになる、ということですね。以下のような注意書きがあります。

> ボタン押し、もしくは Close を続けても、連続送信は行わず1回の操作として扱い、次の入力操作も受け付けません。再度送信をしたい場合は一度 Open にする必要があります。また、Close 状態を維持し続けた場合、その間の消費電力が増加します。通常時は Open になるようにシステム設計をしてください。

Closeのままだと消費電力が増加するのは良くないですね。わざわざ書いているくらいだからかなり変化するのでしょう。単４乾電池２本だとすぐ無くなってしまうかもしれない。回路を工夫して、Closeになってから一定時間経ったら自動的にOpenになる回路にしておいた方がよいかも。

リレー側の電流も、通常は電源あるとは言えメカニカルリレーだと結構消費しています。今回のものだと200mW程度。使えるならフォトモスリレーなど消費電流小さめのICを使った方がいいかもしれないです。

また、送信失敗した時のフォローが欲しいところですね。ボタン押すとたまに接続できないのか、送信失敗(赤く光る)のを見ますが、人が見ていればもう一回押すのは簡単でも、接点入力で自動的に送信される場合、失敗をリトライできない。これはボタンのファームウェアの問題かも知れませんが。回路でやるとしたら、別に電池つけて、停電してたら一定期間ごとにリレーを駆動する、という感じになりますかね。あまり良いやり方ではないので、何かリトライさせる良い回路があればよいのですが。

あとはボタンの電池残量ですかね。独立電源なのは良いのですが、いざというときに電池がなくて送信できず、となるのは困ります。ボタンの電池残量が一定値以下になったら、自動的にお知らせする機能とかできないだろうか。

ボタンのハードウェア、ファームウェアに関係する改善点になってしまうのですが、ここは変更しづらいところですよね。周辺回路とクラウドでうまいことやっていきたいところです。

# おわりに

SORACOM LTE-M Button PlusはIoTの電源監視に最適すぎるステキなデバイスです。皆さんのIoTのお供にどうでしょうか。デバイスが停電してるのに気付かないと結構困りますよ。

あと僕が適当に作ったハードウェア(というかリレーから線が生えてる何か)だと本番導入するのが流石にためらわれます。どなたかちゃんと設計して作ってくれませんか？保証はできませんが多分売れます。僕は買いたいです。（最後に人任せですみません。）