async void SearchBridges()
        {
            foundHueBridges.Clear();
            foundHueLights.Clear();
            connectedBridge = null;
            selectedLight   = null;

            UpdateUIGroups();
            FireUIUpdated();

            //search bridges at https://www.meethue.com/api/nupnp
            //IBridgeLocator locator = new HttpBridgeLocator();
            //scans network using multicast SSDP packets
            IBridgeLocator locator = new SSDPBridgeLocator();

            IEnumerable <Q42.HueApi.Models.Bridge.LocatedBridge> locatedBridges = await locator.LocateBridgesAsync(TimeSpan.FromSeconds(5));

            foreach (var locatedBridge in locatedBridges)
            {
                foundHueBridges.Add(new HueBridge(locatedBridge.BridgeId, locatedBridge.BridgeId, locatedBridge.IpAddress));
            }

            string message = "Found Hue bridges count: " + locatedBridges.Count();

            LogMessage(message, null);
            ShowHubToast(message, hueLogoImage, 2);

            UpdateUIGroups();
            FireUIUpdated();
        }
예제 #2
0
        async Task <string> GetOrFindIP()
        {
            Console.WriteLine("starting GetOrFindIP");
            string ip = settings.LastIPAddress;

            Console.WriteLine("ip: " + ip);
            if (String.IsNullOrEmpty(ip))
            {
                //IBridgeLocator locator = new HttpBridgeLocator();
                SSDPBridgeLocator locator = new SSDPBridgeLocator();
                Console.WriteLine("Searching for bridges");
                IEnumerable <Q42.HueApi.Models.Bridge.LocatedBridge> bridgeIPs = await locator.LocateBridgesAsync(TimeSpan.FromSeconds(20));

                Console.WriteLine("Searching done");
                ////For Windows 8 and .NET45 projects you can use the SSDPBridgeLocator which actually scans your network.
                ////See the included BridgeDiscoveryTests and the specific .NET and .WinRT projects

                if (!bridgeIPs.Any())
                {
                    Console.WriteLine("Scan did not find a Hue Bridge. Try suppling a IP address for the bridge");
                    return(null);
                }

                if (bridgeIPs.Count() == 1)
                {
                    ip = bridgeIPs.First().IpAddress;
                    Console.WriteLine("Bridge found using IP address: " + ip);

                    //Store the new IP address
                    settings.LastIPAddress = ip;
                    settings.Save();
                }
                else
                {
                    Console.WriteLine("Found more than one bridge");
                    ListDialogBox dialog = new ListDialogBox();
                    ObservableCollection <BridgeItem> bridges = new ObservableCollection <BridgeItem>();
                    foreach (var b in bridgeIPs)
                    {
                        bridges.Add(new BridgeItem(b));
                    }
                    dialog.Items = bridges;
                    Console.WriteLine("showing dialog");
                    dialog.ShowDialog();

                    if (!dialog.IsCancelled)
                    {
                        BridgeItem item = dialog.SelectedItem as BridgeItem;
                        ip = item.Bridge.IpAddress;

                        //Store the new IP address
                        settings.LastIPAddress = ip;
                        settings.Save();
                    }
                }
            }

            return(ip);
        }
예제 #3
0
        public async Task TestSSDPBridgeLocator()
        {
            IBridgeLocator locator = new SSDPBridgeLocator();

            var bridgeIPs = await locator.LocateBridgesAsync(TimeSpan.FromSeconds(5));

            Assert.IsNotNull(bridgeIPs);
            Assert.IsTrue(bridgeIPs.Count() > 0);
        }
예제 #4
0
    public async Task TestSSDPBridgeLocator()
    {
      IBridgeLocator locator = new SSDPBridgeLocator();

      var bridgIps = await locator.LocateBridgesAsync(TimeSpan.FromSeconds(5));

      Assert.IsNotNull(bridgIps);
      Assert.IsTrue(bridgIps.Count() > 0);

    }
예제 #5
0
        public static async Task <HueController> GetControllerAsync(string appKey = null)
        {
            var locator = new SSDPBridgeLocator();
            var ip      = (await locator.LocateBridgesAsync(TimeSpan.FromSeconds(15))).First();

            Console.WriteLine("Found bridge at IP: {0}", ip);
            var client = new LocalHueClient(ip);

            if (!string.IsNullOrEmpty(appKey))
            {
                client.Initialize(appKey);
            }
            else
            {
                appKey = await client.RegisterAsync("PiHueSphinx", "buzzerpi");

                Console.WriteLine("Your HUE app key is: {0}", appKey);
            }

            return(new HueController(client));
        }
예제 #6
0
 public Hue(IDB db)
 {
     _locator = new SSDPBridgeLocator();
     _db      = db;
 }