public CombinedRoom(string deviceName, Models.Hue.Group hueDevice, Models.NatureRemo.Device remoDevice) { Appliances = new List <IAppliance>(); HueScenes = new List <Scene>(); DeviceName = deviceName; if (hueDevice != null) { HueGroup = hueDevice.HueGroup; Appliances.AddRange(hueDevice.Appliances); HueScenes.AddRange(hueDevice.HueScenes); _SelectedHueScene = hueDevice.SelectedHueScene; } if (remoDevice != null) { RemoDevice = remoDevice; Appliances.AddRange(remoDevice.Appliances); } }
public async Task <List <IDevice> > GetHueDevicesAsync() { var hueDevices = new List <IDevice>(); var groups = await client.GetGroupsAsync(); var rooms = (from item in groups where item.Type == Q42.HueApi.Models.Groups.GroupType.Room select item).ToList(); var scenes = await client.GetScenesAsync(); foreach (var room in rooms) { var hueDevice = new Models.Hue.Group(room); var lights = new List <IAppliance>(); foreach (var lightId in room.Lights) { lights.Add(new Models.Hue.Light(await client.GetLightAsync(lightId), user)); } hueDevice.Appliances = lights; if (scenes != null) { hueDevice.HueScenes.AddRange(from scene in scenes where scene.Type != null && scene.Type == Q42.HueApi.Models.SceneType.GroupScene && scene.Group == room.Id select scene); // check if scene matches using (var context = new HueSelectedSceneContext()) { await context.Database.EnsureCreatedAsync(); HueSelectedSceneEntity exist = GetExistingSceneEntity(room.Id, context); if (exist != null) { var match = true; try { var cachedLights = JsonSerializer.Deserialize <List <Models.Hue.JsonLight> >(exist.LightStateJson); foreach (var cachedLight in cachedLights) { var light = (from item in hueDevice.Appliances where ((Models.Hue.Light)item).HueLight.Id == cachedLight.Id select((Models.Hue.Light)item).HueLight).FirstOrDefault(); if (light != null) { if (!light.State.CheckEquals(cachedLight.State)) { match = false; break; } } } } catch (Exception) { match = false; } if (match) { hueDevice.SelectedHueScene = (from item in hueDevice.HueScenes where item.Id == exist.SceneId select item).FirstOrDefault(); } else { context.Remove(exist); await context.SaveChangesAsync(); } } } } hueDevices.Add(hueDevice); } return(hueDevices); }