首页 文章

从存储帐户blob读取和解析Azure IoT Hub遥测

提问于
浏览
3

我有一个带有2个IoT设备的IoT Hub,它们都发送环境数据(温度和湿度)我创建了一个自定义 endpoints 并路由到我的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

第一行是遥测的 Headers ,下面的所有行都只是来自物联网设备的消息 .

谢谢 .

1 回答

  • 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}");
           }
        }
     }
    

相关问题