public void IsHome_EnoughTimeSinceYesterdaysInterval_IsHome() { // Arrange var timeIntervals = new List <TimeInterval>(); timeIntervals.Add(new TimeInterval(18, 0, 23, 59)); var config = new MowControlConfig() { TimeIntervals = timeIntervals, AverageWorkPerDayHours = 12, MaxHourlyThunderPercent = 0, MaxHourlyPrecipitaionMillimeter = 0 }; var systemTime = new TestSystemTime(new DateTime(2018, 6, 22, 1, 00, 0)); var powerSwitch = new TestPowerSwitch(true); var systemStartTime = systemTime.Now.AddDays(-1); var homeSensor = new TimeBasedHomeSensor(systemStartTime, config, powerSwitch, systemTime); // Act // Assert Assert.IsTrue(homeSensor.IsHome); }
public void IsHome_FirstCheck_IsHome() { // Arrange var timeIntervals = new List <TimeInterval>(); timeIntervals.Add(new TimeInterval(6, 0, 12, 0)); var config = new MowControlConfig() { TimeIntervals = timeIntervals, AverageWorkPerDayHours = 12, MaxHourlyThunderPercent = 0, MaxHourlyPrecipitaionMillimeter = 0 }; var systemTime = new TestSystemTime(new DateTime(2018, 6, 22, 6, 30, 0)); var powerSwitch = new TestPowerSwitch(true); var systemStartTime = systemTime.Now; var homeSensor = new TimeBasedHomeSensor(systemStartTime, config, powerSwitch, systemTime); // Act bool isHome = homeSensor.IsHome; // Assert Assert.IsTrue(isHome); }
public void IsHome_JustStoppedMowingAndOnItsWayHome_IsNotHome() { // Arrange var timeIntervals = new List <TimeInterval>(); timeIntervals.Add(new TimeInterval(6, 0, 12, 0)); var config = new MowControlConfig() { TimeIntervals = timeIntervals, AverageWorkPerDayHours = 12, MaxHourlyThunderPercent = 0, MaxHourlyPrecipitaionMillimeter = 0 }; var systemTime = new TestSystemTime(new DateTime(2018, 6, 22, 12, 15, 0)); var powerSwitch = new TestPowerSwitch(true); var systemStartTime = systemTime.Now.AddDays(-1); var homeSensor = new TimeBasedHomeSensor(systemStartTime, config, powerSwitch, systemTime); // Act bool isHome = homeSensor.IsHome; // First is always true // Assert Assert.IsFalse(isHome); }
public void IsHome_AfterAnIntervalWithPowerOff_IsStillHome() { // Arrange var timeIntervals = new List <TimeInterval>(); timeIntervals.Add(new TimeInterval(6, 0, 12, 0)); var config = new MowControlConfig() { TimeIntervals = timeIntervals, AverageWorkPerDayHours = 12, MaxHourlyThunderPercent = 0, MaxHourlyPrecipitaionMillimeter = 0 }; var systemTime = new TestSystemTime(new DateTime(2018, 6, 22, 11, 59, 0)); var powerSwitch = new TestPowerSwitch(false); var systemStartTime = systemTime.Now.AddDays(-1); var homeSensor = new TimeBasedHomeSensor(systemStartTime, config, powerSwitch, systemTime); var isHome = homeSensor.IsHome; systemTime.TickMinutes(2); powerSwitch.TurnOn(); // Act isHome = homeSensor.IsHome; // Assert Assert.IsTrue(isHome); }
static void Main(string[] args) { string path = Directory.GetCurrentDirectory(); var serializer = new XmlSerializer(typeof(MowitConfig)); bool simulatedHomeSensor = false; foreach (string arg in args) { if (arg == "/configexample") { TextWriter textWriter = new StreamWriter(Path.Combine(path, "MowitSettings.xml.example")); serializer.Serialize(textWriter, MowitConfig.GetExampleConfig()); textWriter.Flush(); return; } if (arg == "/simulatedcontacthomesensor") { simulatedHomeSensor = true; } } TextReader textReader = new StreamReader(Path.Combine(path, "MowitSettings.xml")); Config = (MowitConfig)serializer.Deserialize(textReader); Console.WriteLine("Press ENTER to start the Mowit service."); Console.ReadLine(); EmailSender.Init(Config.EmailConfig); var systemTime = new SystemTime(); var powerSwitch = new UrlPowerSwitch(Config.MowControlConfig.PowerOnUrl, Config.MowControlConfig.PowerOffUrl); IHomeSensor homeSensor; if (simulatedHomeSensor) { homeSensor = new SimulatedContactHomeSensor(systemTime, Config.MowControlConfig.TimeIntervals.ToArray(), powerSwitch); } else { homeSensor = new TimeBasedHomeSensor(systemTime.Now, Config.MowControlConfig, powerSwitch, systemTime); } Smhi smhi = new Smhi(Config.MowControlConfig.CoordLat, Config.MowControlConfig.CoordLon, new TimeSpan(1, 0, 0)); var weatherForecast = new WeatherForecast(smhi, Config.MowControlConfig.MaxHourlyThunderPercent, Config.MowControlConfig.MaxHourlyPrecipitaionMillimeter, Config.MowControlConfig.MaxRelativeHumidityPercent); var logger = new MowLogger(); logger.LogItemWritten += Logger_LogItemWritten; var rainSensor = new SmhiRainSensor(systemTime, smhi); var mowController = new MowController(Config.MowControlConfig, powerSwitch, weatherForecast, systemTime, homeSensor, logger, rainSensor); var task = mowController.StartAsync(); task.Wait(); }