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);
        }
Exemple #5
0
        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();
        }