HERE Positioning APIとSigfox Atlas WiFiの検証

技術情報

Sigfox位置情報サービスAtlas Suiteのひとつとして提供されているAtlas WiFi。WiFi MACアドレスをSigfoxで送信することにより、IoTデバイスの位置情報を推定するサービスですが、こちらの記事にある通り、位置推定のコアは欧州のHere社との提携の下、開発されています。

atlas_wifi_仕組み.jpg

ここでは、Altas WiFiのサービス仕様を振り返りつつ、HERE社の位置情報サービス(HERE Positioning API)との違いを検証します。

Atlas WiFiサービス

Sigfox社が提供するAtlas WiFiサービスの基本的な使い方はこちらを参照してください。
Atlas WiFiサービスを使用するには、KCCSのパートナーからAtlas WiFiに対応した回線サービスを購入いただく必要があります。(Sigfox Buyからの回線には、このサービスは含まれていません)
そのうえで、IoTデバイスでスキャンしたWi-FiネットワークのMACアドレスを2つ送信することとなりますが、送信するMACアドレスは、サービスのアベイラビリティを向上するために、いくつかの注意点があります。

Atlas WiFiにおけるMACアドレスの選択

Atlas WiFiにおいて送信するMACアドレスは下記のルールに従ってください。

MUST

  1. ビーコンフレームもしくはプローブ応答フレームで得られたMACアドレスであること
  2. アドホックモードネットワークではなく、インフラストラクチャモードのネットワークであること
  3. ユニキャストであること(先頭オクテットのb0ビットが"0"であること)
  4. リザーブMACアドレス(00:00:00:00:00:00、FF:FF:FF:FF:FF:FF)でないこと

Recommendation

  1. グローバルアドレスであること(先頭オクテットのb1ビットが"0"であること)
  2. テザリング端末やWi-Fiモバイルルータをフィルタリングすること(SSIDでの識別を推奨)
  3. ステルスSSIDを避けること
  4. RSSIが強いアクセスポイントを優先すること

Atlas WiFiサービスを適用しないメッセージ

上記ルールの下、選択された2つのMACアドレスをSigfox上りメッセージで送信することにより、Altas WiFiによる位置推定結果をData Advanced Callbackで受信することができますが、位置情報ではないメッセージを送りたい場合もあるかと思います。
そのような場合は、先頭オクテットのb0ビットとb1ビット両方を"1"とすることにより、そのメッセージは位置推定からは外れます。

20201218technical-3.jpg

HERE社Positioning API

一方、HERE社は、同様のサービスをPositioning APIとして提供しています。
HERE社のREST APIは、これ以外にもMapサービスやジオコーディングサービスなど多岐にわたっていますので、同社のDeveloperサイトを参考にしてください。
Positioning APIはAPI KEYを取得したうえで、下記エンドポイントにMACアドレスをPOSTすることにより利用可能です。

https://pos.ls.hereapi.com/positioning/v1/locate?apiKey={YOUR_API_KEY}
HTTPヘッダにContent-Type=application/jsonを追加し、下記Bodyを送信します。

here-positioning-request.json
{ 
 "wlan": [
 {"mac": "AA-AA-AA-AA-AA-AA"},
 {"mac": "BB-BB-BB-BB-BB-BB"},
 {"mac": "CC-CC-CC-CC-CC-CC"}
 ]
}

応答は下記のようなJSONが返ってきます。

here-positioing-response.json
{ 
 "location": {
 "lat": 52.5187469,
 "lng": 13.37551117,
 "accuracy": 338
 }
}

HERE Positioning APIとSigfox Atlas WiFiの比較

比較その1

仮に、この2つのMACアドレス(BC-5C-4C-15-FE-4?、84-AF-EC-F5-47-F?)が取得できたとします。
※?のところは隠しています。

Sigfox Altas WiFiとHERE Positioning APIそれぞれに上記2MACアドレスを送信したところ、下記の通り、同じ位置推定結果が得られました。


Sigfox Altas WiFiHERE Positioning APIGoogle Geolocation API
lat 35.7?78051 35.7?78051 35.7x83267
lng 139.7?59457 139.7?59457 139.7x62130
accuracy(radius) 250 250 150

確かに、HERE社のエンジンを使っていることが推測できます。
Google Geolocation APIとも比較しましたが、今回の場合、accuracyはGoogleの方が良いものの、実際の位置との誤差はHEREの方が若干良い結果でした。(これは、場所によって変わると思いますが)

比較その2

次に、2つ目のMACアドレスを別のものに変え、この2つのMACアドレス(BC-5C-4C-15-FE-4?、50-C4-DD-CD-6B-E?)を送信してみました。
結果は、HERE社のPositioning APIは404エラーを返してきました。おそらく、2つ目のMACアドレスが登録されていないのではないかと思います。

Sigfox Altas WiFiHERE Positioning APIGoogle Geolocation API
lat 35.7?3913 404 error 35.7x83267
lng 139.7?3475 404 error 139.7x62130
accuracy(radius) 250 404 error 150

これから想像するに、Sigfox Atlas WiFiサービスは、メッセージを受信したSigfox BaseStation情報も位置推定に使われており、少ないMACアドレス数でも位置推定しやすくしているのだと思います。(あくまで想像ですが)

404エラーはやめて

HERE社のPositioning APIですが、送信したMACアドレスから位置推定できなかった場合に、404エラーを返してきます。(こんな感じ)

error.json
{
  "error": {
  "code": 404,
  "message": "Not Found",
  "description": "Position not found"
  }
}
URLが間違っていた場合でも同じエラーでdescriptionだけが違うので、原因切り分けが面倒ですね。