/// <summary> /// Try to contact the specified bridge to get the basic config. /// </summary> /// <param name="BridgeIP">IP Address of the bridge.</param> /// <returns>The basic configuration of the bridge.</returns> public static BasicConfig GetBridgeBasicConfig(IPAddress BridgeIP) { BasicConfig config = new BasicConfig(); CommResult comres = Communication.SendRequest(new Uri($@"http://{BridgeIP}/api/config"), WebRequestType.GET); switch (comres.status) { case WebExceptionStatus.Success: config = Serializer.DeserializeToObject <BasicConfig>(comres.data); if (config != null) { return(config); } config = new BasicConfig(); break; case WebExceptionStatus.Timeout: break; default: break; } return(config); }
private static void _detectionBgw_DoWork(object sender, DoWorkEventArgs e) { Dictionary <string, BasicConfig> newdetectedBridge = new Dictionary <string, BasicConfig>(); // Detect using UPNP bool finished; List <ManagedUPnP.Device> upnpDevices = Discovery.FindDevices(null, 3000, int.MaxValue, out finished).ToList(); foreach (ManagedUPnP.Device dev in upnpDevices) { if (dev.ModelName.Contains("Philips hue bridge")) { BasicConfig bc = GetBridgeBasicConfig(IPAddress.Parse(dev.RootHostName)); if (bc == null) { continue; } newdetectedBridge.Add(dev.RootHostName, bc); } } // If not bridge are found via upnp try the portal. if (newdetectedBridge.Count == 0) { try { // Detect using Portal CommResult comres = Communication.SendRequest(new Uri("http://www.meethue.com/api/nupnp"), WebRequestType.GET); if (comres.status == WebExceptionStatus.Success) { List <Device> portalDevices = Serializer.DeserializeToObject <List <Device> >(comres.data); foreach (Device dev in portalDevices) { if (newdetectedBridge.ContainsKey(dev.internalipaddress)) { continue; } BasicConfig bc = GetBridgeBasicConfig(IPAddress.Parse(dev.internalipaddress)); newdetectedBridge.Add(dev.internalipaddress, bc); } } } catch (System.TimeoutException ex) { OnPortalDetectionTimedOut?.Invoke(null, new DetectionErrorEventArgs(ex)); OnBridgeDetectionFailed?.Invoke(null, new DetectionErrorEventArgs(ex)); return; } catch (Exception ex) { OnPortalDetectionError?.Invoke(null, new DetectionErrorEventArgs(ex)); OnBridgeDetectionFailed?.Invoke(null, new DetectionErrorEventArgs(ex)); return; } } IList <Bridge> bridges = newdetectedBridge.Select(kvp => new Bridge { IpAddress = IPAddress.Parse(kvp.Key), Mac = kvp.Value.mac, ApiVersion = kvp.Value.apiversion, SwVersion = kvp.Value.swversion, Name = kvp.Value.name ?? "" }).ToList(); // Process all bridges to get needed settings. e.Result = new ObservableCollection <Bridge>(bridges); }