Azure
callback
IoT
IoTHub
SigFox

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の設定

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

次に、Sigfoxクラウドで、Callback設定画面に移動し、「Microsoft Azure IoT hub」を選択します。
image.png
その後、下図のCallback編集画面が表示されるので、Connection stringの入力テキストボックスに先ほどコピーしたAzure IoT HubのConnection Stringを貼り付けます。
screencapture-backend-sigfox-devicetype-5a17978f5005747c7760123d-callbacks-5bbdd43d2564320775fdf3cc-edit-2018-10-10-21_46_49.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が表示されていきます。
image.png

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

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

Azure Cosmos DBの作成

Azure Cosmos DBの作成画面は下図の通りです。Account Nameは適当(今回は「sigfoxcosmos」)APIは「SQL」として作成してみます。
image.png
[Create]ボタンを押すと作成がはじまります。

Stream Analytics Jobの作成

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

Input

Inputは、左メニューのInputsを選択し、[+Add stream Input]から[IoT Hub]を選択してください。
image.png
下図の設定画面になりますので、Input aliasの入力(今回は"InputFromIoTHub"にしました)、IoT Hub名の選択、IoT Hubから受け入れるデータのフォーマット(今回はJSON)等を選択します。
image.png

Output

Outputも、左メニューのOutputsを選択し、[+Add]から[Cosmos DB]を選択してください。
image.png
下図の設定画面になりますので、Output aliasの入力(今回は"OutputToCosmosDB"にしました)、Output先のCosmos DB情報を入力します。DatabaseやCollectionは、先のCosmos DB作成の時に適当に作っておいてください。(新規作成でもできそうですが)
image.png

Query

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

SELECT
    *
INTO
    [OutputToCosmosDB] <- Outputのalias名
FROM
    [InputFromIotHub]  <- Inputのalias名

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

Cosmos DBでデータの確認

念のため、Cosmos DBのData Explorerから、DatabaseとCollectionを選択すると、格納されたデータを確認することができます。
image.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のalias名

お試しください。

Sigfox Japan KCCS