コード例 #1
0
        public FrmDimmer(DimmerNode node)
        {
            InitializeComponent();

            this.Text = this.Text + "-" + node.Title;

            this.ckbSwitch.Checked        = this.tlpSwitch.Enabled = node.Switch.Enable;
            this.ckbDimRelatively.Checked = this.tlpDimRelatively.Enabled = node.DimRelatively.Enable;
            this.ckbDimAbsolutely.Checked = this.tlpDimAbsolutely.Enabled = node.DimAbsolutely.Enable;
            this.ckbStateOnOff.Checked    = this.tlpStateOnOff.Enabled = node.StateOnOff.Enable;
            this.ckbStateDimValue.Checked = this.tlpStateDimValue.Enabled = node.StateDimValue.Enable;

            this.gaSwitch        = new Dictionary <string, KNXSelectedAddress>(node.Switch.MapSelectedAddress);
            this.gaDimRelatively = new Dictionary <string, KNXSelectedAddress>(node.DimRelatively.MapSelectedAddress);
            this.gaDimAbsoultely = new Dictionary <string, KNXSelectedAddress>(node.DimAbsolutely.MapSelectedAddress);
            this.gaStateOnOff    = new Dictionary <string, KNXSelectedAddress>(node.StateOnOff.MapSelectedAddress);
            this.gaStateDimValue = new Dictionary <string, KNXSelectedAddress>(node.StateDimValue.MapSelectedAddress);

            this.txbxSwitch.Text        = KNXSelectedAddress.GetGroupAddressName(this.gaSwitch);
            this.txbxDimRelatively.Text = KNXSelectedAddress.GetGroupAddressName(this.gaDimRelatively);
            this.txbxDimAbsolutely.Text = KNXSelectedAddress.GetGroupAddressName(this.gaDimAbsoultely);
            this.txbxStateOnOff.Text    = KNXSelectedAddress.GetGroupAddressName(this.gaStateOnOff);
            this.txbxStateDimValue.Text = KNXSelectedAddress.GetGroupAddressName(this.gaStateDimValue);

            this.node = node;
        }
コード例 #2
0
        public void When_PressedButtonUpOrDownLongWithoutReleaseAfterTimeout_ShouldStopDimmingAfterTimeout(int upOrDown, int startDimDelay, int dimPercent, int expectedDimPercent)
        {
            // Arrange: Create node
            var schedMock = new MockSchedulerService();
            var node      = new DimmerNode(TestNodeContext.Create(), schedMock);

            node.Mode.Value          = DimmerNode.MODE_TWO_BUTTON_DIMMING;
            node.StartDimDelay.Value = startDimDelay;
            node.DimPercent.Value    = dimPercent;
            var testCases = new[] {
                node.ButtonDimUp,
                node.ButtonDimDown
            };

            // Act 1: Press button
            testCases[upOrDown].Value = true;
            int callCounter = 0;

            schedMock.InvokeInObserver = (delay) => {
                ++callCounter;
                Assert.AreEqual(new TimeSpan(0, 0, 0, 0, startDimDelay), delay);
            };
            node.Execute();
            // Assert 1: The correct timeout is applied
            Assert.AreEqual(1, callCounter); // InvokeIn must be called exactly once.
            // Act 2:
            schedMock.MockInvokeNow();
            Assert.AreEqual((double)expectedDimPercent, node.Dim.Value);
            schedMock.Now             = schedMock.Now.AddMilliseconds(startDimDelay + 100);
            testCases[upOrDown].Value = false;
            node.Execute();
            // Assert 2:
        }
コード例 #3
0
        public void When_ButtonUpOrDownReleasedAfterPresedLong_ShouldStopDimming(int upOrDown)
        {
            // Arrange: Create node
            var schedMock = new MockSchedulerService();
            var node      = new DimmerNode(TestNodeContext.Create(), schedMock);

            node.Mode.Value = DimmerNode.MODE_TWO_BUTTON_DIMMING;
            var testCases = new Tuple <BoolValueObject, double>[] {
                new Tuple <BoolValueObject, double>(node.ButtonDimUp, 100.0d),
                new Tuple <BoolValueObject, double>(node.ButtonDimDown, -100.0d)
            };

            // Act Phase 2: Press button and release button
            testCases[upOrDown].Item1.Value = true;
            node.Execute();
            schedMock.MockInvokeNow();
            // Assert Phase 1: Light should not be switched on or off, but dimming should be started
            Assert.IsFalse(node.SwitchOnOff.HasValue);
            Assert.AreEqual(testCases[upOrDown].Item2, node.Dim.Value);
            // Act Phase 2: Release button after 800ms
            testCases[upOrDown].Item1.Value = false;
            schedMock.Now = schedMock.Now + TimeSpan.FromMilliseconds(800);
            node.Execute();
            // Assert: Light should not be switched on or off, and dimming should be stoped
            Assert.IsNull(schedMock.InvokeInAction); // No start dimming action should be scheduled
            Assert.IsFalse(node.SwitchOnOff.HasValue);
            Assert.AreEqual(0.0d, node.Dim.Value);
        }
コード例 #4
0
        public void When_ModeIs_MODE_SINGLE_BUTTON_SWITCHING_ShouldOnlyActivateButtonSwitchOnOff_And_SwitchOnOff()
        {
            // Arrange: Create node, lightis off
            var node = new DimmerNode(TestNodeContext.Create(), new MockSchedulerService());

            // Act: Change mode
            node.Mode.Value = DimmerNode.MODE_SINGLE_BUTTON_SWITCHING;
            // Assert: Validate Inputs:
            Assert.IsNull(node.ButtonDimUp);
            Assert.IsNull(node.ButtonDimDown);
            Assert.IsNull(node.ButtonDimUpDown);
            Assert.IsNotNull(node.ButtonSwitchOnOff);
            // Assert: Validate Outputs:
            Assert.IsNotNull(node.SwitchOnOff);
            Assert.IsNull(node.Dim);
        }
コード例 #5
0
        public void When_ButtonUpPressedShortlyWhileOn_Should_ToggleOff()
        {
            // Arrange: Create node, lightis on
            var node = new DimmerNode(TestNodeContext.Create(), new MockSchedulerService());

            node.Mode.Value       = DimmerNode.MODE_TWO_BUTTON_DIMMING;
            node.LightState.Value = true;
            // Act: Press button and release button
            node.ButtonDimUp.Value = true;
            node.Execute();
            node.ButtonDimUp.Value = false;
            node.Execute();
            // Assert: Light should be toggled off and not dimmed
            Assert.IsFalse(node.SwitchOnOff.Value);
            Assert.IsFalse(node.Dim.HasValue);
        }
コード例 #6
0
        public void When_ButtonUpOrDownPressedLong_ShouldStartDimmingUpOrDown(int upOrDOwn)
        {
            // Arrange: Create node
            var schedMock = new MockSchedulerService();
            var node      = new DimmerNode(TestNodeContext.Create(), schedMock);

            node.Mode.Value = DimmerNode.MODE_TWO_BUTTON_DIMMING;
            var testCases = new Tuple <BoolValueObject, double>[] {
                new Tuple <BoolValueObject, double>(node.ButtonDimUp, 100.0d),
                new Tuple <BoolValueObject, double>(node.ButtonDimDown, -100.0d)
            };

            // Act: Press button and release button
            testCases[upOrDOwn].Item1.Value = true;
            node.Execute();
            schedMock.MockInvokeNow();
            // Assert: Light should not be switched on or off, but dimming should be started
            Assert.IsFalse(node.SwitchOnOff.HasValue);
            Assert.AreEqual(testCases[upOrDOwn].Item2, node.Dim.Value);
        }
        public void When_ButtonDown_AndLightIsOn_Should_TurnLightOff_And_IgnoreButtonUp()
        {
            // Arrange: Create node, lightis off
            var node = new DimmerNode(TestNodeContext.Create(), new MockSchedulerService());

            node.Mode.Value       = DimmerNode.MODE_SINGLE_BUTTON_SWITCHING;
            node.LightState.Value = false;

            // Act 1: Press button and release button
            node.ButtonSwitchOnOff.Value = true;
            node.Execute();

            // Assert 1: Light should be toggled on and not dimmed
            Assert.IsTrue(node.SwitchOnOff.Value);

            // Act 2: Press button and release button
            node.ButtonSwitchOnOff.Value = false;
            node.Execute();

            // Assert 2: Light should NOT be toggled again
            Assert.IsTrue(node.SwitchOnOff.Value);
        }
コード例 #8
0
        private static ViewNode ImportControlNode(BackgroundWorker worker, ContainerNode parentNode, KNXControlBase knx, string ResImgDir)
        {
            ViewNode node = null;

            switch (knx.GetType().Name)
            {
            case MyConst.Controls.KnxBlindsType:
                node = new BlindsNode(knx as KNXBlinds, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxLabelType:
                node = new LabelNode(knx as KNXLabel, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxSceneButtonType:
                node = new SceneButtonNode(knx as KNXSceneButton, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxSliderSwitchType:
                node = new SliderSwitchNode(knx as KNXSliderSwitch, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxSwitchType:
                node = new SwitchNode(knx as KNXSwitch, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxValueDisplayType:
                node = new ValueDisplayNode(knx as KNXValueDisplay, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxTimerButtonType:
                node = new TimerButtonNode(knx as KNXTimerButton, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxDigitalAdjustmentType:
                node = new DigitalAdjustmentNode(knx as KNXDigitalAdjustment, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxImageButtonType:
                node = new ImageButtonNode(knx as KNXImageButton, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxShutterType:
                node = new ShutterNode(knx as KNXShutter, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxDimmerType:
                node = new DimmerNode(knx as KNXDimmer, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxWebCamViewerType:
                node = new WebCamerNode(knx as KNXWebCamer, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxMediaButtonType:
                node = new MediaButtonNode(knx as KNXMediaButton, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxAirConditionType:
                node = new AirConditionNode(knx as KNXAirCondition, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxHVACType:
                node = new HVACNode(knx as KNXHVAC, worker, ResImgDir);
                break;

            case MyConst.Controls.KnxGroupBoxType:
                node = new GroupBoxNode(knx as KNXGroupBox, worker, ResImgDir);

                KNXGroupBox knxGroupBox = knx as KNXGroupBox;
                if (knxGroupBox.Controls != null && knxGroupBox.Controls.Count > 0)
                {
                    foreach (var item in knxGroupBox.Controls)
                    {
                        ImportControlNode(worker, node as ContainerNode, item, ResImgDir);
                    }
                }

                break;

            default:
                MessageBox.Show(UIResMang.GetString("Message39") + knx.GetType().Name, UIResMang.GetString("Message6"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                break;
            }

            if (null != parentNode)
            {
                parentNode.Nodes.Add(node);
            }

            return(node);
        }