从存储帐户Blob中读取和解析Azure IoT中心遥测

时间:2018-08-25 13:44:27

标签: c# azure azure-storage-blobs iot azure-iot-hub

我有一个带有2个IoT设备的IoT中心,它们都发送环境数据(温度和湿度),我创建了一个自定义终结点并路由到我的Azure存储帐户,该帐户保存在那里,以便我回头查看。问题在于它发送原始遥测数据,包括奇怪的字符和类似的东西。我发现它是CSV格式,但仍然无法解析。

我的问题是 我想直接从Blob中获取原始遥测数据,并使用C#将其解析为SensorResult类。 我想出了如何读取仅分析遥测数据的Blob数据。但是我无法弄清楚那部分。

原始遥测数据片段:

Objavro.codecnullavro.schemaÐ{"type":"record","name":"Message","namespace":"Microsoft.Azure.Devices","fields":[{"name":"EnqueuedTimeUtc","type":"string"},{"name":"Properties","type":{"type":"map","values":"string"}},{"name":"SystemProperties","type":{"type":"map","values":"string"}},{"name":"Body","type":["null","bytes"]}]}°ÈF¬êYâS:á…ð82018-06-29T18:34:10.4320000Z temperatureAlert
falsemessageIdmessage_0correlationIdcorrelation_0$connectionDeviceIdraspi(connectionAuthMethodœ{"scope":"device","type":"sas","issuer":"iothub","acceptingIpFilterRule":null}8connectionDeviceGenerationId$0enqueuedTime82018-06-29T18:34:10.4320000Z¨{"deviceId": "Raspberry Pi - Python","temperature": 28.801060,"humidity": 40.097196}82018-06-29T18:34:12.3400000Z temperatureAlert

第一行是遥测的标题,下面的所有行都是来自IoT设备的消息。

谢谢。

1 个答案:

答案 0 :(得分:2)

以下是avro阅读器的代码段:

 using Microsoft.Hadoop.Avro.Container;

 // ...
 using (var reader = AvroContainer.CreateGenericReader(myBlob))
 {
    while (reader.MoveNext())
    {
       foreach (dynamic record in reader.Current.Objects)
       {
          var bodyText = Encoding.UTF8.GetString(record.Body);
          log.Info($"AvroRecord = {bodyText}");
       }
    }
 }