技術情報
Sigfox CallbackとAzure IoT Hub連携
2018.10.10
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="" pre="">
設定した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="" pre="">
お試しください。