2017-06-22 43 views
0

メッセージがIoTHubに入るとき、メッセージの圧縮解除を処理するために、私はAzure関数を開発しました。Azure関数:入出力としてのIoTHub

機能はIoTHubのメッセージングエンドポイントに建てに接続されているので、EventHubのように機能することができます。

私はそれを実行したいストリームテストと他のジョブがテレメトリーの受信を続けるために別のエンドポイントに接続する必要がないように、解凍されたコンテンツをIoTHubに出力します。

は、ドキュメントAzureの機能を囲むとIoTHubsにそれらをフックのかなりの量があるようですが、それの一部は昨年からだと私は物事がかなり変更されている知っています。

これは読みと同じIoTHubに書き込むための私の現在の接続文字列です:

Endpoint=sb://iothub-ns-34997-5db385cb1f.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=;EntityPath=IoTHub

今、私は出力がIoTHubエンドポイントにセットアップを行きました、私はエラーを取得しています

Exception while executing function: Functions.DecompressionJS. Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:. Microsoft.ServiceBus: Unauthorized access. 'Send' claim(s) are required to perform this operation. Resource: 'sb://iothub-ns-34997-5db385cb1f.servicebus.windows.net/iothub'. TrackingId:e85de1ed565243bcb30bc622a2cab252_G4, SystemTracker:gateway6, Timestamp:6/22/2017 9:20:16 PM. 

だから私は、接続文字列に何か問題があった考え出しので、私は/エンドポイントの残りの部分は、現在の接続文字列に一致したため、例外は、使用することを私に言ったことiothub含めるためにそれを修正。

私は、接続文字列を更新し、私は別の例外だ機能reranたら:

Exception while executing function: Functions.DecompressionJS. Microsoft.Azure.WebJobs.Host: Error while handling parameter _binder after function returned:. Microsoft.ServiceBus: Invalid EventHub address. It must be either of the following. Sender: <EventHubName>. Partition Sender: <EventHubName>/Partitions/<PartitionNumber>. Partition Receiver: <EventHubName>/ConsumerGroups/<ConsumerGroupName>/Partitions/<PartitionNumber>. TrackingId:ecb290822f494a86a61c21712656ea4c_G0, SystemTracker:gateway6, Timestamp:6/22/2017 8:44:14 PM. 

ので、この時点で私はIoTHubエンドポイントが読み取り専用メッセージのためのものであることを考えているとする方法はありませんが解凍されたコンテンツをIoTHubに戻します。

私は誰かが私が間違っていることを証明し、私は閉ループを持っており、取得し介さずIoTHubにしてからメッセージを送信することができますので、私の接続文字列を設定するために私を助けることができる願っています。

+1

アクセスキーを公開しないでください。 – Mikhail

+0

ヘッドアップに感謝します。私は既にいくつかのコンテンツを省略してアクセスキーを変更しましたが、共有アクセスキーを編集して、もはや実際のキーではなくなりました。 –

+1

古いアクセスキーは[public revision history](// stackoverflow.com/posts/44709647/revisions)にまだ残っていることに注意してください。 – halfer

答えて

0

アズールのIoTハブデバイスとAzureのクラウドバックエンド・ソリューションとの間の双方向のゲートウェイです。 Azure IoT Hubとの通信は、デバイスに面したエンドポイントとサービスに面するエンドポイントを介して行われます。詳細はhereを参照してください。

あなたのシナリオでは、遠隔測定ストリームパイプラインへの通過前に、デバイスイベントを解凍する必要があります。基本的にこの遠隔測定の典型的なアズールストリームパイプラインの前処理は、Azureの機能(またはワーカーロール)で行うことができ、および/またはアズールストリーム解析(ASA)ジョブ等は、以下の画像に示されている: TelemetryPrepocessing

ご覧のとおり、AFおよび/またはASAジョブはストリームパイプラインのリアルタイムテレメトリデータを変更しており、その状態はイベントハブなどの次のエンティティに保存されます。これは、リアルタイムストリームパイプラインとプッシュモデルの一般的で推奨されるパターンです。

「非標準」解決策があるよりもあなたのようなシナリオはまた、あなたが圧縮されていないデバイスのイベントのためにそれを持っているのと同じテレメトリパス(ソース)を維持することが必要です。上記溶液の概念は、バックエンド側のデバイスエミュレータに基づいている

EmulateDevice

:次のスクリーンスニペットは、このソリューションの一例を示しています。 Azure IoTハブ・ルートは、イベント・ハブなどのカスタム・エンドポイントに前処理のすべてのイベントを転送します。

この後、Azure関数は、取り込まれたイベントを解凍し、エミュレートされたデバイスのようなそのデバイス用の新しいイベントを作成する責任があります。現在、このエミュレートされたデバイスは、他の実デバイスと同様にAzure IoT HubにD2Cメッセージを送信できます。

エミュレートされたデバイスは、Httpsプロトコル(接続の少ない)とAzure IoTハブ認証を使用していることに注意してください。

Azure IoT Hubのエミュレートされたデバイスからのイベントは、デフォルトのテレメトリパスなどのDefault Event Hubにルーティングされます。

上記の解決策では、ルート/ルールに基づいてイベントの前処理を選択でき、その使用方法はビジネスモデルによって異なります。

関連する問題