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(); } } } } }
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()); }