示例#1
0
        private void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            LoggingFields messageHandlerLoggingFields = new LoggingFields();

#if DEBUG
            Debug.WriteLine($"{DateTime.UtcNow:HH:mm:ss}-OnReceive From:{BitConverter.ToString(e.Address)} PacketSnr:{e.PacketSnr:0.0} Packet RSSI:{e.PacketRssi}dBm RSSI:{e.Rssi}dBm Length:{e.Data.Length}");
#endif
            messageHandlerLoggingFields.AddString("PacketSNR", e.PacketSnr.ToString("F1"));
            messageHandlerLoggingFields.AddInt32("PacketRSSI", e.PacketRssi);
            messageHandlerLoggingFields.AddInt32("RSSI", e.Rssi);

            string addressBcdText = BitConverter.ToString(e.Address);
            messageHandlerLoggingFields.AddInt32("DeviceAddressLength", e.Address.Length);
            messageHandlerLoggingFields.AddString("DeviceAddressBCD", addressBcdText);

            if (messageHandler != null)
            {
                try
                {
                    messageHandler.Rfm9XOnReceive(e);
                }
                catch (Exception ex)
                {
                    messageHandlerLoggingFields.AddString("MessageHandler Exception", ex.ToString());
                    this.logging.LogEvent("Rfm9XDevice_OnReceive", messageHandlerLoggingFields, LoggingLevel.Error);
                    return;
                }
            }
            this.logging.LogEvent("Rfm9XDevice_OnReceive", messageHandlerLoggingFields, LoggingLevel.Information);
        }
示例#2
0
        private static void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            try
            {
                // Remove unprintable characters from messages
                for (int index = 0; index < e.Data.Length; index++)
                {
                    if ((e.Data[index] < 0x20) || (e.Data[index] > 0x7E))
                    {
                        e.Data[index] = 0x20;
                    }
                }

                string messageText = UTF8Encoding.UTF8.GetString(e.Data, 0, e.Data.Length);

#if ADDRESSED_MESSAGES_PAYLOAD
                string addressText = UTF8Encoding.UTF8.GetString(e.Address, 0, e.Address.Length);

                Debug.WriteLine($"{DateTime.UtcNow:hh:mm:ss}-RX From {addressText} PacketSnr {e.PacketSnr:F2} Packet RSSI {e.PacketRssi} dBm RSSI {e.Rssi} dBm = {e.Data.Length} byte message {messageText}");
#else
                Debug.WriteLine($"{DateTime.UtcNow:hh:mm:ss}-RX PacketSnr {e.PacketSnr:F2} Packet RSSI {e.PacketRssi} dBm RSSI {e.Rssi} dBm = {e.Data.Length} byte message {messageText}");
#endif
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
示例#3
0
        private static void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            led.Toggle();

            try
            {
                // Remove unprintable characters from messages
                for (int index = 0; index < e.Data.Length; index++)
                {
                    if ((e.Data[index] < 0x20) || (e.Data[index] > 0x7E))
                    {
                        e.Data[index] = 0x20;
                    }
                }

                string messageText = UTF8Encoding.UTF8.GetString(e.Data, 0, e.Data.Length);

#if ADDRESSED_MESSAGES_PAYLOAD
                string addressText = UTF8Encoding.UTF8.GetString(e.Address, 0, e.Address.Length);

                Debug.WriteLine(string.Format(@"{0}-RX From {1} PacketSnr {2} Packet RSSI {3}dBm RSSI {4}dBm ={5} ""{6}""", DateTime.UtcNow.ToString("HH:mm:ss"), addressText, e.PacketSnr, e.PacketRssi, e.Rssi, e.Data.Length, messageText));
#else
                Debug.WriteLine(string.Format(@"{0}-RX PacketSnr {1} Packet RSSI {2}dBm RSSI {3}dBm ={4} ""{5}""", DateTime.UtcNow.ToString("HH:mm:ss"), e.PacketSnr, e.PacketRssi, e.Rssi, e.Data.Length, messageText));
#endif
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
示例#4
0
        private async void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
#if DEBUG
            Debug.WriteLine(@"{0:HH:mm:ss}-RX From {1} PacketSnr {2:0.0} Packet RSSI {3}dBm RSSI {4}dBm = {5} byte message", DateTime.UtcNow, BitConverter.ToString(e.Address), e.PacketSnr, e.PacketRssi, e.Rssi, e.Data.Length);
#endif

#if PAYLOAD_TEXT
            await PayloadText(azureIoTHubClient, e);
#endif

#if PAYLOAD_TEXT_COMA_SEPARATED_VALUES
            await PayloadCommaSeparatedValues(azureIoTHubClient, e);
#endif

#if PAYLOAD_BINARY_BINARY_CODED_DECIMAL
            await PayloadBinaryCodedDecimal(azureIoTHubClient, e);
#endif

#if PAYLOAD_BINARY_CAYENNE_LOW_POWER_PAYLOAD
            await PayloadProcessCayenneLowPowerPayload(azureIoTHubClient, e);
#endif

#if CLOUD_DEVICE_SEND
            // see if there are any outstand messages to reply to device with
            byte[] responseMessage;

            if (sendMessageQueue.TryGetValue(e.Address, out responseMessage))
            {
                rfm9XDevice.Send(e.Address, responseMessage);
                this.logging.LogMessage("Response message sent", LoggingLevel.Information);
            }
#endif
        }
示例#5
0
 private void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
 {
     try
     {
         string messageText = UTF8Encoding.UTF8.GetString(e.Data);
         Debug.WriteLine("Received {0} byte message {1}", e.Data.Length, messageText);
     }
     catch (Exception ex)
     {
         Debug.WriteLine(ex.Message);
     }
 }
示例#6
0
        async Task PayloadText(DeviceClient azureIoTHubClient, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            JObject       telemetryDataPoint   = new JObject();
            LoggingFields processLoggingFields = new LoggingFields();

            processLoggingFields.AddString("PacketSNR", e.PacketSnr.ToString("F1"));
            telemetryDataPoint.Add("PacketSNR", e.PacketSnr.ToString("F1"));
            processLoggingFields.AddInt32("PacketRSSI", e.PacketRssi);
            telemetryDataPoint.Add("PacketRSSI", e.PacketRssi);
            processLoggingFields.AddInt32("RSSI", e.Rssi);
            telemetryDataPoint.Add("RSSI", e.Rssi);

            string addressBcdText = BitConverter.ToString(e.Address);

            processLoggingFields.AddInt32("DeviceAddressLength", e.Address.Length);
            processLoggingFields.AddString("DeviceAddressBCD", addressBcdText);
            telemetryDataPoint.Add("DeviceAddressBCD", addressBcdText);

            string messageBcdText = BitConverter.ToString(e.Data);

            processLoggingFields.AddInt32("MessageLength", e.Data.Length);
            processLoggingFields.AddString("MessageBCD", messageBcdText);

            try
            {
                string messageText = UTF8Encoding.UTF8.GetString(e.Data);
                processLoggingFields.AddString("MessageText", messageText);
                telemetryDataPoint.Add("Payload", messageText);
            }
            catch (Exception)
            {
                this.logging.LogEvent("PayloadProcess failure converting payload to text", processLoggingFields, LoggingLevel.Warning);
                return;
            }

            try
            {
                using (Message message = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(telemetryDataPoint))))
                {
                    Debug.WriteLine(" {0:HH:mm:ss} AzureIoTHubClient SendEventAsync start", DateTime.UtcNow);
                    await this.azureIoTHubClient.SendEventAsync(message);

                    Debug.WriteLine(" {0:HH:mm:ss} AzureIoTHubClient SendEventAsync finish", DateTime.UtcNow);
                }
                this.logging.LogEvent("SendEventAsync Text payload", processLoggingFields, LoggingLevel.Information);
            }
            catch (Exception ex)
            {
                processLoggingFields.AddString("Exception", ex.ToString());
                this.logging.LogEvent("SendEventAsync Text payload", processLoggingFields, LoggingLevel.Error);
            }
        }
        private void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            try
            {
                string messageText = new string(UTF8Encoding.UTF8.GetChars(e.Data));
                string addressText = new string(UTF8Encoding.UTF8.GetChars(e.Address));

                Debug.WriteLine($"{DateTime.UtcNow:hh:mm:ss}-RX PacketSnr {e.PacketSnr:F2} Packet RSSI {e.PacketRssi} dBm RSSI {e.Rssi} dBm = {e.Data.Length} byte message {messageText}");
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
示例#8
0
        private void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            try
            {
                string addressText = UTF8Encoding.UTF8.GetString(e.Address);
                string addressHex  = BitConverter.ToString(e.Address);
                string messageText = UTF8Encoding.UTF8.GetString(e.Data);

                Console.WriteLine($"{DateTime.UtcNow:HH:mm:ss}-RX PacketSnr {e.PacketSnr:0.0} Packet RSSI {e.PacketRssi}dBm RSSI {e.Rssi}dBm = {e.Data.Length} byte message {messageText}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
示例#9
0
        private static void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            try
            {
                string messageText = UTF8Encoding.UTF8.GetString(e.Data);

#if ADDRESSED_MESSAGES_PAYLOAD
                string addressText = UTF8Encoding.UTF8.GetString(e.Address);

                Debug.WriteLine($@"{DateTime.Now:HH:mm:ss}-RX From {addressText} PacketSnr {e.PacketSnr} Packet RSSI {e.PacketRssi}dBm RSSI {e.Rssi}dBm = {e.Data.Length} byte message ""{messageText}""");
#else
                Debug.WriteLine($@"{DateTime.Now:HH:mm:ss}-RX PacketSnr {e.PacketSnr} Packet RSSI {e.PacketRssi}dBm RSSI {e.Rssi}dBm = {e.Data.Length} byte message ""{messageText}""");
#endif
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
示例#10
0
        private void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            try
            {
                string messageText = UTF8Encoding.UTF8.GetString(e.Data);

#if ADDRESSED_MESSAGES_PAYLOAD
                string addressText = UTF8Encoding.UTF8.GetString(e.Address);

                Debug.WriteLine(@"{0:HH:mm:ss}-RX From {1} PacketSnr {2:0.0} Packet RSSI {3}dBm RSSI {4}dBm = {5} byte message ""{6}""", DateTime.Now, addressText, e.PacketSnr, e.PacketRssi, e.Rssi, e.Data.Length, messageText);
#else
                Debug.WriteLine(@"{0:HH:mm:ss}-RX PacketSnr {1:0.0} Packet RSSI {2}dBm RSSI {3}dBm = {4} byte message ""{5}""", DateTime.Now, e.PacketSnr, e.PacketRssi, e.Rssi, e.Data.Length, messageText);
#endif
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
        void IMessageHandler.Rfm9XOnReceive(Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            LoggingFields processReceiveLoggingFields = new LoggingFields();

            processReceiveLoggingFields.AddString("PacketSNR", e.PacketSnr.ToString("F1"));
            processReceiveLoggingFields.AddInt32("PacketRSSI", e.PacketRssi);
            processReceiveLoggingFields.AddInt32("RSSI", e.Rssi);

            string addressBcdText = BitConverter.ToString(e.Address);

            processReceiveLoggingFields.AddInt32("DeviceAddressLength", e.Address.Length);
            processReceiveLoggingFields.AddString("DeviceAddressBCD", addressBcdText);

            string payloadBcdText = BitConverter.ToString(e.Data);

            processReceiveLoggingFields.AddInt32("PayloadLength", e.Data.Length);
            processReceiveLoggingFields.AddString("DeviceAddressBCD", payloadBcdText);

            this.Logging.LogEvent("Rfm9XOnReceive", processReceiveLoggingFields, LoggingLevel.Information);
        }
示例#12
0
        async void IMessageHandler.Rfm9XOnReceive(Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            LoggingFields processReceiveLoggingFields = new LoggingFields();

            char[] sensorReadingSeparators    = { ',' };
            char[] sensorIdAndValueSeparators = { ' ' };

            processReceiveLoggingFields.AddString("PacketSNR", e.PacketSnr.ToString("F1"));
            processReceiveLoggingFields.AddInt32("PacketRSSI", e.PacketRssi);
            processReceiveLoggingFields.AddInt32("RSSI", e.Rssi);

            string addressBcdText = BitConverter.ToString(e.Address);

            processReceiveLoggingFields.AddInt32("DeviceAddressLength", e.Address.Length);
            processReceiveLoggingFields.AddString("DeviceAddressBCD", addressBcdText);

            string messageText;

            try
            {
                messageText = UTF8Encoding.UTF8.GetString(e.Data);
                processReceiveLoggingFields.AddString("MessageText", messageText);
            }
            catch (Exception ex)
            {
                processReceiveLoggingFields.AddString("Exception", ex.ToString());
                this.Logging.LogEvent("PayloadProcess failure converting payload to text", processReceiveLoggingFields, LoggingLevel.Warning);
                return;
            }

            // Chop up the CSV text
            string[] sensorReadings = messageText.Split(sensorReadingSeparators, StringSplitOptions.RemoveEmptyEntries);
            if (sensorReadings.Length < 1)
            {
                this.Logging.LogEvent("PayloadProcess payload contains no sensor readings", processReceiveLoggingFields, LoggingLevel.Warning);
                return;
            }

            JObject payloadJObject = new JObject();

            JObject feeds = new JObject();

            // Chop up each sensor read into an ID & value
            foreach (string sensorReading in sensorReadings)
            {
                string[] sensorIdAndValue = sensorReading.Split(sensorIdAndValueSeparators, StringSplitOptions.RemoveEmptyEntries);

                // Check that there is an id & value
                if (sensorIdAndValue.Length != 2)
                {
                    this.Logging.LogEvent("PayloadProcess payload invalid format", processReceiveLoggingFields, LoggingLevel.Warning);
                    return;
                }

                string sensorId = string.Concat(addressBcdText, sensorIdAndValue[0]);
                string value    = sensorIdAndValue[1];

                feeds.Add(sensorId.ToLower(), value);
            }
            payloadJObject.Add("feeds", feeds);

            string topic = $"{MqttClient.Options.Credentials.Username}/groups/{PlatformSpecificConfiguration}";

            try
            {
                var message = new MqttApplicationMessageBuilder()
                              .WithTopic(topic)
                              .WithPayload(JsonConvert.SerializeObject(payloadJObject))
                              .WithAtLeastOnceQoS()
                              .Build();
                Debug.WriteLine(" {0:HH:mm:ss} MQTT Client PublishAsync start", DateTime.UtcNow);
                await MqttClient.PublishAsync(message);

                Debug.WriteLine(" {0:HH:mm:ss} MQTT Client PublishAsync finish", DateTime.UtcNow);

                this.Logging.LogEvent("PublishAsync Adafruit payload", processReceiveLoggingFields, LoggingLevel.Information);
            }
            catch (Exception ex)
            {
                processReceiveLoggingFields.AddString("Exception", ex.ToString());
                this.Logging.LogEvent("PublishAsync Adafruit payload", processReceiveLoggingFields, LoggingLevel.Error);
            }
        }
        private async void Rfm9XDevice_OnReceive(object sender, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            string addressBcdText;
            string messageBcdText;
            string messageText = "";

            char[] sensorReadingSeparator    = new char[] { ',' };
            char[] sensorIdAndValueSeparator = new char[] { ' ' };

            addressBcdText = BitConverter.ToString(e.Address);

            messageBcdText = BitConverter.ToString(e.Data);
            try
            {
                messageText = UTF8Encoding.UTF8.GetString(e.Data);
            }
            catch (Exception)
            {
                this.logging.LogMessage("Failure converting payload to text", LoggingLevel.Error);
                return;
            }

#if DEBUG
            Debug.WriteLine(@"{0:HH:mm:ss}-RX From {1} PacketSnr {2:0.0} Packet RSSI {3}dBm RSSI {4}dBm = {5} byte message ""{6}""", DateTime.Now, addressBcdText, e.PacketSnr, e.PacketRssi, e.Rssi, e.Data.Length, messageText);
#endif
            LoggingFields messagePayload = new LoggingFields();
            messagePayload.AddInt32("AddressLength", e.Address.Length);
            messagePayload.AddString("Address-BCD", addressBcdText);
            messagePayload.AddInt32("Message-Length", e.Data.Length);
            messagePayload.AddString("Message-BCD", messageBcdText);
            messagePayload.AddString("Nessage-Unicode", messageText);
            messagePayload.AddDouble("Packet SNR", e.PacketSnr);
            messagePayload.AddInt32("Packet RSSI", e.PacketRssi);
            messagePayload.AddInt32("RSSI", e.Rssi);
            this.logging.LogEvent("Message Data", messagePayload, LoggingLevel.Verbose);


            // Check the address is not to short/long
            if (e.Address.Length < AddressLengthMinimum)
            {
                this.logging.LogMessage("From address too short", LoggingLevel.Warning);
                return;
            }

            if (e.Address.Length > MessageLengthMaximum)
            {
                this.logging.LogMessage("From address too long", LoggingLevel.Warning);
                return;
            }

            // Check the payload is not too short/long
            if (e.Data.Length < MessageLengthMinimum)
            {
                this.logging.LogMessage("Message too short to contain any data", LoggingLevel.Warning);
                return;
            }

            if (e.Data.Length > MessageLengthMaximum)
            {
                this.logging.LogMessage("Message too long to contain valid data", LoggingLevel.Warning);
                return;
            }

            // Adafruit IO is case sensitive & onlye does lower case ?
            string deviceId = addressBcdText.ToLower();

            // Chop up the CSV text payload
            string[] sensorReadings = messageText.Split(sensorReadingSeparator, StringSplitOptions.RemoveEmptyEntries);
            if (sensorReadings.Length == 0)
            {
                this.logging.LogMessage("Payload contains no sensor readings", LoggingLevel.Warning);
                return;
            }

            Group_feed_data groupFeedData = new Group_feed_data();

            LoggingFields sensorData = new LoggingFields();
            sensorData.AddString("DeviceID", deviceId);

            // Chop up each sensor reading into an ID & value
            foreach (string sensorReading in sensorReadings)
            {
                string[] sensorIdAndValue = sensorReading.Split(sensorIdAndValueSeparator, StringSplitOptions.RemoveEmptyEntries);

                // Check that there is an id & value
                if (sensorIdAndValue.Length != 2)
                {
                    this.logging.LogMessage("Sensor reading invalid format", LoggingLevel.Warning);
                    return;
                }

                string sensorId = sensorIdAndValue[0].ToLower();
                string value    = sensorIdAndValue[1];

                // Construct the sensor ID from SensordeviceID & Value ID
                groupFeedData.Feeds.Add(new Anonymous2()
                {
                    Key = string.Format("{0}{1}", deviceId, sensorId), Value = value
                });

                sensorData.AddString(sensorId, value);

                Debug.WriteLine(" Sensor {0}{1} Value {2}", deviceId, sensorId, value);
            }

            this.logging.LogEvent("Sensor readings", sensorData, LoggingLevel.Verbose);

            try
            {
                Debug.WriteLine(" CreateGroupDataAsync start");
                await this.adaFruitIOClient.CreateGroupDataAsync(this.applicationSettings.AdaFruitIOUserName, this.applicationSettings.AdaFruitIOGroupName.ToLower(), groupFeedData);

                Debug.WriteLine(" CreateGroupDataAsync finish");
            }
            catch (Exception ex)
            {
                Debug.WriteLine(" CreateGroupDataAsync failed {0}", ex.Message);
                this.logging.LogMessage("CreateGroupDataAsync failed " + ex.Message, LoggingLevel.Error);
            }
        }
示例#14
0
 void PayloadProcessCayenneLowPowerPayload(DeviceClient azureIoTHubClient, Rfm9XDevice.OnDataReceivedEventArgs e)
 {
 }
示例#15
0
        private async Task PayloadCommaSeparatedValues(DeviceClient azureIoTHubClient, Rfm9XDevice.OnDataReceivedEventArgs e)
        {
            JObject       telemetryDataPoint   = new JObject();
            LoggingFields processLoggingFields = new LoggingFields();

            char[] sensorReadingSeparators    = { ',' };
            char[] sensorIdAndValueSeparators = { ' ' };

            processLoggingFields.AddString("PacketSNR", e.PacketSnr.ToString("F1"));
            telemetryDataPoint.Add("PacketSNR", e.PacketSnr.ToString("F1"));
            processLoggingFields.AddInt32("PacketRSSI", e.PacketRssi);
            telemetryDataPoint.Add("PacketRSSI", e.PacketRssi);
            processLoggingFields.AddInt32("RSSI", e.Rssi);
            telemetryDataPoint.Add("RSSI", e.Rssi);

            string addressBcdText = BitConverter.ToString(e.Address);

            processLoggingFields.AddInt32("DeviceAddressLength", e.Address.Length);
            processLoggingFields.AddString("DeviceAddressBCD", addressBcdText);
            telemetryDataPoint.Add("DeviceAddressBCD", addressBcdText);

            string messageText;

            try
            {
                messageText = UTF8Encoding.UTF8.GetString(e.Data);
                processLoggingFields.AddString("MessageText", messageText);
            }
            catch (Exception)
            {
                this.logging.LogEvent("PayloadProcess failure converting payload to text", processLoggingFields, LoggingLevel.Warning);
                return;
            }

            // Chop up the CSV text
            string[] sensorReadings = messageText.Split(sensorReadingSeparators, StringSplitOptions.RemoveEmptyEntries);
            if (sensorReadings.Length < 1)
            {
                this.logging.LogEvent("PayloadProcess payload contains no sensor readings", processLoggingFields, LoggingLevel.Warning);
                return;
            }

            // Chop up each sensor read into an ID & value
            foreach (string sensorReading in sensorReadings)
            {
                string[] sensorIdAndValue = sensorReading.Split(sensorIdAndValueSeparators, StringSplitOptions.RemoveEmptyEntries);

                // Check that there is an id & value
                if (sensorIdAndValue.Length != 2)
                {
                    this.logging.LogEvent("PayloadProcess payload invalid format", processLoggingFields, LoggingLevel.Warning);
                    return;
                }

                string sensorId = sensorIdAndValue[0].ToLower();
                string value    = sensorIdAndValue[1];

                // Construct the sensor ID from SensordeviceID & Value, mainly intended for Azure IOT Central support
                if (this.applicationSettings.SensorIDIsDeviceIDSensorID)
                {
                    sensorId = string.Concat(addressBcdText, sensorId);
                }

                try
                {
                    telemetryDataPoint.Add(sensorId, value);
                    processLoggingFields.AddString(sensorId, value);
                    Debug.WriteLine($" SensorID {sensorId} Value {value}");
                }
                catch (Exception ex)
                {
                    processLoggingFields.AddString("Exception", ex.ToString());
                    this.logging.LogEvent("PayloadProcess sensor reading invalid JSON format", processLoggingFields, LoggingLevel.Warning);
                    return;
                }
            }

            try
            {
                using (Message message = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(telemetryDataPoint))))
                {
                    Debug.WriteLine(" {0:HH:mm:ss} AzureIoTHubClient SendEventAsync start", DateTime.UtcNow);
                    await this.azureIoTHubClient.SendEventAsync(message);

                    Debug.WriteLine(" {0:HH:mm:ss} AzureIoTHubClient SendEventAsync finish", DateTime.UtcNow);
                }
                this.logging.LogEvent("SendEventAsync JSON payload", processLoggingFields, LoggingLevel.Information);
            }
            catch (Exception ex)
            {
                processLoggingFields.AddString("Exception", ex.ToString());
                this.logging.LogEvent("SendEventAsync JSON payload", processLoggingFields, LoggingLevel.Error);
            }
        }