Sigfox Shield for ArduinoでOSSのIoTプラットフォーム「Thinger.io」を使ってみる

#Thinger.ioとは
Thinger.ioはスペインで開発されたOSSのIoTプラットフォームであり、IoT端末から送信されたデータを管理することができます。管理したデータはCSVファイルに書き出すこと、グラフとして表示することができます。今回はSigfoxのIoT端末である「Sigfox Shield for Arduino」を利用し温湿度を計測したグラフ表示します。
[Thinger.io](https://thinger.io/)
![Thingerio_グラフ.png](https://qiita-image-store.s3.amazonaws.com/0/307261/bf53363a-c233-0b1d-1746-40030344d73c.png)
Thinger.ioでのグラフ表示

![thingerio_csv_output.png](https://qiita-image-store.s3.amazonaws.com/0/307261/8c575e08-f87d-2109-e074-5aa96f56b9e5.png)
IoT端末からThinger.ioに送信したデータ(CSVに出力)

#Sigfox Shield for Arduinoとは
Sigfox Shield for ArduinoはLPWA(Low Power Wide Area)の規格であるSigfoxの通信ができるArduino Unoに対応したシールドです。Sigfox Shield for Arduinoは温湿度センサ(BME280)と加速度センサ(MMA8451Q)が内蔵されています。またGROVEコネクタが2つ搭載されており、様々なGROVEセンサー(光度センサーなど)を利用することもできます。
[Sigfox Shield for Arduino(株式会社スイッチサイエンス)](https://www.switch-science.com/catalog/3354/)

![DSC_0049.JPG](https://qiita-image-store.s3.amazonaws.com/0/307261/72f75a39-a493-415a-d244-6eed9818af07.jpeg)
Sigfox Shield for Arduino

#Thinger.ioへの送信手順の概要
下記の手順にてThinger.ioで温湿度のグラフを表示します。主な流れとしましては次のようになります。

１．Sigfox Shield for Arduinoのプログラムを実行します。計測した温湿度データはSigfoxのデバイス管理をしている[Sigfox Backend Cloud](https://backend.sigfox.com/auth/login)に送信されます。

２．Sigfox Backend CloudからThinger.ioへ計測データを転送するためにThinger.ioでAccess Tokenを発行します。

３．Sigfox Backend Cloudの[Callback機能](https://qiita.com/ghibi/items/53259381a30363538a6d)を利用して計測したデータをThinger.ioのサーバに転送します。

４．Thinger.ioにデータが転送されたことを確認、グラフの表示設定をします。

##１．Sigfox Backend Cloudへの送信
[Sigfox Shield for Arduinoの取り扱い説明書](https://www.kccs.co.jp/sigfox/download/manual-sigfox-shield-for-arduino.pdf)に記載されている設定方法にてSigfox Shield for Arduinoのデバイス登録、[ArduinoのIDEのインストール](https://www.arduino.cc/en/Main/Software)、[ライブラリのインストール](https://github.com/UnaBiz/unabiz-arduino)を実施します。

本記事では[サンプルプログラムのsend-altitude](https://github.com/UnaBiz/unabiz-arduino/blob/master/examples/send-altitude/send-altitude.ino)を読み込んでデータを送信します。

![thingerio.png](https://qiita-image-store.s3.amazonaws.com/0/307261/fb50bce0-b07a-15f8-c474-97435efb395b.png)
send-altitudeの読み込み

注意事項としましてはSigfoxの通信は1日に最大140回のデータ送信しかできません。(参考：[SIGFOXネットワークのご紹介](http://www.soumu.go.jp/main_content/000452035.pdf))
サンプルプログラムでは10秒間に1回送信するように記載されていますのであっという間に140回を使い切ってしまいますので送信する時間間隔を変更します。例えば「delay(3600000);」(60分*60秒*1000ミリ秒=1時間)にすることで1時間に1回データ送信します。

ArduinoのIDEにてコンパイルと書き込みが成功するとSigfox Backend Cloudへデータが送信されます。
![sigfox1.png](https://qiita-image-store.s3.amazonaws.com/0/307261/867f9e0f-7e6c-074d-799e-bd6c0c6178d6.png)
送信データの履歴(16進数のデータにて送信される)

##２．Thinger.ioの登録、Access Tokenの発行
Thinger.ioは個人のサーバやAWSにインストールすることができますが、今回はThinger.ioが提供しているサーバを利用します。

はじめに[Thinger.io](https://thinger.io/)にアクセスしユーザ登録します。登録ができましたらログインするとダッシュボードが表示されます。
![sigfox2.png](https://qiita-image-store.s3.amazonaws.com/0/307261/f2cfa86b-05aa-2cb0-d7c1-8c201fa85d11.png)
Thinger.ioのダッシュボード

ダッシュボードに移動しましたら「Data Buckets」メニューから「Add Bucket」をクリックします。
![sigfox3.png](https://qiita-image-store.s3.amazonaws.com/0/307261/896708aa-2ef6-c19e-84e5-ef395154e00e.png)
Data Buckets

「Bucket id」「Bucket name」は分かりやすい名前、
「Bucket description」は作成するBucketの説明、
「Enabled」はON、
「Data Source」は「From Write Call」を選択し「Add Bucket」をクリックします。
![sigfox4.png](https://qiita-image-store.s3.amazonaws.com/0/307261/07ff1bc2-e2f0-47d5-f3ce-b672892afbb5.png)
Data Bucketの設定例

Data Bucketを作成しましたら「Access Tokens」メニューから「Add Token」をクリックします。
![sigfox5.png](https://qiita-image-store.s3.amazonaws.com/0/307261/2503cb2d-0e85-76c1-00af-0711268ab73f.png)
Access Tokens

「Token ID」はSigfox Backend Cloudに登録したデバイスID、
「Token Name」は分かりやすい名前、
「Enabled」はON、
「Token Permissions」の「Type」は「Bucket」、
「Token Permissions」の「Resource」はData Backetメニューで作成した名前を選択、
「Token Permissions」の「Action」は「WriteBucket」を選択し「Add Token」をクリックします。
![sigfox6.png](https://qiita-image-store.s3.amazonaws.com/0/307261/cae7735c-015a-b9a6-fabc-8e023b130c28.png)
Access Tokensの設定例

「Add Token」をクリックすると下部に「Access Token」が発行されます。Access Tokenは次のCallback機能で利用するのでコピーします。
![sigfox7.png](https://qiita-image-store.s3.amazonaws.com/0/307261/5b68b881-2c4f-d680-87ff-d82fe833386a.png)
Access Tokenの発行

##３．Callback機能の設定
[Sigfox Backend Cloud](https://backend.sigfox.com/auth/login)にログインし、「DEVICE」タブをクリックします。デバイスリストからThinger.ioのToken IDに登録したデバイスの「Device type」をクリックします。その後、「CALLBACKS」メニューから「New」をクリックします。
![sigfox8.png](https://qiita-image-store.s3.amazonaws.com/0/307261/83c959b7-62d6-d4ac-5513-df0612818a61.png)
CALLBACKS

Callbackの種類から「Custom callback」をクリックします。
![sigfox9.png](https://qiita-image-store.s3.amazonaws.com/0/307261/8e24b41d-bb3c-c318-194e-b41303d31d95.png)
Custom callback

「Type」は「Data」「UPLINK」、
「Channel」は「URL」、
「Send duplicate」はチェックしない、
「Custom payload config」はソースコードのコメント文に記載されている「temp::int:8 humid::int:8 alt::int:8 modtemp::int:8」、
「URL pattern」は「https://api.thinger.io/v1/users/"thinger.ioのユーザーid"/buckets/"Data Bucketメニューで作成したBucket id"/data」、
「Send SNI」はチェックしない、
「Headers」の「header」は「Authorization」、
「Headers」の「value」は「Bearer "発行したAccess token"」、
「Content type」は「application/json」、
「Body」には転送するデータをJSON形式で入力します。

```json:Bodyの入力例
{
 "device" : "{device}",
 "time" : {time},
 "temperature" : {customData#temp},
 "humidity" : {customData#humid},
 "altitude" : {customData#alt},
 "module temperature" : {customData#modtemp}
}
```
すべての項目を入力したら「OK」をクリックします。
![sigfox10.png](https://qiita-image-store.s3.amazonaws.com/0/307261/53e482ca-392a-e677-5b2b-a3cd9f46f9b3.png)
Callbackの設定例

Sigfox Shield for Arduinoからデータを送信後、「DEVICE」のリストから対象の「Id」をクリックし「MESSAGES」メニューに移動します。データ送信の履歴が表示されている表の「Callbacks」の緑色の矢印のボタンをクリックし、正常にThinger.ioのサーバにデータが送信されたか確認します。
![sigfox11.png](https://qiita-image-store.s3.amazonaws.com/0/307261/0af25ba3-9dda-962d-abbf-1e1266ed31a5.png)
メッセージの確認

##４．Thinger.ioでのデータの確認、グラフの作成
Thinger.ioを開き「Data Buckets」メニューから作成したBucket idをクリックします。Data Bucketの画面の「Bucket Explorer」の表が更新されていることを確認出来たらデータの送信が成功です。
![sigfox12.png](https://qiita-image-store.s3.amazonaws.com/0/307261/91f91c63-c2c5-6abd-f629-8a924621c0ce.png)
デバイスの計測結果の表

また下部の「Bucket Data Export」では期間を指定してCSV,ARFF,JSON形式に出力することができます。
![sigfox13.png](https://qiita-image-store.s3.amazonaws.com/0/307261/6e1d080c-b270-e430-44b5-66785aab23fb.png)
Bucket Data Export

次に「Dashbords」メニューから「Add Dashboards」をクリックします。
![sigfox15.png](https://qiita-image-store.s3.amazonaws.com/0/307261/6f870be4-443b-b18b-9290-c2e6c08b5625.png)
Dashboards

「Dashboard id」「Dashboard name」は分かりやすい名前、
「Dashboard description」は説明を入力し「Add Dashboard」をクリックします。
![sigfox14.png](https://qiita-image-store.s3.amazonaws.com/0/307261/021e0b06-5dc2-1231-b82b-2d9a750bca26.png)
Dashboardsの入力例

作成したダッシュボードに移動し右側のスイッチをONにすると編集が可能になります。「Add Widget」をクリックしグラフを作成します。
![sigfox16.png](https://qiita-image-store.s3.amazonaws.com/0/307261/456fc918-d624-8edd-1bed-0d547134d0ff.png)
登録したダッシュボード

「Wedget」タブではグラフのタイトルや種類を入力します。
「Title」はグラフのタイトル、
「Subtitle」はグラフのサブタイトル、
「background」は背景色、
「Type」はグラフの種類を入力します。
次のタブはグラフの種類によって設定する項目が変わります。
すべてのタブの設定が終わりましたら「Save」をクリックします。
![sigfox17.png](https://qiita-image-store.s3.amazonaws.com/0/307261/bfbd0c64-d63f-7c74-3ee3-8c63dd2e5982.png)
![sigfox18.png](https://qiita-image-store.s3.amazonaws.com/0/307261/eabd8208-bddf-afdc-da72-fbdff02dbf44.png)
![sigfox19.png](https://qiita-image-store.s3.amazonaws.com/0/307261/db0afd16-77d4-6006-d7d3-e2ef319a2cd7.png)
Widgetの設定例

Widgetを設定しブラウザを更新すると自動的にグラフが作成されます。
![sigfox20.png](https://qiita-image-store.s3.amazonaws.com/0/307261/890b580e-57be-e0a8-3df7-a65dbb60faf0.png)
自動的に作成されるグラフ

#おわりに
Thinger.ioを利用することでSigfox Shield for Arduinoで計測したデータをグラフによって可視化すること、CSVに出力して計測したデータを分析することができます。Sigfox Shield for Arduinoでは温湿度と加速度センサが内蔵されているので、万葉箱として利用したり時間ごとの物体の傾きの計測として利用したりできます。さらにSigfox Shield for ArduinoにGROVEセンサーなど各種センサーを取り付けることで光度や水質を測定できる農業用のIoTデバイスにも活用できると思います。

#参考文献
[Thnger.io公式サイト](https://thinger.io/)
[Thinger.io Documentation](http://docs.thinger.io/)
[Sigfox(京セラコミュニケーションシステム株式会社)](https://www.kccs.co.jp/sigfox/)
[Sigfox Shield for Arduino(UnaShield V2 / V2S* )取扱説明書]
(https://www.kccs.co.jp/sigfox/download/manual-sigfox-shield-for-arduino.pdf)
[SIGFOXネットワークのご紹介](http://www.soumu.go.jp/main_content/000452035.pdf)
[Sigfox Shield for Arduino(株式会社スイッチサイエンス)](https://www.switch-science.com/catalog/3354/)
[unabiz-arduino](https://github.com/UnaBiz/unabiz-arduino/wiki/UnaShield)
[Sigfox Callback機能](https://qiita.com/ghibi/items/53259381a30363538a6d)
[Sigfox Callback - Custom Payload Config機能](https://qiita.com/ghibi/items/361ea55ea04658b4193c)
[Sigfoxデバイス管理 - デバイスタイプ管理](https://qiita.com/ghibi/items/4eccef2ba81cf86a3385)
[Sigfoxデバイス管理 - デバイス管理](https://qiita.com/ghibi/items/8518ef3014802ea8c834)