private static void LogOffCycle(int thermostatId, Cycle cycle, DateTime lastCycleEndDate, Temperatures allTemperatures, OutsideConditions allConditions)
{
Temperatures temperatures = allTemperatures.GetRange(lastCycleEndDate, cycle.StartDate);
OutsideConditions conditions = allConditions.GetRange(lastCycleEndDate, cycle.StartDate);
Temperature previousTemperature = allTemperatures.GetByTime(lastCycleEndDate);
OutsideCondition previousCondition = allConditions.GetByTime(lastCycleEndDate);
temperatures.Insert(0, previousTemperature);
conditions.Insert(0, previousCondition);
if (cycle.StartDate <= lastCycleEndDate)
{
return;
}
if (conditions.Count > 0 && temperatures.Count > 0)
{
DateTime endDate = cycle.StartDate;
Snapshot s = new Snapshot();
s.StartTime = lastCycleEndDate;
s.Seconds = Convert.ToInt32(new TimeSpan(cycle.StartDate.Ticks - lastCycleEndDate.Ticks).TotalSeconds);
s.ThermostatId = thermostatId;
s.Mode = "Off";
s.InsideTempAverage = Convert.ToInt32(temperatures.GetTempAverage(lastCycleEndDate, cycle.StartDate));
s.InsideTempHigh = Convert.ToInt32(temperatures.GetTempHigh());
s.InsideTempLow = Convert.ToInt32(temperatures.GetTempLow());
s.OutsideTempAverage = Convert.ToInt32(conditions.GetTempAverage(lastCycleEndDate, cycle.StartDate));
s.OutsideTempHigh = Convert.ToInt32(conditions.GetTempHigh());
s.OutsideTempLow = Convert.ToInt32(conditions.GetTempLow());
if (s.Seconds > 10 && s.Seconds < 86400) //if significant and less than a day
{
Snapshot.SaveSnapshot(s);
}
}
}