Sigfox CallbackとAzure IoT Hub連携

技術情報

Sigfox Callbackには、Custom Callback以外にAWS IoT、AWS Kinesis、Microsoft Azure Event hub、Microsoft Azure IoT hub、IBM Watson IoT Platformへの連携が用意されています。
ここでは、Azure IoT Hubとの連携方法を記載します。

Sigfox Callback設定とAzure IoT Hubの設定

tech-181010-1.png

まずは、AzureのWebコンソールから、Azure IoT Hubのリソースを作成します。ここでは、リソースグループ「SigfoxJapanKCCS」、IoT Hub名を「SigfoxIoT」として作成します。
作成されたSigfoxIoTを選択し、左メニューからShared access policiesを選択、iothubownerを選択すると、Shared access keys情報が表示されますので、Connection String(下図赤枠のところをコピーしておきます)

tech-181010-2.png

次に、Sigfoxクラウドで、Callback設定画面に移動し、「Microsoft Azure IoT hub」を選択します。

tech-181010-3.png

その後、下図のCallback編集画面が表示されるので、Connection stringの入力テキストボックスに先ほどコピーしたAzure IoT HubのConnection Stringを貼り付けます。

tech-181010-4.png

あとは、Azure IoT Hub側に送りたいJSONを記載します。今回は、下記のようなJSONを送ります。

sigfox_callback.json
{ "device" : "{device}", "data" : "{data}", "time" : {time}, "seqNumber" : {seqNumber} } 

これで、連携完了です。
Azure IoT Hubに戻り、ExplorersのIoT devicesを選択すると、下図のようにCallbackされたデバイスIDが表示されていきます。

tech-181010-5.png

Stream Analytics JobによりDBにデータを保存する

tech-181010-6.png

今回は、Cosmos DBにSigfoxのデバイスメッセージを保存していくので、Azure Cosmos DBのリソースを作成します。

Azure Cosmos DBの作成

Azure Cosmos DBの作成画面は下図の通りです。Account Nameは適当(今回は「sigfoxcosmos」)APIは「SQL」として作成してみます。

tech-181010-7.png

[Create]ボタンを押すと作成がはじまります。

Stream Analytics Jobの作成

Stream Analytics Jobは、IoT Hubから、今回のケースではCosmos DBにデータを移す役割になります。
今まで同様、リソースの作成で、Stream Analytics Jobを選択すると、下図のような画面になります。
ここで、Job nameは適当(今回は「SigfoxStreamJob」)に設定して、[作成]ボタンをクリックすると作成されます。(ごめんなさい。下記画像はStringJobになっていますが。。。)

tech-181010-8.png

作成後の設定項目ですが、基本的にはInputOutputQueryを設定することにより、どこから、どこへ、どのようにデータを受け渡すかの設定が完了します。

Input

Inputは、左メニューのInputsを選択し、[+Add stream Input]から[IoT Hub]を選択してください。

tech-181010-9.png

下図の設定画面になりますので、Input aliasの入力(今回は"InputFromIoTHub"にしました)、IoT Hub名の選択、IoT Hubから受け入れるデータのフォーマット(今回はJSON)等を選択します。

tech-181010-10.png

Output

Outputも、左メニューのOutputsを選択し、[+Add]から[Cosmos DB]を選択してください。

tech-181010-11.png

下図の設定画面になりますので、Output aliasの入力(今回は"OutputToCosmosDB"にしました)、Output先のCosmos DB情報を入力します。DatabaseやCollectionは、先のCosmos DB作成の時に適当に作っておいてください。(新規作成でもできそうですが)

tech-181010-12.png

Query

最後に、InputからOutputへ受け渡すQueryを設定します。
Queryも、左メニューのQueryを選択します。実際のQuery文は、Output先にどのようなデータを渡したいかによりますが、とりあえず全部ということであれば、下記のようなクエリで出来ると思います。

SELECT
    *
INTO
    [OutputToCosmosDB] <- output="" alias="" from="" inputfromiothub="" -="" input="" pre=""> 

設定したQueryを[Save]後、Stream Analytics Jobを開始するとデータの受け渡しが始まります。

Cosmos DBでデータの確認

念のため、Cosmos DBのData Explorerから、DatabaseとCollectionを選択すると、格納されたデータを確認することができます。

tech-181010-13.png

おまけ

Stream Analytics Jobには、Functionsという機能があります。これは、InputデータをJavascript言語で加工することができます。
例えば、加速度計のX,Y,Zの値を元に加速度の値ACCをACC=√(X2+Y2+Z2)という式で求めて、その結果をDBに保存したい場合などに使えます。
Javascript UDFをAddし、下記のような関数を定義すれば

acc.js
function acc(x, y, z) {
    return Math.pow((Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2)), 0.5);
}

先程のQuery文で、下記のようにacc関数を呼び出すことができます。

SELECT
    *,
    udf.acc(x,y,z)
INTO
    [OutputToCosmosDB] <- output="" alias="" from="" inputfromiothub="" -="" input="" pre=""> 

お試しください。