using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PlantBox.Broker { class HistoricManager { private List _minutesHistoric; public IReadOnlyList MinutesHistoric => _minutesHistoric.AsReadOnly(); private List _hoursHistoric; public IReadOnlyList HoursHistoric => _hoursHistoric.AsReadOnly(); private List _daysHistoric; public IReadOnlyList DaysHistoric => _daysHistoric.AsReadOnly(); private List _weeksHistoric; public IReadOnlyList WeeksHistoric => _weeksHistoric.AsReadOnly(); private List _monthsHistoric; public IReadOnlyList MonthsHistoric => _monthsHistoric.AsReadOnly(); public HistoricManager() { _minutesHistoric = new List(); _hoursHistoric = new List(); _daysHistoric = new List(); _weeksHistoric = new List(); _monthsHistoric = new List(); } public HistoricManager(List minutesHistoric, List hoursHistoric, List daysHistoric, List weeksHistoric, List monthsHistoric) { _minutesHistoric = minutesHistoric; _hoursHistoric = hoursHistoric; _daysHistoric = daysHistoric; _weeksHistoric = weeksHistoric; _monthsHistoric = monthsHistoric; } public void Add(CaptorsValue captorsValue) { _minutesHistoric.Add(captorsValue); if (_minutesHistoric.Count % 12 == 0) { _hoursHistoric.Add(new CaptorsValue(GetAverage(_minutesHistoric.TakeFromEnd(12)))); } if (_hoursHistoric.Count % 24 == 0) { _daysHistoric.Add(new CaptorsValue(GetAverage(_hoursHistoric.TakeFromEnd(24)))); } if (_daysHistoric.Count % 7 == 0) { _weeksHistoric.Add(new CaptorsValue(GetAverage(_daysHistoric.TakeFromEnd(7)))); } if (_daysHistoric.Count % 31 == 0) { _monthsHistoric.Add(new CaptorsValue(GetAverage(_daysHistoric.TakeFromEnd(31)))); } } private (double humidity, double luminosity, double temperature) GetAverage(IEnumerable captorsValues) { return ( captorsValues.Average(x => x.Humidity), captorsValues.Average(x => x.Luminosity), captorsValues.Average(x => x.Temperature) ); } } }