public SensorViewModel(Sensor sensor) : base(sensor) { _sensorTypes = new ObservableCollection <SensorType>(); _sensorCategories = new HashSet <string>(); foreach (string type in sensor.Types) { SensorType sensorType = SensorType.GetSensorType(type); if (sensorType == null) { // Which means this sensor type is not in the code base sensorType = SensorType.AddSensorType(type); } _sensorTypes.Add(sensorType); if (!_sensorCategories.Contains(sensorType.Category)) { _sensorCategories.Add(sensorType.Category); } } }
GetSensorEvents(TestBedViewModel testBed, DateTimeOffset startTime, DateTimeOffset stopTime) { List <string> binaryEvents = new List <string>(); List <string> temperatureEvents = new List <string>(); List <string> lightSensorEvents = new List <string>(); List <string> radioEvents = new List <string>(); List <string> otherEvents = new List <string>(); using (var cmd = new NpgsqlCommand()) { cmd.Connection = dbConnection; cmd.CommandText = string.Format("select stamp, target, message, sensor_type from detailed_all_events where tbname='{0}' and stamp > '{1:u}' and stamp < '{2:u}';", testBed.Name, startTime, stopTime); // Need to increase command timeout. cmd.CommandTimeout = 1200; appLog.Debug(this.GetType().ToString(), string.Format("Executing SQL \"{0}\".", cmd.CommandText)); using (var reader = cmd.ExecuteReader()) { appLog.Debug(this.GetType().ToString(), string.Format("Data retrieved from database.")); while (reader.Read()) { // Check binary events based on messages string message = reader.IsDBNull(2) ? "" : reader.GetString(2); string sensorTypeString = reader.IsDBNull(3) ? "" : reader.GetString(3); DateTimeOffset utcDateTimeOffset = reader.IsDBNull(0) ? DateTimeOffset.MinValue : reader.GetFieldValue <DateTimeOffset>(0); string eventString = String.Format("{0:MM/dd/yyyy HH:mm:ss.ffffff zzz},{1},{2},,,{3}", TimeZoneInfo.ConvertTime(utcDateTimeOffset, testBed.TimeZone), reader.IsDBNull(1) ? "" : reader.GetString(1), message, sensorTypeString ); if (binarySensorMessages.Contains(message)) { binaryEvents.Add(eventString); } else { switch (SensorType.GetSensorType(sensorTypeString).Category) { case "Light": lightSensorEvents.Add(eventString); break; case "Temperature": temperatureEvents.Add(eventString); break; case "Radio": radioEvents.Add(eventString); break; default: otherEvents.Add(eventString); break; } } } } } return(new Tuple <List <string>, List <string>, List <string>, List <string>, List <string> > (binaryEvents, temperatureEvents, lightSensorEvents, radioEvents, otherEvents)); }