private async Task PollEnergyValues()
        {
            var fetchLastValues = (int)TimeSeriesSpan.Spacing.Spacing10Min;
            var days            = new TimeSeriesSpan(DateTime.Now.AddSeconds(-1 * fetchLastValues), TimeSeriesSpan.Spacing.Spacing1Sec, fetchLastValues).IncludedDates();

            Dictionary <DateTime, TimeSeriesStreamCollection <Dsuid, int> >?timeseriesCollections = null;

            try
            {
                timeseriesCollections = ReadHighResEnergyValuesFromDb(days);

                foreach (var dsuid in Dsuids)
                {
                    foreach (var timestampedValue in (await _dsClient.GetEnergy(dsuid, (int)TimeSeriesSpan.Spacing.Spacing1Sec, fetchLastValues)).TimeSeries)
                    {
                        foreach (var timeseries in timeseriesCollections.Select(x => x.Value[dsuid]))
                        {
                            timeseries[timestampedValue.Key.ToUniversalTime()] = (int)timestampedValue.Value;
                        }
                    }
                }

                SaveHighResEnergyValuesToDb(timeseriesCollections);
                _dbContext.SaveChanges();

                SaveMidResEnergyValuesToDb(timeseriesCollections);
                _dbContext.SaveChanges();

                SaveLowResEnergyValuesToDb(timeseriesCollections);
                _dbContext.SaveChanges();
            }
            catch { throw; }
            finally
            {
                if (timeseriesCollections != null)
                {
                    foreach (var collection in timeseriesCollections)
                    {
                        collection.Value.Dispose();
                    }
                }
            }
        }
Exemple #2
0
        private async Task PollSensorValues()
        {
            var sensorValues = (await _dsClient.GetZonesAndSensorValues()).Zones;

            var timestamp = DateTime.UtcNow;
            var day       = timestamp.Date;

            var readMidres = new Dictionary <Zone, Dictionary <Sensor, ITimeSeries <double> > >();

            foreach (var zone in sensorValues)
            {
                if (zone != null && zone.Sensor != null)
                {
                    readMidres.Add(zone.ZoneID, ReadAndSaveMidresZoneSensorValues(day, zone.ZoneID, zone.Sensor.GroupBy(x => x.Type, (key, group) => group.First()).ToDictionary(x => x.Type, x => x.Value), timestamp));
                }
            }
            _dbContext.SaveChanges();

            SaveLowresZoneSensorValues(readMidres);
            _dbContext.SaveChanges();
        }