public static async Task SendEvent(DeviceClient deviceClient, SimulatedSensor sensor)
        {
            var serializer   = new DataContractJsonSerializer(typeof(CustomTelemetryMessage));
            var curIteration = 0;

            var getRandomSensorReading = CreateGetRandomSensorReading(sensor.DataType.ToString(), curIteration);
            var telemetryMessage       = new CustomTelemetryMessage()
            {
                SensorValue = getRandomSensorReading(),
            };

            using (var stream = new MemoryStream())
            {
                serializer.WriteObject(stream, telemetryMessage);
                var     byteArray    = stream.ToArray();
                Message eventMessage = new Message(byteArray);
                eventMessage.Properties.Add("DigitalTwins-Telemetry", "1.0");
                eventMessage.Properties.Add("DigitalTwins-SensorHardwareId", $"{sensor.HardwareId}");
                eventMessage.Properties.Add("CreationTimeUtc", DateTime.UtcNow.ToString("o"));
                eventMessage.Properties.Add("x-ms-client-request-id", Guid.NewGuid().ToString());

                await FeedbackHelper.Channel.SendMessageAsync(
                    $"\t{DateTime.UtcNow.ToLocalTime()}> Sending message: {Encoding.UTF8.GetString(eventMessage.GetBytes())} " +
                    $"Properties: {{ {eventMessage.Properties.Aggregate(new StringBuilder(), (sb, x) => sb.Append($"'{x.Key}': '{x.Value}',"), sb => sb.ToString())} }}"
                    , MessageType.Info);

                await deviceClient.SendEventAsync(eventMessage);
            }
        }
示例#2
0
        static async Task SendEvent(DeviceClient deviceClient)
        {
            var serializer = new DataContractJsonSerializer(typeof(CustomTelemetryMessage));

            var sensors = settings.GetSection("Sensors").Get <Sensor[]>();

            var delayPerMessageSend      = int.Parse(settings["MessageIntervalInSeconds"]);
            var countOfSendsPerIteration = sensors.Length;
            var maxSecondsToRun          = 15 * 60;
            var maxIterations            = maxSecondsToRun / countOfSendsPerIteration / delayPerMessageSend;
            var curIteration             = 0;

            do
            {
                foreach (var sensor in sensors)
                {
                    var getRandomSensorReading = CreateGetRandomSensorReading(sensor.DataType, curIteration);
                    var telemetryMessage       = new CustomTelemetryMessage()
                    {
                        SensorValue = getRandomSensorReading(),
                    };

                    using (var stream = new MemoryStream())
                    {
                        serializer.WriteObject(stream, telemetryMessage);
                        var     byteArray    = stream.ToArray();
                        Message eventMessage = new Message(byteArray);
                        eventMessage.Properties.Add("DigitalTwins-Telemetry", "1.0");
                        eventMessage.Properties.Add("DigitalTwins-SensorHardwareId", $"{sensor.HardwareId}");
                        eventMessage.Properties.Add("CreationTimeUtc", DateTime.UtcNow.ToString("o"));
                        eventMessage.Properties.Add("x-ms-client-request-id", Guid.NewGuid().ToString());

                        Console.WriteLine($"\t{DateTime.UtcNow.ToLocalTime()}> Sending message: {Encoding.UTF8.GetString(eventMessage.GetBytes())} Properties: {{ {eventMessage.Properties.Aggregate(new StringBuilder(), (sb, x) => sb.Append($"'{x.Key}': '{x.Value}',"), sb => sb.ToString())} }}");

                        await deviceClient.SendEventAsync(eventMessage);
                    }

                    await Task.Delay(TimeSpan.FromSeconds(delayPerMessageSend));
                }

                await Task.Delay(TimeSpan.FromSeconds(delayPerMessageSend));
            } while (++curIteration < maxIterations);

            Console.WriteLine($"Finished sending {curIteration} events (per sensor type)");
        }