/** * Return true if */ private TelemetryFormat GetMetadataForTelemetry(SignalTelemetry signalData) { if (this.GatewayConfig.ReportedTelemetry.ContainsKey(signalData.Name)) { TelemetryMetadataModel gwConfigMetadata = this.GatewayConfig.ReportedTelemetry.GetValueOrDefault(signalData.Name); // Construct metadata TelemetryFormat telemetryMetaData = new TelemetryFormat() { Name = signalData.Name, DisplayName = gwConfigMetadata.DisplayName, Type = signalData.ValueType.ToLowerInvariant() }; // Check if we have metadata description in monitoring device if (!this.GatewayDeviceConfig.Telemetry.Contains(telemetryMetaData)) { this.GatewayDeviceConfig.Telemetry.Add(telemetryMetaData); Console.WriteLine(String.Format("Telemetry configured for remote monitoring: Name: {0}, Type: {1}, DisplayName: {2}", telemetryMetaData.Name, telemetryMetaData.Type, telemetryMetaData.DisplayName)); this.IsDeviceInfoUpdated = true; } return(telemetryMetaData); } else { Console.WriteLine("Signal {0} is not configured for reporting at the module Twin ", signalData.Name); return(null); } }
public async Task ProcessAbbDriveProfileTelemetry(List <SignalTelemetry> telemetryData) { await Task.Run(() => { bool hasMutex = false; try{ hasMutex = this.telemetryMutex.WaitOne(this.GatewayConfig.ReportingInterval); if (hasMutex) { foreach (SignalTelemetry signalData in telemetryData) { TelemetryFormat telemetryMetaData = GetMetadataForTelemetry(signalData); if (telemetryMetaData != null && !String.IsNullOrEmpty(signalData.Value)) { object value = null; // convert telemetry value based on specified data type if (telemetryMetaData.Type.Equals("double")) { value = double.Parse(signalData.Value); } else if (telemetryMetaData.Type.Equals("int")) { value = int.Parse(signalData.Value); } else { // Use string as a default value type value = signalData.Value; } if (this.Telemetry.ContainsKey(signalData.Name)) { this.Telemetry[signalData.Name] = value; } else { this.Telemetry.Add(signalData.Name, value); } } else { Console.WriteLine("Error processing signal {0} value {1}", signalData.Name, signalData.Value); } } } else { throw new InvalidOperationException(String.Format("Can't handle telemetry. Timeout after {0} ms. ", this.GatewayConfig.ReportingInterval)); } } finally{ if (hasMutex) { this.telemetryMutex.ReleaseMutex(); } } }); }