I have an IoTHub with a route that points to an EventHub which triggers a Functions.
I\'m having problem getting the DeviceId and other IoT Hub properties
I missed a thing in the documentation for EventData. It has a method called GetBytes() and returns the body as a byte array. Example of getting both the IoT Hub properties and the body:
public static async void Run(EventData telemetryMessage, TraceWriter log)
{
var deviceId = GetDeviceId(telemetryMessage);
var payload = GetPayload(telemetryMessage.GetBytes());
log.Info($"C# Event Hub trigger function processed a message. deviceId: { deviceId }, payload: { JsonConvert.SerializeObject(payload) }");
}
private static Payload GetPayload(byte[] body)
{
var json = System.Text.Encoding.UTF8.GetString(body);
return JsonConvert.DeserializeObject(json);
}
private static string GetDeviceId(EventData message)
{
return message.SystemProperties["iothub-connection-device-id"].ToString();
}