我正在使用Windows10 IoT核心和Raspberry PI 2在Azure IoT集線器上執行R & D.我正在按照示例以供參考here以從IoT集線器向設備發送警報例如,當房間的溫度大於25℃時。但樣本是針對mbed板的。接收Azure IoT Hub到設備的警報/命令
爲此,我爲Raspberry Pi開發了一個示例UWP應用程序,它將溫度數據發送到IoT中心。在Azure中,我創建了一個流分析作業,它將IoT中心作爲輸入並過濾數據(僅溫度高於25度),然後將其發送至輸出EventHub。在這裏,我創建了一個工作者角色/雲服務,它將從EventHub中讀取數據並將其發送回IoT集線器,與我用於從樹莓派發送溫度信息的同一個服務器相同。
這裏我的疑問是,物聯網Hub如何區分從樹莓派發送的數據和工作人員角色發送的數據?以及如何只接收工作角色發送的數據?
因爲如果我讀雲到設備消息,我正在接收從樹莓派發送的數據。
這裏我被卡住了,我嘗試了下面的代碼從IoT Hub讀取數據,但是從樹莓派中獲取所有消息,而不是溫度超過25條消息的工作者角色消息。
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其通過覆盆子PI發送的消息上述代碼。
但是當我使用下面的代碼接收消息時,我只收到工作角色發送給IoT Hub的消息。
while (true)
{
Message receivedMessage = await deviceClient.ReceiveAsync();
if (receivedMessage == null) continue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Received message: {0}", Encoding.ASCII.GetString(receivedMessage.GetBytes()));
Console.ResetColor();
await deviceClient.CompleteAsync(receivedMessage);
}
這是我的要求,我能夠實現它。
是的,我同意你的意見。你提到的文章很好。我也可以使用我的代碼接收來自雲端的消息,但在這裏我收到了覆盆子pi發送的所有消息。我不想要所有消息,我只想要溫度值大於25的消息。爲此,我使用流分析,事件中心和工作人員角色將過濾後的消息發送回IoT中心。 – narendramacha
@narendramacha,我認爲你的代碼的問題可能是你把IoT Hub當作EventHub(這是單向的),因此你得到的是和你一樣的消息。使用物聯網集線器不應該發生這種情況,這就是爲什麼我建議您嘗試一些更多物聯網特定的代碼,如文章中的代碼。 –
你說的是對的,經過一番練習,我觀察到IoT Hub只發送由工作者角色發送的消息(在我的方案中)。當我使用DeviceClient接收方法時,它實際上只在工作角色向IoT Hub發送消息時才接收,而不是由Raspberry Pi發送的消息@Dmitri Soshnikov – narendramacha