public async void StartLightSwitchServer()
        {
            _cts = new CancellationTokenSource();
            var listener = new TcpListener(IPAddress.Any, PortSetting);
            listener.Server.NoDelay = true;
            listener.Server.LingerState = new LingerOption(true, 2);
            listener.Start();
            await Log.ReportInfoFormatAsync(CancellationToken, "LightSwitch server started on port {0}", PortSetting);
            NotifyEntityChangeContext.ChangeNotifications<DeviceValue>.OnEntityUpdated += SpeechPlugin_OnEntityUpdated;

            while (true)
            {
                var task = listener.AcceptTcpClientAsync();
                try
                {
                    task.Wait(_cts.Token);
                }
                catch (OperationCanceledException e)
                {
                    if (e.CancellationToken == _cts.Token)
                        break;
                }

                var client = task.Result;
                var lightSwitchClient = new LightSwitchClient(client);
                _lightSwitchClients.Add(lightSwitchClient);

                lightSwitchClient.OnConnectionEstabilished += lightSwitchClient_ConnectionEstabilished;
                lightSwitchClient.OnConnectionClosed += lightSwitchClient_ConnectionClosed;

                lightSwitchClient.OnDataReceived += lightSwitchClient_DataReceived;
                lightSwitchClient.OnDataSent += lightSwitchClient_DataSent;

                lightSwitchClient.OnCmdAList += lightSwitchClient_onCmdAList;
                lightSwitchClient.OnCmdDevice += lightSwitchClient_onCmdDevice;
                lightSwitchClient.OnCmdIphone += lightSwitchClient_onCmdIphone;
                lightSwitchClient.OnCmdList += lightSwitchClient_onCmdList;
                lightSwitchClient.OnCmdPassword += lightSwitchClient_onCmdPassword;
                lightSwitchClient.OnCmdScene += lightSwitchClient_onCmdScene;
                lightSwitchClient.OnCmdServer += lightSwitchClient_onCmdServer;
                lightSwitchClient.OnCmdSList += lightSwitchClient_onCmdSList;
                lightSwitchClient.OnCmdTerminate += lightSwitchClient_onCmdTerminate;
                lightSwitchClient.OnCmdThermMode += lightSwitchClient_onCmdThermMode;
                lightSwitchClient.OnCmdThermTemp += lightSwitchClient_onCmdThermTemp;
                lightSwitchClient.OnCmdVersion += lightSwitchClient_onCmdVersion;
                lightSwitchClient.OnCmdZList += lightSwitchClient_onCmdZList;
                lightSwitchClient.OnCmdZone += lightSwitchClient_onCmdZone;

                lightSwitchClient.StartMonitoring();
            }
            listener.Stop();
            NotifyEntityChangeContext.ChangeNotifications<DeviceValue>.OnEntityUpdated -= SpeechPlugin_OnEntityUpdated;
            await Log.ReportInfoAsync("LightSwitch server stopped", CancellationToken);
        }