private void AddNewValuesToLineSeries(Sensor sensor, DynamicLineChartViewModel chartViewModel)
 {
     chartViewModel.ChartValuesDictionary[sensor.SensorName].Add(new MeasureModel()
     {
         Value    = double.Parse(sensor.Value),
         DateTime = DateTime.Now
     });
 }
 private void AddNewLineSeriesIfNotExists(Sensor sensor, DynamicLineChartViewModel chartViewModel)
 {
     this.InvokeInUIThread((Action)(() =>
     {
         if (!chartViewModel.SeriesCollection.Any(x => x.Title == sensor.SensorName))
         {
             LineSeries lineSeries = new LineSeries();
             lineSeries.Title = sensor.SensorName;
             lineSeries.PointGeometry = null;
             chartViewModel.ChartValuesDictionary.Add(sensor.SensorName, new ChartValues <MeasureModel>());
             lineSeries.Values = chartViewModel.ChartValuesDictionary[sensor.SensorName];
             chartViewModel.SeriesCollection.Add(lineSeries);
         }
     }));
 }
        private DynamicLineChartViewModel GetOrCreateNewLineChartIfNotExists(
            WpfObservableRangeCollection <DynamicLineChartViewModel> dynamicChartViewModel,
            Sensor sensor,
            string hardwareName)
        {
            DynamicLineChartViewModel chartViewModel = dynamicChartViewModel
                                                       .Where(x => x.ChartName == sensor.SensorType && x.HardwareName == hardwareName)
                                                       .SingleOrDefault();

            if (chartViewModel == null)
            {
                chartViewModel = new DynamicLineChartViewModel(sensor.SensorType, hardwareName);
                this.InvokeInUIThread((Action)(() => dynamicChartViewModel.Add(chartViewModel)));
            }

            return(chartViewModel);
        }
        private void AddNewValuesToDynamicViewLabels(DynamicLineChartViewModel chartViewModel, Sensor sensor)
        {
            DynamicDataLabel dynamiDataLabel = chartViewModel.DynamicData
                                               .Where(ddl => ddl.Name == sensor.SensorName)
                                               .SingleOrDefault();

            if (dynamiDataLabel == null)
            {
                this.BeginInvokeInUIThread((Action)(() => chartViewModel.DynamicData.Add(new DynamicDataLabel()
                {
                    Name = sensor.SensorName,
                    Value = sensor.Value,
                    Unit = sensor.Unit
                })));
            }
            else
            {
                this.BeginInvokeInUIThread((Action)(() => dynamiDataLabel.Value = sensor.Value));
            }
        }
        private void AdjustChartValuesRange(Sensor sensor, DynamicLineChartViewModel chartViewModel)
        {
            switch (sensor.SensorType)
            {
            case "Load":
                chartViewModel.AxisYMax   = 100;
                chartViewModel.AxisYMin   = 0;
                chartViewModel.AxisXTitle = "Time [mm:ss]";
                chartViewModel.AxisYTitle = "Load [%]";
                break;

            case "Clock":
                chartViewModel.AxisYMax = double.Parse(sensor.MaxValue) > chartViewModel.AxisYMax ?
                                          double.Parse(sensor.MaxValue) + 200 : chartViewModel.AxisYMax; //200 is a bufor for better readibility
                chartViewModel.AxisYMin   = 0;
                chartViewModel.AxisXTitle = "Time [mm:ss]";
                chartViewModel.AxisYTitle = "Frequency [Hz]";
                break;

            case "Power":
                chartViewModel.AxisYMax = double.Parse(sensor.MaxValue) > chartViewModel.AxisYMax ?
                                          double.Parse(sensor.MaxValue) + 2 : chartViewModel.AxisYMax; //2 is a bufor for better readibility
                chartViewModel.AxisYMin   = 0;
                chartViewModel.AxisXTitle = "Time [mm:ss]";
                chartViewModel.AxisYTitle = "Power [W]";
                break;

            case "Temperature":
                chartViewModel.AxisYMax = double.Parse(sensor.MaxValue) > chartViewModel.AxisYMax ?
                                          double.Parse(sensor.MaxValue) + 8 : chartViewModel.AxisYMax; //8 is a bufor for better readibility
                chartViewModel.AxisYMin   = 0;
                chartViewModel.AxisXTitle = "Time [mm:ss]";
                chartViewModel.AxisYTitle = "Temperature [°C]";
                break;

            default:
                break;
            }
        }
        public void DrawDynamicLineChartForHardwareSensor(
            WpfObservableRangeCollection <DynamicLineChartViewModel> dynamicChartViewModel,
            Sensor sensor,
            string hardwareName)
        {
            // In case of "No Value" returned from SystemManagamentLib do not generate charts
            if (sensor.Value == "No value")
            {
                return;
            }

            DynamicLineChartViewModel chartViewModel = this.GetOrCreateNewLineChartIfNotExists(dynamicChartViewModel, sensor, hardwareName);

            this.AddNewValuesToDynamicViewLabels(chartViewModel, sensor);

            this.AddNewLineSeriesIfNotExists(sensor, chartViewModel);

            this.AdjustChartValuesRange(sensor, chartViewModel);

            this.AddNewValuesToLineSeries(sensor, chartViewModel);

            chartViewModel.SetAxisLimits(DateTime.Now);
        }