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); } } }