public static int InitializeData() { Storage.IntializeDefaultScenes(); AddressBuild.InitializeVar(Platform.ReadSetting("bridgeIP"), Platform.ReadSetting("bridgeUserName"), Platform.ReadSetting("bridgeGroup")); activeTab = Platform.ReadSetting("lastActiveTab"); sceneData = JsonParser.Deserialize(Platform.ReadSetting("customSceneJSON")); latestData = JsonParser.Deserialize(Platform.ReadSetting("backupMainJSON")); groupData = JsonParser.Deserialize(Platform.ReadSetting("backupGroupJSON")); backupData = latestData; groupBackupData = groupData; SunriseEquation.SetCoordinates(); SunriseEquation.SunriseSunset(); System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); System.Diagnostics.FileVersionInfo versionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location); fileVersion[0] = versionInfo.ProductMajorPart; fileVersion[1] = versionInfo.ProductMinorPart; fileVersion[2] = versionInfo.ProductBuildPart; fileVersion[3] = versionInfo.ProductPrivatePart; var result = RefreshData(); var bridgeResult = FindNewBridgeIP(); Effects.AutoEffect(); var bridgeResult2 = StoreBridgeID(); return(0); }
public static int CustomPut(string light, string dataString, bool forceDelay = false) { Uri dataUri = new Uri(AddressBuild.LightState(light)); PutData(dataUri, dataString, forceDelay); return(0); }
public static int ReinitializeData() //Should be called when changing groups. { AddressBuild.InitializeVar(Platform.ReadSetting("bridgeIP"), Platform.ReadSetting("bridgeUserName"), Platform.ReadSetting("bridgeGroup")); var result = RefreshData(); return(0); }
async public static Task PairAttempt(string bridgeIP, string bridgeUser) { HttpClient client = new HttpClient(); string address = AddressBuild.APIRootSetup(bridgeIP); try { dynamic dynContent = new ExpandoObject(); string devicetype = String.Format("Albedo#{0}.{1}", Environment.MachineName, DateTime.Now.ToString()); if (devicetype.Length > 40) { devicetype = devicetype.Substring(0, 40); } dynContent.devicetype = devicetype; //dynContent.username = bridgeUser; //OBSOLETE. Username is now assigned by the bridge. StringContent content = new StringContent(JsonParser.Serialize(dynContent)); Task <HttpResponseMessage> postData = client.PostAsync(address, content); HttpResponseMessage response = await postData; string responseString = await response.Content.ReadAsStringAsync(); //Ugly hack; to be removed once parser handles arrays properly responseString = responseString.Substring(1, responseString.Length - 2); Storage.tempData = JsonParser.Deserialize(responseString); return; } catch (Exception) { dynamic failData = new ExpandoObject(); Storage.tempData = failData; return; } }
//Downloads latest bridge data, and stores it in latestData. async public static Task RefreshData(bool doSceneBackup = false, int retry = 0) { bool finalize = false; try { HttpClient client = new HttpClient(); Task <HttpResponseMessage> getLightData = client.GetAsync(AddressBuild.LightsRoot()); Task <HttpResponseMessage> getGroupsData = client.GetAsync(AddressBuild.GroupsRoot()); Task <HttpResponseMessage> getGroupData = client.GetAsync(AddressBuild.GroupUri()); HttpResponseMessage lightString = await getLightData; HttpResponseMessage groupsString = await getGroupsData; HttpResponseMessage groupString = await getGroupData; dynamic latestTemp = new ExpandoObject(); dynamic groupTemp = new ExpandoObject(); latestTemp.lights = JsonParser.Deserialize(await lightString.Content.ReadAsStringAsync()); latestTemp.groups = JsonParser.Deserialize(await groupsString.Content.ReadAsStringAsync()); groupTemp = JsonParser.Deserialize(await groupString.Content.ReadAsStringAsync()); if (latestTemp.lights == null || groupTemp.lights == null) { throw new Exception(); } latestData = latestTemp; groupData = groupTemp; backupData = latestData; groupBackupData = groupData; finalize = true; return; } catch (Exception) { if (retry < 2) { var result = RefreshData(doSceneBackup, retry + 1); } else { latestData = backupData; groupData = groupBackupData; finalize = true; return; } } finally { if (finalize) { if (doSceneBackup) { sceneBackup = latestData.lights; } Platform.FinalizeRefresh(); } } }
private static void ChangeValue(string light, int value, string valueName) { dynamic jsonValue = new ExpandoObject(); var jsonRef = (IDictionary <string, object>)jsonValue; jsonRef[valueName] = value; Uri dataUri = new Uri(AddressBuild.LightState(light)); TimePut(dataUri, JsonParser.Serialize(jsonValue)); JsonParser.Modify(Storage.latestData, new string[] { "lights", light, "state", valueName }, (int)value); }
public static int ToggleLight(string light, bool isOn) { dynamic jsonToggle = new ExpandoObject(); if (isOn == true) { jsonToggle.on = true; } else { jsonToggle.on = false; } Uri dataUri = new Uri(AddressBuild.LightState(light)); JsonParser.Modify(Storage.latestData, new string[] { "lights", light, "state", "on" }, isOn); PutData(dataUri, JsonParser.Serialize(jsonToggle)); return(0); }
//Find the bridge again if the local IP changes async public static Task FindNewBridgeIP() { bool syncFailed = false; try { HttpClient client = new HttpClient(); Task <HttpResponseMessage> getTestData = client.GetAsync(AddressBuild.LightsRoot()); HttpResponseMessage testData = await getTestData; string testString = await testData.Content.ReadAsStringAsync(); dynamic testJson = JsonParser.Deserialize(testString); } catch { syncFailed = true; } if (!syncFailed) { return; } try { HttpClient client = new HttpClient(); Task <HttpResponseMessage> getBridgeData = client.GetAsync("https://www.meethue.com/api/nupnp"); HttpResponseMessage bridgeData = await getBridgeData; string bridgeString = await bridgeData.Content.ReadAsStringAsync(); dynamic bridgeJson = JsonParser.Deserialize(bridgeString); foreach (dynamic bridgeInfo in bridgeJson) { string bridgeIdentity = bridgeInfo.id; string bridgeAddress = bridgeInfo.internalipaddress; bridgeIdentity = bridgeIdentity.ToLowerInvariant(); if (bridgeIdentity == Platform.ReadSetting("bridgeIdentity")) { if (bridgeAddress != Platform.ReadSetting("bridgeIP")) { Platform.WriteSetting("bridgeIP", bridgeAddress); Platform.SaveSettings(); } } } } catch { } }
//Controls timePutAllowed private static void EffectTimerOn() { bufferData.bri = 0; bufferData.hue = 0; bufferData.sat = 0; int arrayLength = Storage.groupData.lights.Length; lightArray = new Uri[arrayLength]; int i = 0; foreach (string light in Storage.groupData.lights) { lightArray[i] = new Uri(AddressBuild.LightState(light)); i++; } lastLight = 0; effectTimer.Elapsed += OnTimedEvent; effectTimer.Enabled = true; ToggleEffectsOn(); }
public static int ChangeScene(string scene, bool hardCoded) { //Turn on the lights if any of them are disabled foreach (string light in Storage.groupData.lights) { if (JsonParser.Read(Storage.latestData, new string[] { "lights", light, "state", "on" }) == false) { ToggleLight(light, true); } } dynamic tileColor; int tileColorValue; if (hardCoded) { foreach (string light in Storage.groupData.lights) { Uri dataUri = new Uri(AddressBuild.LightState(light)); PutData(dataUri, JsonParser.Serialize(JsonParser.Read(Storage.defaultScenes, new string[] { scene, "state", "1" }))); } tileColorValue = (int)JsonParser.Read(Storage.defaultScenes, new string[] { scene, "tilecolor" }); tileColor = Storage.tileColors(tileColorValue); } else { if (JsonParser.Read(Storage.sceneData, new string[] { scene }) != null) { int i = 1; int limit = 0; foreach (dynamic light in JsonParser.Read(Storage.sceneData, new string[] { scene, "state" })) { limit++; } foreach (string light in Storage.groupData.lights) { Uri dataUri = new Uri(AddressBuild.LightState(light)); PutData(dataUri, JsonParser.Serialize(JsonParser.Read(Storage.sceneData, new string[] { scene, "state", i.ToString() }))); if (i < limit) { i++; } } tileColorValue = (int)JsonParser.Read(Storage.sceneData, new string[] { scene, "tilecolor" }); tileColor = Storage.tileColors(tileColorValue); } else { //Error handling for missing scene data tileColorValue = 0; tileColor = Storage.tileColors(tileColorValue); } } //Change accent to match tile background ChangeAccent(tileColorValue); //Store scene name Storage.currentScene = scene; return(0); }