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の設定
まずは、AzureのWebコンソールから、Azure IoT Hubのリソースを作成します。ここでは、リソースグループ「SigfoxJapanKCCS」、IoT Hub名を「SigfoxIoT」として作成します。
作成されたSigfoxIoTを選択し、左メニューからShared access policiesを選択、iothubownerを選択すると、Shared access keys情報が表示されますので、Connection String(下図赤枠のところをコピーしておきます)
次に、Sigfoxクラウドで、Callback設定画面に移動し、「Microsoft Azure IoT hub」を選択します。
その後、下図のCallback編集画面が表示されるので、Connection stringの入力テキストボックスに先ほどコピーしたAzure IoT HubのConnection Stringを貼り付けます。
あとは、Azure IoT Hub側に送りたいJSONを記載します。今回は、下記のようなJSONを送ります。
{
"device" : "{device}",
"data" : "{data}",
"time" : {time},
"seqNumber" : {seqNumber}
}
これで、連携完了です。
Azure IoT Hubに戻り、ExplorersのIoT devicesを選択すると、下図のようにCallbackされたデバイスIDが表示されていきます。
#Stream Analytics JobによりDBにデータを保存する
今回は、Cosmos DBにSigfoxのデバイスメッセージを保存していくので、Azure Cosmos DBのリソースを作成します。
##Azure Cosmos DBの作成
Azure Cosmos DBの作成画面は下図の通りです。Account Nameは適当(今回は「sigfoxcosmos」)APIは「SQL」として作成してみます。
[Create]ボタンを押すと作成がはじまります。
##Stream Analytics Jobの作成
Stream Analytics Jobは、IoT Hubから、今回のケースではCosmos DBにデータを移す役割になります。
今まで同様、リソースの作成で、Stream Analytics Jobを選択すると、下図のような画面になります。
ここで、Job nameは適当(今回は「SigfoxStreamJob」)に設定して、[作成]ボタンをクリックすると作成されます。(ごめんなさい。下記画像はStringJobになっていますが。。。)
作成後の設定項目ですが、基本的にはInput、Output、Queryを設定することにより、どこから、どこへ、どのようにデータを受け渡すかの設定が完了します。
###Input
Inputは、左メニューのInputsを選択し、[+Add stream Input]から[IoT Hub]を選択してください。
下図の設定画面になりますので、Input aliasの入力(今回は"InputFromIoTHub"にしました)、IoT Hub名の選択、IoT Hubから受け入れるデータのフォーマット(今回はJSON)等を選択します。
###Output
Outputも、左メニューのOutputsを選択し、[+Add]から[Cosmos DB]を選択してください。
下図の設定画面になりますので、Output aliasの入力(今回は"OutputToCosmosDB"にしました)、Output先のCosmos DB情報を入力します。DatabaseやCollectionは、先のCosmos DB作成の時に適当に作っておいてください。(新規作成でもできそうですが)
###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を選択すると、格納されたデータを確認することができます。
#おまけ
Stream Analytics Jobには、Functionsという機能があります。これは、InputデータをJavascript言語で加工することができます。
例えば、加速度計のX,Y,Zの値を元に加速度の値ACCをACC=√(X2+Y2+Z2)という式で求めて、その結果をDBに保存したい場合などに使えます。
Javascript UDFをAddし、下記のような関数を定義すれば
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名
お試しください。