技術情報

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

img-20181010-technical-01.png

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

img-20181010-technical-02.png

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

img-20181010-technical-03.png

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

img-20181010-technical-04.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が表示されていきます。

img-20181010-technical-05.png

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

img-20181010-technical-06.png

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

Azure Cosmos DBの作成

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

img-20181010-technical-07.png

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

Stream Analytics Jobの作成

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

img-20181010-technical-08.png

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

Input

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

img-20181010-technical-09.png

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

img-20181010-technical-10.png

Output

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

img-20181010-technical-11.png

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

img-20181010-technical-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を選択すると、格納されたデータを確認することができます。

img-20181010-technical-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=""> 

お試しください。

著者情報

Products and Marketing Department 日比 学

京セラコミュニケーションシステム株式会社(KCCS)よりSigfox社(フランス)に出向中の元自称Sigfoxエバンジェリスト

  • KCCSから追い出され、フランスの片田舎で余生を過ごしています
Twitter:https://twitter.com/ghibi