protected PhilipsHueDevice(string index, string id, string name, PhilipsHueBridge bridge) { Id = id; Name = name; _index = index; _bridge = bridge; }
private async Task FindSensorsAsync(LocalHueClient client, PhilipsHueBridge bridge) { var sensors = await client.GetSensorsAsync(); if (sensors != null) { foreach (var sensor in sensors) { switch (sensor.Type.ToLowerInvariant()) { case "zllpresence": HandleZllPresenceSensor(sensor, bridge); break; case "zgpswitch": HandleZgpSwitch(sensor, bridge); break; case "zllswitch": HandleZllSwitch(sensor, bridge); break; default: Debug.WriteLine(sensor.Type); break; } } } }
private async Task <string> GetApiKeyWithBridgeButtonClick(PhilipsHueBridge bridge) { var endTime = DateTime.UtcNow.AddSeconds(30); var client = new LocalHueClient(bridge.IpAddress); while (DateTime.UtcNow < endTime) { try { var machineName = Environment.MachineName.Replace(' ', '_'); if (machineName.Length > 19) { machineName = machineName.Substring(0, 19); } var appKey = await client.RegisterAsync("Xpressive.Home", machineName); return(appKey); } catch { } await Task.Delay(TimeSpan.FromSeconds(1)); } return(null); }
private async Task HandleHueBridge(PhilipsHueBridge bridge) { var variableName = $"PhilipsHue.{bridge.Id}.ApiKey"; var apiKey = _variableRepository.Get <StringVariable>(variableName)?.Value; if (string.IsNullOrEmpty(apiKey)) { _messageQueue.Publish(new NotifyUserMessage("Found new Philips Hue Bridge. Please press the Button to connect.")); apiKey = await GetApiKeyWithBridgeButtonClick(bridge); if (string.IsNullOrEmpty(apiKey)) { lock (_lock) { _bridges.Remove(bridge.Id); } return; } _messageQueue.Publish(new UpdateVariableMessage(variableName, apiKey)); } OnBridgeFound(bridge); }
public void Notify(NetworkDeviceFoundMessage message) { string bridgeId; if (!message.Values.TryGetValue("hue-bridgeid", out bridgeId)) { return; } PhilipsHueBridge bridge; bridgeId = bridgeId.ToLowerInvariant(); lock (_lock) { if (_bridges.ContainsKey(bridgeId)) { return; } bridge = new PhilipsHueBridge(bridgeId, message.IpAddress); _bridges[bridgeId] = bridge; } Task.Run(() => HandleHueBridge(bridge)); }
private LocalHueClient GetClient(PhilipsHueBridge bridge) { var variableName = $"{Name}.{bridge.Id}.ApiKey"; var apiKey = _variableRepository.Get <StringVariable>(variableName).Value; return(new LocalHueClient(bridge.IpAddress, apiKey)); }
private void HandleZllSwitch(Sensor sensor, PhilipsHueBridge bridge) { var id = GetUniqueId(sensor); var button = new PhilipsHueButtonSensor(sensor.Id, id, sensor.Name, bridge) { Model = sensor.ModelId, Type = sensor.Type, Icon = "PhilipsHueIcon PhilipsHueIcon_ZllSwitch", Battery = sensor.Config.Battery ?? 100 }; OnButtonSensorFound(button); }
private void HandleZllPresenceSensor(Sensor sensor, PhilipsHueBridge bridge) { var id = GetUniqueId(sensor); var sensorDevice = new PhilipsHuePresenceSensor(sensor.Id, id, sensor.Name, bridge) { Model = sensor.ModelId, Type = sensor.Type, Icon = "PhilipsHueIcon PhilipsHueIcon_PresenceSensor", Battery = sensor.Config.Battery ?? 100 }; OnPresenceSensorFound(sensorDevice); }
private async Task FindDevices(PhilipsHueBridge bridge) { try { var variableName = $"PhilipsHue.{bridge.Id}.ApiKey"; var apiKey = _variableRepository.Get <StringVariable>(variableName).Value; var client = new LocalHueClient(bridge.IpAddress, apiKey); await FindBulbsAsync(client, bridge); await FindSensorsAsync(client, bridge); } catch (Exception e) { _log.Error($"Unable to get devices ({e.GetType().Name}) {e.Message}"); } }
private async Task FindBulbsAsync(LocalHueClient client, PhilipsHueBridge bridge) { var bulbs = await client.GetLightsAsync(); if (bulbs != null) { foreach (var light in bulbs) { var id = light.UniqueId.RemoveMacAddressDelimiters(); var bulb = new PhilipsHueBulb(light.Id, id, light.Name, bridge) { Icon = "PhilipsHueIcon PhilipsHueIcon_" + light.ModelId, Model = light.ModelId }; OnBulbFound(bulb); } } }
public PhilipsHuePresenceSensor(string index, string id, string name, PhilipsHueBridge bridge) : base(index, id, name, bridge) { }
private async void OnBridgeFound(object sender, PhilipsHueBridge bridge) { _bridges.Add(bridge); await FindDevices(bridge); }
private void OnBridgeFound(PhilipsHueBridge e) { BridgeFound?.Invoke(this, e); }