示例#1
0
        public async Task <IActionResult> SelectBridge([FromBody] HueBridge hueBridge)
        {
            if (hueBridge == null || string.IsNullOrWhiteSpace(hueBridge.Ip))
            {
                return(BadRequest("invalid hue bridge settings"));
            }

            var client = new LocalHueClient(hueBridge.Ip);

            for (int i = 0; i <= 10; i++)
            {
                try
                {
                    var appKey = await client.RegisterAsync("NuimoHub", Environment.GetEnvironmentVariable("COMPUTERNAME"));

                    hueBridge.AppKey = appKey;

                    var newHueOptions = new HueOptions {
                        Bridge = hueBridge
                    };

                    _nuimoOptionsWriter.SetHueOptions(newHueOptions);

                    return(Ok($"hue bridge at {hueBridge.Ip} added; appKey is {appKey}"));
                }
                catch (System.Exception)
                {
                    Debug.WriteLine("Button was not pressed.");
                    await Task.Delay(3000);
                }
            }

            return(Unauthorized());
        }
示例#2
0
    // Update is called once per frame
    void Update()
    {
        if (oldOn != on || oldColor != color)
        {
            HueBridge bridge = GetComponentInParent <HueBridge>();

            HttpWebRequest request = new HttpWebRequest(new System.UriBuilder("http", bridge.hostName, bridge.portNumber, "/api/" + bridge.username + "/lights/" + devicePath + "/state").Uri);
            request.Method = "PUT";

            Vector3 hsv = HSVFromRGB(color);

            var state = new Dictionary <string, object> ();
            state ["on"]  = on;
            state ["hue"] = (int)(hsv.x / 360.0f * 65535.0f);
            state ["sat"] = (int)(hsv.y * 255.0f);
            state ["bri"] = (int)(hsv.z * 255.0f);

            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Json.Serialize(state));
            request.ContentLength = bytes.Length;

            System.IO.Stream s = request.GetRequestStream();
            s.Write(bytes, 0, bytes.Length);
            s.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            response.Close();
        }

        oldOn    = on;
        oldColor = color;
    }
示例#3
0
        private void StartStream()
        {
            if (!streamStarted)
            {
                LogUtil.Write("Starting stream.");
                var bridgeArray = DreamData.GetItem <List <BridgeData> >("bridges");
                bridges         = new List <HueBridge>();
                sendTokenSource = new CancellationTokenSource();
                foreach (BridgeData bridge in bridgeArray)
                {
                    if (string.IsNullOrEmpty(bridge.Key) || string.IsNullOrEmpty(bridge.User) ||
                        bridge.SelectedGroup == "-1")
                    {
                        continue;
                    }
                    var b = new HueBridge(bridge);
                    b.DisableStreaming();
                    b.EnableStreaming(sendTokenSource.Token);
                    bridges.Add(b);
                    LogUtil.Write("Stream started to " + bridge.Ip);
                    streamStarted = true;
                }
            }

            if (streamStarted)
            {
                LogUtil.WriteInc("Stream started.");
            }
        }
示例#4
0
        private static DataStore SetDefaults(DataStore store)
        {
            store.InsertItem("dsIp", "0.0.0.0");
            BaseDevice myDevice = new SideKick(GetLocalIpAddress());

            myDevice.Initialize();
            var bList = HueBridge.FindBridges();
            var bData = bList.Select(lb => new BridgeData(lb.IpAddress, lb.BridgeId)).ToList();

            store.InsertItem("myDevice", myDevice);
            store.InsertItem("emuType", "SideKick");
            store.InsertItem("bridges", bData);
            store.InsertItem("devices", Array.Empty <BaseDevice>());
            return(store);
        }
示例#5
0
    public override void OnInspectorGUI()
    {
        HueBridge hueBridge = (HueBridge)target;

        hueBridge.hostName   = EditorGUILayout.TextField("Host name:", hueBridge.hostName);
        hueBridge.portNumber = EditorGUILayout.IntField("Port number:", hueBridge.portNumber);
        hueBridge.username   = EditorGUILayout.TextField("Username:"******"Discover Lights"))
        {
            hueBridge.DiscoverLights();
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
        public IActionResult Action(string action, string value = "")
        {
            var message = "Unrecognized action";
            var store   = DreamData.GetStore();

            Console.WriteLine($@"{action} fired.");

            if (action == "connectDreamScreen")
            {
                List <BaseDevice> dev;
                using (var ds = new DreamClient()) {
                    dev = ds.FindDevices().Result;
                }

                store.Dispose();
                return(new JsonResult(dev));
            }

            if (action == "authorizeHue")
            {
                var        doAuth    = true;
                var        bridges   = store.GetItem <List <BridgeData> >("bridges");
                BridgeData bd        = null;
                var        bridgeInt = -1;

                if (!string.IsNullOrEmpty(value))
                {
                    var bCount = 0;
                    foreach (var b in bridges)
                    {
                        if (b.Ip == value)
                        {
                            bd        = b;
                            bridgeInt = bCount;
                            doAuth    = b.Key == null || b.User == null;
                        }

                        bCount++;
                    }
                }

                if (doAuth)
                {
                    var appKey = HueBridge.CheckAuth(value).Result;
                    if (appKey != null && bd != null)
                    {
                        message            = "Success: Bridge Linked.";
                        bd.Key             = appKey.StreamingClientKey;
                        bd.User            = appKey.Username;
                        bridges[bridgeInt] = bd;
                        store.ReplaceItem("bridges", bridges, true);
                    }
                    else
                    {
                        message = "Error: Press the link button";
                    }
                }
                else
                {
                    message = "Success: Bridge Already Linked.";
                }
            }
            else if (action == "findHue")
            {
                var bridges = HueBridge.FindBridges(3);
                if (bridges != null)
                {
                    store.ReplaceItem("bridges", bridges, true);
                }
                else
                {
                    message = "Error: No bridge found.";
                }
            }

            Console.WriteLine(message);
            store.Dispose();
            return(new JsonResult(message));
        }
        public IActionResult GetJson()
        {
            Console.WriteLine(@"GetJson Called.");
            var store = DreamData.GetStore();

            if (DreamData.GetItem <List <BridgeData> >("bridges") != null)
            {
                var bridges    = store.GetItem <List <BridgeData> >("bridges");
                var newBridges = HueBridge.FindBridges();
                var nb         = new List <BridgeData>();
                var update     = false;
                if (bridges.Count > 0)
                {
                    foreach (var b in bridges)
                    {
                        if (b.Key != null && b.User != null)
                        {
                            var hb = new HueBridge(b);
                            b.SetLights(hb.GetLights());
                            b.SetGroups(hb.ListGroups().Result);
                            update = true;
                        }

                        nb.Add(b);
                    }
                }

                foreach (var bb in newBridges)
                {
                    var exists = false;
                    foreach (var b in bridges)
                    {
                        if (bb.BridgeId == b.Id)
                        {
                            exists = true;
                        }
                    }

                    if (!exists)
                    {
                        Console.WriteLine($@"Adding new bridge at {bb.IpAddress}.");
                        nb.Add(new BridgeData(bb.IpAddress, bb.BridgeId));
                        update = true;
                    }
                }


                if (update)
                {
                    bridges = nb;
                    store.ReplaceItem("bridges", bridges, true);
                }
            }


            if (store.GetItem("dsIp") == "0.0.0.0")
            {
                var dc = new DreamClient();
                dc.FindDevices().ConfigureAwait(true);
                dc.Dispose();
            }

            store.Dispose();
            return(Content(DreamData.GetStoreSerialized(), "application/json"));
        }
示例#8
0
        public async void AuthorizeHue(string id)
        {
            LogUtil.Write("AuthHue called, for real.");
            BridgeData bd;

            if (!string.IsNullOrEmpty(id))
            {
                await Clients.All.SendAsync("hueAuth", "start");

                bd = DataUtil.GetCollectionItem <BridgeData>("bridges", id);
                LogUtil.Write("BD: " + JsonConvert.SerializeObject(bd));
                if (bd == null)
                {
                    LogUtil.Write("Null bridge retrieved.");
                    await Clients.All.SendAsync("hueAuth", "stop");

                    return;
                }

                if (bd.Key != null && bd.User != null)
                {
                    LogUtil.Write("Bridge is already authorized.");
                    await Clients.All.SendAsync("hueAuth", "authorized");

                    await Clients.All.SendAsync("olo", DataUtil.GetStoreSerialized());

                    return;
                }
            }
            else
            {
                LogUtil.Write("Null value.", "WARN");
                await Clients.All.SendAsync("hueAuth", "stop");

                return;
            }

            LogUtil.Write("Trying to retrieve appkey...");
            var count = 0;

            while (count < 30)
            {
                count++;
                try {
                    RegisterEntertainmentResult appKey = HueDiscovery.CheckAuth(bd.IpAddress).Result;
                    LogUtil.Write("Appkey retrieved! " + JsonConvert.SerializeObject(appKey));
                    if (!string.IsNullOrEmpty(appKey.StreamingClientKey))
                    {
                        bd.Key  = appKey.StreamingClientKey;
                        bd.User = appKey.Username;
                        // Need to grab light group stuff here
                        var nhb = new HueBridge(bd);
                        nhb.RefreshData();
                        bd = nhb.Bd;
                        nhb.Dispose();
                        DataUtil.InsertCollection <BridgeData>("bridges", bd);
                        await Clients.All.SendAsync("hueAuth", "authorized");

                        await Clients.All.SendAsync("olo", DataUtil.GetStoreSerialized());

                        return;
                    }
                } catch (NullReferenceException e) {
                    LogUtil.Write("NULL EXCEPTION: " + e.Message, "WARN");
                }
                await Clients.All.SendAsync("hueAuth", count);

                Thread.Sleep(1000);
            }
            LogUtil.Write("We should be authorized, returning.");
        }