public LifxGateway(IMessageQueue messageQueue) : base("Lifx") { _messageQueue = messageQueue; _canCreateDevices = false; _token = ConfigurationManager.AppSettings["lifx.token"]; _localClient.DeviceDiscovered += async (s, e) => { lock (_deviceLock) { var device = _devices.Cast<LifxDevice>().SingleOrDefault(d => d.Id.Equals(e.Id)); if (device == null) { device = new LifxDevice(e); _devices.Add(device); } } await _localClient.GetLightStateAsync(e); }; _localClient.VariableChanged += (s, e) => { var device = _devices.Cast<LifxDevice>().SingleOrDefault(d => d.Id.Equals(e.Item1.Id)); if (device != null) { device.Name = e.Item1.Name; } var variable = $"{Name}.{e.Item1.Id}.{e.Item2}"; _messageQueue.Publish(new UpdateVariableMessage(variable, e.Item3)); }; }
public void SwitchOn(LifxDevice device, int transitionTimeInSeconds) { var parameters = new Dictionary<string, string> { {"Transition time in seconds", transitionTimeInSeconds.ToString()} }; var action = GetActions(device).Single(a => a.Name.Equals("Switch On", StringComparison.Ordinal)); StartActionInNewTask(device, action, parameters); }
public void SwitchOn(LifxDevice device, int transitionTimeInSeconds) { var parameters = new Dictionary <string, string> { { "Transition time in seconds", transitionTimeInSeconds.ToString() } }; var action = GetActions(device).Single(a => a.Name.Equals("Switch On", StringComparison.Ordinal)); StartActionInNewTask(device, action, parameters); }
public void ChangeBrightness(LifxDevice device, double brightness, int transitionTimeInSeconds) { var parameters = new Dictionary <string, string> { { "Brightness", brightness.ToString("F2") }, { "Transition time in seconds", transitionTimeInSeconds.ToString() } }; var action = GetActions(device).Single(a => a.Name.Equals("Change Brightness", StringComparison.Ordinal)); StartActionInNewTask(device, action, parameters); }
private void UpdateDeviceVariables(LifxDevice device, LifxHttpLight light) { var brightness = Math.Round(light.Brightness, 2); var groupName = light.Group.Name; var name = light.Label; var isOn = light.Power == LifxHttpLight.PowerState.On; var isConnected = light.IsConnected; var color = light.GetHexColor(); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Brightness", brightness)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", isOn)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsConnected", isConnected)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Name", name)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "GroupName", groupName)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Color", color)); }
private async Task ExecuteCloudAction(LifxDevice device, string action, int seconds, double brightness, string color) { var client = new LifxHttpClient(_token); var lights = await client.GetLights(); var light = lights.SingleOrDefault(l => l.Id.Equals(device.Id)); if (light == null) { return; } switch (action.ToLowerInvariant()) { case "switch on": await client.SwitchOn(light, seconds); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); break; case "switch off": await client.SwitchOff(light, seconds); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", false)); break; case "change color": var rgb = color.ParseRgb(); await client.ChangeColor(light, rgb.ToString(), seconds); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Color", rgb.ToString())); break; case "change brightness": await client.ChangeBrightness(light, brightness, seconds); var db = Math.Round(brightness, 2); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Brightness", db)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); break; default: return; } }
private async Task GetHttpLights() { var client = new LifxHttpClient(_token); var lights = await client.GetLights(); foreach (var light in lights) { LifxDevice device; lock (_deviceLock) { device = _devices.Cast<LifxDevice>().SingleOrDefault(d => d.Id.Equals(light.Id)); if (device == null) { device = new LifxDevice(light); _devices.Add(device); } } UpdateDeviceVariables(device, light); } }
private async Task ExecuteLocalAction(LifxDevice device, string action, int seconds, double brightness, string color) { var light = _localClient.Lights.SingleOrDefault(l => l.Id.Equals(device.Id)); var b = (ushort)(brightness * 65535); if (light == null) { return; } switch (action.ToLowerInvariant()) { case "switch on": if (seconds == 0) { await _localClient.SetDevicePowerStateAsync(light, true); } else if (seconds > 0) { await _localClient.SetLightPowerAsync(light, TimeSpan.FromSeconds(seconds), true); } _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); break; case "switch off": if (seconds == 0) { await _localClient.SetDevicePowerStateAsync(light, false); } else if (seconds > 0) { await _localClient.SetLightPowerAsync(light, TimeSpan.FromSeconds(seconds), false); } _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", false)); break; case "change color": var rgb = color.ParseRgb(); var hsb = rgb.ToHsbk(); var hue = (ushort)(hsb.Hue * 65535 / 360); var saturation = (ushort) (hsb.Saturation*65535); b = (ushort) (hsb.Brightness*65535); ushort kelvin = 4500; await _localClient.SetColorAsync(light, hue, saturation, b, kelvin, TimeSpan.FromSeconds(seconds)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Color", rgb.ToString())); break; case "change brightness": var hsbk = light.Color; if (hsbk == null) { hsbk = new HsbkColor(); hsbk.Hue = 0; hsbk.Saturation = 0; hsbk.Kelvin = 4500; } hue = (ushort) (hsbk.Hue*65535/360); saturation = (ushort) (hsbk.Saturation*65535); await _localClient.SetColorAsync(light, hue, saturation, b, (ushort)hsbk.Kelvin, TimeSpan.FromSeconds(seconds)); var db = Math.Round(brightness, 2); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Brightness", db)); _messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); break; default: return; } }
public void ChangeBrightness(LifxDevice device, double brightness, int transitionTimeInSeconds) { var parameters = new Dictionary<string, string> { {"Brightness", brightness.ToString("F2")}, {"Transition time in seconds", transitionTimeInSeconds.ToString()} }; var action = GetActions(device).Single(a => a.Name.Equals("Change Brightness", StringComparison.Ordinal)); StartActionInNewTask(device, action, parameters); }
public LifxScriptObject(ILifxGateway gateway, LifxDevice device) { _gateway = gateway; _device = device; }
private async Task ExecuteLocalAction(LifxDevice device, string action, int seconds, double brightness, string color) { var light = _localClient.Lights.SingleOrDefault(l => l.Id.Equals(device.Id)); var b = (ushort)(brightness * 65535); if (light == null) { return; } var hsbk = light.Color; if (hsbk == null) { hsbk = new HsbkColor { Kelvin = 4500 }; } switch (action.ToLowerInvariant()) { case "switch on": if (seconds == 0) { await _localClient.SetPowerAsync(light, true); } else if (seconds > 0) { await _localClient.SetPowerAsync(light, TimeSpan.FromSeconds(seconds), true); } //_messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); break; case "switch off": if (seconds == 0) { await _localClient.SetPowerAsync(light, false); } else if (seconds > 0) { await _localClient.SetPowerAsync(light, TimeSpan.FromSeconds(seconds), false); } //_messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", false)); break; case "change color": var rgb = color.ParseRgb(); var hsb = rgb.ToHsbk(); hsbk.Hue = hsb.Hue; hsbk.Saturation = hsb.Saturation; hsbk.Brightness = hsb.Brightness; await _localClient.SetColorAsync(light, hsbk, TimeSpan.FromSeconds(seconds)); //_messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); //_messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Color", rgb.ToString())); break; case "change brightness": hsbk.Brightness = brightness; await _localClient.SetColorAsync(light, hsbk, TimeSpan.FromSeconds(seconds)); //var db = Math.Round(brightness, 2); //_messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "Brightness", db)); //_messageQueue.Publish(new UpdateVariableMessage(Name, device.Id, "IsOn", true)); break; default: return; } }