private void SensorValueupload(object state) { try { // Air sensor readings double temperatureCelsius = bme280Sensor.Temperature.DegreesCelsius; double temperatureFahrenheit = bme280Sensor.Temperature.DegreesFahrenheit; double humidity = bme280Sensor.Humidity; double pressure = bme280Sensor.Pressure.Kilopascals; double lightLevel = GroveBaseHatAnalogPorts.Read(AnalogPorts.AnalogPort.A0); double soilMoisture1 = GroveBaseHatAnalogPorts.Read(AnalogPorts.AnalogPort.A2); double soilMoisture2 = GroveBaseHatAnalogPorts.Read(AnalogPorts.AnalogPort.A4); LoggingService.Log(string.Format("C {0:0.0}° F {1:0.0}° H {2:0}% P {3:0.000}kPa L {4:0}% Soil1 {5:0}% Soil2 {6:0}% ", temperatureCelsius, temperatureFahrenheit, humidity, pressure, lightLevel, soilMoisture1, soilMoisture2)); // Setup for the the logging of sensor values var loggingData = new LoggingFields(); // Construct Azure IoT Central friendly payload var telemetryDataPoint = new TelemetryDataPoint(); telemetryDataPoint.Celsius = temperatureCelsius; loggingData.AddDouble(nameof(telemetryDataPoint.Celsius), temperatureCelsius); telemetryDataPoint.Fahrenheit = temperatureFahrenheit; loggingData.AddDouble(nameof(telemetryDataPoint.Fahrenheit), temperatureFahrenheit); telemetryDataPoint.Humidity = humidity; loggingData.AddDouble(nameof(telemetryDataPoint.Humidity), humidity); telemetryDataPoint.Pressure = pressure; loggingData.AddDouble(nameof(telemetryDataPoint.Pressure), pressure); telemetryDataPoint.Light = lightLevel; loggingData.AddDouble(nameof(telemetryDataPoint.Light), lightLevel); telemetryDataPoint.SoilMoisture1 = soilMoisture1; loggingData.AddDouble(nameof(telemetryDataPoint.SoilMoisture1), soilMoisture1); telemetryDataPoint.SoilMoisture2 = soilMoisture2; loggingData.AddDouble(nameof(telemetryDataPoint.SoilMoisture2), soilMoisture2); // Log the sensor values to ETW logging LoggingService.LogEvent("Sensor readings", loggingData, LoggingLevel.Verbose); using (var message = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(telemetryDataPoint)))) { LoggingService.Log("AzureIoTHubClient SendEventAsync starting"); azureIoTHubClient.SendEventAsync(message).Wait(); LoggingService.Log("AzureIoTHubClient SendEventAsync finished"); } } catch (Exception ex) { LoggingService.Error("Failed to send telemetry", ex); } }