/// <summary> /// Gets a list of all lights that have been discovered by the bridge. /// </summary> /// <param name="cancellationToken"></param> /// <returns> /// Returns a list of all lights in the system. /// If there are no lights in the system then the bridge will return an empty. /// </returns> public async Task <IReadOnlyList <HueLight> > GetLightsAsync(CancellationToken cancellationToken = default) { var response = await _httpClient.GetAsync($"http://{_ipAddress}/api/{UserName}/lights", cancellationToken); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); var root = JsonConvert.DeserializeObject <JObject>(json); var lights = new List <HueLight>(root.Count); foreach (var p in root) { var light = new HueLight(this) { Id = p.Key }; JsonConvert.PopulateObject(p.Value.ToString(), light); lights.Add(light); } return(lights); }
private async Task PutLightStateAsync(HueLight light, object state, CancellationToken cancellationToken) { var response = await _httpClient.PutAsync( $"http://{_ipAddress}/api/{UserName}/lights/{light.Id}/state", JsonContent(state), cancellationToken); response.EnsureSuccessStatusCode(); }
private async Task SynchronizeLightAsync(HueLight light, CancellationToken cancellationToken) { var response = await _httpClient.GetAsync( $"http://{_ipAddress}/api/{UserName}/lights/{light.Id}", cancellationToken); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); JsonConvert.PopulateObject(json, light); }
internal async Task PutLightStateAndSynchronizeAsync(HueLight light, object state, CancellationToken cancellationToken) { await PutLightStateAsync(light, state, cancellationToken); await SynchronizeLightAsync(light, cancellationToken); }