Esempio n. 1
0
        public List <ValueSerie> RetrieveQboxSeries(RetrieveSeriesParameters parameters)
        {
            var resultSeries = new List <ValueSerie>();
            Dictionary <int, IList <SeriesValue> > counterSeriesList = GetSeriesAtCounterLevel(parameters);
            var usageEnergyType = DeviceEnergyType.Consumption;

            foreach (var(counterId, counterSeries) in counterSeriesList)
            {
                var valueSerie = new ValueSerie
                {
                    Data = counterSeries.ToList()
                };
                valueSerie.Total = valueSerie.Data.Sum(d => d.Value ?? 0);

                switch (counterId)
                {
                case 181:     // consumption low
                    valueSerie.EnergyType = DeviceEnergyType.NetLow;
                    AddSerieToResult(valueSerie, resultSeries, usageEnergyType);
                    break;

                case 182:     // consumption high
                    valueSerie.EnergyType = DeviceEnergyType.NetHigh;
                    AddSerieToResult(valueSerie, resultSeries, usageEnergyType);
                    break;

                case 281:     // generation low
                    valueSerie.EnergyType = DeviceEnergyType.NetLow;
                    valueSerie.Data.ForEach(d => d.Value *= -1);
                    AddSerieToResult(valueSerie, resultSeries, usageEnergyType);
                    break;

                case 282:     // generation high
                    valueSerie.EnergyType = DeviceEnergyType.NetHigh;
                    valueSerie.Data.ForEach(d => d.Value *= -1);
                    AddSerieToResult(valueSerie, resultSeries, usageEnergyType);
                    break;

                case 2421:     // gas
                    if (valueSerie.Data.Sum(d => d.Value ?? 0) == 0 && valueSerie.Data.Any(d => !d.Value.HasValue))
                    {
                        break;     //there is a gas counter but no data found or file found, so not monitored
                    }
                    valueSerie.EnergyType = DeviceEnergyType.Gas;
                    AddSerieToResult(valueSerie, resultSeries, null);
                    break;

                case 1:     // net but also generation???
                    valueSerie.EnergyType = usageEnergyType;
                    AddSerieToResult(valueSerie, resultSeries, null);
                    break;

                case 3:     //net
                    valueSerie.EnergyType = usageEnergyType;
                    valueSerie.Data.ForEach(d => d.Value *= -1);
                    AddSerieToResult(valueSerie, resultSeries, null);
                    break;

                case GenerationCounterId:       //this is a fake counter that has been built to contain S0 (generation) data,
                                                //it is set in GetSeriesAtCounterLevel() at the top of that function
                    valueSerie.EnergyType = DeviceEnergyType.Generation;
                    AddSerieToResult(valueSerie, resultSeries, null);
                    break;

                default:
                    Logger.LogError("Invalid counter id : {0}", counterId);
                    break;
                }
            }
            return(resultSeries);
        }
Esempio n. 2
0
 protected bool Equals(ValueSerie other)
 {
     return(EnergyType == other.EnergyType && Data.SequenceEqual(other.Data));
 }
Esempio n. 3
0
        private static void AddSerieToResult(ValueSerie inSerie, List <ValueSerie> ioResultSeries, DeviceEnergyType?inSecondaryEnergyType)
        {
            if (inSerie.Data == null)
            {
                return;
            }

            if (ioResultSeries.Any(s => s.EnergyType == inSerie.EnergyType))
            {
                var existingSerie    = ioResultSeries.First(s => s.EnergyType == inSerie.EnergyType);
                var serieIndexFinder = new SerieIndexFinder(existingSerie.Data);
                foreach (var slotToAdd in inSerie.Data)
                {
                    var index = serieIndexFinder.GetIndex(slotToAdd.Begin);
                    if (index < 0)
                    {
                        existingSerie.Data.Add(slotToAdd);
                    }
                    else
                    {
                        var slot = existingSerie.Data[index];
                        if (!slot.Value.HasValue || slot.Value == 0)
                        {
                            slot.Value = slotToAdd.Value;
                        }
                        else
                        {
                            slot.Value += slotToAdd.Value ?? 0;
                        }
                    }
                }

                existingSerie.Total = existingSerie.Data.Sum(d => d.Value ?? 0);
            }
            else
            {
                ioResultSeries.Add(inSerie);
            }

            // used to accumulate series to one type:
            if (inSecondaryEnergyType.HasValue)
            {
                var serie = new ValueSerie()
                {
                    EnergyType = inSecondaryEnergyType.Value,
                    Name       = inSerie.Name,
                    Data       = new List <SeriesValue>()
                };
                foreach (var data in inSerie.Data)
                {
                    var seriesValue = new SeriesValue()
                    {
                        Begin = new DateTime(data.Begin.Ticks),
                        End   = new DateTime(data.End.Ticks),
                        Value = data.Value
                    };
                    serie.Data.Add(seriesValue);
                }
                serie.Total = serie.Data.Sum(d => d.Value ?? 0);
                AddSerieToResult(serie, ioResultSeries, null);
            }
        }