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