public void ChangeState(string light, bool turnOn)
        {
            var setting = GetSettings().FirstOrDefault(item => item.AlexaName.Equals(light, StringComparison.CurrentCultureIgnoreCase));

            if (setting != null)
            {
                lock (BelysningController.knxLock)
                {
                    var localAddress  = ConfigurationManager.AppSettings["localAddress"];
                    var localPort     = BelysningController.GetNextRandom();
                    var remoteAddress = ConfigurationManager.AppSettings["remoteAddress"];
                    var remotePort    = int.Parse(ConfigurationManager.AppSettings["remotePort"]);

                    var connection = new KnxConnectionTunneling(remoteAddress, remotePort, localAddress, localPort);
                    try
                    {
                        connection.Connect();
                        Thread.Sleep(100);

                        foreach (var address in setting.Addresses)
                        {
                            if (address.OnValue == 1)
                            {
                                //Only allow change if trying to turn off or the light is allowed to be turned on
                                if (turnOn == false || setting.CanTurnOn)
                                {
                                    connection.Action(address.Address, turnOn);
                                }
                            }
                            else if (address.OnValue > 1)
                            {
                                var value = (turnOn ? address.OnValue : 0);
                                //Only allow change if trying to turn off or the light is allowed to be turned on
                                if (value == 0 || setting.CanTurnOn)
                                {
                                    connection.Action(address.Address, value);
                                }
                            }
                        }
                        Thread.Sleep(100);
                    }
                    finally
                    {
                        if (connection != null)
                        {
                            connection.Disconnect();
                        }
                    }
                }
            }
        }
Exemple #2
0
        public IHttpActionResult Action(string function, string applianceId, int state, [FromBody] string accesstoken)
        {
            var roomlamp = applianceId.Split('-');
            var room     = roomlamp.ElementAt(0);
            var lampa    = roomlamp.ElementAt(1);

            var setting = GetSettings().FirstOrDefault(item => item.RoomNormalized.Equals(room, StringComparison.CurrentCultureIgnoreCase) &&
                                                       item.LampaNormalized.Equals(lampa, StringComparison.CurrentCultureIgnoreCase));

            if (setting != null)
            {
                lock (BelysningController.knxLock)
                {
                    var localAddress  = ConfigurationManager.AppSettings["localAddress"];
                    var localPort     = BelysningController.GetNextRandom();
                    var remoteAddress = ConfigurationManager.AppSettings["remoteAddress"];
                    var remotePort    = int.Parse(ConfigurationManager.AppSettings["remotePort"]);

                    var connection = new KnxConnectionTunneling(remoteAddress, remotePort, localAddress, localPort);
                    try
                    {
                        //connection.KnxConnectedDelegate += KnxConnected;
                        //connection.KnxEventDelegate += KnxEvent;
                        //connection.KnxStatusDelegate += KnxStatusEvent;
                        connection.Connect();
                        Thread.Sleep(100);

                        foreach (var address in setting.Addresses)
                        {
                            if (address.OnValue == 1)
                            {
                                var value = (state == 1 ? true : false);
                                //Only allow change if trying to turn off or the light is allowed to be turned on
                                if (value == false || setting.CanTurnOn)
                                {
                                    connection.Action(address.Address, value);
                                }
                            }
                            else if (address.OnValue > 1)
                            {
                                var value = (state == 1 ? address.OnValue : 0);
                                //Only allow change if trying to turn off or the light is allowed to be turned on
                                if (value == 0 || setting.CanTurnOn)
                                {
                                    connection.Action(address.Address, value);
                                }
                            }
                        }
                        Thread.Sleep(100);
                    }
                    finally
                    {
                        if (connection != null)
                        {
                            connection.Disconnect();
                        }
                    }
                }
            }

            return(Ok());
        }