IoT Agency PlatformでGPS Tracking

>※IoT Agency Platfromは2020年12月31日をもってサービス終了予定となります。
※[GitHubリポジトリ](https://github.com/IoT-Makers/sigfox-platform.git)は引き続きご利用いただけます。

ここでは、SigfoxクラウドからCallbackされた（位置情報込み）ペイロードを[IoT Agency Platform](https://try.iotagency.sigfox.com)のダッシュボード上でトラッキング表示をする方法を説明します。事前知識は下記記事を参照してください。

- [Sigfox Callback機能](https://qiita.com/ghibi/items/53259381a30363538a6d): Sigfox IoTデータを他アプリケーションサーバに転送する
- [IoT Agency Platformで簡単ダッシュボード](https://qiita.com/ghibi/items/91f6880a4820c49cad5d): IoT Agency Platformで温度センサデータをグラフ化するサンプル

#前提条件
Sigfoxデバイスから位置情報を送信する方法としては、1)GPSセンサ情報をペイロードに格納する方法や、2)Sigfox Atlasサービス（Sigfox基地局やWiFiアクセスポイント受信情報からの推定位置）などがありますが、今回は、GPSセンサ情報となる緯度・経度をそれぞれ4バイトでIEEE745フォーマットでペイロードに格納した例を元に進めます。
#Sigfox Callbackの設定
SigfoxデバイスからのGPS情報ペイロードをIoT Agency Platformに転送します。
IoT Agency Platformにログイン後、**API**メニューを選択し、"+Create New"ボタンをクリックし、**Access Token**を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/6609a046-740f-d75b-cb3b-cffc1280ce88.png)
その後、**UPLINK**メニューを開き、記載されている**Type**、**Url pattern**、**Headers情報**、**Content Type**、**Body**を、Sigfoxクラウド上のCallback設定画面に入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/9b225e37-1d25-fbf1-ead6-3baa03ce8103.png)
>Body部分のJSON記述で、"reception"と"duplicate"は、現状、Sigfoxクラウドで対応していないため、削除してください。

#Parser作成
ペイロード中のGPS情報をパースする必要がありますので、**Parsers**メニューから作成します。
今回は、IEEE754で規定されている単精度浮動小数点数（4バイト）の形式で緯度経度がペイロード部に記録されているものとします。

```parser.java
var payload,
  lat,
  lng,
  parsedData = [],
  obj = {};

  buf = new DataView(new ArrayBuffer(8));
  buf.setUint32(0, '0x'+ payload.slice(0, 8));
  lat=buf.getFloat32(0,true);
  buf.setUint32(0, '0x'+ payload.slice(8, 16));
  lng=buf.getFloat32(0,true);
    
  obj = {};
  obj.key = 'lat';
  obj.value = lat;
  obj.type = 'number';
  obj.unit = '°';
  parsedData.push(obj);
    
  obj = {};
  obj.key = 'lng';
  obj.value = lng;
  obj.type = 'number';
  obj.unit = '°';
  parsedData.push(obj);
}

return parsedData;
```
これで、変数latとlngに変換されたデータをメッセージ履歴やダッシュボード上で使用することができます。

#Categoryの作成
Categoryは、Parseしたデータをデバイスに紐づけるためにカテゴライズするものとなっています。ここでは、先ほどパースしたlat（緯度）、lng（経度）をGPSという名前でカテゴライズします。
**Categories**メニューの[+]ボタンから下記のように、number型のlat,lngプロパティを追加し、GPSカテゴリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/547f35b1-1646-e94b-c2c2-eb9405630ab7.png)

#デバイスにParserとCategoryを紐づける
上記で作成したParserとCategoryを、該当Deviceに紐づけることにより、送られてきたペイロードを意味あるデバイス情報として使用することができるようになります。
今回は、先ほど作成した*GPS_Float*というParserと*GPS*というCategoryをデバイスに設定します。
該当デバイスからメッセージがCallbackされると、自動的に**Devices**メニュー内にデバイスが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/af5f2a61-e014-9f1b-a7cd-29101533be22.png)
Editボタン![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/3d5e2a5f-3d70-be12-7e6e-d527c109c876.png)から、Deviceの設定が可能になりますので、ご自身が作成したParser名、Category名に合わせて設定します。今回は、Parserに"GPS_Float"をCategoryに"GPS"を選択します。
これにより、Deviceのメッセージビューで、lat,lngが表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/aa33bdd3-68d7-c618-38fc-7a46ddc762b2.png)

#DashboardでTracking Mapを作成
最後に記録されていく緯度経度をMap上に軌跡も含めて表示したいと思います。
左メニューの**Create Dashboard**から新規ダッシュボードを作成します。Dashboard作成後、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/989e04b9-2ac1-2561-417b-1e0e37a2cae4.png)ボタンからWidgetを追加します。
今回は、Map Widget。適当な名前と共に、下記設定を入れてもらえればGPS軌跡を地図上に表示することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/14778a29-8abd-a5bb-1b1c-b55e811f4fa3.png)
こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/b6b6e16f-e3f8-b2c4-6273-198410d65749.png)

最後に、**Directions routes**、**Polylines**、**Marker cluster**のチェックONでどのようにGPS軌跡表示が変わるかを見ておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/f94e0a9a-93dc-27a6-805c-9457f06c3cb7.png)
Direction routesをONにすると、移動軌跡を道路最短ルートで結ばれ、PolylinesをONにすると、点間を直線で結ばれることがわかります。
Marker clusteringは、地図縮尺に合わせて、マーカーをクラスタリングするモードです。

IoT Agency Platformだけでも、PoCのGPSトラッキングサービスの確認はできそうですね。
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/d6ad10bc-75ba-8124-14d4-f144657c6473.png)](https://twitter.com/ghibi)