Azure IoT-концентратор - устройство представляет собой пользовательскую двоичную нагрузку с устройства на IoT-концентратор и нуждается в способе анализа - PullRequest
0 голосов
/ 21 мая 2019

У меня есть устройство, которое отправляет пакет двоичных данных на сервер. Я хочу перенести это в центр IoT Azure. Я хочу придерживаться самих двоичных данных и анализировать двоичные данные в функции Azure.

Я написал имитатор устройства в .NET с использованием Azure SDK и написал функцию Azure, которая запускается при получении сообщения на концентраторе IoT.

Код на симуляторе устройства:

double currentTemperature = 23.0;
byte[] temp= BitConverter.GetBytes(currentTemperature);
double currentHumidity = 24.0;
byte[] humidity= BitConverter.GetBytes(currentHumidity);

List<byte> bytes = new List<byte>();
bytes.AddRange(temp);
bytes.AddRange(humidity);

DeviceClient s_deviceClient; // Created device client here.
var message = new Microsoft.Azure.Devices.Client.Message(bytes.ToArray());
await s_deviceClient.SendEventAsync(message);

В функции Azure - если я преобразую

public static void Run(string myIoTHubMessage, ILogger log)
{
    byte[] dataArray = Encoding.ASCII.GetBytes(myIoTHubMessage);
}

Здесь я попробовал различные типы кодирования для преобразования myIoTHubMessage в байтовый массив, но это не сработало.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Вместо использования строки в качестве входного атрибута привязки используйте EventData. Смотрите мой код здесь для полного примера.

[FunctionName("IotHubMessageProcessor")]
public static void Run([IoTHubTrigger("messages/events", Connection = "iothubevents_cs", ConsumerGroup = "receiverfunction")]EventData message, ILogger log)

Затем вы можете прочитать тело (необработанное содержимое) как поток из объекта сообщения.

Когда вы используете строку, привязка IoTHub внутренне пытается интерпретировать тело сообщения как строку в кодировке UTF-8 - что, очевидно, не работает в вашем случае.

0 голосов
/ 21 мая 2019

попробуйте следующее:

using System;

public static void Run(byte[] myIoTHubMessage, IDictionary<string, object> properties, IDictionary<string, object> systemproperties, TraceWriter log)
{
    log.Info($"Temperature = {BitConverter.ToDouble(myIoTHubMessage, 0)}");
    log.Info($"Humidity = {BitConverter.ToDouble(myIoTHubMessage, 8)}");

    log.Info($"\nSystemProperties:\n\t{string.Join("\n\t", systemproperties.Select(i => $"{i.Key}={i.Value}"))}");

    log.Info($"\nProperties:\n\t{string.Join("\n\t", properties.Select(i => $"{i.Key}={i.Value}"))}");
}
...