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()); }
// 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; }
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."); } }
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); }
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")); }
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."); }