Example #1
0
        public static async Task AlertLight(MultiBridgeLightLocation light)
        {
            var configSection = await GetGroupConfigurationsAsync();

            var config = configSection.Where(x => x.Connections.Any(c => c.Ip == light.Bridge)).FirstOrDefault();

            if (config != null)
            {
                foreach (var conn in config.Connections)
                {
                    var client     = new LocalHueClient(conn.Ip, conn.Key);
                    var allCommand = new LightCommand().TurnOn().SetColor(new RGBColor("0000FF")); //All blue
                    await client.SendGroupCommandAsync(allCommand, conn.GroupId);

                    //Only selected light red
                    if (conn.Ip == light.Bridge)
                    {
                        var alertCommand = new LightCommand().TurnOn().SetColor(new RGBColor("FF0000"));;
                        alertCommand.Alert = Alert.Once;
                        await client.SendCommandAsync(alertCommand, new List <string> {
                            light.Id
                        });
                    }
                }
            }
        }
Example #2
0
        private async Task <(string color, LightCommand command, bool returnFunc)> Handle(string presence, string lightId)
        {
            var props = _appState.Config.LightSettings.Hue.Statuses.GetType().GetProperties().ToList();

            if (_appState.Config.LightSettings.Hue.UseActivityStatus)
            {
                props = props.Where(a => a.Name.ToLower().StartsWith("activity")).ToList();
            }
            else
            {
                props = props.Where(a => a.Name.ToLower().StartsWith("availability")).ToList();
            }

            string color = "";
            string message;
            var    command = new LightCommand();

            if (presence.Contains('#'))
            {
                // provided presence is actually a custom color
                color      = presence;
                command.On = true;
                return(color, command, false);
            }

            foreach (var prop in props)
            {
                if (presence == prop.Name.Replace("Status", "").Replace("Availability", "").Replace("Activity", ""))
                {
                    var value = (AvailabilityStatus)prop.GetValue(_appState.Config.LightSettings.Hue.Statuses);

                    if (!value.Disabled)
                    {
                        command.On = true;
                        color      = value.Colour;
                        return(color, command, false);
                    }
                    else
                    {
                        command.On = false;

                        if (lightId.Contains("group_id:"))
                        {
                            await _client.SendGroupCommandAsync(command, lightId.Replace("group_id:", ""));
                        }
                        else
                        {
                            await _client.SendCommandAsync(command, new List <string> {
                                lightId.Replace("id:", "")
                            });
                        }
                        message = $"Turning Hue Light {lightId} Off";
                        _logger.LogInformation(message);
                        return(color, command, true);
                    }
                }
            }
            return(color, command, false);
        }
Example #3
0
        public async Task SendCommandAsync(Q42.HueApi.Models.Groups.Group group)
        {
            var command = new LightCommand();

            command.On         = group.Action.On;
            command.Brightness = group.Action.Brightness;

            await client.SendGroupCommandAsync(command, group.Id);

            // Clear current scene
            using (var context = new HueSelectedSceneContext())
            {
                HueSelectedSceneEntity exist = GetExistingSceneEntity(group.Id, context);
                if (exist != null)
                {
                    context.Remove(exist);
                    await context.SaveChangesAsync();
                }
            }
        }
Example #4
0
        public async Task SetColor(string availability, string activity, string lightId)
        {
            if (string.IsNullOrEmpty(lightId))
            {
                throw new ArgumentOutOfRangeException("Hue Selected Light Id Invalid");
            }

            try
            {
                bool useWorkingHours = await _mediator.Send(new WorkingHoursServices.UseWorkingHoursCommand());

                bool IsInWorkingHours = await _mediator.Send(new WorkingHoursServices.IsInWorkingHoursCommand());

                if (!useWorkingHours || (useWorkingHours && IsInWorkingHours))
                {
                    _client = new LocalHueClient(_options.LightSettings.Hue.HueIpAddress);
                    _client.Initialize(_options.LightSettings.Hue.HueApiKey);

                    var o = await Handle(_options.LightSettings.Hue.UseActivityStatus?activity : availability, lightId);

                    if (o.returnFunc)
                    {
                        return;
                    }

                    var color   = o.color.Replace("#", "");
                    var command = o.command;
                    var message = "";
                    switch (color.Length)
                    {
                    case var length when color.Length == 6:
                        // Do Nothing
                        break;

                    case var length when color.Length > 6:
                        // Get last 6 characters
                        color = color.Substring(color.Length - 6);
                        break;

                    default:
                        throw new ArgumentException("Supplied Color had an issue");
                    }

                    command.SetColor(new RGBColor(color));


                    if (availability == "Off")
                    {
                        command.On = false;

                        if (lightId.Contains("group_id:"))
                        {
                            await _client.SendGroupCommandAsync(command, lightId.Replace("group_id:", ""));
                        }
                        else
                        {
                            await _client.SendCommandAsync(command, new List <string> {
                                lightId.Replace("id:", "")
                            });
                        }

                        message = $"Turning Hue Light {lightId} Off";
                        _logger.LogInformation(message);
                        return;
                    }

                    if (_options.LightSettings.UseDefaultBrightness)
                    {
                        if (_options.LightSettings.DefaultBrightness == 0)
                        {
                            command.On = false;
                        }
                        else
                        {
                            command.On             = true;
                            command.Brightness     = Convert.ToByte(((Convert.ToDouble(_options.LightSettings.DefaultBrightness) / 100) * 254));
                            command.TransitionTime = new TimeSpan(0);
                        }
                    }
                    else
                    {
                        if (_options.LightSettings.Hue.Brightness == 0)
                        {
                            command.On = false;
                        }
                        else
                        {
                            command.On             = true;
                            command.Brightness     = Convert.ToByte(((Convert.ToDouble(_options.LightSettings.Hue.Brightness) / 100) * 254));
                            command.TransitionTime = new TimeSpan(0);
                        }
                    }

                    if (lightId.Contains("group_id:"))
                    {
                        await _client.SendGroupCommandAsync(command, lightId.Replace("group_id:", ""));
                    }
                    else
                    {
                        await _client.SendCommandAsync(command, new List <string> {
                            lightId.Replace("id:", "")
                        });
                    }

                    message = $"Setting Hue Light {lightId} to {color}";
                    _logger.LogInformation(message);
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error Occurred Setting Color");
                throw;
            }
        }