Una Shiled V2Sの測定データをWebhookで受け取る

# 日本で容易に入手できるUna Shiled V2Sを使ってSigfoxを体験してみよう

SigfoxのArduino向けシールド「Una Shiled V2S」を使い、その観測データを自らのウェブサイトでWebhookを受け取る方法を解説します。PHPの動作するインターネットに接続されたウェブサーバーを持っていることが前提です。

日本では京セラコミュニケーション(KCCS)がSigfoxを運営しています。使いたい場所がSigfoxのサービスエリア内であることを[確認](https://www.sigfox.com/en/coverage)してください。

UnaShield V2Sは[ソラコム](https://soracom.jp/products/sigfox/sigfox_shield_for_arduino/)や[スイッチサイエンス](https://www.switch-science.com/catalog/3354/)などでも購入できます。詳しくはKCCSの[製品ページ](https://www.kccs.co.jp/sigfox/product/index.html)をご覧ください。ソラコムから購入した場合とそれ以外から購入した場合とでは設定方法が異なります。ソラコムから購入した場合にはソラコムのコンソールから、それ以外から購入した場合にはSigfoxのコンソールから設定します。

大まかな手順は次の通りです。

1. Una Shield V2SとArduino Uno等（互換品でも大丈夫でしたが、自己責任でお願いします）を接続して、Arduinoにスケッチをダウンロードします。ソラコムの[Sigfox Shield for Arduino をセットアップする](https://dev.soracom.io/jp/start/sigfox_hw_unashield-v2s/)にある「UnaShield をセットアップする」の項をご覧ください。
2. WebサーバにWebhookを受け取れるようにする。
3. ソラコムのコンソールまたはSigfoxのコンソールから自らのWebサーバにデータを送信
する設定をする。

## WebサーバでWebhookを受け取れるようにする

手順2.に関する内容です。次のようなPHPファイル(例えば``index.php``)をWebサーバに設置します。

```php
<?php
$LOGFILE = './hook.log';
$postdata = file_get_contents("php://input");
file_put_contents($LOGFILE, date("Y-m-d H:i:s")." ".$_SERVER['REMOTE_ADDR']." ".
$postdata."\n", FILE_APPEND|LOCK_EX);
$payload = json_decode($postdata, true);
foreach($payload as $key => $value) {
  file_put_contents($LOGFILE, "  ".$key.": ".$value."\n", FILE_APPEND|LOCK_EX);
}
?>
OK.
```

そのディレクトリに ``hook.log`` というファイルを作り、``chmod 666``などとしてサーバプロセスがそのファイルを書き込めるようにします。このファイルにデータがたまります。curlが使える人は

```
curl -X POST [PHPファイルへのURL] -d '{"name":"test"}'
```

などとして、hook.logにデータが記録されることを確認してください。

## ソラコムコンソールでのWebhookの設定方法

ソラコムでの購入者の手順3.に関する内容です。あらかじめ[Sigfox Shield for Arduino をセットアップする](https://dev.soracom.io/jp/start/sigfox_hw_unashield-v2s/)の手順を実施して、ソラコムコンソール上で温度などのグラフが表示できるようにしておきます。

1. [ユーザコンソール](https://console.soracom.io/)にログインします。
2. 「Menu」→ 「Sigfoxグループ」→ (自ら設定したグループ、例えばsigfox）の順に進みます。
3. 「SORACOM Beam設定」のプラスボタンを押し、転送先のプロトコル、ホスト名、ポート番号、PHPファイルへのパスを入力して、保存します。その他の部分はそのままでかまいません。

これだけです。Una Shield V2Sが送信するバイナリデータをソラコムコンソールが解釈してくれて便利です。

## Sigfox Backend CloudでのWebhookの設定方法

ソラコム購入者以外の手順3.に関する内容です。KCCSの[マニュアル](https://www.kccs.co.jp/sigfox/download/manual-sigfox-shield-for-arduino.pdf)に従いSigfoxを登録しておきます。

1. [Sigfox Backend Cloud](https://backend.sigfox.com/auth/login)にログインします
。
2. 上部の「DEVICE TYPE」をクリックして、さらに、Name欄のUnabizをクリックします。
左側の「CALLBACKS」をクリックします。
3. 右側の「New」をクリックします。
4. TypeにDATAとUPLINKが、ChannelにURLを選択します。Custom payloadに

```
t1::uint:16 ctr::uint:16:little-endian t2::uint:16 tmp::uint:16:little-endian t3::uint:16 vlt::uint:16:little-endian
```

と入力します。さらに、Url patternにWebhookアドレスを、Use HTTP MethodにPOSTを、バーチャルサーバご利用の際はSend SNIにチェックを、Content typeは ``application/json`` に、Bodyは例えば、

```
{"time":"{time}","station":"{station}","rssi":"{rssi}","snr":"{snr}","data":"{data}","counter":"{customData#ctr}","temperature":"{customData#tmp}","voltage":"{customData#vlt}","t1":"{customData#t1}","t2":"{customData#t2}","t3":"{customData#t3}"}
```

とします。最後にOkをクリックします。

t1, t2, t3にはエンコードされたタグ名（それぞれctr, tmp, vlt）が入っています。この方法でのカウンタ、温度、電圧の値は10倍されて記録されます。

Sigfoxは全部で12バイト伝送できます。[サンプルスケッチ](https://github.com/UnaBiz/unabiz-arduino/blob/master/examples/DemoTestUnaShieldV2/DemoTestUnaShieldV2S.ino)では、カウンタ、温度、電圧の3データを伝送しますが、タグに2バイト、データに2バイト使用します。**温度と電圧は実数値ですが、値を10倍して2バイトの整数にしている**ことに注意が必要です。タグは3文字までの小文字と数字を2バイトに[エンコード](https://github.com/UnaBiz/unabiz-arduino/wiki/UnaShield)しています。カウンタタグ(ctr)、カウンタデータ、温度タグ(tmp)、温度データ、電圧タグ(vlt)、電圧データの順に並んでいます。

## 終わりに

この複雑な手順を乗り切ると、次のように測定データを得ることができます。

```
2018-xx-xx xx:xx:xx ip-address {"device":"xxxxxx","time":"xxxxxxxxxxx","station":"xxxx","lat":"34.0","lng":"132.0","rssi":"-137.00","snr":"11.27","data":"920e203fb051300194592000","seqNumber":"95","ctr":1616,"tmp":30.4,"vlt":3.2,"binaryParserEnabled":true}
  device: xxxxxx
  time: xxxxxxxxxx
  station: xxxx
  lat: 34.0
  lng: 132.0
  rssi: -137.00
  snr: 11.27
  data: 920e203fb051300194592000
  seqNumber: 95
  ctr: 1616
  tmp: 30.4
  vlt: 3.2
  binaryParserEnabled: 1
```

Una Shield V2Sには、みんな大好きなボッシュのBME280（温度・湿度・気圧センサ）が付いています。実数値を2バイト整数に置き換え、タグを取り除いて、自分でWebhookを書けば全部で6実数値データを伝送できます。みんなでサブGHz無線を楽しみましょう。

[Una Shiled V2S付属の温湿度・気圧・加速度センサのデータをSigfox経由で収集する](https://qiita.com/yoronneko/items/478a2884c4317eb3ea8c)に続きます。