2017-11-10 5 views
0

私はノード用のAzure IoT Hub Device SDKを使用して、新しいBLOB-in-storage-accountイベント(または正式に呼び出されたもの)を待ち受けようとしています。私はthis sampleに従っています。私はそのコンテナにファイルを追加するとき「新しいBLOB in storage」イベントを聞くにはどうすればよいですか?

portal screenshot

しかし、クライアントSDKは何を取得していない:私は、通知を受信して​​い

がオン。

client.on('message', function (msg) { 
    // message event does not fire 
    console.log('Id: ' + msg.messageId + ' Body: ' + msg.data); 
} 

私は(もポータルブレードから)クラウド - デバイスメッセージを送信する場合、それだけで罰金を通過し、私はconsole.log()でそれを読むことができます。

完全に間違ったイベントを聞いていますか— message

+0

オフブロブ・ストレージ・火災の前に遅延があり、ちょっと待って「ちょっと新しいブロブが!」イベントとIoTハブによってピックアップされますか? Azure関数blobバインディングのように?私は正直に言うと1分もかからずに待っていましたが、私が正しくやっていれば私はADDと戦うことができます。 – evilSnobu

+0

代わりにこの例を確認してください:https://github.com/Azure/azure-iot-sdk-node/blob/master/device/samples/device_blob_upload.js、デバイスからのblobアップロードを起動して監視する方法を示します視点。次に、バックエンドの観点からアップロードを監視するには、サービスクライアントを使用し、この他のサンプルを使用する必要があります。https://github.com/Azure/azure-iot-sdk-node/blob/master/service/ samples/receive_file_notifications.js –

+0

私はこれをすべて後方に持っているように見えます。私はバックエンドからBLOBストレージにファイルをアップロードしようとしており、すべての(または特定の)デバイスについて通知を受け取ることを期待しているため、デバイス上でいくつかの作業を開始することができます。私はちょうどblobトリガーとAzure関数を使用して、機能コードからクラウドツーデバイスメッセージングAPIを自分自身を呼び出す必要がありますか? – evilSnobu

答えて

0

クラウドからデバイスへのメッセージチャネルでファイルアップロード通知を受信する予定があるようです。これらの通知が表示される場所ではありません。 デバイスのSDK、およびサービスのSDK:

はアズールのIoTハブ用のSDKの2種類があります。

  • 能力にファイルをアップロードデバイスSDKアズール-IOTデバイスパッケージ)です。 モニタファイルアップロードの通知へ
  • 機能(すべてのデバイスから)サービスSDK紺碧-iothubパッケージ)です。 デバイス SDKで

アップロードが完了すると、uploadToBlobメソッドへのコールバックが呼び出されます。

source from example

var Protocol = require('azure-iot-device-mqtt').Mqtt; 
var Client = require('azure-iot-device').Client; 
var fs = require('fs'); 

var filePath = '[path/to/file]'; 
var client = Client.fromConnectionString(deviceConnectionString, Protocol); 
fs.stat(filePath, function (err, fileStats) { 
    var fileStream = fs.createReadStream(filePath); 

    client.uploadToBlob('testblob.txt', fileStream, fileStats.size, function (err, result) { 
    if (err) { 
     console.error('error uploading file: ' + err.constructor.name + ': ' + err.message); 
    } else { 
     console.log('Upload successful - ' + result); 
    } 
    fileStream.destroy(); 
    }); 
}); 

ファイルがデバイスによってブロブにアップロードされたときに通知をリッスンしたい場合は、サービス SDKを使用する必要があります。クライアントを使用して「ファイル通知受信者」を取得し、このオブジェクトの「メッセージ」イベントで待機します。 @ pierreca-MSFTに加えて

source for the example

var Client = require('azure-iothub').Client; 
var client = Client.fromConnectionString(connectionString); 

client.open(function (err) { 
    if (err) { 
    console.error('Could not connect: ' + err.message); 
    } else { 
    console.log('Client connected'); 

    client.getFileNotificationReceiver(function(err, receiver) { 
     if(err) { 
     console.error('Could not get file notification receiver: ' + err.message); 
     } else { 
     receiver.on('message', function(msg) { 
      console.log('File uploaded: '); 
      console.log(msg.data.toString()); 
      receiver.complete(msg, function(err) { 
      if (err) { 
       console.error('Could not complete the message: ' + err.message); 
      } else { 
       console.log('Message completed'); 
      } 
      }); 
     }); 
     } 
    }); 
    } 
}); 
0

、このようAzureのイベントグリッド(今日のプレビューで)を使用するなど、アップロードファイルの通知のための別のオプションもあります。この場合、ファイルはのイベントドリブンブロブストレージにアップロードされ、自動的にイベントメッセージをイベントグリッドに公開します。これらのイベントメッセージは、イベントグリッドサブスクリプションに基づいて信頼性の高い方法でサブスクライバに配信(プッシュ)できます。これはイベント駆動プッシュモデルです。

Azureイベントグリッドの詳細はhereで、イベントドリブンブロッブスストレージの場合はhereです。

次の画面スニペットは、ファイルがデバイスからアップロードされた後の、自分のサブスクライバ(Azure機能)でのイベントメッセージの例を示しています。この例(デモンストレーション用)では、デバイスがアップロードファイルを処理するためにREST APIを使用していたことに注意してください。詳細はhereを参照してください。

enter image description here

関連する問題