public void isFunctionActiveTodayTest3()
        {
            IZoneServer zoneServer = null;

            // (1) Empty day list
            List <DayOfWeek> _dayOfWeeks1 = new List <DayOfWeek>();
            AlarmFunction    function1    = new AlarmFunction(
                SimpleId.NewGuid(),
                new Address(100, 1), new Address(100, 1), 50,
                new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0),
                _dayOfWeeks1);
            Dictionary <int, IAudioDriver> audioDrivers = null;
            ConcreteAlarmFunction          target1      = new ConcreteAlarmFunction(function1, zoneServer, audioDrivers);

            // (2) Full day list
            List <DayOfWeek> _dayOfWeeks2 = new List <DayOfWeek>();

            _dayOfWeeks2.Add(DayOfWeek.Monday);
            _dayOfWeeks2.Add(DayOfWeek.Tuesday);
            _dayOfWeeks2.Add(DayOfWeek.Wednesday);
            _dayOfWeeks2.Add(DayOfWeek.Thursday);
            _dayOfWeeks2.Add(DayOfWeek.Friday);
            _dayOfWeeks2.Add(DayOfWeek.Saturday);
            _dayOfWeeks2.Add(DayOfWeek.Sunday);
            AlarmFunction function2 = new AlarmFunction(
                SimpleId.NewGuid(),
                new Address(100, 1), new Address(100, 1), 50,
                new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0),
                _dayOfWeeks2);
            ConcreteAlarmFunction target2 = new ConcreteAlarmFunction(function2, zoneServer, audioDrivers);

            // Monday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 7, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 7, 12, 0, 0)));

            // Tuesday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 8, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 8, 12, 0, 0)));

            // Wednesday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 9, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 9, 12, 0, 0)));

            // Thursday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 10, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 10, 12, 0, 0)));

            // Friday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 11, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 11, 12, 0, 0)));

            // Saturday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 12, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 12, 12, 0, 0)));

            // Sunday
            Assert.AreEqual(false, target1.isFunctionActiveToday(new DateTime(2009, 9, 13, 12, 0, 0)));
            Assert.AreEqual(true, target2.isFunctionActiveToday(new DateTime(2009, 9, 13, 12, 0, 0)));
        }
 /// <summary>
 /// Constructor to instantiate a concrete alarm function.
 /// </summary>
 /// <param name="function">Configuration data for this alarm function.</param>
 /// <param name="zoneServer">Zone server, to get notification about zone changes.</param>
 /// <param name="audioDrivers">Audio Drivers, in case a sound needs to be played.</param>
 public ConcreteAlarmFunction(AlarmFunction function, IZoneServer zoneServer, Dictionary <int, IAudioDriver> audioDrivers)
     : base(zoneServer, function, audioDrivers)
 {
     if (function == null)
     {
         onFunctionError();
         throw new FunctionServerException("Function configuration is null. This is not allowed");
     }
     _function = function;
     subscribeZone(_function.ZoneId);
 }
 public void ConcreteAlarmFunctionConstructorTest2()
 {
     List <DayOfWeek> _dayOfWeeks = new List <DayOfWeek>();
     AlarmFunction    function    = new AlarmFunction(
         SimpleId.NewGuid(),
         new Address(100, 1), new Address(100, 1), 50,
         new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0),
         _dayOfWeeks);
     IZoneServer zoneServer = null;
     Dictionary <int, IAudioDriver> audioDrivers = null;
     ConcreteAlarmFunction          target       = new ConcreteAlarmFunction(function, zoneServer, audioDrivers);
 }
 public void ConcreteAlarmFunctionConstructorTest1()
 {
     try
     {
         AlarmFunction function   = null;
         IZoneServer   zoneServer = null;
         Dictionary <int, IAudioDriver> audioDrivers = null;
         ConcreteAlarmFunction          target       = new ConcreteAlarmFunction(function, zoneServer, audioDrivers);
     }
     catch (FunctionServerException)
     {
         return;
     }
     Assert.Fail("'FunctionServerException' Exception expected!");
 }
        public void isFunctionActiveTodayTest1()
        {
            List <DayOfWeek> _dayOfWeeks = new List <DayOfWeek>();
            AlarmFunction    function    = new AlarmFunction(
                SimpleId.NewGuid(),
                new Address(100, 1), new Address(100, 1), 50,
                new TimeSpan(6, 0, 0), new TimeSpan(0, 45, 0),
                _dayOfWeeks);
            IZoneServer zoneServer = null;
            Dictionary <int, IAudioDriver> audioDrivers = null;
            ConcreteAlarmFunction          target       = new ConcreteAlarmFunction(function, zoneServer, audioDrivers);
            DateTime aktTime = DateTime.Now;
            bool     actual  = target.isFunctionActiveToday(aktTime);

            Assert.AreEqual(false, actual);
        }
        public void calculateFunctionTest4()
        {
            // (1) Day list: Monday, Wednesday, Friday, Sunday
            // (1) Function: AlarmTime=10:00, AlarmDuration=01:45
            #region Function1
            List <DayOfWeek> _dayOfWeeks1 = new List <DayOfWeek>();
            _dayOfWeeks1.Add(DayOfWeek.Monday);
            _dayOfWeeks1.Add(DayOfWeek.Wednesday);
            _dayOfWeeks1.Add(DayOfWeek.Friday);
            _dayOfWeeks1.Add(DayOfWeek.Sunday);
            AlarmFunction function1 = new AlarmFunction(
                SimpleId.NewGuid(),
                new Address(100, 1), new Address(100, 3), 50,
                new TimeSpan(10, 0, 0), new TimeSpan(1, 45, 0),
                _dayOfWeeks1);
            ZoneServerMock zoneServer1 = new ZoneServerMock();
            Dictionary <int, IAudioDriver> audioDrivers = null;
            ConcreteAlarmFunction          target1      = new ConcreteAlarmFunction(function1, zoneServer1, audioDrivers);
            #endregion

            // (2) Day list: Tuesday, Thursday, Saturday, Sunday
            // (2) Function: AlarmTime=10:00, AlarmDuration=01:45
            #region Function2
            List <DayOfWeek> _dayOfWeeks2 = new List <DayOfWeek>();
            _dayOfWeeks2.Add(DayOfWeek.Tuesday);
            _dayOfWeeks2.Add(DayOfWeek.Thursday);
            _dayOfWeeks2.Add(DayOfWeek.Saturday);
            _dayOfWeeks2.Add(DayOfWeek.Sunday);
            AlarmFunction function2 = new AlarmFunction(
                SimpleId.NewGuid(),
                new Address(100, 1), new Address(100, 6), 50,
                new TimeSpan(10, 0, 0), new TimeSpan(1, 45, 0),
                _dayOfWeeks2);
            ZoneServerMock        zoneServer2 = new ZoneServerMock();
            ConcreteAlarmFunction target2     = new ConcreteAlarmFunction(function2, zoneServer2, audioDrivers);
            #endregion

            ZoneState zoneStateOff1 = new ZoneState(new Address(100, 2), false, 20, ZoneQuality.Online);
            zoneStateOff1.LastUpdate = new DateTime(2009, 9, 12, 23, 0, 0);
            ZoneState zoneStateOn = new ZoneState(new Address(100, 2), true, 20, ZoneQuality.Online);
            zoneStateOn.LastUpdate = new DateTime(2009, 9, 12, 23, 5, 0);
            ZoneState zoneStateOff2 = new ZoneState(new Address(100, 2), false, 20, ZoneQuality.Online);
            zoneStateOff2.LastUpdate = new DateTime(2009, 9, 12, 23, 10, 0);

            // Sunday (13.9.2009 11:00)
            zoneServer1.distributeZoneState(zoneStateOff1);
            zoneServer1.distributeZoneState(zoneStateOn);    // sets the member LastChangeToON
            zoneServer1.distributeZoneState(zoneStateOff2);
            target1.calculateFunction(new DateTime(2009, 9, 13, 11, 0, 0));

            zoneServer2.distributeZoneState(zoneStateOff1);
            zoneServer2.distributeZoneState(zoneStateOn);                     // sets the member LastChangeToON
            zoneServer2.distributeZoneState(zoneStateOff2);
            target2.calculateFunction(new DateTime(2009, 9, 13, 11, 44, 59)); // last change before functions ends

            Assert.AreEqual(1, zoneServer1._monitoredZones.Count);
            Assert.AreEqual(1, zoneServer2._monitoredZones.Count);
            Assert.AreEqual(1, zoneServer1.ZoneStates.Count);  // 1 command has been sent
            Assert.AreEqual(true, zoneServer1.ZoneStates[new Address(100, 1)].PowerStatus);
            Assert.AreEqual(new Address(100, 3), zoneServer1.ZoneStates[new Address(100, 1)].Source);
            Assert.AreEqual(1, zoneServer2.ZoneStates.Count);  // 1 command has been sent
            Assert.AreEqual(true, zoneServer2.ZoneStates[new Address(100, 1)].PowerStatus);
            Assert.AreEqual(new Address(100, 6), zoneServer2.ZoneStates[new Address(100, 1)].Source);
            zoneServer1.ClearZoneStateList();
            zoneServer2.ClearZoneStateList();
        }
        /// <summary>
        /// Asks the AlarmClockManager to call the given function at the given time with the given parameter.
        /// </summary>
        /// <param name="when">The time when the call must be performed.</param>
        /// <param name="funcToCall">The function that must be called.</param>
        /// <param name="param">The parameter of the function to call with.</param>
        /// <returns>A reference to the allocated alarm clock.</returns>
        public AlarmClock SetAlarmClock(int when, AlarmFunction funcToCall, object param)
        {
            if (this.dssThread != RCThread.CurrentThread)
            {
                throw new DssException("AlarmClockManager.SetAlarmClock must be called from the DSS-thread!");
            }
            if (funcToCall == null)
            {
                throw new ArgumentNullException("funcToCall");
            }
            if (when < 0)
            {
                throw new ArgumentOutOfRangeException("when");
            }

            int currentTime = DssRoot.Time;

            if (when > currentTime)
            {
                /// Delayed invoke
                lock (this.lockObj)
                {
                    if (this.timers.Length == 0)
                    {
                        /// No free timer found --> create a new one
                        AlarmClockThread newTimer = new AlarmClockThread();
                        this.currentCapacity++;
                        this.timers = new Fifo <AlarmClockThread>(currentCapacity);
                        this.timers.Push(newTimer);
                        TraceManager.WriteAllTrace(string.Format("Delayed: New timer: {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                        TraceManager.WriteAllTrace(string.Format("Push timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    }
                    else
                    {
                        TraceManager.WriteAllTrace("Delayed: clock reuse", DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    }

                    AlarmClockThread timerToUse = this.timers.Get();
                    TraceManager.WriteAllTrace(string.Format("Get timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    AlarmClock retClock = new AlarmClock(when, this);
                    this.targetFunctions.Add(timerToUse, funcToCall);
                    this.parameters.Add(timerToUse, param);
                    this.alarmClocks.Add(timerToUse, retClock);
                    this.clockTimerMap.Add(retClock, timerToUse);

                    timerToUse.Start(when - currentTime, this.AlarmClockThreadFinishedHdl, this.AlarmClockThreadFinishedHdl);
                    TraceManager.WriteAllTrace(string.Format("AlarmClock-{0} started", retClock.testID), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    return(retClock);
                }
            }
            else
            {
                /// Immediate invoke
                lock (this.lockObj)
                {
                    if (this.timers.Length == 0)
                    {
                        /// No free timer found --> create a new one
                        AlarmClockThread newTimer = new AlarmClockThread();
                        this.currentCapacity++;
                        this.timers = new Fifo <AlarmClockThread>(currentCapacity);
                        this.timers.Push(newTimer);
                        TraceManager.WriteAllTrace(string.Format("Immediate: New timer: {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                        TraceManager.WriteAllTrace(string.Format("Push timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    }
                    else
                    {
                        TraceManager.WriteAllTrace("Immediate: clock reuse", DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    }

                    AlarmClockThread timerToUse = this.timers.Get();
                    TraceManager.WriteAllTrace(string.Format("Get timer - {0}", this.timers.Length), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    AlarmClock retClock = new AlarmClock(when, this);
                    this.targetFunctions.Add(timerToUse, funcToCall);
                    this.parameters.Add(timerToUse, param);
                    this.alarmClocks.Add(timerToUse, retClock);
                    this.clockTimerMap.Add(retClock, timerToUse);

                    TraceManager.WriteAllTrace(string.Format("AlarmClock-{0} started immediately", retClock.testID), DssTraceFilters.ALARM_CLOCK_MANAGER_INFO);
                    this.alarmClkFinishedIface.AlarmClockFinished(retClock);
                    return(retClock);
                }
            }
        }
 /// <summary>
 /// Asks the AlarmClockManager to call the given function at the given time.
 /// </summary>
 /// <param name="when">The time when the call must be performed.</param>
 /// <param name="funcToCall">The function that must be called.</param>
 /// <returns>A reference to the allocated alarm clock.</returns>
 public AlarmClock SetAlarmClock(int when, AlarmFunction funcToCall)
 {
     return(SetAlarmClock(when, funcToCall, null));
 }
示例#9
0
        public void GetConfigurationTest()
        {
            // If the system configuration version changes, you need to adapt/review this test case
            Assert.AreEqual("3.0", SystemConfiguration.VERSION);

            string file = @"NuvoControlKonfigurationUnitTest2.xml";
            ConfigurationLoader target = new ConfigurationLoader(file);
            SystemConfiguration systemConfiguration = target.GetConfiguration();

            Assert.AreEqual("3.0", systemConfiguration.ConfigurationVersion);

            TestContext.WriteLine("Testing device communication parameters...");
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Id, 100);
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.BaudRate, 9600);
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.DataBits, 8);
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.ParityBit, 1);
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].Communication.ParityMode, "None");

            TestContext.WriteLine("Testing device protocol driver parameters...");
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].ProtocolDriver.Name, "Nuvo Essentia Protokoll Driver");
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].ProtocolDriver.AssemblyName, "NuvoControl.Server.ProtocolDriver");
            Assert.AreEqual(systemConfiguration.Hardware.Devices[0].ProtocolDriver.ClassName, "NuvoControl.Server.ProtocolDriver.NuvoEssentiaProtocolDriver");

            TestContext.WriteLine("Testing audio driver parameters...");
            Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].AudioDevices.Count);
            Assert.AreEqual(new Address(100, 1), systemConfiguration.Hardware.Devices[0].AudioDevices[0].Id);
            Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].AudioDevices[0].Id.ObjectId);
            Assert.AreEqual(new Address(100, 2), systemConfiguration.Hardware.Devices[0].AudioDevices[1].Id);
            Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].AudioDevices[1].Id.ObjectId);
            Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].AudioDevices[2].Id.ObjectId);
            Assert.AreEqual("hw:0,0", systemConfiguration.Hardware.Devices[0].AudioDevices[0].Device);

            TestContext.WriteLine("Testing osc driver parameters...");
            Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].OscDevices.Count);
            // OSC Client 1
            Assert.AreEqual(eOSCDeviceType.OSCClient, systemConfiguration.Hardware.Devices[0].OscDevices[0].DeviceType);
            Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].OscDevices[0].Id.ObjectId);
            Assert.AreEqual(9000, systemConfiguration.Hardware.Devices[0].OscDevices[0].SendPort);
            Assert.AreEqual(-1, systemConfiguration.Hardware.Devices[0].OscDevices[0].ListenPort);
            // OSC Server
            Assert.AreEqual(eOSCDeviceType.OSCServer, systemConfiguration.Hardware.Devices[0].OscDevices[2].DeviceType);
            Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].OscDevices[2].Id.ObjectId);
            Assert.AreEqual(9000, systemConfiguration.Hardware.Devices[0].OscDevices[2].SendPort);
            Assert.AreEqual(8000, systemConfiguration.Hardware.Devices[0].OscDevices[2].ListenPort);
            // OSC Client 2
            Assert.AreEqual(eOSCDeviceType.OSCClient, systemConfiguration.Hardware.Devices[0].OscDevices[1].DeviceType);
            Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].OscDevices[1].Id.ObjectId);
            Assert.AreEqual(9002, systemConfiguration.Hardware.Devices[0].OscDevices[1].SendPort);
            Assert.AreEqual(-1, systemConfiguration.Hardware.Devices[0].OscDevices[1].ListenPort);
            Assert.AreEqual(18, systemConfiguration.Hardware.Devices[0].OscDevices[1].OscDeviceLayouts.Count);

            TestContext.WriteLine("Testing device zone parameters...");
            Assert.AreEqual(12, systemConfiguration.Hardware.Devices[0].ZoneList.Count);
            Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].ZoneList[0].Id.ObjectId);
            Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].ZoneList[1].Id.ObjectId);
            Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].ZoneList[2].Id.ObjectId);
            Assert.AreEqual(4, systemConfiguration.Hardware.Devices[0].ZoneList[3].Id.ObjectId);
            Assert.AreEqual(5, systemConfiguration.Hardware.Devices[0].ZoneList[4].Id.ObjectId);
            Assert.AreEqual(6, systemConfiguration.Hardware.Devices[0].ZoneList[5].Id.ObjectId);
            Assert.AreEqual(7, systemConfiguration.Hardware.Devices[0].ZoneList[6].Id.ObjectId);
            Assert.AreEqual(8, systemConfiguration.Hardware.Devices[0].ZoneList[7].Id.ObjectId);
            Assert.AreEqual(9, systemConfiguration.Hardware.Devices[0].ZoneList[8].Id.ObjectId);
            Assert.AreEqual(10, systemConfiguration.Hardware.Devices[0].ZoneList[9].Id.ObjectId);
            Assert.AreEqual(11, systemConfiguration.Hardware.Devices[0].ZoneList[10].Id.ObjectId);
            Assert.AreEqual(12, systemConfiguration.Hardware.Devices[0].ZoneList[11].Id.ObjectId);

            TestContext.WriteLine("Testing device source parameters...");
            Assert.AreEqual(6, systemConfiguration.Hardware.Devices[0].Sources.Count);
            Assert.AreEqual(1, systemConfiguration.Hardware.Devices[0].Sources[0].Id.ObjectId);
            Assert.AreEqual(2, systemConfiguration.Hardware.Devices[0].Sources[1].Id.ObjectId);
            Assert.AreEqual(3, systemConfiguration.Hardware.Devices[0].Sources[2].Id.ObjectId);
            Assert.AreEqual(4, systemConfiguration.Hardware.Devices[0].Sources[3].Id.ObjectId);
            Assert.AreEqual(5, systemConfiguration.Hardware.Devices[0].Sources[4].Id.ObjectId);
            Assert.AreEqual(6, systemConfiguration.Hardware.Devices[0].Sources[5].Id.ObjectId);

            TestContext.WriteLine("Testing some graphic parameters...");
            Assert.AreEqual(2, systemConfiguration.Graphic.Building.Floors.Count);
            Assert.AreEqual("Wohnbereich", systemConfiguration.Graphic.Building.Floors[0].Name);
            Assert.AreEqual(@".\Images\Wohnbereich.bmp", systemConfiguration.Graphic.Building.Floors[0].FloorPlanPath);
            Assert.AreEqual("bmp", systemConfiguration.Graphic.Building.Floors[0].FloorPlanType);
            Assert.AreEqual(9, systemConfiguration.Graphic.Building.Floors[0].Zones.Count);
            Assert.AreEqual(new Address(100, 1), systemConfiguration.Graphic.Building.Floors[0].Zones[0].Id);
            Assert.AreEqual("Esszimmer", systemConfiguration.Graphic.Building.Floors[0].Zones[0].Name);
            Assert.AreEqual(@".\Images\Esszimmer.jpg", systemConfiguration.Graphic.Building.Floors[0].Zones[0].PicturePath);
            Assert.AreEqual("jpg", systemConfiguration.Graphic.Building.Floors[0].Zones[0].PictureType);
            Assert.AreEqual(4, systemConfiguration.Graphic.Building.Floors[0].Zones[0].FloorPlanCoordinates.Count);
            Assert.AreEqual(485, systemConfiguration.Graphic.Building.Floors[0].Zones[0].FloorPlanCoordinates[1].X);
            Assert.AreEqual(210, systemConfiguration.Graphic.Building.Floors[0].Zones[0].FloorPlanCoordinates[1].Y);
            Assert.AreEqual(6, systemConfiguration.Graphic.Sources.Count);
            Assert.AreEqual(new Address(100, 1), systemConfiguration.Graphic.Sources[0].Id);
            Assert.AreEqual("DAB Hama DIR3100", systemConfiguration.Graphic.Sources[0].Name);
            Assert.AreEqual(systemConfiguration.Graphic.Sources[0].PicturePath, @".\Images\Tuner.jpg");
            Assert.AreEqual(systemConfiguration.Graphic.Sources[0].PictureType, "jpg");


            TestContext.WriteLine("Testing some function parameters...");
            Assert.AreEqual(12, systemConfiguration.Functions.Count);
            SleepFunction sleepFct = systemConfiguration.Functions[0] as SleepFunction;

            Assert.AreEqual(new SimpleId("2445f69e-a5a7-465e-95be-9179913d3780"), sleepFct.Id);
            Assert.AreEqual(new Address(100, 3), sleepFct.ZoneId);
            Assert.AreEqual(new TimeSpan(0, 60, 0), sleepFct.SleepDuration);
            Assert.AreEqual(new TimeSpan(20, 00, 0), sleepFct.ValidFrom);
            Assert.AreEqual(new TimeSpan(2, 0, 0), sleepFct.ValidTo);
            Assert.AreEqual(1, sleepFct.Commands.Count);

            AlarmFunction alarmFct = systemConfiguration.Functions[3] as AlarmFunction;

            Assert.AreEqual(new SimpleId("11111111-0001-1111-1111-111111111111"), alarmFct.Id);
            Assert.AreEqual(new Address(100, 2), alarmFct.ZoneId);
            Assert.AreEqual(new TimeSpan(6, 45, 0), alarmFct.AlarmTime);
            Assert.AreEqual(new TimeSpan(2, 0, 0), alarmFct.AlarmDuration);
            Assert.AreEqual(new Address(100, 1), alarmFct.SourceId);
            Assert.AreEqual(1, alarmFct.ValidOnDays.Count);
            Assert.AreEqual(DayOfWeek.Monday, alarmFct.ValidOnDays[0]);
            Assert.AreEqual(1, alarmFct.Commands.Count);

            ZoneChangeFunction zonechangeFct = systemConfiguration.Functions[6] as ZoneChangeFunction;

            Assert.AreEqual(new SimpleId("1234"), zonechangeFct.Id);
            Assert.AreEqual(1, zonechangeFct.ValidOnDays.Count);
            Assert.AreEqual(DayOfWeek.Tuesday, zonechangeFct.ValidOnDays[0]);
            Assert.AreEqual(0, zonechangeFct.Commands.Count);

            OscEventFunction oscFunc = systemConfiguration.Functions[7] as OscEventFunction;

            Assert.AreEqual(new SimpleId("504"), oscFunc.Id);
            Assert.AreEqual(1, oscFunc.ValidOnDays.Count);
            Assert.AreEqual(DayOfWeek.Friday, oscFunc.ValidOnDays[0]);
            Assert.AreEqual(2, oscFunc.Commands.Count);

            OscEventFunction oscFunc2 = systemConfiguration.Functions[8] as OscEventFunction;

            Assert.AreEqual(new SimpleId("505"), oscFunc2.Id);
            Assert.AreEqual("/4/toggle3", oscFunc2.OscLabel);
            Assert.AreEqual(null, oscFunc2.ValidOnDays);
            Assert.AreEqual(1, oscFunc2.Commands.Count);

            OscEventFunction oscFunc3 = systemConfiguration.Functions[9] as OscEventFunction;

            Assert.AreEqual(new SimpleId("506"), oscFunc3.Id);
            Assert.AreEqual("/4/toggle5", oscFunc3.OscLabel);
            Assert.AreEqual("100.1", oscFunc3.OscDevice.ToString());
            Assert.AreEqual("SwitchOff", oscFunc3.OscEvent);
            Assert.AreEqual(null, oscFunc3.ValidOnDays);
            Assert.AreEqual(1, oscFunc3.Commands.Count);
        }