GPS マルチユニット SORACOM Edition を使った見守りシステム

こんにちは、将棋が趣味のインドア派なエンジニア kaz です。

このブログは [株式会社ソラコム Advent Calendar 2021](https://qiita.com/advent-calendar/2021/soracominc) の 20 日目の記事で、昨日は @imaifactory による [SORACOMで構成できるネットワークとNAT越えのさまざま](https://imai-factory.hatenablog.com/entry/2021/12/19/164311) でした。クラウドとデバイスが連携するシステム構成を考える上で非常に大事な内容で、様々な実現方式を網羅されている点がとても素晴らしくて勉強になりました。さて今回のブログは、昨日とは打って変わって日常生活に関わる内容です。

私は普段から [GPS マルチユニット SORACOM Edition](https://soracom.jp/store/5235/) を使って子どもの見守りをしているのですが（帰宅のタイミングが分かって便利！）、先日久々にソラコム社員がオフラインで集まるイベントがありまして、その時に非エンジニアの方から自分も同じことをやってみたいというお話しを頂きました。Web 上で軽く検索した感じだとそれっぽい情報は見つからず、また最近 SORACOM Lagoon がアップデートしたことから、今回手順を整理して公開したいと思います。

## 準備

まず、GPS マルチユニットを使って SORACOM Harvest Data にデータを登録できるようにする必要があります。以下に手順がありますので、こちらの通りに設定してください。

https://users.soracom.io/ja-jp/guides/iot-devices/gps-multiunit/visualize-harvest/

SORACOM Harvest でデータが確認できたら、次に可視化するために利用する SORACOM Lagoon の設定をします。今回は[新しいバージョンの SORACOM Lagoon](https://users.soracom.io/ja-jp/docs/lagoon-v2/versions/) を使いますので、以下の手順に沿って Lagoon へログインするところまで進めてください（ステップ ２ の`テンプレートをインポートする`以降は不要です）。

https://users.soracom.io/ja-jp/docs/lagoon-v2/create-dashboard-from-template/

## SORACOM Lagoon の設定

SORACOM Lagoon はダッシュボードという大きな画面の中にパネルというパーツを埋めて可視化します。この節では各パネルの説明をしていきますので、必要と思った項目だけ選んで設定して頂ければ OK です。ダッシュボードの作成は、左のメニューの `+` ボタン -> `Dashboard` を選択すると作成できます。パネルの作成方法は [Panel を作成する](https://users.soracom.io/ja-jp/docs/lagoon-v2/panel-overview/#panel-%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)を参照してください。また、パネルのタイトルはパネル設定画面の一番上にある「Panel title」で指定できますので、それぞれ分かりやすい名前を入力すると良いと思います。

### 時刻の表示

![time-panel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/db616ee7-cd5d-3913-b0b9-d974826f70c7.png)
まずは一番簡単な項目から行きましょう。時刻はここに表示しなくても分かると思いますが、例えばダッシュボード全体を画面キャプチャしたい時などは時刻を表示しておくと便利なケースがあるかもしれません。
時刻の表示をするには、`Clock` パネルを使います。上記の画面は、`Date Options`を有効にしたりフォントサイズを変更したりして多少カスタマイズしています。

### 電池残量の表示

![gauge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/50204d9f-2523-1b71-d21a-128182c7aa17.png)
電池が無くなると位置情報が分からなくなってしまうので、電池残量の確認はとても重要です。視覚的に分かりやすくしたいので、電池残量は `Gauge` パネルを使います。ちなみに充電中は -1 と表示されます。

![battery-query.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/88bee30b-a43b-7044-ca6f-fda3e9084ec4.png)
対象となる Metric には、バッテリー残量を示す`bat`を指定します。

![gauge_fields.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/a356ccef-1e25-7dad-52c2-5ba0c2622372.png)
`Min`に`0`を、`Max`に`3`を指定し、さらに`Threashold`を画像の通り設定すると、緑・黄色・赤を使って良い感じにバッテリー残量を表現できます。

### 温度・湿度の設定

![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/ab0428a6-f52f-1c2e-3c35-06a2adc78471.png)
見守りで温度や湿度を気にすることはあまり無いと思いますが、私はいつも在宅勤務なので外の気温を知るのに役立っています（笑）
温度と湿度の表示は `Graph` パネルを使います。２つパネルを作成し、Metric にはそれぞれ温度を示す `temp` と湿度を示す `humi` を指定します。パネルタイトル以外は設定無しで十分理解できるグラフになると思いますが、`Panel`タブの`Axes` → `Left Y` → `Label` にそれぞれ `℃`と`％`を入れるとより分かりやすくなると思います。

### 位置情報の設定

![map.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/8158daae-957f-4136-6147-360aeffe8162.png)
見守りで一番重要な情報は、子供が現在どこに居るかを示す位置情報です。この設定は、GPS マルチユニットを使う上で必須とも言えるでしょう。

![map_metrics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/09f28f68-1dda-93eb-05f3-1655ab467f05.png)
位置情報は `SORACOM Map Panel` を使います。Metric では、他と少し違って `Standard` ではなく `Map` を選択します。すると、`Latitude` と `Longitude` が表示されるので、それぞれ `lat` と `lon` を指定します。

![map_options.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/a61aa719-e9b0-336a-bd8e-920b6454c1e5.png)
`Map Options` の設定では、上の画面のように設定します。Language は日本語が選択できます。選択すると項目名が日本語になります。場所を示す円の大きさが初期値だと大きめなので、`円のサイズの最大値`を 5 程度にすると良さそうです。

### 通知の設定

![alert_mail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/52a9d68e-915e-b95e-d6ad-b2fa4e0c5d4f.png)
記録された位置情報が特定の範囲から外れていた場合に通知する設定をします。これを設定することで、子供が一人でどこかへ遊びに行ってしまった場合に気付くことができるようになります。
まずは通知先を設定します。[Lagoon で Notification Channel を設定する](https://users.soracom.io/ja-jp/docs/lagoon-v2/setup-alert/#%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-2-lagoon-%E3%81%A7-notification-channel-%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B)を参考に、通知先を設定してください。私はメールで通知していますが、SORACOM Lagoon は色々な通知方法を提供しているので、ご自身の都合の良い通知方法を利用してください。

![notify_metric.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/66116b18-5fc7-7fcc-8537-699afad62db5.png)
通知には `Graph` パネルを使います。Metric を２つ用意して、緯度・経度を示す `lat` と `lon` を指定します。このパネルでは表示に意味は無いため、特に見た目に関する設定はしなくても良いと思います。

次に、位置情報が指定した範囲を超えた場合に通知する設定をしましょう。この`範囲`は長方形をイメージしていただくと良くて、左下の座標と右上の座標を指定することで表現できます。ここで注意なのですが、GPS マルチユニットはたまに実際よりも離れた座標と認識してしまう場合があるので、本来設定したいと考えている範囲よりも少し大きめにしておいた方が良いでしょう。座標を調べる方法は、Google map の[緯度と経度を確認、入力する](https://support.google.com/maps/answer/18539?hl=ja&co=GENIE.Platform%3DDesktop)を利用するのが分かりやすいと思います。指定したい範囲の左下と右上それぞれの緯度と経度をメモしてください。

![map_alert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377165/36a724d3-789d-ae7d-a33a-2b64e216208e.png)
座標が分かったら、アラートを作成します。上記のキャプチャを参考に、以下のように設定してください。

- Conditions
  - ２つ目の項目は `last()`を選択して最新の位置情報を対象とします。
  - ４つ目の `query` の設定では、一つ目の値に `A` を指定します。この A というのは、先ほど設定した Metric である `lat` （緯度）を示します。
  - ５つ目の選択肢では `IS OUTSIDE RANGE` を選択します。これにより、次に指定する「緯度」の範囲を超えた時にアラートが発生します。
  - ６つ目の入力ボックスでは、左下の座標の緯度を指定します。
  - ８つ目の入力ボックスでは、右上の座標の緯度を指定します。こちらの数値の方が左の値よりも大きいことを確認してください。
- Conditions にある + ボタンをクリックして、以下のように設定します。
  - １つ目の項目は `OR` を指定します。これにより、緯度と経度のどちらか一つでも範囲を外れた場合は通知が来るようになります。
  - ２つ目の項目は `last()`を選択して最新の位置情報を対象とします。
  - ４つ目の `query` の設定では、一つ目の値に `B` を指定します。この B というのは、先ほど設定した Metric である `lon` （経度）を示します。
  - ５つ目の選択肢では `IS OUTSIDE RANGE` を選択します。これにより、次に指定する「経度」の範囲を超えた時にアラートが発生します。
  - ６つ目の入力ボックスでは、左下の座標の経度を指定します。
  - ８つ目の入力ボックスでは、右上の座標の経度を指定します。こちらの数値の方が左の値よりも大きいことを確認してください。
- No Data & Error Handling
  - `If no data or all values are null`では、データが無い場合に警告は不要なので`Ok`を設定します。
- Notifications
  - `Message` に、通知する時の本文を入力します。

以上で通知が完成しました。試しに GPS マルチユニットを持って範囲外に移動してみて、きちんと通知が届くか事前に確認しておくと良いと思います。以上で設定は終わりです。お疲れ様でした。

## 料金

参考までに、私の SORACOM アカウントの先月（２０２１年１１月）の利用料金のうち、今回の見守りシステムに掛かった費用について説明します。こちらは通信の頻度や利用するサービス、料金改定等によって変わってくるため、実際に利用される際は改めて [SORACOM の課金体系](https://soracom.jp/pricing/)をご確認ください。また、今回利用する [GPSマルチユニット SORACOM Edition（バッテリー内蔵タイプ）スターターキット](https://soracom.jp/store/5235/) は初期費用として別途必要になります。

### SORACOM Air

GPSマルチユニット SORACOM Edition に付属の特定地域向け IoT SIM の [plan-D D-300MB](https://soracom.jp/services/air/cellular/price_specific_area_sim/#D-300MB) を利用しているため、ひと月分の基本料金 330 円でした。

### SORACOM Harvest Data

データを保存する [SORACOM Harvest Data](https://soracom.jp/services/harvest/#pricing_data) は無料利用枠があるため、実際の利用料金は 0 円でした。

### SORACOM Lagoon

グラフで可視化する [SORACOM Lagoon](https://soracom.jp/services/lagoon/#section03) は Free プラン（試用・個人利用のみ）を利用しているため、こちらも利用料金は 0 円でした。

### 月額利用料

ということで、先月の月額利用料は IoT SIM の基本料金である 330 円だけでした。無料利用枠があるので非常におトクですね。

## おわりに

今回は、GPS マルチユニット SORACOM Edition と SORACOM Harvest Data / Lagoon を使った見守りシステムを紹介しました。見守りシステムと言えば、購入してすぐに使える市販のサービスが色々あるのでそちらを購入するのがお手軽ですが、一歩踏み込んで自分用にカスタマイズしたダッシュボードを作りたい場合などはこちらのやり方にチャレンジしてみるのも楽しいと思います。
さらに、GPS マルチユニットは [Unified Endpoint](https://users.soracom.io/ja-jp/docs/unified-endpoint/) へデータを送信するため、SORACOM Harvest Data 以外にも [SORACOM Beam](https://users.soracom.io/ja-jp/docs/beam/) や [SORACOM Funk](https://users.soracom.io/ja-jp/docs/funk/) などのサービスを利用することもできます。これらを使って SORACOM 外部のサービスと連携してもっと自由にシステムを作ることもできますので、ご興味ある方はぜひチャレンジしてみてください。

明日は将棋仲間の @kengon の番です。皆さまお楽しみに。