Чтение и анализ Azure IoT Hub Telemetry из BLOB-объекта учетной записи хранения - PullRequest
0 голосов
/ 25 августа 2018

У меня есть IoT-концентратор с двумя IoT-устройствами, которые отправляют данные об окружающей среде (температура и влажность). Я создал пользовательскую конечную точку и направил ее в свою учетную запись хранения Azure. Она сохраняется там, чтобы я мог оглянуться назад.Проблема в том, что он отправляет необработанные данные телеметрии, включая странные символы и тому подобное.Я понял, что он был в формате CSV, но я все еще не могу разобрать его.

Мой вопрос заключается в том, что я хочу взять необработанные данные телеметрии непосредственно из большого двоичного объекта и проанализировать их в классе SensorResult с помощью C #.Я понял, как читать данные 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 голосов
/ 25 августа 2018

Ниже приведен фрагмент кода для avro reader:

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