[3] 
[DFN[SORACOM]]
は、
[[株式会社ソラコム]]の [[IoT]] 製品群・[[プラットフォーム]]です。

[REFS[
- [2] [CITE@ja[SORACOM の概要 - IoT プラットフォーム [[株式会社ソラコム]]]], [TIME[2020-03-30 13:01:36 +09:00]] <https://soracom.jp/overview/>
- [1] [CITE@ja[Welcome | [[SORACOM]] Users]], [TIME[2020-03-26 00:33:25 +09:00]] <https://dev.soracom.io/jp/>
]REFS]

[19] 
製品にそれぞれ特徴的な[[固有名詞]]がついていて、
それが頭に入っていることを前提にいろんな説明がなされているので、
一見わけがわかりません。
使い方の説明は一通りドキュメントが揃っているので、
丁寧に読み解いていけば実は案外単純な、そりゃあそうなるよなあという設計です。
[[アーキテクチャ]]の概要をいったん理解してしまえば、
最初の印象ほど難解でもない、普通のサービスです。


* SORACOM Beam

[8] 
[DFN[SORACOM Beam]] [SRC[>>7]] は、 [[IoT]] 端末からの通信を [[SORACOM]]
サーバーを中継して任意の相手に送信させられるものです。

[9] 
端末と直接通信するとなると端末の特性 (消費電力制限など)
を鑑み簡略なプロトコルを使うなど工夫が必要になります。
自サーバー側もその対応が必要になる上、
[[インターネット]]を通過するには [[TLS]]
など安全でも高コストな手法を使わざるを得ません。
[[SORACOM]] を信用し通信を媒介させるなら、
端末から [[SORACOM]] [[SIM]] を介して [[SORACOM]] サーバーまでの区間はそうした手法で通信し、
[[SORACOM]] サーバーから自サーバーまでの[[インターネット]]は [[HTTPS]]
のような汎用の[[プロトコル]]で通信するものと分けることができます。

[10] 
端末から自サーバーまでの通信と捉えれば [[SORACOM]] サーバーは[[関門]]
([[アプリケーション層]]の[[ルーター]])
といえます。

[32] 
[[SORACOM]] とその裏側にある端末をまとめて1つのサービスとして捉えるなら、
Beam (を使った [[HTTP]] への変換) はいわゆる [[Web Hook]] API と理解できます。
ただ通常の [[Web Hook]] とは違って、同じ種別の[[プロトコル]]で複数の宛先を指定できないようです。
[[開発サーバー]]と[[本番サーバー]]に同時送信させたりできないのはちょっと不便です。

[6] 利用料金は[[従量制]]ですが、非常に安価です [SRC[>>5]]。
定期的にデータを送信する用途でも、かなりの回数が無料枠でカバー可能で、
それを超えても急激に課金されることはない良心的な価格設定です。

[REFS[
- [7] [CITE@ja[SORACOM Beam]], [TIME[2020-04-01 13:59:36 +09:00]] <https://soracom.jp/services/beam/>
- [5] [CITE@ja[[[SORACOM Beam]] のご利用料金]], [TIME[2020-04-01 09:31:48 +09:00]] <https://soracom.jp/services/beam/price/>
- [13] [CITE@ja[SORACOM Beam : Beamを使用したデータの送信 | 開発者ガイド | SORACOM Users]], [TIME[2020-03-31 22:48:03 +09:00]] <https://dev.soracom.io/jp/beam/send-data-using-beam/>

]REFS]

* Unidifed Endpoint

[20] 
[[SORACOM]] のプラットフォームにはいくつもサービスがあって、
それぞれの使い道がありますが、
端末がそれに個別に対応するのは一苦労です。
構成の変更のたびに端末の改修も必要になってしまいます。
そこで、各サービスを直接使わず、
[DFN[Unified Endpoint]]
宛に送信すれば、
端末ではなく [[SORACOM]] サーバー上の設定で、
それを更にどのサービスに送信するかを決められるというわけです。

[21] 
[[SORACOM Beam]] など
[[SORACOM]] のサービスは一通り対応しています。
これから作成する新しい[[アプリケーション]]は、
基本的に各サービスに直接送信するのではなく、
[[Unified Endpoint]] に送信すればよいのでしょう。


[REFS[
- [22] [CITE@ja[[[Unified Endpoint]] とは | 開発者ガイド | SORACOM Users]], [TIME[2020-03-26 00:33:26 +09:00]] <https://dev.soracom.io/jp/unified_endpoint/what-is-unified_endpoint/>
- [18] [CITE@ja[[[Unified Endpoint]] : 機能の説明 | 開発者ガイド | SORACOM Users]], [TIME[2020-03-31 22:48:06 +09:00]] <https://dev.soracom.io/jp/unified_endpoint/how-it-works/>
]REFS]

* GPS マルチユニット SORACOM Edition

[4] 
[DFN[GPS マルチユニット SORACOM Edition]]
は
[[GPS]] 測位端末です。

** 利用設定

[17] 
この[[装置]]は、 [[SORACOM]] の [[SIM]] と組合せて使う [[IoT]] 端末です。
つまりこの[[装置]]に [[SIM]] を指すと、
[[SORACOM]] サーバーにデータを送信するようになるので、
[[SORACOM]] のサービスを介してそのデータを取得する形になります。

[REFS[
- [23] [CITE@ja[[[GPS マルチユニット SORACOM Edition]]を使用して、定期的に位置情報を送信する | Getting Started with GPS マルチユニット SORACOM Edition | SORACOM Users]], [TIME[2020-03-26 00:33:26 +09:00]] <https://dev.soracom.io/jp/start/gps_multiunit_location/>
]REFS]

[24] 
このドキュメントの手順通りに簡単に設定できます。
このドキュメントではデータを
[[SORACOM Harvest]]
に送信することになっています。
[[SORACOM Harvest]]
に送信すると、
[[SORACOM]]
の [[Webサイト]]上で直近のデータを[[地図]]表示できます。
ちょっとした動作確認や、
簡単な利用ならこれでも十分でしょう。
(ただし有料なので注意。)

[26] 
[[SORACOM Harvest]] 
のデータは [[Web API]] 「DataEntry」
で取得できます。

[REFS[
- [25] [CITE@ja[API リファレンス | [[SORACOM]] Users]], [TIME[2020-04-02 13:41:36 +09:00]] <https://dev.soracom.io/jp/docs/api/#resource_DataEntry>
]REFS]

[27] 
ただし DataEntry API は [[SIM]] 1つずつしかデータを取得できません。
複数端末を併用するときには不便です。
また[[ポーリング]]が必要となり定期的に送信される [[GPS]]
データの取得には不向きです。

[28] 
[[SORACOM Beam]] に送信するように設定すると、
新データが到着するたびに自サーバーに [[HTTPS]] で送信させることができます。
つまり [[GPS]] データを受信できる [[Web Hook]] [[API]] と考えることができます。
(ただし有料なので注意。)

[29] 
この設定方法として [[SIM]] ごとの設定から Beam を有効にできるような説明を見かけますが、
[[SORACOM]] の仕様変更前の古い説明のようですので、注意してください。
[[SIM]] ごとではなく、 [[SIM]] グループごとに Beam への送信を設定できます。

[30] 
Beam の設定は、 送信先サーバーと [[URL path]] や [[HTTPヘッダー]]を指定するだけなので、
みればわかります。プロトコルとして 「HTTP」が使えるという罠に注意です。
正しくは [[UDP]] から [[HTTP]] に変換するオプションを選ばなければなりません。
(端末から [[SORACOM]] サーバーまで [[UDP]] で送信し、
[[SORACOM]] サーバーから自サーバーまで [[HTTP]] で送信するという意味です。)

[31] 
[[SIM]] ごとではなく [[SIM]] グループごとの設定となっているので、
新規端末・ [[SIM]] を追加したときは、
同じグループにどんどん追加していくだけで、
既存の送信先設定を流用できます。


** 測位データ

[12] 
[[Base64]] 符号化された [[JSON]] データが送られてきます。
[SRC[>>11]]

[14] 
残念なことに測定日時が入っていません。受信日時が測定日時に十分近いと仮定するほかありません。

[15] 
[[GPS]]
データは[[緯度]]と[[経度]]が入っています。
[[高度]]や[[時刻]]はありません。

[16] 
たまに[[緯度経度]]取得に失敗したのか、
[CODE[null]]
が送られてくることがあります。


[REFS[
- [11] [CITE@ja[GPS マルチユニット SORACOM Edition : 機能の説明 | ユーザーガイド | SORACOM Users]], [TIME[2020-03-26 00:33:25 +09:00]] <https://dev.soracom.io/jp/gps_multiunit/how-it-works/>
]REFS]

* メモ