ReekohでSigfox GPS端末の緯度経度を標高データサービスと合わせMapダッシュボードに表示する

#Reekohとは
[Reekoh](https://reekoh.com/)とは、IoTデータをNode-REDのようにハードウェアデバイス/APIをオンラインサービスに接続したり、独自のダッシュボードを構築することができるクラウドサービスです。
ただ、フリーサービスではないので、Reekoh社及び代理店からの提供されるエンタープライズ向けツールです。
ここでは、Sigfox対応GPSデバイスの緯度経度データを、国土地理院の試験サービス「標高API」に渡し、その地点の標高を取得し、ストレージに保存。最後に緯度経度及び標高を地図ダッシュボードに表示するところまでやってみます。（こんな感じです）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/cc870023-5c87-a6c6-e2a8-0ba28d908635.png)

国土地理院の標高APIを使うReekoh Pluginの作り方は[**こちら**](https://qiita.com/ghibi/items/43e1e805217b7d186b29)に書いています。
また、SigfoxクラウドのCallbackを受け、パイプラインに渡す方法は、[**こちら**](https://qiita.com/ghibi/items/bb9f60b63215f3873b79)に書いていますので、参考にしてください。

#Sigfox GPS端末から標高APIまで
まずは、Reekoh Pipeline StudioでSigfox GWと自家製GSI Service Pluginを配置します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/e66a0355-6ab9-9ba6-f464-a7906ae33486.png)

SigfoxクラウドからのCallbackは下記のようなJSONでPOSTされることを想定しています。

```
{
  "device": "{device}",
  "time": "{time}",
  "lat": {lat},
  "lng": {lng}
}
```
2つのPluginをPipeline Studioに配置し、Sigfox GW側の設定にあわせたSigfox Callback設定をいれておけば、標高API結果を取得するまではノンプログラミングでいけます。つまり、下図のところまではノンプログラミングに可能で、このパイプラインを動かすと、下記のような上記JSONをSigfoxクラウドから受信するたびに、下記のJSONをアウトプットします。

```json
{
  "title": "GSI Service Result",
  "data": {
    "device": "73xxxx",
    "time": 1538654677,
    "lat": 34.87436466683923,
    "lng": 135.6094595891116,
    "rkhDeviceInfo": {
      "_id": "73xxxx",
      "name": "iHere #0073xxxx",
      "location": [
        34.874365,
        135.60946
      ],
      "metadata": {}
    },
    "lastReadingDateTime": 1538654704735,
    "elevation": 80.7,
    "hsrc": "5m（写真測量）"
  },
  "result": {
    "elevation": 80.7,
    "hsrc": "5m（写真測量）"
  }
}
```

#標高APIの結果をストレージに保存
上記JSONのようなアウトプットをストレージに保存します。Reekohでは、`x_変数名`という形にするのが暗黙ルールっぽいので、Converterのhandler.jsで、それぞれデバイスID、緯度経度、標高をx_device, x_lat, x_lng, x_elevationパラメータに代入しておきます。

```handler.js
'use strict'

exports.handle = function (data, logger) {
  logger.log(data)
  return Promise.resolve({
    x_device: _.get(data, 'rkhDeviceInfo._id'),
    x_lat: data.lat,
    x_lng: data.lng,
    x_elevation: data.elevation, 
    x_datetime: moment(data.readingTime).format('YYYY-MM-DD HH:mm:ss')
  })
}
```
次にDatasetsプラグインを配置し、Converterと接続します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/49d59415-66a4-e34a-97a4-499b14eba6fd.png)
これで、DatasetにデバイスIDに加え、緯度経度、標高が蓄積されていくことになります。

#地図表示用のダッシュボードを作成する
ReekohメニューからDashboard Studioを選択するとダッシュボードを作成することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/7ff2db54-0913-2b5d-7396-44e57239c912.png)
ダッシュボードの大まかな流れは、Add Visualizationでガジェットを作成し、ガジェットの設定を行った後、他のガジェット追加のために再度Add Visualizationしていきます。最後に[Save Dashboard]でダッシュボードが作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/52876b65-c696-ceda-617b-7c2b4f9166c2.png)
Mapビューを作る場合は下図の通り、PipelineからDatasetの選択(Select Pipeline Dataset)、Select VisualizationでMapタグを選択、緯度経度情報として、Datasetのどのカラムを使うか(Set Latitude and Longitude)、Map表示にアイコン選択(Marker Icon)、アイコンクリック時のダイアログ表示項目を選択し、[Configure]ボタンをクリックすればOKです。
![screencapture-console-reekoh-io-2018-10-08-11_49_44.png](https://qiita-image-store.s3.amazonaws.com/0/172313/4065d9ae-5255-d02c-d6da-2bb5e35c89c2.png)
すると、下図のようなダッシュボードができあがります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172313/15051669-5919-3856-a111-6a1e1c51850c.png)

[Sigfox Japan KCCS](https://qiita.com/organizations/sigfox)