フォーム読み込み中
2024年12月13日掲載
皆さんこんにちは。IoTソリューションアーキテクトのTakamasaです。
本日はアドベントカレンダー13日目ということで、特別なテーマをお届けします。今回は、お客様からも問い合わせの多い、デバイスの位置情報追跡についてです。
具体的には、1NCEデバイスロケーターとGoogle Geolocation API/HERE Network Positioning APIを使って、GPS不要でデバイスの位置情報を追跡する方法を紹介します。
一般的なIoTデバイスは、GPSアンテナがついていない限り、位置情報がわからないのが当たり前ですが、1NCEデバイスロケーターとGoogle Geolocation API/HERE Network Positioning APIを活用することで効果的な位置情報追跡が可能となります。例えば、物流業界でのトラッキングや個人の資産管理など、さまざまなユースケースで応用できます。
この記事では、設定手順や具体的な利用シーンを詳しく解説しますので、ぜひ最後までお読みください。
まずはおさらいですが、1NCE(ワンス) というIoT回線の特徴を簡単にまとめてみます。ご存じの方は飛ばしてください。
1回線当たり一括2,200円の支払いのみで、最長10年間、500MBまで利用可能(プリペイド式)
SIMカード1枚からオンラインで購入可能
日本国内に加えて、170以上の国と地域において追加料金なしでローミングサービスを利用可能
SIMカードに加えて、ウェブ上の回線管理ツール(CMP)や、お客さまのシステムとのデータ連携を可能にするAPI、安全にデータを伝送するOpen VPNなどの機能を追加料金なしで利用可能
eSIMやIPSec(各拠点のLANを相互接続する高セキュリティーのネットワーク)、Transit GW(AWS VPC同士を接続)などの機能を、有償の追加オプションとして提供
一番の特徴は、IoT回線でよくありがちな基本料金+従量課金ということではなく、一括で10年間前払いするという部分がとても特徴的ですね。
また今回使ってみるSIM管理プラットフォームについても、2,200円の中で使用できるということなので、気軽にIoTをプロトタイピングしてみるといった使い方でもできそうです。
なお、1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWebで購入が可能です。
1NCEのSIM回線プラットフォーム自体には、REST APIや、IMEIロック、SMS送信、回線無効化、追加チャージなど、回線に関わる操作が一元的に管理できるものなっています。
位置情報の取得は、以下の2段階で取得していきます。
まずは、1NCE SIMを使ってデバイスの位置情報 (MNC/MCC/Cell ID/LAC)を取得する方法として何があるかですが、基本的には以下の4つのパターンになります。
最も一般的な方法は、GPS搭載のデバイスに1NCE SIMを使用することです。
この方法では、デバイスがGPS衛星から直接位置情報を取得し、その情報を1NCE SIMを通じて送信します。これにより、高精度な位置情報をリアルタイムで取得することができます。
ただし、高精度な位置情報が取得する反面、GPS情報が取得できない場所(屋内やトンネル、地下など)で使えなかったり、GPSアンテナ自体が電力を多く使うため電池の持ちが悪くなります。
1NCE OSのDevice Locator を使うと、デバイスが接続している基地局の情報を基に位置を推定する機能が使えます。
Device Locator は 1NCE OS の機能の1つです。1NCE OSの仕様制限として、ヨーロッパのインターネットゲートウェイにしないと使えないのですが、実はDevice Locatorを使うだけであれば、インターネットゲートウェイはヨーロッパに設定しなくても利用することが可能です。
また、Device Locatorを使うには、管理画面で機能をONにする必要があります。あとは定期的に位置測位をおこなってくれます。
この方法では、GPSを使用せずにデバイスの位置情報を取得できるため、屋内や地下でも位置情報を得ることが可能です。
ただし、いくつか仕様的に使いづらい点がいくつか存在しており、以下が注意点になります。
つまり、1時間ごとの粒度で、40分以上のタイムラグがあるため、かなり荒い軌跡しかとることができないため、完全なトラッカーとして使おうとするとつらいのが分かります。
試しに、試験的に1分ごとにPDPセッションを張りなおして、強制的に位置情報を取らせてみると、以下のような感じになります。
(試験場所は、1NCE日本法人オフィスです)
sampleTime coordinate source
2024-12-05 11:08:11 139.73, 35.6852 CellTower
2024-12-05 10:02:13 139.730945, 35.685423 CellTower
2024-12-05 9:00:15 139.73, 35.6852 CellTower
2024-12-05 7:59:17 139.73, 35.6852 CellTower
2024-12-05 6:59:12 139.73, 35.6852 CellTower
2024-12-05 6:56:12 139.730945, 35.685423 CellTower
2024-12-05 5:55:14 139.73, 35.6852 CellTower
2024-12-05 4:51:16 139.73, 35.6852 CellTower
2024-12-05 3:49:10 139.73, 35.6852 CellTower
2024-12-05 2:48:12 139.730945, 35.685423 CellTower
2024-12-05 2:47:12 139.73, 35.6852 CellTower
2024-12-05 1:46:14 139.730945, 35.685423 CellTower
2024-12-05 1:43:14 139.73, 35.6852 CellTower
2024-12-05 0:42:16 139.73, 35.6852 CellTower
2024-12-04 23:42:11 139.73, 35.6852 CellTower
2024-12-04 23:41:11 139.730945, 35.685423 CellTower
2024-12-04 22:25:13 139.73, 35.6852 CellTower
2024-12-04 21:24:15 139.73, 35.6852 CellTower
2024-12-04 20:22:09 139.730945, 35.685423 CellTower
2024-12-04 19:21:11 139.730945, 35.685423 CellTower
2024-12-04 18:17:13 139.730945, 35.685423 CellTower
2024-12-04 17:16:15 139.730945, 35.685423 CellTower
これを見てわかるとおり、たまに短い時間で位置情報が取れているものもありますが、基本的には1時間に1回の位置更新となっているのがわかります。
なお、今回の試験場所ではたまたま位置が取得できましたが、都内でいくつか歩き回ってみても、取れる場所と取れない場所というのがかなりはっきりと出ます。
1NCEでは、Device Locatorに関しては、オープンソースのデータソースを使う無償のBasicモードと、有償のAWSデータソースを使うAdvanceモードが存在しています。
位置解決精度としては、Basic:Advanceで40%:90%といわれており、100か所あれば、Basicでは40か所、Advanceでは90か所の位置がDevice Locatorで取れるといわれています。
ただし、これも地域によって一律ではないので、あくまでも目安といった感じです。
次の方法としては、1NCE Data Streamerを使った方法です。Data Streamerについては以下の記事にて詳しく説明しているので、併せてご参照ください。
1NCE IoT SIMのData StreamerデータをAWS QuickSightで可視化してみる
Data Streamerを使用すると、デバイスが通信を行うたびにセッションごとのCell IDを取得することができます。
どういうデータが取れるかというと、PDPセッションが張ったタイミングで、以下のようなイベントがData Streamer経由で設定したエンドポイントに送られます。
このJSONの中のmnc (Mobile-Network-Code)とmcc (Mobile-Country-Code)、そしてcid (Cell ID)を使うことが自分自身で位置を推定することが可能です。
ちなみに、LAC(Location-Area-Code)を一緒に使うことでさらに位置精度を上げることもできるのですが、Data Streamerでは4G環境におけるLAC(正確にはTAC Tracking Area Code)は非対応になります。
{
"imsi": {
"imsi": "...",
"id": ...,
"import_date": "..."
},
"event_source": {
"description": "...",
"id": ...
},
"organisation": {
"name": "...",
"id": ...
},
"event_severity": {
"id": ...,
"description": "..."
},
"sim": {
"msisdn": "...",
"iccid": "...",
"id": ...,
"production_date": "..."
},
"description": "...",
"alert": false,
"id": ...,
"user": null,
"detail": {
"pdp_context": {
"tx_teid_control_plane": 3162410000,
"sgsn_control_plane_ip_address": "<ip_address>",
"ratezone_id": "2171",
"rat_type": 2,
"tunnel_created": "2024-12-05T12:00:27",
"tariff_id": "442",
"mnc": "20",
"apn": "iot.1nce.net",
"ue_ip_address": "<ip_address>",
"gtp_version": 1,
"region": "ap-southeast-1",
"tx_teid_data_plane": 2014413000,
"ggsn_data_plane_ip_address": "<ip_address>",
"ci": 34730496,
"pdp_context_id": 110753000,
"imsi": "440xxxxxxxxxxxx",
"operator_id": "2",
"mcc": "440",
"imeisv": "863xxxxxxxxx",
"sgsn_data_plane_ip_address": "<ip_address>",
"ggsn_control_plane_ip_address": "<ip_address>",
"lac": null,
"nsapi": 5,
"rx_teid": 110750000
},
"name": "T-Mobile",
"id": 2,
"country": {
"mcc": "440",
"iso_code": "jp",
"name": "Japan",
"id": 74,
"country_code": "20"
}
},
"endpoint": {
"tags": null,
"ip_address": "<ip_address>",
"name": "...",
"imei": "...",
"id": ...
},
"event_type": {
"id": ...,
"description": "..."
},
"timestamp": "2024-12-05T09:36:17Z"
}
Data StreamerのEventデータは、セッション情報がほぼリアルタイムにストリーミングされるので、この情報を使ってデバイス単体だけで位置トラッキングすること可能です。
これらの情報を使って実際の位置情報を取得する方法は後述します。
Data Streamer以外に、1NCE SIMの位置情報を取得する方法としては、1NCE APIを使って、現在のSIMの接続状態を取得する方法になります。
1NCE API - Get SIM Connectivity
このAPIを使うとどういうデータが取れるかというとですが、試しに以下で取ってみました。
{
"subscriber_info": {
"success": true,
"state": "not_provided_from_vlr",
"location": {
"current_location_retrieved": false,
"age_of_location": 0,
"cell_global_id": {
"mcc": "440",
"mnc": "20",
"lac": 6237,
"cid": 25787913
}
}
},
"request_timestamp": "2024-12-05T06:08:05.233+0000",
"reply_timestamp": "2024-12-05T06:08:05.793+0000"
}
JSONフォーマット内の、MCC(mcc) / MNC(mnc) / Cell ID(cid) / LAC(lac) (4G環境の場合はTAC)が取得できていることがわかりますね。
このように1NCE APIを使用して、デバイスが現在接続している基地局のCell IDを取得することができます。
このCell IDを基に、基地局の位置を特定し、デバイスの位置情報を推定する事ができます。APIを使用することで、カスタマイズ性が高く、さまざまなアプリケーションに応用することが可能です。
ただし、注意点としてはこのAPIは基本的に接続状態を確認するAPIになるので、デバイスが接続状態である間しか取得ができないことと、あくまでもAPIを叩くアプリ側からのPULL型になるというわけです。
なので、もしこのAPIを使った方法をプロセスに組み込む場合には、例えば3分おきにGPSを使って位置取得しているような場合に、GPSで位置が取得できないときにだけAPIを使って位置情報を代わりに取りに行くような形になるかと思います。
ここまで、位置情報追跡の仕組みを4パターン紹介しました。ここからが、前置きがずいぶんと長くなりましたが、ようやく本題になります。
ここからは実際に1NCEで取得できた以下の情報を使って、緯度経度の位置情報を取得していきます。
ちなみに、なぜLACを使わないかというと、確かにAPIではLAC(4Gの場合はTAC)が取れるんですが、Data StreamerではLACは取れない仕様になっているので、今回は取れない前提で試してみます。
もちろんLACがあった方が位置的には正確なのですが、試される場合にはご自身のユースケースに合わせて、実装してみてください。
位置情報を取得できる外部のAPIは有料のものと、無料のものといくつかあるんですが、例えば以下があります。
前提として、基地局の位置情報は非公開になるので、これらの事業者は自身でMAP情報と基地局情報を作成しているので、正確さについては各社次第ということになります。
OpenCelliDは無償のサービスですが、取得するためにはLACが必須になっているので使わずに、今回はGoogleとHEREの2つで試してみます。
Google Cloud Platformにアクセスし、アカウントを作成します。
新しいプロジェクトを作成し、Geolocation APIを有効にします。
APIキーを生成し、メモしておきます。
APIキーを取得したら、デバイスやアプリケーションに組み込みます。
Google Geolocation APIのエンドポイントにリクエストを送信します。
今回は、一番シンプルにCurlコマンドで、位置情報を取得してみたいと思います。
場所のCell IDですが、このCell IDは1NCEのDevice Locator (Basic)では取得できなかったものなので、試しにGoogle APIで取得できるか試してみます。
% curl -X POST "https://www.googleapis.com/geolocation/v1/geolocate?key=xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"homeMobileCountryCode": 440,
"homeMobileNetworkCode": 50,
"radioType": "lte",
"considerIp": true,
"cellTowers": [
{
"cellId": 34730496,
"mobileCountryCode": 440,
"mobileNetworkCode": 50
}
]
}'
これでコマンドを打ってみると、以下が返ってくることが確認できるはずです。
{
"location": {
"lat": 35.6846835,
"lng": 139.7328924
},
"accuracy": 532.278
}
ちゃんと緯度経度情報が取得できています。
Google Mapへのリンクは、以下のようにURLを作成すると直接リンクとして飛ぶことができます。
https://www.google.com/maps?q=35.6846835,139.7328924
正しく1NCE日本法人のオフィス近辺にフラグが立っていることが確認できます。
次に今度はHEREのAPIを使って、位置情報を取得してみたいと思います。
HERE Network Positioning APIを使用することで、基地局情報を基にデバイスが在圏している基地局の位置情報を取得することができます。
以下に、具体的な使用手順を示します。
HERE Developer Portalにアクセスし、アカウントを作成します。
新しいプロジェクトを作成し、APIキーを生成します。
APIキーを取得したら、デバイスやアプリケーションに組み込みます。
HERE Network Positioning APIのエンドポイントにリクエストを送信します。
以下は、curlを使用してHERE Network Positioning APIを呼び出し、位置情報を取得するサンプルコードです。
curl -X POST "https://positioning.hereapi.com/v2/locate?apiKey=&fallback=area" \
--header "Content-Type:application/json" \
-d '{"lte": [{"mcc": 440, "mnc": 50, "cid": 34730496}]}'
取得できる結果としてはこんな感じになりました。
{"location":{"lat":35.69999814,"lng":139.72997904,"accuracy":2290}}
こちらもGoogleと同様に緯度経度情報が取得できていますね。
Google Mapへのリンクは以下のようにURLを作成してみました。
https://www.google.com/maps?q=35.69999814,139.72997904
ただ、今回測定場所の場合では、HEREの精度はあまり高くなく、2キロ以上離れている結果でした。
あくまでも目安程度に使うのがよさそうです。
今回は、アドベントカレンダー13日目として、1NCE Device Locator と Google Geolocation APIとHERE Network Positioning APIを使用して、GPS不要でデバイスの位置情報を追跡する方法について解説しました。
以下に、記事の要点をまとめます。
1. 1NCE SIMを使った位置情報取得方法
1NCE SIMを活用することで、GPS搭載デバイスや1NCE OSのDevice Locator、Data Streamer、そしてAPIを使った多様な方法で位置情報を取得することができます。それぞれの方法には特有の利点と制約があり、ユースケースに応じて最適な方法を選択することが重要です。
2. Google Geolocation API / HERE Network Positioning API
Google Geolocation APIやHERE Network Positioning APIを使用することで、デバイスの緯度経度情報を簡単に取得することができます。APIキーの取得から実際のリクエスト送信までの手順を具体的に説明しました。Curlを使ったサンプルコードを参考に、実際に位置情報を取得してみてください。
3. 位置情報の具体的な利用シーン
物流業界でのトラックや配送車両のリアルタイム追跡、個人利用でのスマートフォンやペットの位置追跡、さらには農業や建設業での機器管理など、さまざまな分野で応用が可能です。
また今回はあくまでも1NCE単体で取得できる情報を基に、位置情報を取得する方法を紹介しましたが、デバイス側でもう少し情報を取得して、電波強度(RSRP/RSPQ)やWi-Fi SSIDなどと組み合わせることで、もっと高精度に位置情報を取得することもできますね。
ちなみに今回は細かく計算しませんでしたが、Google APIとHERE APIのどちらが良いかに関しては、それぞれ得意な地域もあるでしょうし、また金額も異なりますので、実際のユースケースに従ってご判断ください。
1NCE Device Locator, Data Streamer, APIとGeolocation API/Network Positioning APIを活用することで、GPSなしで効果的な位置情報追跡が可能となります。
これにより、屋内や地下でも位置情報を取得できるため、物流や資産管理、個人利用など、さまざまなシーンで役立つでしょう。
これらの技術を使用して、あなたのプロジェクトや業務の効率化を図ってみてください。1NCE SIMと位置情報APIの組み合わせは、低コストで高いカスタマイズ性を提供するため、特にIoT分野での活用が期待されます。
最後までお読みいただきありがとうございました。今後も引き続き、IoTの最新情報や実践的な活用方法をお届けしてまいりますので、どうぞお楽しみに。
それでは、アドベントカレンダー14日目にバトンを渡します。
1NCE IoT フラットレートは、IoTコネクティビティに特化した通信サービスで、SIMカード1枚あたり一括2,200円で最長10年間、500MBまで利用可能です。日本国内を含む170以上の国と地域で追加料金なしでローミングが可能で、ウェブ上の回線管理ツールやAPI、安全なデータ伝送をサポートします。ソフトバンクがアジア独占販売パートナーであり、地域の企業や開発者にとって非常に利用しやすい環境が整っています。
▶ 「低容量SIM」ユースケース 資料ダウンロード
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
条件に該当するページがございません