public Sensor(string sensorType, string sensorUnit, AggregatedSensors parentAs) { Type = sensorType; Unit = sensorUnit; _parentAS = parentAs; LastValue = -100; LastUpdated = DateTime.Now; Offline = false; SensorDatas = new ObservableCollection<SensorData>(); _maxElements = 100; UpdatePeriod = TimeSpan.FromSeconds(10); }
public OverviewViewModel(MainWindow mainWindow) { MqttReceivedData = new MQTTCollection(this); SensorsList = new ObservableCollection<AggregatedSensors>(); ChartIntervalType = DateTimeIntervalType.Auto; //Creating the data layer MqttDl = new MqttDataLayer("WPF Client", "192.168.2.122"); MqttDl.OnConnected += MqttDL_OnConnected; MqttDl.Connect(); As1 = new AggregatedSensors("cabinet", "Cabinet"); As1.AddSensor("temperature", "C"); As1.AddSensor("humidity", "%"); SensorsList.Add(As1); MeasuredData=new MeasuredData(); As2 = new AggregatedSensors("cave", "Cave"); As2.AddSensor("temperature", "C"); As2.AddSensor("humidity", "%"); SensorsList.Add(As2); As3 = new AggregatedSensors("outside", "Outside"); As3.AddSensor("temperature", "C"); As3.AddSensor("humidity", "%"); SensorsList.Add(As3); As4 = new AggregatedSensors("sleeping_room", "Sleeping room"); As4.AddSensor("temperature", "C"); As4.AddSensor("humidity", "%"); SensorsList.Add(As4); //note that the sensors listen to the collection events not the data layer events //the collection takes care to parse the received data so that the agregated sensors can use it directly MqttReceivedData.DataReceived += As1.MqttReceivedData; MqttReceivedData.DataReceived += As2.MqttReceivedData; MqttReceivedData.DataReceived += As3.MqttReceivedData; MqttReceivedData.DataReceived += As4.MqttReceivedData; As1.NewReading += MeasuredData.NewReading; As2.NewReading += MeasuredData.NewReading; As3.NewReading += MeasuredData.NewReading; As4.NewReading += MeasuredData.NewReading; Dht22SensorControl dht22; foreach (var aggregatedSensor in SensorsList) { dht22 = new Dht22SensorControl(); dht22.DataContext = aggregatedSensor; dht22.Margin = new Thickness(5); Binding myBinding = new Binding { Source = aggregatedSensor.Sensors["temperature"], Path = new PropertyPath("LastUpdated"), UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }; dht22.SetBinding(Dht22SensorControl.LastUpdatedProperty, myBinding); mainWindow.SensorsContainerPanel.Children.Add(dht22); } }