예제 #1
0
 public OnDeviceEventArgs(LightSwitchClient lightSwitchClient, string deviceId, string level, string type)
     : base(lightSwitchClient)
 {
     DeviceId = deviceId;
     Level    = level;
     Type     = type;
 }
예제 #2
0
 public OnThermModeEventArgs(LightSwitchClient lightSwitchClient, string deviceId, string mode, string type)
     : base(lightSwitchClient)
 {
     DeviceId = deviceId;
     Mode     = mode;
     Type     = type;
 }
 private async Task SendLightSwitchCommand(LightSwitchClient lightSwitchClient, LightSwitchCommand lightSwitchCommand)
 {
     var sendCommandResult = await lightSwitchClient.SendCommandAsync(lightSwitchCommand);
     if (sendCommandResult.HasError)
         await Log.ReportErrorAsync(sendCommandResult.Message, CancellationToken);
 }
        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);
        }
 public OnThermModeEventArgs(LightSwitchClient lightSwitchClient, string deviceId, string mode, string type)
     : base(lightSwitchClient)
 {
     DeviceId = deviceId;
     Mode = mode;
     Type = type;
 }
 public OnZoneEventArgs(LightSwitchClient lightSwitchClient, string zoneId, string level)
     : base(lightSwitchClient)
 {
     ZoneId = zoneId;
     Level = level;
 }
 public OnSceneEventArgs(LightSwitchClient lightSwitchClient, string sceneId)
     : base(lightSwitchClient)
 {
     SceneId = sceneId;
 }
예제 #8
0
 public LightSwitchDataEventArgs(LightSwitchClient lightSwitchClient, String rawData)
     : base(lightSwitchClient)
 {
     RawData = rawData;
 }
 private async Task SendZoneListAsync(LightSwitchClient client)
 {
     using (var context = new ZvsContext(EntityContextConnection))
         foreach (var g in await context.Groups.OrderBy(o => o.Name).ToListAsync())
             await SendLightSwitchCommand(client, LightSwitchProtocol.CreateZoneCmd(g.Name, g.Id.ToString()));
 }
 public LightSwitchDataEventArgs(LightSwitchClient lightSwitchClient, String rawData)
     : base(lightSwitchClient)
 {
     RawData = rawData;
 }
 public LightSwitchClientEventArgs(LightSwitchClient lightSwitchClient)
 {
     LightSwitchClient = lightSwitchClient;
 }
예제 #12
0
 public OnZoneEventArgs(LightSwitchClient lightSwitchClient, string zoneId, string level)
     : base(lightSwitchClient)
 {
     ZoneId = zoneId;
     Level  = level;
 }
예제 #13
0
 public OnSceneEventArgs(LightSwitchClient lightSwitchClient, string sceneId)
     : base(lightSwitchClient)
 {
     SceneId = sceneId;
 }
예제 #14
0
 public OnPasswordEventArgs(LightSwitchClient lightSwitchClient, string password)
     : base(lightSwitchClient)
 {
     Password = password;
 }
예제 #15
0
 private IEnumerable<LightSwitchClient> GetSafeClients()
 {
     var clientCount = _lightSwitchClients.Count();
     var clients = new LightSwitchClient[clientCount];
     _lightSwitchClients.CopyTo(clients);
     return clients;
 }
 public OnPasswordEventArgs(LightSwitchClient lightSwitchClient, string password)
     : base(lightSwitchClient)
 {
     Password = password;
 }
예제 #17
0
        private async Task SendSceneListAsync(LightSwitchClient client)
        {
            using (var context = new ZvsContext(EntityContextConnection))
            {
                var settingUid = SceneSettingUids.ShowInLightswitch.ToString();

                var scenes = await context.Scenes
                    .Where(o => (o.SettingValues.All(p => p.SceneSetting.UniqueIdentifier != settingUid)) || //Show all objects where no explicit setting has been create yet and the defaultSetting is to show
                                 o.SettingValues.Any(p => p.SceneSetting.UniqueIdentifier == settingUid && p.Value.Equals("true"))) //Show all objects where an explicit setting has been create and set to show
                    .OrderBy(o => o.SortOrder)
                    .ToListAsync();

                foreach (var scene in scenes)
                    await SendLightSwitchCommand(client, LightSwitchProtocol.CreateSceneCmd(scene.Name, scene.Id.ToString()));
            }
        }
 public OnDeviceEventArgs(LightSwitchClient lightSwitchClient, string deviceId, string level, string type)
     : base(lightSwitchClient)
 {
     DeviceId = deviceId;
     Level = level;
     Type = type;
 }
예제 #19
0
        private async Task SendDeviceListAsync(LightSwitchClient client)
        {
            using (var context = new ZvsContext(EntityContextConnection))
            {
                //Get Devices
                var settingUid = DeviceSettingUids.ShowInLightswitch.ToString();

                var devices = await context.Devices
                    .Where(o => (o.DeviceSettingValues.All(p => p.DeviceSetting.UniqueIdentifier != settingUid)) || //Show all objects where no explicit setting has been create yet and the defaultSetting is to show
                                 o.DeviceSettingValues.Any(p => p.DeviceSetting.UniqueIdentifier == settingUid && p.Value.Equals("true"))) //Show all objects where an explicit setting has been create and set to show
                    .Include(o => o.Type)
                    .OrderBy(o => o.Location)
                    .ThenBy(o=> o.Name)
                    .Where(o => o.Type.UniqueIdentifier != "Controller")
                    .ToListAsync();

                foreach (var device in devices)
                {
                    if (!_zvsTypeToLsType.ContainsKey(device.Type.UniqueIdentifier))
                        continue;

                    var level = ((int)device.CurrentLevelInt).ToString();
                    var type = _zvsTypeToLsType[device.Type.UniqueIdentifier];

                    if (device.Type.UniqueIdentifier == "switch")
                        level = (device.CurrentLevelInt > 0 ? "255" : "0");

                    var deviceName = string.Format("{0}{1}", string.IsNullOrWhiteSpace(device.Location) ? "" : device.Location + " ", device.Name);

                    await SendLightSwitchCommand(client, LightSwitchProtocol.CreateDeviceCmd(deviceName, device.Id.ToString(), level, type));

                }
            }
        }
예제 #20
0
 public LightSwitchClientEventArgs(LightSwitchClient lightSwitchClient)
 {
     LightSwitchClient = lightSwitchClient;
 }