Inheritance: MonoBehaviour
        public async Task GetDeviceDetailsAsync_ShouldReturnExpectedResult(InstalledAppInstance installedApp)
        {
            var doorLock = new DoorLock()
            {
                CurrentState = LockState.Locked,
                Id           = Guid.NewGuid().ToString(),
                Label        = "Front door lock"
            };

            var responseBody = $@"{{
                ""deviceId"": ""{doorLock.Id}"",
                ""name"": ""Front.door.lock"",
                ""label"": ""{doorLock.Label}"",
                ""locationId"": ""{installedApp.InstalledLocation.Id}""
            }}";

            dynamic expectedResult = JObject.Parse(responseBody);

            _mockHttpMessageHandler.SetupRequest(HttpMethod.Get,
                                                 $"{BaseUri}/devices/{doorLock.Id}")
            .ReturnsResponse(responseBody);

            var result = await _smartThingsAPIHelper.GetDeviceDetailsAsync(installedApp,
                                                                           doorLock.Id);

            Assert.Equal(expectedResult, result);
        }
示例#2
0
    void OnTriggerEnter(Collider collider)
    {
        DoorKey doorKey = collider.GetComponent <DoorKey>();

        if (doorKey != null)
        {
            doorKeyHoldingList.Add(doorKey.key);
            doorKey.DestroySelf();
            OnDoorKeyAdded?.Invoke(this, EventArgs.Empty);
        }

        DoorLock doorLock = collider.GetComponent <DoorLock>();

        if (doorLock != null)
        {
            if (doorKeyHoldingList.Contains(doorLock.key))
            {
                // Has key! Open door!
                doorLock.OpenDoor();
                if (doorLock.removeKeyOnUse)
                {
                    doorKeyHoldingList.Remove(doorLock.key);
                }
                OnDoorKeyUsed?.Invoke(this, EventArgs.Empty);
            }
        }
    }
示例#3
0
        public MainPage()
        {
            this.InitializeComponent();

            webCam = WebCam.Create();
            webCam.StartLiveStreamAsync(liveStreamElement);  // display camera's live stream in UI
            imgurClient = new ImgurApi();

            keypad = new KeyPad();
            Debug.WriteLine("keypad created");
            keypad.OnPress += UpdateApartmentTextBoxAsync;  // UI
            keypad.OnRing  += HandleVisitorAsync;
            keypad.OnReset += ResetApartmentTextBoxAsync;   // UI

            doorLock = DoorLock.Create();

            httpClient   = new HttpClient();
            baseUri      = "https://prod-07.northeurope.logic.azure.com:443/workflows/b6551691604a461db4a0c06801cf0df3/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=xcu2NJIVZXpy-AxTEP3tkk-Gei_P08uoyOP-hpr7RNc";
            httpResponse = new HttpResponseMessage();

            deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey(deviceId, deviceKey), TransportType.Mqtt);

            // wait for a visitor to enter an apartment number
            Task a = Task.Run(() => {
                while (true)
                {
                    resetEvent.Reset();
                    keypad.GetAparmentNumber();
                    resetEvent.WaitOne();
                }
            }
                              );
        }
示例#4
0
        public MainPage()
        {
            this.InitializeComponent();
            webCam = WebCam.Create();
            webCam.StartLiveStreamAsync(liveStreamElement);  // display camera's live stream in UI

            keypad          = new KeyPad();
            keypad.OnPress += UpdateApartmentTextBoxAsync;  // UI
            keypad.OnRing  += HandleVisitorAsync;
            keypad.OnReset += ResetApartmentTextBoxAsync;   // UI

            doorLock = DoorLock.Create();

            httpClient   = new HttpClient();
            baseUri      = "https://intellidoorfunctionapp.azurewebsites.net/api/open?code=pZcJ7JYaB/mUL873qU4ge8AFTPhZvr0ZJ2vTrIrXQdTI3WOD7zBQ5A==";
            httpResponse = new HttpResponseMessage();

            // wait for a visitor to enter an apartment number
            Task a = Task.Run(() => {
                while (true)
                {
                    resetEvent.Reset();
                    keypad.GetAparmentNumber();
                    resetEvent.WaitOne();
                }
            }
                              );
        }
示例#5
0
 public DoorLockKeypad()
 {
     InitializeComponent();
     Lock = new DoorLock();
     LockoutTimer.Tick    += LockoutTimer_Tick;
     LockoutTimer.Interval = Lock.LockOutTime;
 }
示例#6
0
 /// <summary>
 /// Saves the log
 /// </summary>
 /// <param name="Lock"></param>
 /// <param name="codeAttempt"></param>
 internal virtual void LogState(DoorLock Lock, string codeAttempt)
 {
     _disabled    = Lock.IsDisabled == true ? "Disabled" : "Enabled";
     _lockState   = Lock.AttemptNumber == 1 ? "Success" : "Failure";
     _timeStamp   = DateTime.Now;
     _codeAttempt = codeAttempt;
     File.AppendAllText(_logFilePath, this.ToString());
 }
示例#7
0
        public void DoorLockDisabled()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            //Assert
            Assert.That(Lock.IsDisabled, Is.False);
        }
示例#8
0
        public void DoorLockCtorAttmeptsNumber()
        {
            //Arrange
            //Act
            DoorLock Lock = new DoorLock();

            //Assert
            Assert.That(Lock.AttemptNumber, Is.EqualTo(1));
        }
示例#9
0
        public void DoorLockLockOutInterval()
        {
            //Arrange
            //Act
            DoorLock Lock = new DoorLock();

            //Assert
            Assert.That(Lock.LockOutTime, Is.EqualTo(10000));
        }
示例#10
0
        public void DoorLockStartsUnlocked()
        {
            //Arrange
            //Act
            DoorLock Lock = new DoorLock();

            //Assert
            Assert.That(Lock.IsLocked, Is.False);
        }
示例#11
0
        public void DoorLockCtorAttmeptsAllowed()
        {
            //Arrange
            //Act
            DoorLock Lock = new DoorLock();

            //Assert
            Assert.That(Lock.AttemptsAllowed, Is.EqualTo(3));
        }
示例#12
0
        public void DoorLockOnlyLetsValidCodes()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            //Assert
            Assert.That(Lock.SubmitCode(Lock.AttemptsAllowed.ToString()), Is.False);
            Assert.That(Lock.SubmitCode(Lock.LockOutTime.ToString()), Is.False);
        }
示例#13
0
        public void DoorLockSumbitCodeReturnsBool()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act

            //Assert
            Assert.That(Lock.SubmitCode("1221212121212121"), Is.False);
        }
示例#14
0
        public void DoorLockSubmitCodeIncrementsAttempts()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            Lock.SubmitCode("44344");
            //Assert
            Assert.That(Lock.AttemptNumber, Is.EqualTo(2));
        }
示例#15
0
        public void DoorLockSumbitCodeTogglesState()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            Assert.That(Lock.IsLocked, Is.False);
            Lock.SubmitCode("000000000");
            //Assert
            Assert.That(Lock.IsLocked, Is.True);
        }
示例#16
0
        public void DoorLockLogToString()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            Lock.SubmitCode("000000000");
            //Assert
            Assert.That(Lock.Log.ToString(), Does.EndWith("000000000,Success,Enabled\r\n"));
            Assert.That(DateTime.Parse(Lock.Log.ToString().Split(',')[0]), Is.TypeOf(DateTime.Now.GetType()));
        }
示例#17
0
        public void DoorLockCtorValidCodesInitialized()
        {
            //Arrange
            //Act
            DoorLock Lock = new DoorLock();

            //Assert
            Assert.That(Lock.SubmitCode("000000000"), Is.True);
            Assert.That(Lock.SubmitCode("987654321"), Is.True);
            Assert.That(Lock.SubmitCode("123456"), Is.True);
        }
示例#18
0
        public void DoorLockDisabledAfterAttempts()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            Lock.SubmitCode("44344");
            Assert.That(Lock.IsDisabled, Is.False);
            Lock.SubmitCode("44344");
            Assert.That(Lock.IsDisabled, Is.False);
            Lock.SubmitCode("44344");
            //Assert
            Assert.That(Lock.IsDisabled, Is.True);
        }
示例#19
0
        public void DoorLockDisabledResetOnValidSubmit()
        {
            //Arrange
            DoorLock Lock = new DoorLock();

            //Act
            Lock.SubmitCode("44344");
            Lock.SubmitCode("44344");
            Lock.SubmitCode("44344");
            Assert.That(Lock.IsDisabled, Is.True);
            Lock.SubmitCode("000000000");
            //Assert
            Assert.That(Lock.IsDisabled, Is.False);
        }
        public async Task SubscribeToDeviceEventAsync_ShouldReturnExpectedResult(InstalledAppInstance installedApp)
        {
            var doorLock = new DoorLock()
            {
                CurrentState = LockState.Locked,
                Id           = Guid.NewGuid().ToString(),
                Label        = "Front door lock"
            };

            var deviceConfig = $@"{{
                ""deviceId"": ""{doorLock.Id}"",
                ""name"": ""Front.door.lock"",
                ""label"": ""{doorLock.Label}"",
                ""locationId"": ""{installedApp.InstalledLocation.Id}"",
                ""componentId"": ""main"",
                ""capability"": ""lock"",
                ""attribute"": ""lock"",
                ""stateChangeOnly"": ""true"",
                ""value"": ""*"",
                ""subscriptionName"": ""DOORLOCKS_1""
            }}";

            dynamic dynDevice = JObject.Parse(deviceConfig);


            var responseBody = $@"{{
                ""id"": ""{Guid.NewGuid()}"",
                ""installedAppId"": ""{installedApp.InstalledAppId}"",
                ""sourceType"": ""DEVICE"",
                ""device"": {deviceConfig}
            }}";

            dynamic expectedResult = JObject.Parse(responseBody);

            _mockHttpMessageHandler.SetupRequest(HttpMethod.Post,
                                                 $"{BaseUri}/installedapps/{installedApp.InstalledAppId}/subscriptions")
            .ReturnsResponse(responseBody);

            var response = await _smartThingsAPIHelper.SubscribeToDeviceEventAsync(installedApp,
                                                                                   dynDevice);


            var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            dynamic result = JObject.Parse(responseText);

            Assert.Equal(expectedResult, result);
        }
        public async Task DeviceCommandAsync_ShouldNotError(InstalledAppInstance installedApp)
        {
            var doorLock = new DoorLock()
            {
                CurrentState = LockState.Locked,
                Id           = Guid.NewGuid().ToString(),
                Label        = "Front door lock"
            };

            _mockHttpMessageHandler.SetupRequest(HttpMethod.Post,
                                                 $"{BaseUri}/devices/{doorLock.Id}/commands")
            .ReturnsResponse("ok");

            await _smartThingsAPIHelper.DeviceCommandAsync(installedApp,
                                                           doorLock.Id,
                                                           DoorLock.GetDeviceCommand(false));
        }
        public IActionResult Command([FromBody] DoorLock doorLock)
        {
            if (doorLock == null)
            {
                return(BadRequest());
            }

            if (!db.DoorLocks.Any(x => x.Name == doorLock.Name))
            {
                return(NotFound());
            }

            var resultDoorLock = db.DoorLocks.FirstOrDefault(x => x.Name == doorLock.Name);

            resultDoorLock.IsOpen = doorLock.IsOpen;
            resultDoorLock.Power  = doorLock.Power;

            db.Update(resultDoorLock);
            db.SaveChanges();
            return(Ok(resultDoorLock));
        }
        public void DoorLock_FromDynamic_ShouldReturnExpectedResult(InstalledAppInstance installedApp)
        {
            var expectedResult = new DoorLock()
            {
                Id           = Guid.NewGuid().ToString(),
                Label        = "MyDevice",
                CurrentState = LockState.Locked
            };

            var deviceJson = $@"{{
                ""deviceId"": ""{expectedResult.Id}"",
                ""name"": ""NAME"",
                ""label"": ""{expectedResult.Label}"",
                ""locationId"": ""{installedApp.InstalledLocation.Id}""
            }}";

            var statusJson = $@"{{
                ""deviceId"": ""{expectedResult.Id}"",
                ""name"": ""NAME"",
                ""label"": ""{expectedResult.Label}"",
                ""locationId"": ""{installedApp.InstalledLocation.Id}"",
                ""components"" : {{
                    ""main"": {{
                        ""lock"": {{
                            ""lock"": {{
                                ""value"": ""locked""
                            }}
                        }}
                    }}
                }}
            }}";

            dynamic device = JObject.Parse(deviceJson);
            dynamic status = JObject.Parse(statusJson);

            var result = DoorLock.LockFromDynamic(device,
                                                  status);

            Assert.Equal(expectedResult, result);

            expectedResult.CurrentState = LockState.Unlocked;
            statusJson = $@"{{
                ""deviceId"": ""{expectedResult.Id}"",
                ""name"": ""NAME"",
                ""label"": ""{expectedResult.Label}"",
                ""locationId"": ""{installedApp.InstalledLocation.Id}"",
                ""components"" : {{
                    ""main"": {{
                        ""lock"": {{
                            ""lock"": {{
                                ""value"": ""unlocked""
                            }}
                        }}
                    }}
                }}
            }}";

            status = JObject.Parse(statusJson);

            result = DoorLock.LockFromDynamic(device,
                                              status);

            Assert.Equal(expectedResult, result);

            expectedResult.CurrentState = LockState.Unknown;
            statusJson = $@"{{
                ""deviceId"": ""{expectedResult.Id}"",
                ""name"": ""NAME"",
                ""label"": ""{expectedResult.Label}"",
                ""locationId"": ""{installedApp.InstalledLocation.Id}"",
                ""components"" : {{
                    ""main"": {{
                        ""lock"": {{
                            ""lock"": {{
                                ""value"": ""unknown""
                            }}
                        }}
                    }}
                }}
            }}";

            status = JObject.Parse(statusJson);

            result = DoorLock.LockFromDynamic(device,
                                              status);

            Assert.Equal(expectedResult, result);

            _ = expectedResult.GetHashCode();
            _ = expectedResult.ToJson();
        }
示例#24
0
文件: Saver.cs 项目: zrisher/ARMS
        private void LoadSaveData(Builder_ArmsData data)
        {
            if (data == null)
            {
                Logger.DebugLog("No data to load");
                return;
            }

#pragma warning disable 612, 618
            if (Comparer <Version> .Default.Compare(data.ArmsVersion, default(Version)) == 0)
            {
                Logger.DebugLog("Old version: " + data.ModVersion);
                data.ArmsVersion = new Version(data.ModVersion);
            }
#pragma warning restore 612, 618

            Logger.AlwaysLog("Save version: " + data.ArmsVersion, Rynchodon.Logger.severity.INFO);

            // relay

            Dictionary <Message.Builder_Message, Message> messages = MyAPIGateway.Multiplayer.IsServer ? new Dictionary <Message.Builder_Message, Message>() : null;
            SerializableGameTime.Adjust = new TimeSpan(data.SaveTime);
            foreach (RelayStorage.Builder_NetworkStorage bns in data.AntennaStorage)
            {
                RelayNode node;
                if (!Registrar.TryGetValue(bns.PrimaryNode, out node))
                {
                    Logger.AlwaysLog("Failed to get node for: " + bns.PrimaryNode, Rynchodon.Logger.severity.WARNING);
                    continue;
                }
                RelayStorage store = node.Storage;
                if (store == null)                 // probably always true
                {
                    node.ForceCreateStorage();
                    store = node.Storage;
                    if (store == null)
                    {
                        Logger.AlwaysLog("failed to create storage for " + node.DebugName, Rynchodon.Logger.severity.ERROR);
                        continue;
                    }
                }

                foreach (LastSeen.Builder_LastSeen bls in bns.LastSeenList)
                {
                    LastSeen ls = new LastSeen(bls);
                    if (ls.IsValid)
                    {
                        store.Receive(ls);
                    }
                    else
                    {
                        Logger.AlwaysLog("failed to create a valid last seen from builder for " + bls.EntityId, Rynchodon.Logger.severity.WARNING);
                        if (m_failedLastSeen == null)
                        {
                            m_failedLastSeen = new CachingDictionary <long, CachingList <LastSeen.Builder_LastSeen> >();
                            UpdateManager.Register(100, RetryLastSeen);
                        }
                        CachingList <LastSeen.Builder_LastSeen> list;
                        if (!m_failedLastSeen.TryGetValue(bns.PrimaryNode, out list))
                        {
                            list = new CachingList <LastSeen.Builder_LastSeen>();
                            m_failedLastSeen.Add(bns.PrimaryNode, list, true);
                        }
                        list.Add(bls);
                        list.ApplyAdditions();
                    }
                }

                Logger.DebugLog("added " + bns.LastSeenList.Length + " last seen to " + store.PrimaryNode.DebugName, Rynchodon.Logger.severity.DEBUG);

                // messages in the save file belong on the server
                if (messages == null)
                {
                    continue;
                }

                foreach (Message.Builder_Message bm in bns.MessageList)
                {
                    Message msg;
                    if (!messages.TryGetValue(bm, out msg))
                    {
                        msg = new Message(bm);
                        messages.Add(bm, msg);
                    }
                    else
                    {
                        Logger.DebugLog("found linked message", Rynchodon.Logger.severity.TRACE);
                    }
                    if (msg.IsValid)
                    {
                        store.Receive(msg);
                    }
                    else
                    {
                        Logger.AlwaysLog("failed to create a valid message from builder for " + bm.DestCubeBlock + "/" + bm.SourceCubeBlock, Rynchodon.Logger.severity.WARNING);
                    }
                }

                Logger.DebugLog("added " + bns.MessageList.Length + " message to " + store.PrimaryNode.DebugName, Rynchodon.Logger.severity.DEBUG);
            }

            // past this point, only synchronized data
            if (!MyAPIGateway.Multiplayer.IsServer)
            {
                data = null;
                return;
            }

            // system disruption

            foreach (Disruption.Builder_Disruption bd in data.SystemDisruption)
            {
                Disruption disrupt;
                switch (bd.Type)
                {
                case "AirVentDepressurize":
                    disrupt = new AirVentDepressurize();
                    break;

                case "CryoChamberMurder":
                    disrupt = new CryoChamberMurder();
                    break;

                case "DisableTurret":
                    disrupt = new DisableTurret();
                    break;

                case "DoorLock":
                    disrupt = new DoorLock();
                    break;

                case "EMP":
                    disrupt = new EMP();
                    break;

                case "GravityReverse":
                    disrupt = new GravityReverse();
                    break;

                case "JumpDriveDrain":
                    disrupt = new JumpDriveDrain();
                    break;

                case "MedicalRoom":
                    disrupt = new MedicalRoom();
                    break;

                case "TraitorTurret":
                    disrupt = new TraitorTurret();
                    break;

                default:
                    Logger.AlwaysLog("Unknown disruption: " + bd.Type, Rynchodon.Logger.severity.WARNING);
                    continue;
                }
                disrupt.Start(bd);
            }

            // autopilot

            if (data.Autopilot != null)
            {
                foreach (ShipAutopilot.Builder_Autopilot ba in data.Autopilot)
                {
                    ShipAutopilot autopilot;
                    if (Registrar.TryGetValue(ba.AutopilotBlock, out autopilot))
                    {
                        autopilot.ResumeFromSave(ba);
                    }
                    else
                    {
                        Logger.AlwaysLog("failed to find autopilot block " + ba.AutopilotBlock, Rynchodon.Logger.severity.WARNING);
                    }
                }
            }

            // programmable block

            if (data.ProgrammableBlock != null)
            {
                foreach (ProgrammableBlock.Builder_ProgrammableBlock bpa in data.ProgrammableBlock)
                {
                    ProgrammableBlock pb;
                    if (Registrar.TryGetValue(bpa.BlockId, out pb))
                    {
                        pb.ResumeFromSave(bpa);
                    }
                    else
                    {
                        Logger.AlwaysLog("failed to find programmable block " + bpa.BlockId, Rynchodon.Logger.severity.WARNING);
                    }
                }
            }

            // text panel

            if (data.TextPanel != null)
            {
                foreach (TextPanel.Builder_TextPanel btp in data.TextPanel)
                {
                    TextPanel panel;
                    if (Registrar.TryGetValue(btp.BlockId, out panel))
                    {
                        panel.ResumeFromSave(btp);
                    }
                    else
                    {
                        Logger.AlwaysLog("failed to find text panel " + btp.BlockId, Rynchodon.Logger.severity.WARNING);
                    }
                }
            }

            // weapon

            if (data.Weapon != null)
            {
                foreach (WeaponTargeting.Builder_WeaponTargeting bwt in data.Weapon)
                {
                    WeaponTargeting targeting;
                    if (WeaponTargeting.TryGetWeaponTargeting(bwt.WeaponId, out targeting))
                    {
                        targeting.ResumeFromSave(bwt);
                    }
                    else
                    {
                        Logger.AlwaysLog("failed to find weapon " + bwt.WeaponId, Rynchodon.Logger.severity.WARNING);
                    }
                }
            }

            // entity values

            if (data.EntityValues != null)
            {
                UpgradeEntityValue.Load(data.EntityValues);
            }

            // sync

            if (data.Sync != null)
            {
                ASync.SetBuilder(data.Sync);
            }

            data = null;
        }
        public static OperationMessage OpenDoor(this DoorLock doorLock)
        {
            ushort destinationAddress = (ushort)(doorLock.Connector == null ? 0 : doorLock.Connector.Node.Address);

            return(OperationMessage.LogicWrite((ushort)doorLock.Id, LogicWriteValues.Set, (byte)doorLock.OpenTime, destinationAddress));
        }
示例#26
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            ResponseText returnValue    = new ResponseText("OK");
            bool         raiseEvent     = false;
            string       eventParameter = ModuleEvents.Status_Level;
            string       eventValue     = "";

            string   nodeId = request.Address;
            Commands command;

            Enum.TryParse <Commands>(request.Command.Replace(".", "_"), out command);
            ZWaveNode node = null;

            byte nodeNumber = 0;

            if (byte.TryParse(nodeId, out nodeNumber))
            {
                if (nodeNumber > 0)
                {
                    node = controller.GetNode(nodeNumber);
                }
                switch (command)
                {
                case Commands.Controller_Discovery:
                    controller.Discovery();
                    break;

                case Commands.Controller_SoftReset:
                    controller.SoftReset();
                    break;

                case Commands.Controller_HardReset:
                    controller.HardReset();
                    controller.Discovery();
                    break;

                case Commands.Controller_HealNetwork:
                    controller.HealNetwork();
                    break;

                case Commands.Controller_NodeNeighborUpdate:
                    controller.RequestNeighborsUpdateOptions(nodeNumber);
                    controller.RequestNeighborsUpdate(nodeNumber);
                    controller.GetNeighborsRoutingInfo(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_RoutingInfo);
                    break;

                case Commands.Controller_NodeRoutingInfo:
                    controller.GetNeighborsRoutingInfo(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_RoutingInfo);
                    break;

                case Commands.Controller_NodeAdd:
                    lastAddedNode = 0;
                    controller.BeginNodeAdd();
                    for (int i = 0; i < 20; i++)
                    {
                        if (lastAddedNode > 0)
                        {
                            break;
                        }
                        Thread.Sleep(500);
                    }
                    controller.StopNodeAdd();
                    returnValue = new ResponseText(lastAddedNode.ToString());
                    break;

                case Commands.Controller_NodeRemove:
                    lastRemovedNode = 0;
                    controller.BeginNodeRemove();
                    for (int i = 0; i < 20; i++)
                    {
                        if (lastRemovedNode > 0)
                        {
                            break;
                        }
                        Thread.Sleep(500);
                    }
                    controller.StopNodeRemove();
                    returnValue = new ResponseText(lastRemovedNode.ToString());
                    break;

                case Commands.Basic_Set:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = level.ToString(CultureInfo.InvariantCulture);
                    Basic.Set(node, (byte)level);
                }
                break;

                case Commands.Basic_Get:
                    Basic.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Basic);
                    break;

                case Commands.SwitchBinary_Set:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = level.ToString(CultureInfo.InvariantCulture);
                    SwitchBinary.Set(node, (byte)level);
                }
                break;

                case Commands.SwitchBinary_Get:
                    SwitchBinary.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_SwitchBinary);
                    break;

                case Commands.SwitchMultilevel_Set:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = level.ToString(CultureInfo.InvariantCulture);
                    SwitchMultilevel.Set(node, (byte)level);
                }
                break;

                case Commands.SwitchMultilevel_Get:
                    SwitchMultilevel.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_SwitchMultilevel);
                    break;

                case Commands.MultiInstance_GetCount:
                {
                    string commandType = request.GetOption(0).Replace(".", "");
                    switch (commandType)
                    {
                    case "SwitchBinary":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SwitchBinary);
                        break;

                    case "SwitchMultiLevel":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SwitchMultilevel);
                        break;

                    case "SensorBinary":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SensorBinary);
                        break;

                    case "SensorMultiLevel":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SensorMultilevel);
                        break;
                    }
                    returnValue = GetResponseValue(nodeNumber, EventPath_MultiInstance + "." + commandType + ".Count");
                }
                break;

                case Commands.MultiInstance_Get:
                {
                    byte   instance    = (byte)int.Parse(request.GetOption(1));
                    string commandType = request.GetOption(0).Replace(".", "");
                    switch (commandType)
                    {
                    case "SwitchBinary":
                        MultiInstance.SwitchBinaryGet(node, instance);
                        break;

                    case "SwitchMultiLevel":
                        MultiInstance.SwitchMultiLevelGet(node, instance);
                        break;

                    case "SensorBinary":
                        MultiInstance.SensorBinaryGet(node, instance);
                        break;

                    case "SensorMultiLevel":
                        MultiInstance.SensorMultiLevelGet(node, instance);
                        break;
                    }
                    returnValue = GetResponseValue(nodeNumber, EventPath_MultiInstance + "." + commandType + "." + instance);
                }
                break;

                case Commands.MultiInstance_Set:
                {
                    byte instance = (byte)int.Parse(request.GetOption(1));
                    int  value    = int.Parse(request.GetOption(2));
                    //
                    //raisepropchanged = true;
                    //parampath += "." + instance; // Status.Level.<instance>
                    //
                    switch (request.GetOption(0))
                    {
                    case "Switch.Binary":
                        MultiInstance.SwitchBinarySet(node, instance, value);
                        //raiseparam = (double.Parse(request.GetOption(2)) / 255).ToString();
                        break;

                    case "Switch.MultiLevel":
                        MultiInstance.SwitchMultiLevelSet(node, instance, value);
                        //raiseparam = (double.Parse(request.GetOption(2)) / 100).ToString(); // TODO: should it be 99 ?
                        break;
                    }
                }
                break;

                case Commands.SensorBinary_Get:
                    SensorBinary.Get(node);
                    break;

                case Commands.SensorMultiLevel_Get:
                    SensorMultilevel.Get(node);
                    break;

                case Commands.Meter_Get:
                    // see ZWaveLib Sensor.cs for EnergyMeterScale options
                    int scaleType = 0;
                    int.TryParse(request.GetOption(0), out scaleType);
                    Meter.Get(node, (byte)(scaleType << 0x03));
                    break;

                case Commands.Meter_SupportedGet:
                    Meter.GetSupported(node);
                    break;

                case Commands.Meter_Reset:
                    Meter.Reset(node);
                    break;

                case Commands.NodeInfo_Get:
                    controller.GetNodeInformationFrame(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_NodeInfo);
                    break;

                case Commands.Battery_Get:
                    Battery.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Battery);
                    break;

                case Commands.Association_Set:
                    Association.Set(node, (byte)int.Parse(request.GetOption(0)), (byte)int.Parse(request.GetOption(1)));
                    break;

                case Commands.Association_Get:
                    byte group = (byte)int.Parse(request.GetOption(0));
                    Association.Get(node, group);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Associations + "." + group);
                    break;

                case Commands.Association_Remove:
                    Association.Remove(node, (byte)int.Parse(request.GetOption(0)), (byte)int.Parse(request.GetOption(1)));
                    break;

                case Commands.ManufacturerSpecific_Get:
                    ManufacturerSpecific.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_ManufacturerSpecific);
                    break;

                case Commands.Config_ParameterSet:
                    Configuration.Set(node, (byte)int.Parse(request.GetOption(0)), int.Parse(request.GetOption(1)));
                    break;

                case Commands.Config_ParameterGet:
                    byte position = (byte)int.Parse(request.GetOption(0));
                    Configuration.Get(node, position);
                    returnValue = GetResponseValue(nodeNumber, EventPath_ConfigVariables + "." + position);
                    break;

                case Commands.WakeUp_Get:
                    WakeUp.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_WakeUpInterval);
                    break;

                case Commands.WakeUp_Set:
                    WakeUp.Set(node, uint.Parse(request.GetOption(0)));
                    break;

                case Commands.WakeUp_SendToSleep:
                    WakeUp.SendToSleep(node);
                    break;

                case Commands.WakeUp_GetAlwaysAwake:
                    returnValue = new ResponseText(WakeUp.GetAlwaysAwake(node) ? "1" : "0");
                    break;

                case Commands.WakeUp_SetAlwaysAwake:
                    WakeUp.SetAlwaysAwake(node, uint.Parse(request.GetOption(0)) == 1 ? true : false);
                    break;

                case Commands.Version_Get:
                    returnValue = new ResponseText("ERROR");
                    CommandClass cclass;
                    Enum.TryParse <CommandClass>(request.GetOption(0), out cclass);
                    if (cclass != CommandClass.NotSet)
                    {
                        var nodeCclass = node.GetCommandClass(cclass);
                        if (nodeCclass != null && nodeCclass.Version != 0)
                        {
                            returnValue = new ResponseText(nodeCclass.Version.ToString());
                        }
                        else
                        {
                            ZWaveLib.CommandClasses.Version.Get(node, cclass);
                            returnValue = GetResponseValue(nodeNumber, "ZWaveNode.Version." + cclass);
                        }
                    }
                    break;

                case Commands.Version_GetAll:
                    controller.GetNodeCcsVersion(node);
                    break;

                case Commands.Control_On:
                    raiseEvent = true;
                    double lastLevel = GetNormalizedValue((double)GetNodeLastLevel(node));
                    eventValue = lastLevel > 0 ? lastLevel.ToString(CultureInfo.InvariantCulture) : "1";
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                    {
                        SwitchMultilevel.Set(node, 0xFF);
                    }
                    else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                    {
                        SwitchBinary.Set(node, 0xFF);
                    }
                    else
                    {
                        Basic.Set(node, 0xFF);
                    }
                    SetNodeLevel(node, 0xFF);
                    break;

                case Commands.Control_Off:
                    raiseEvent = true;
                    eventValue = "0";
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                    {
                        SwitchMultilevel.Set(node, 0x00);
                    }
                    else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                    {
                        SwitchBinary.Set(node, 0x00);
                    }
                    else
                    {
                        Basic.Set(node, 0x00);
                    }
                    SetNodeLevel(node, 0x00);
                    break;

                case Commands.Control_Level:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = Math.Round(level / 100D, 2).ToString(CultureInfo.InvariantCulture);
                    // the max value should be obtained from node parameters specifications,
                    // here we assume that the commonly used interval is [0-99] for most multilevel switches
                    if (level >= 100)
                    {
                        level = 99;
                    }
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                    {
                        SwitchMultilevel.Set(node, (byte)level);
                    }
                    else
                    {
                        Basic.Set(node, (byte)level);
                    }
                    SetNodeLevel(node, (byte)level);
                }
                break;

                case Commands.Control_Toggle:
                    raiseEvent = true;
                    if (GetNodeLevel(node) == 0)
                    {
                        double lastOnLevel = GetNormalizedValue((double)GetNodeLastLevel(node));
                        eventValue = lastOnLevel > 0 ? lastOnLevel.ToString(CultureInfo.InvariantCulture) : "1";
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                        {
                            SwitchMultilevel.Set(node, 0xFF);
                        }
                        else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                        {
                            SwitchBinary.Set(node, 0xFF);
                        }
                        else
                        {
                            Basic.Set(node, 0xFF);
                        }
                        SetNodeLevel(node, 0xFF);
                    }
                    else
                    {
                        eventValue = "0";
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                        {
                            SwitchMultilevel.Set(node, 0x00);
                        }
                        else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                        {
                            SwitchBinary.Set(node, 0x00);
                        }
                        else
                        {
                            Basic.Set(node, 0x00);
                        }
                        SetNodeLevel(node, 0x00);
                    }
                    break;

                case Commands.Thermostat_ModeGet:
                    ThermostatMode.Get(node);
                    break;

                case Commands.Thermostat_ModeSet:
                {
                    ThermostatMode.Value mode = (ThermostatMode.Value)Enum.Parse(typeof(ThermostatMode.Value), request.GetOption(0));
                    //
                    raiseEvent     = true;
                    eventParameter = "Thermostat.Mode";
                    eventValue     = request.GetOption(0);
                    //
                    ThermostatMode.Set(node, mode);
                }
                break;

                case Commands.Thermostat_SetPointGet:
                {
                    ThermostatSetPoint.Value mode = (ThermostatSetPoint.Value)Enum.Parse(typeof(ThermostatSetPoint.Value), request.GetOption(0));
                    ThermostatSetPoint.Get(node, mode);
                }
                break;

                case Commands.Thermostat_SetPointSet:
                {
                    ThermostatSetPoint.Value mode = (ThermostatSetPoint.Value)Enum.Parse(typeof(ThermostatSetPoint.Value), request.GetOption(0));
                    double temperature            = double.Parse(request.GetOption(1).Replace(',', '.'), CultureInfo.InvariantCulture);
                    //
                    raiseEvent     = true;
                    eventParameter = "Thermostat.SetPoint." + request.GetOption(0);
                    eventValue     = temperature.ToString(CultureInfo.InvariantCulture);
                    //
                    ThermostatSetPoint.Set(node, mode, temperature);
                }
                break;

                case Commands.Thermostat_FanModeGet:
                    ThermostatFanMode.Get(node);
                    break;

                case Commands.Thermostat_FanModeSet:
                {
                    ThermostatFanMode.Value mode = (ThermostatFanMode.Value)Enum.Parse(typeof(ThermostatFanMode.Value), request.GetOption(0));
                    //
                    raiseEvent     = true;
                    eventParameter = "Thermostat.FanMode";
                    eventValue     = request.GetOption(0);
                    //
                    ThermostatFanMode.Set(node, mode);
                }
                break;

                case Commands.Thermostat_FanStateGet:
                    ThermostatFanState.Get(node);
                    break;

                case Commands.Thermostat_OperatingStateGet:
                    ThermostatOperatingState.GetOperatingState(node);
                    break;

                case Commands.UserCode_Set:
                    byte   userId       = byte.Parse(request.GetOption(0));
                    byte   userIdStatus = byte.Parse(request.GetOption(1));
                    byte[] tagCode      = ZWaveLib.Utility.HexStringToByteArray(request.GetOption(2));
                    UserCode.Set(node, new ZWaveLib.Values.UserCodeValue(userId, userIdStatus, tagCode));
                    break;

                case Commands.DoorLock_Get:
                    DoorLock.Get(node);
                    returnValue = GetResponseValue(nodeNumber, ModuleEvents.Status_DoorLock);
                    break;

                case Commands.DoorLock_Set:
                {
                    DoorLock.Value mode = (DoorLock.Value)Enum.Parse(typeof(DoorLock.Value), request.GetOption(0));
                    DoorLock.Set(node, mode);
                }
                break;
                }
            }

            if (raiseEvent)
            {
                //ZWaveNode node = _controller.GetDevice ((byte)int.Parse (nodeid));
                OnInterfacePropertyChanged(this.GetDomain(), nodeId, "ZWave Node", eventParameter, eventValue);
            }
            //
            return(returnValue);
        }
 void Awake()
 {
     doorLock = GetComponent <DoorLock> ();
     animator = GetComponent <Animator> ();
     doorLock.OnLockEvent.AddListener(OnLocked);
 }
 void Start()
 {
     // Get the door unlock script
     if(DoorToUnlock)
         LockScript = DoorToUnlock.GetComponent<DoorLock>();
 }
示例#29
0
    public void makeType(RoomType newRoomType)
    {
        DoorFrame thisframe = DoorFrame.none;
        DoorLock thislock = DoorLock.open;

        if(newRoomType == RoomType.boss)
        {
            type = RoomType.boss;
            floor = FloorType.boss;
            thisframe = DoorFrame.bones;
            thislock = DoorLock.combat;

        }
        if (newRoomType == RoomType.hidden)
        {
            type = RoomType.hidden;
            floor = FloorType.secret;
            thisframe = DoorFrame.none;
            thislock = DoorLock.bomb;
        }
        if (newRoomType == RoomType.normal)
        {
            type = RoomType.normal;
            floor = FloorType.normal;
            thisframe = DoorFrame.wood;
        }
        if (newRoomType == RoomType.shop)
        {
            type = RoomType.shop;
            floor = FloorType.normal;
            thisframe = DoorFrame.wood;
            thislock = DoorLock.key;

        }
        if (newRoomType == RoomType.treasure)
        {
            type = RoomType.treasure;
            floor = FloorType.normal;
            thisframe = DoorFrame.gold;
            thislock = DoorLock.open;
        }

        if (adjacentNorth)
        {
            frameNorth = thisframe;
            lockNorth = thislock;
        }
        if (adjacentSouth)
        {
            frameSouth = thisframe;
            lockSouth = thislock;
        }
        if (adjacentEast)
        {
            frameEast = thisframe;
            lockEast = thislock;
        }
        if (adjacentWest)
        {
            frameWest = thisframe;
            lockWest = thislock;
        }
    }