コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
        }