日本で容易に入手できるUna Shiled V2Sを使ってSigfoxを体験する

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

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

UnaShield V2Sはソラコムスイッチサイエンスなどでも購入できます。詳しくはKCCSの製品ページをご覧ください。ソラコムから購入した場合とそれ以外から購入した場合とでは設定方法が異なります。ソラコムから購入した場合にはソラコムのコンソールから、それ以外から購入した場合にはSigfoxのコンソールから設定します。

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

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

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

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

<?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 をセットアップするの手順を実施して、ソラコムコンソール上で温度などのグラフが表示できるようにしておきます。

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

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

Sigfox Backend CloudでのWebhookの設定方法

ソラコム購入者以外の手順3.に関する内容です。KCCSのマニュアルに従いSigfoxを登録しておきます。

  1. Sigfox Backend Cloudにログインします。
  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バイト伝送できます。サンプルスケッチでは、カウンタ、温度、電圧の3データを伝送しますが、タグに2バイト、データに2バイト使用します。温度と電圧は実数値ですが、値を10倍して2バイトの整数にしていることに注意が必要です。タグは3文字までの小文字と数字を2バイトにエンコードしています。カウンタタグ(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経由で収集するに続きます。

作成日: 19th August 2018