Exemple #1
0
        private static async Task CreateLoggingMessage(ConveyorBeltSimulator conveyor, double vibration)
        {
            // Create the logging JSON message.
            var loggingDataPoint = new
            {
                vibration = Math.Round(vibration, 2),
                packages  = conveyor.PackageCount,
                speed     = conveyor.BeltSpeed.ToString(),
                temp      = Math.Round(conveyor.Temperature, 2),
            };
            var loggingMessageString = JsonConvert.SerializeObject(loggingDataPoint);
            var loggingMessage       = new Message(Encoding.ASCII.GetBytes(loggingMessageString));

            // Add a custom application property to the message. This is used to route the message.
            loggingMessage.Properties.Add("sensorID", "VSLog");

            // Send an alert if the belt has been stopped for more than five seconds.
            loggingMessage.Properties.Add("beltAlert", (conveyor.BeltStoppedSeconds > 5) ? "true" : "false");

            Console.WriteLine($"Log data: {loggingMessageString}");

            // Send the logging message.
            await deviceClient.SendEventAsync(loggingMessage);

            ConsoleHelper.WriteGreenMessage("Log data sent\n");
        }
Exemple #2
0
        // This method creates a JSON message string and uses the Message
        // class to send the message, along with additional properties. Notice
        // the sensorID property - this will be used to route the VSTel values
        // appropriately at the IoT Hub. Also notice the beltAlert property -
        // this is set to true if the conveyor belt haas stopped for more than 5
        // seconds.
        private static async Task CreateTelemetryMessage(
            ConveyorBeltSimulator conveyor,
            double vibration)
        {
            var telemetryDataPoint = new
            {
                vibration = vibration,
            };
            var telemetryMessageString =
                JsonConvert.SerializeObject(telemetryDataPoint);
            var telemetryMessage =
                new Message(Encoding.ASCII.GetBytes(telemetryMessageString));

            // Add a custom application property to the message. This is used to route the message.
            telemetryMessage.Properties.Add("sensorID", "VSTel");

            // Send an alert if the belt has been stopped for more than five seconds.
            telemetryMessage.Properties
            .Add("beltAlert", (conveyor.BeltStoppedSeconds > 5) ? "true" : "false");

            Console.WriteLine($"Telemetry data: {telemetryMessageString}");

            // Send the telemetry message.
            await deviceClient.SendEventAsync(telemetryMessage);

            ConsoleHelper.WriteGreenMessage($"Telemetry sent {DateTime.Now.ToShortTimeString()}");
        }
Exemple #3
0
        // Async method to send simulated telemetry.
        private static async void SendDeviceToCloudMessagesAsync()
        {
            var conveyor = new ConveyorBeltSimulator(intervalInMilliseconds);

            // Simulate the vibration telemetry of a conveyor belt.
            while (true)
            {
                var vibration = conveyor.ReadVibration();

                await CreateTelemetryMessage(conveyor, vibration);

                await Task.Delay(intervalInMilliseconds);
            }
        }
Exemple #4
0
        private static async Task CreateTelemetryMessage(ConveyorBeltSimulator conveyor, double vibration)
        {
            var telemetryDataPointVibration = new
            {
                conveyor  = conveyor.id,
                vibration = vibration
            };
            var telemetryDataPointTemperature = new
            {
                conveyor = conveyor.id,
                temp     = conveyor.Temperature
            };
            var telemetryDataPointBeltSpeed = new
            {
                conveyor = conveyor.id,
                speed    = conveyor.BeltSpeed
            };
            var telemetryDataPointPackages = new
            {
                conveyor = conveyor.id,
                packages = conveyor.PackageCount
            };
            var telemetryMessageVibrationString = JsonConvert.SerializeObject(telemetryDataPointVibration);
            var telemetryMessageVibration       = new Message(Encoding.ASCII.GetBytes(telemetryMessageVibrationString));

            var telemetryMessageTemperatureString = JsonConvert.SerializeObject(telemetryDataPointTemperature);
            var telemetryMessageTemperature       = new Message(Encoding.ASCII.GetBytes(telemetryMessageTemperatureString));

            var telemetryMessageBeltSpeedString = JsonConvert.SerializeObject(telemetryDataPointBeltSpeed);
            var telemetryMessageBeltSpeed       = new Message(Encoding.ASCII.GetBytes(telemetryMessageBeltSpeedString));

            var telemetryMessagePackagesString = JsonConvert.SerializeObject(telemetryDataPointPackages);
            var telemetryMessagePackages       = new Message(Encoding.ASCII.GetBytes(telemetryMessagePackagesString));


            // Send the telemetry message.
            await deviceClientVibrationSensor.SendEventAsync(telemetryMessageVibration);

            await deviceClientTemperatureSensor.SendEventAsync(telemetryMessageTemperature);

            await deviceClientBeltSpeedSensor.SendEventAsync(telemetryMessageBeltSpeed);

            await deviceClientPackagesSensor.SendEventAsync(telemetryMessagePackages);

            CheckAlerts(conveyor, vibration);
            ConsoleHelper.WriteGreenMessage($"Telemetry sent {DateTime.Now.ToShortTimeString()}");
        }
Exemple #5
0
        // Async method to send simulated telemetry.
        private static async void SendDeviceToCloudMessagesAsync()
        {
            // The ConveyorBeltSimulator class is used to create a
            // ConveyorBeltSimulator instance named `conveyor`. The `conveyor`
            // object is first used to capture a vibration reading which is
            // placed into a local `vibration` variable, and is then passed to
            // the two create message methods along with the `vibration` value
            // that was captured at the start of the interval.
            var conveyor = new ConveyorBeltSimulator(intervalInMilliseconds);

            // Simulate the vibration telemetry of a conveyor belt.
            while (true)
            {
                var vibration = conveyor.ReadVibration();

                await CreateTelemetryMessage(conveyor, vibration);

                await CreateLoggingMessage(conveyor, vibration);

                await Task.Delay(intervalInMilliseconds);
            }
        }
Exemple #6
0
        private static async Task CheckAlerts(ConveyorBeltSimulator conveyor, double vibration)
        {
            if (conveyor.Temperature > 80)
            {
                var telemetryDataPoint = new
                {
                    conveyor         = conveyor.id,
                    TemperatureAlert = true
                };

                var telemetryMessageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var telemetryMessage       = new Message(Encoding.ASCII.GetBytes(telemetryMessageString));

                await deviceClientTemperatureAlertSensor.SendEventAsync(telemetryMessage);

                ConsoleHelper.WriteGreenMessage($"Alert sent {DateTime.Now.ToShortTimeString()}");
            }
            else
            {
                var telemetryDataPoint = new
                {
                    conveyor         = conveyor.id,
                    TemperatureAlert = false
                };

                var telemetryMessageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var telemetryMessage       = new Message(Encoding.ASCII.GetBytes(telemetryMessageString));

                await deviceClientTemperatureAlertSensor.SendEventAsync(telemetryMessage);

                ConsoleHelper.WriteGreenMessage($"Alert sent {DateTime.Now.ToShortTimeString()}");
            }
            if (vibration > 12)
            {
                var telemetryDataPoint = new
                {
                    conveyor       = conveyor.id,
                    vibrationAlert = true
                };

                var telemetryMessageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var telemetryMessage       = new Message(Encoding.ASCII.GetBytes(telemetryMessageString));

                await deviceClientVibrationAlertSensor.SendEventAsync(telemetryMessage);

                ConsoleHelper.WriteGreenMessage($"Alert sent {DateTime.Now.ToShortTimeString()}");
            }
            else
            {
                {
                    var telemetryDataPoint = new
                    {
                        conveyor       = conveyor.id,
                        vibrationAlert = false
                    };

                    var telemetryMessageString = JsonConvert.SerializeObject(telemetryDataPoint);
                    var telemetryMessage       = new Message(Encoding.ASCII.GetBytes(telemetryMessageString));

                    await deviceClientVibrationAlertSensor.SendEventAsync(telemetryMessage);

                    ConsoleHelper.WriteGreenMessage($"Alert sent {DateTime.Now.ToShortTimeString()}");
                }
            }
        }