現在、Windows10 IoTコアとRaspberry PI 2を使用してAzure IoTハブでR & Dを実行しています。参照用のサンプルhereを使用してIoTハブからデバイスにアラートを送信しています部屋の温度が例えば25℃より高いとき。しかしサンプルはmbedボード用です。Azure IoTハブからデバイスへのアラート/コマンドの受信
は、これを行うために、私はIoTをハブに温度データを送信しますラズベリーパイのためのサンプルUWPアプリを開発しました。 Azureでは、IoTハブを入力としてフィルタリングしてデータをフィルタリングし(25度以上の温度のみ)、EventHubを出力するストリーム分析ジョブを作成しました。ここでは、EventHubからデータを読み込んでIoTハブに戻して、ラズベリーパイから温度情報を送信するために使用しているものと同じワーカーロール/クラウドサービスを作成しました。
ここに私の疑問は、どのようなIoTハブは、ラズベリーパイから送信されたデータとWorkerロールによって送信されたデータを区別することができますか?どのように私は労働者の役割によって送られたデータだけを受け取ることができますか?
私はクラウドからデバイスへのメッセージを読むと、私がラズベリーパイから送信したデータを受信しているためです。ここで
私は25件のメッセージよりも温度だけ大きい代わりに、Workerロールメッセージを私はIoTをハブからデータを読み取るために以下のコードを試みたが、すべての私のメッセージは、ラズベリーパイから送信されたばかり、捕まってしまいました。
public async void ReceiveDataFromCloud()
{
startingDateTimeUtc = DateTime.UtcNow;
ServiceBusConnectionStringBuilder builder = new ServiceBusConnectionStringBuilder(ConnectionString);
builder.TransportType = ppatierno.AzureSBLite.Messaging.TransportType.Amqp;
factory = MessagingFactory.CreateFromConnectionString(ConnectionString);
client = factory.CreateEventHubClient(eventHubEntity);
group = client.GetDefaultConsumerGroup();
receiver = group.CreateReceiver(partitionId.ToString(), startingDateTimeUtc);//startingDateTimeUtc
for (int i = 0; i <= 0; i++)
{
while (true)
{
EventData data = receiver.Receive();
if (data != null)
{
var receiveddata = Encoding.UTF8.GetString(data.GetBytes());
//var messageString = JsonConvert.DeserializeObject<ConferenceRooms>(receiveddata);
Debug.WriteLine("{0} {1} {2}", data.SequenceNumber, data.EnqueuedTimeUtc.ToLocalTime(), Encoding.UTF8.GetString(data.GetBytes()));
}
else
{
break;
}
await Task.Delay(2000);
}
}
receiver.Close();
client.Close();
factory.Close();
}
IoTハブからアラートを送信する方法は、ストリーム分析ジョブでフィルタリングされたメッセージのみです。
更新:
私はラズベリーパイによって送信されたIoTハブからのすべてのメッセージを取得しています受信するために上記のコードを使用します。
しかし、私はメッセージを受信するために以下のコードを使用するとき、私はIoTをハブにWorkerロールによって送信されたメッセージだけを取得しています。
これは私の要件であり、達成することができます。
はい、私はあなたに同意します。あなたが言及している記事は問題ありません。私は自分のコードを使ってクラウドからメッセージを受け取ることができますが、ここではラズベリーパイによって送られたすべてのメッセージを受け取ります。すべてのメッセージが必要なのは、温度値が25より大きいメッセージだけです。ストリーム分析、イベントハブ、IoTハブにフィルタリングされたメッセージを返す作業者ロールを使用しています。 – narendramacha
@narendramacha、あなたのコードの問題は、IoT HubをEventHub(単方向)として扱うことになると思います。したがって、同じメッセージを返すことになります。 IoT Hubでは、このようなことは起こらないはずです。そのため、記事のようなIoT固有のコードをいくつか試してみることをお勧めします。 –
あなたが言ったことは正しかった、いくつかの練習の後、IoTハブが(私のシナリオでは)ワーカーの役割によって送られたメッセージだけを返信することを観察しました。 DeviceClient Receiveメソッドを使用すると、ワーカーロールがメッセージをIoTハブに送信したときにのみ実際に受信されます。これは、Raspberry Pi @ Dmitri Soshnikovによって送信されたメッセージ – narendramacha