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); }
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); } }
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); } }
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 }
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); } }
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); } }
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); } }
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); } }
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); }
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); } }
void PayloadProcessCayenneLowPowerPayload(DeviceClient azureIoTHubClient, Rfm9XDevice.OnDataReceivedEventArgs e) { }
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); } }