Sigfox Shield for Arduino の購入から Sigfox クラウド API によるメッセージ取得まで

# Sigfox Shield for Arduino について

Arduino IDE を使って Sigfox 回線を使った開発ができるシールドです。
送信するペイロードやタイミングなど、自由に開発したい場合、現時点では最も簡単な（安くて早い）選択肢です。

## 製造元 UnaBiz 正式名称 UnaShield 

UnaBiz: https://www.unabiz.com/
アジア（シンガポール、台湾）で Sigfox サービスを展開する事業者です。日本での京セラコミュニケーションシステムに相当。

UnaShild: https://unabiz.github.io/unashield/

日本の事業者ではないですが、日本で注文すると、ちゃんと `RCZ3` のシールドが届きました。

## 日本での卸元 京セラコミュニケーションシステム (KCCS)

https://www.kccs.co.jp/sigfox/product/

こちらからは購入できません。「4社から購入可能」と案内されていますので、いずれかから購入しましょう。

取扱説明書のダウンロードは可能です。 https://www.kccs.co.jp/sigfox/download/manual-sigfox-shield-for-arduino.pdf

# Shield の購入

## 販売店比較 買うならマルツ

いずれも、1年間のSigfox回線利用権が含まれています。
ソラコムを使いたい~~信者~~場合は一択ですが、それ以外は同じ製品なので価格で選んで構いません。
どれもKCCSと取引があるので、ちゃんとした代理店です。

| 販売店 | URL | 価格 | 送料 | 2年目以降について | 備考 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| ソラコム | https://soracom.jp/products/sigfox/sigfox_shield_for_arduino/ | 6,480円 (税抜き) | **907円** (税込) | 1,440円/1年 (税抜き) | Sigfox クラウド (backend.sigfox.com) 利用不可 |
| スイッチサイエンス | https://www.switch-science.com/catalog/3354/ | 6,026円 (税込) | **500円**<br>(10,000円以上で無料) | 1000円ほど | 販売ページの資料が充実 |
| 共立電子産業 | http://eleshop.jp/shop/g/gHAR311/ | 6,026円 (税込) | ネコポス **280円**<br>(7,500円(税込)以上無料) | 情報を確認中 |
| マルツエレック | https://www.marutsu.co.jp/pc/i/952284/ | 5,480円 (税抜) | 3,000円以上で **無料** | Sigfox契約が別途必要 |

公平に比較した結果、私はマルツから購入しました。

# Sigfox クラウドへの登録 (activate)

まずは Sigfox Cloud への登録が必要です。
KCCSなどから取扱説明書をダウンロードして、それに従って作業しましょう。
https://backend.sigfox.com からの登録ではないようです。

登録ページ https://buy.sigfox.com/activate

完了後、 [Sigfox クラウド](https://backend.sigfox.com/) で契約 (contract) 内容を確認すると、上り140回/日、下り4回/日が可能な、一番回数の多い契約となっていました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/204096/055c8579-5c4c-9102-af77-0b4dedd1351c.png)

# サンプルスケッチの実行

こちらも、ダウンロードした取扱説明書に従って作業します。

Arduino library: [UnaBiz/unabiz-arduino - GitHub](https://github.com/UnaBiz/unabiz-arduino)

説明書で紹介しているサンプルは[こちら](https://github.com/UnaBiz/unabiz-arduino/tree/master/examples/DemoTestUnaShieldV2SRCZ3)

スケッチを何も変更せずにコンパイル・書き込みを行っただけで、Sigfoxクラウドにデータが入ってくることが確認できました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/204096/284f60cd-84f9-4fec-bec1-bcb07e93bb1e.png)

上りペイロードは12バイトなので、16進(4bits)の場合 $12 \times 8 \div 4 = 24$ すなわち24文字となります。

サンプルスケッチのままですと、10回データを送信したら終了するので、確認ができたら Arduino の電源を落としましょう。

# Sigfox Cloud REST API

REST API のドキュメントを参照するにも `API ACCESS` の発行が必要なので、 https://qiita.com/ghibi/items/b9cb1d26ccff26a427a3 を参考に `API documentation` を確認しておきましょう。
（注意）利用権限のない API はドキュメントも表示されません。

API仕様はパブリックになっていませんので、 @ghibi の記事と同程度の情報量にとどめておきます。

## メッセージ取得 (Devices API)

`Devices API` の `Messages sent by a device` を利用して、特定の１端末のメッセージを取得します。
同じデバイスタイプのメッセージをまとめて取得する API もありますが、そちらはまた後日。

以下、固有の情報は伏字 `*` にして `curl` で取得してみました。
`time` (Unix Epoch) フィールドをキーとして使えるので、必要なメッセージを絞り込む場合に使いましょう。
（`since`, `before`, `limit`, `offset` というパラメーターが使えることも、既に https://github.com/mjuenema/python-sigfox-backend-api にてパブリックになっています）

```shell
$ curl -su ****:**** https://backend.sigfox.com/api/devices/******/messages?since=1538043230\&before=1538043260\&limit=2 | jq .data[]
{
  "device": "******",
  "time": 1538043257,
  "data": "920e5a00b0512a0194592000",
  "seqNumber": 12,
  "rinfos": [
      # 省略
  ],
  "nbFrames": 3,
  "operator": "SIGFOX_Japan_KCCS",
  "country": "JPN",
  "snr": "20.44",
  "linkQuality": "EXCELLENT",
  "groupId": "****"
}
{
  "device": "******",
  "time": 1538043232,
  "data": "920e5000b0512d0194592000",
  "seqNumber": 11,
  "rinfos": [
      # 省略
  ],
  "nbFrames": 3,
  "operator": "SIGFOX_Japan_KCCS",
  "country": "JPN",
  "snr": "20.85",
  "linkQuality": "EXCELLENT",
  "groupId": "****"
}
```

# おわりに

商用開発では callback を利用すべきですが、手早く確認・検証する場合は REST API を利用すると思います。
`time` をキーとして絞り込みができるので、効率よくメッセージを取得することも可能です。

Sigfoxクラウドに関してパブリックな情報が少なく、私もなかなか購入に踏み切れずにいました。
本記事の情報が、Sigfoxを新たに試してみるきっかけとなれば幸いです。