using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using HDL_ON.Entity; using Newtonsoft.Json.Linq; using Shared; namespace HDL_ON.DAL.Server { public partial class HttpServerRequest { /* * json格式 "{" + "\"sss\":" + "\"" + sss + "\"" + "," + "\"xxx\":" + xxx + "," + "}"; 获取返回的数据 var sss = Newtonsoft.Json.Linq.JObject.FromObject("sss"); var xxx = homeJsonStr.GetValue("xxx").ToString(), Dictionary d = new Dictionary(); d.Add("Id", fId); var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); */ public string relaseaSever = "https://global.hdlcontrol.com/HangZhouHdlCloudApi"; public string debugSever = "https://global.hdlcontrol.com/ProposedProductionApi"; string severAddress; public HttpServerRequest() { #if DEBUG1 severAddress = debugSever; #else severAddress = relaseaSever; #endif } /// /// 获取传感器历史数据 /// /// /// /// /// /// /// /// /// /// public ResponsePack GetSensorHistory(int subnetId,int deviceId,int bigClass,int minClass,int queryType,int loopId,int nowMonth,string mac) { Dictionary d = new Dictionary(); d.Add("SubnetID", subnetId); d.Add("DeviceID", deviceId); d.Add("LargeType", bigClass); d.Add("SmallType", minClass); d.Add("QueryType", queryType); d.Add("loopId", loopId); d.Add("NowMonth", nowMonth); d.Add("MAC", DB_ResidenceData.residenceData.residenceGatewayMAC); d.Add("LocalTimeZone", 8); var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps("https://developer.hdlcontrol.com/api/GetSensorPushHistory", jsonString,true); } public string GetRequestResultMsg(string resultCode) { string result = ""; switch (resultCode.ToUpper()) { case "USERNAMEORPWDERROR": result = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError); break; case "ACCOUNTNOEXISTS": result = Language.StringByID(StringId.ACCOUNTNOEXISTS); break; case "SENDFAIL": result = Language.StringByID(StringId.FailedToSendVerificationCode); break; case "EXIST": result = Language.StringByID(StringId.AccountAlreadyExists); break; case "Self:Net_Error": result = Language.StringByID(StringId.NetworkAnomaly); break; } return result; } #region 注册、登录部分 /// /// 账号登录-使用密码 /// public ResponsePack LoginByPassword(string account, string password) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"Password\":" + "\"" + password + "\"" + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/Login", jsonString, false); } /// /// 验证码登录 /// public ResponsePack LoginValidCode(string account,string vCode) { Dictionary d = new Dictionary(); d.Add("Account", account); d.Add("Code", vCode); d.Add("Language", Language.CurrentLanguage); d.Add("AreaCode", "86"); var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/LoginValidCode", jsonString, false); } /// /// 手机号码注册 /// /// /// /// public ResponsePack RegisterPhone(string mobileNumber, string password, string language) { string jsonString = "{" + "\"Account\":" + "\"" + mobileNumber + "\"" + "," + "\"Password\":" + "\"" + password + "\"" + "," + "\"Language\":" + "\"" + language + "\"" + "\"AreaCode\":" + "\"" + "86" + "\"" + "}"; return RequestHttps($"{severAddress}/SignIn", jsonString, false); } public ResponsePack GetAreaCode() { string requestJson = "{}"; return RequestHttps($"{severAddress}/ZigbeeUsers/GetAreaCode", requestJson, false); } /// /// 验证短信或者邮箱验证码,之后注册 /// /// 账号 /// 密码 /// 确认密码 /// 验证码 /// /// public ResponsePack ValidataCodeAndRegister(string account, string password, string entryPassword, string code, int areaCode) { //var requestObj = new ValidateSmsCodeObj() { Phone = accout, Code = code }; //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj); string requestJson = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"Password\":" + "\"" + password + "\"" + "," + "\"EnterPassword\":" + "\"" + entryPassword + "\"" + "," + "\"Language\":" + "\"" + Language.CurrentLanguage.ToLower() + "\"" + "," + "\"Code\":" + "\"" + code + "\"" + "," + "\"RegisterSoruce\":" + 0 + "," + "\"AreaCode\":" + areaCode + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/ValidataCodeAndRegisterAccount", requestJson, false); } /// /// 获取注册验证码 /// public ResponsePack GetRegisterVerCode(string account) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"Company\":" + MainPage.Company + "," + "\"Language\":" + "\"" + Language.CurrentLanguage.ToLower() + "\"" + "," + "\"AreaCode\":" + OnAppConfig.Instance.CountryNumber + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/RegisterSendVerCode", jsonString, false); } /// /// 获取登录验证码 /// public ResponsePack GetLoginVerCode(string account) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"AreaCode\":" + "86" + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/LoginSendVerCode", jsonString, false); } /// /// 发送验证码 /// public ResponsePack SendSms(string account) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"Company\":" + MainPage.Company + "," + "\"Language\":" + "\"" + Language.CurrentLanguage + "\"" + "," + "\"AreaCode\":" + OnAppConfig.Instance.CountryNumber + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/LoginSendVerCode", jsonString, false); } /// /// 验证验证码 /// /// /// /// public ResponsePack ValidatorCode(string account, string code, int countryIndex) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"Code\":" + "\"" + code + "\"" + "," + "\"Language\":" + "\"" + Language.CurrentLanguage + "\"" + "," + "\"AreaCode\":" + countryIndex + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/ValidatorCode", jsonString, false); } /// /// 重设密码 /// /// public ResponsePack ResetPassword(string account, string password, string rePassword, int countryIndex) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "," + "\"Password\":" + "\"" + password + "\"" + "," + "\"AgainPassword\":" + "\"" + rePassword + "\"" + "," + "\"AreaCode\":" + countryIndex + "}"; return RequestHttps($"{severAddress}/ZigbeeUsers/ResetPassword", jsonString, false); } #endregion #region 个人信息部分 /// /// 获取用户信息 /// /// public void GetUserInfo() { Dictionary d = new Dictionary(); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps($"{severAddress}/ZigbeeUsers/GetAccountInfo", requestJson, true); if (revertObj.StateCode.ToUpper() == "SUCCESS") { var dataStr = JObject.FromObject(revertObj.ResponseData); //"DistributedMark": "96439601-fd26-4768-8440-1d9dfa32c109", < !--帐号Id-- > MainPage.LoginUser.userEmailInfo = dataStr.GetValue("Email").ToString(); MainPage.LoginUser.userMobileInfo = dataStr.GetValue("Phone").ToString(); FileStream fs = null; try { var headImageString = dataStr.GetValue("HeadImage").ToString(); if (!string.IsNullOrEmpty(headImageString)) { var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(headImageString); var headImageBytes = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString); MainPage.LoginUser.headImagePageBytes = headImageBytes; var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/", "headImage.png"); fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); fs.Write(headImageBytes, 0, headImageBytes.Length); fs.Flush(); MainPage.LoginUser.headImagePagePath = filePath; } } catch (Exception ex) { MainPage.Log($"download headImage error : {ex.Message}"); } finally { if (fs != null) { fs.Close(); } } // "GesturePwd": null, < !--手势密码-- > // "StringPwd": null , < !--字符串密码-- > MainPage.LoginUser.userName = dataStr.GetValue("UserName").ToString(); Application.RunOnMainThread(() => { }); MainPage.LoginUser.SaveUserInfo(); MainPage.Log("获取用户信息成功。"); } } /// /// 更新用户昵称 /// /// /// public ResponsePack EditUserName(string userName) { Dictionary d = new Dictionary(); d.Add("UserName", userName); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps($"{severAddress}/ZigbeeUsers/UpdateUserName", requestJson, true); return revertObj; } /// /// 更新用户头像 /// /// /// public string UpdataUserHeadImage(string fileName) { FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, bytes.Length); Dictionary d = new Dictionary(); d.Add("HeadImage", bytes); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps($"{severAddress}/ZigbeeUsers/UpdateHeadImage", requestJson, true); return revertObj.StateCode; } /// /// 更改绑定账户的邮箱或者手机号 /// /// /// public string BindAccount(string account) { string jsonString = "{" + "\"Account\":" + "\"" + account + "\"" + "}"; var responsePack = RequestHttps($"{severAddress}/ZigbeeUsers/BindAccount", jsonString, true); return responsePack.StateCode; } #endregion #region 住宅部分 /// /// 获取住宅列表 /// public string GetHomePager() { string jsonString = "{" + "\"RequestVersion\":" + "\"" + MainPage.VersionString + "\"" + "," + "\"RequestSource\":" + "\"" + "2" + "\"" + "," + "\"HomeType\":" + "\"" + "1" + "\"" + "," + "\"LoginAccessToken\":" + "\"" + MainPage.LoginUser.loginTokenString + "\"" + "}"; var responsePack = RequestHttps($"{severAddress}/App/GetHomePager", jsonString,false); if (responsePack.StateCode.ToUpper() == "SUCCESS") { var dataStr = JObject.FromObject(responsePack.ResponseData); //没有住宅 if (dataStr.GetValue("PageData").ToString() == "[]") { } else { //{ // { // "Id": "1107487", // "HomeStatus": 2, // "UserGuid": "22980", // "Name": "啊", // "Address": null, // "Longitude": 0.0, // "Latitude": 0.0, // "RegionName": null, // "Company": null, // "ContactPerson": null, // "ContactPersonPhone": null, // "Remarks": null, // "ChangeDate": null, // "AccountType": 0, // "CreatedOnUtc": "2020-05-27T06:52:03", // "IsOthreShare": false, // "MainUserDistributedMark": null, // "HomeGateways": [ // { // "GatewayUniqueId": "4E47323347591243" // } // ] //}} MainPage.LoginUser.regionList = new List(); foreach (var jsonData in dataStr.GetValue("PageData")) { var homeJsonStr = JObject.FromObject(jsonData); var home = new RegionInfoRes() { RegionID = homeJsonStr.GetValue("Id").ToString(), RegionName = homeJsonStr.GetValue("RegionName").ToString(), Name = homeJsonStr.GetValue("Name").ToString(), Address = homeJsonStr.GetValue("Address").ToString(), IsOthreShare = (bool)homeJsonStr.GetValue("IsOthreShare"), }; MainPage.LoginUser.regionList.Add(home); if (string.IsNullOrEmpty(DB_ResidenceData.residenceData.CurReginID)) { DB_ResidenceData.residenceData.CurReginID = MainPage.LoginUser.regionList[0].RegionID; } } DB_ResidenceData.residenceData.SaveResidenceData(); MainPage.LoginUser.SaveUserInfo(); } } return responsePack.StateCode; } /// /// 编辑住宅信息 /// /// public ResponsePack EditResidenceInfo() { //创建字典 Dictionary d = new Dictionary(); //添加元素 d.Add("RequestVersion", MainPage.VersionString); d.Add("RequestSource", "2"); d.Add("LoginAccessToken", MainPage.LoginUser.loginTokenString); d.Add("HomeId", DB_ResidenceData.residenceData.residecenInfo.RegionID); d.Add("HomeType", 1); d.Add("Name", DB_ResidenceData.residenceData.residecenInfo.Name); d.Add("Address", DB_ResidenceData.residenceData.residecenInfo.Address); //添加完成以后把字典类中数据格式化为json字符串 //将对象转为json字符串 string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/App/EditHome", jsonString, false); } /// /// 获取住宅下的成员账号 /// /// public ResponsePack GetResidenceMemberAccount() { Dictionary d = new Dictionary(); d.Add("DistributedMark", DB_ResidenceData.residenceData.residecenInfo.RegionID); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/GetSubAccountByDistributedMark", jsonString, true); } /// /// 删除住宅下的成员账号 /// /// public ResponsePack DeleteResidenceMemberAccount(string memberAccount) { Dictionary d = new Dictionary(); d.Add("SubAccount", memberAccount); d.Add("HouseDistributedMark", DB_ResidenceData.residenceData.residecenInfo.RegionID); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/DeletedSubAccount", jsonString, true); } /// /// 修改子账号昵称 /// /// /// /// public ResponsePack EditSubAccountNickName(string nickName,string subAccountGuid) { Dictionary d = new Dictionary(); d.Add("SubAccountGuid", subAccountGuid); d.Add("NickName", nickName); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/EditSubAccountNickName", jsonString, true); } /// /// 修改子账号创建场景权限 /// /// /// /// public ResponsePack ChangeCreateSceneState(string homeGuid, string subAccountGuid) { Dictionary d = new Dictionary(); d.Add("SubAccountGuid", subAccountGuid); d.Add("HomeGuid", homeGuid); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/ChangeCreateSceneState", jsonString, true); } /// /// 获取住宅下子账号的共享数据列表 /// /// public ResponsePack GetShareDataByMemberAccount(string memberId) { Dictionary d = new Dictionary(); d.Add("DistributedMark", memberId); d.Add("HouseDistributedMark", DB_ResidenceData.residenceData.residecenInfo.RegionID); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeDataShare/GetShareDataBySubAccount", jsonString, true); } /// /// 获取住宅下子账号的共享数据 /// /// public ResponsePack GetShareData(string memberId,string hId) { Dictionary d = new Dictionary(); d.Add("DistributedMark", memberId); d.Add("HouseDistributedMark", hId); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeDataShare/GetOneShareData", jsonString, true); } /// /// 增加共享数据列表 /// /// public ResponsePack AddShareData(ShareData shareData) { Dictionary d = new Dictionary(); d.Add("ShareName", shareData.ShareName); d.Add("HouseDistributedMark", shareData.HouseDistributedMark); d.Add("ShareDataBytes", shareData.ShareDataBytes); d.Add("SubAccountDistributedMark", shareData.SubAccountDistributedMark); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeDataShare/AddShareData", jsonString, true); } /// /// 增加共享数据 /// /// public ResponsePack EditShareData(ShareData shareData) { Dictionary d = new Dictionary(); d.Add("DistributedMark", shareData.DistributedMark); d.Add("ShareName", shareData.ShareName); d.Add("HouseDistributedMark", shareData.HouseDistributedMark); d.Add("ShareDataBytes", shareData.ShareDataBytes); d.Add("SubAccountDistributedMark", shareData.SubAccountDistributedMark); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeDataShare/EditShareData", jsonString, true); } /// /// 删除共享数据 /// /// /// public ResponsePack DeleteShareData(ShareData shareData) { Dictionary d = new Dictionary(); d.Add("DistributedMark", shareData.DistributedMark); d.Add("HouseDistributedMark", shareData.HouseDistributedMark); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeDataShare/DeleteShareData", jsonString, true); } /// /// 删除子账号当前住宅的所有共享数据 /// /// public ResponsePack DeleteCurrentResidenceSharedData(ShareData shareData) { Dictionary d = new Dictionary(); d.Add("SubAccountDistributedMark", shareData.SubAccountDistributedMark); d.Add("HouseDistributedMark", shareData.HouseDistributedMark); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeDataShare/DeleteShareData", jsonString, true); } /// /// 绑定子账号到住宅下 /// /// /// /// public ResponsePack BindResidenceMemberAccount(string subAccount,string nickName) { Dictionary d = new Dictionary(); d.Add("SubAccount", subAccount); d.Add("HouseDistributedMark", DB_ResidenceData.residenceData.residecenInfo.RegionID); d.Add("Nickname", nickName); d.Add("IsAllowRemoteCtrl", true); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/BindSubAccount", jsonString, true); } /// /// 获取住宅下的成员账号 /// /// public ResponsePack GetResidenceMemberAccountInfo(string account) { Dictionary d = new Dictionary(); d.Add("Account", account); string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d); return RequestHttps($"{severAddress}/ZigbeeUsers/GetSubAccountInfo", jsonString, true); } #endregion #region 获取天气部分 /// /// 获取指定经纬度的城市信息 /// public void GetCityInfo(string lon, string lat) { System.Threading.Tasks.Task.Run(() => { while (true) { //获取天气 var webClient = new WebClient(); string url = $"https://developer.hdlcontrol.com/Weather/Weather/FindCity/?lon={lon}&lat={lat}"; string responseString = null; try { responseString = Encoding.UTF8.GetString(webClient.DownloadData(url)); } catch (Exception ex) { MainPage.Log(ex.Message); } if (responseString != null) { try { var revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString); JObject jt = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); MainPage.cityInfo.city = jt["City"].ToString(); MainPage.cityInfo.cid = jt["Cid"].ToString(); MainPage.cityInfo.location = jt.GetValue("Location").ToString(); MainPage.cityInfo.province = jt.GetValue("Province").ToString(); MainPage.cityInfo.country = jt.GetValue("Country").ToString(); MainPage.cityInfo.timeZone = jt.GetValue("TimeZone").ToString(); url = $"https://developer.hdlcontrol.com/Weather/Weather/GetAirQualityAndWeather/?cid={MainPage.cityInfo.cid}"; responseString = null; responseString = Encoding.UTF8.GetString(webClient.DownloadData(url)); revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString); jt = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); MainPage.cityInfo.temperature = jt.GetValue("Temperature").ToString(); MainPage.cityInfo.humidity = jt.GetValue("Humidity").ToString(); MainPage.cityInfo.pm25 = jt.GetValue("Air_Quality").ToString(); MainPage.cityInfo.windLevel = jt.GetValue("WindLevel").ToString(); MainPage.cityInfo.weather = jt.GetValue("Weather").ToString(); break; } catch (Exception ex) { MainPage.Log($"get weather error : {ex.Message}"); } } System.Threading.Thread.Sleep(1000); } Shared.Application.RunOnMainThread(() => { try { HDL_ON.UI.HomePage.LoadEvent_RefreshAir(); } catch { } }); }); } #endregion #region 备份部分 /// /// 获取住宅备份列表 /// public Dictionary GetRegionLastBackupId() { //Dialog dialog = new Dialog(); //dialog.Show(); Dictionary backupList = new Dictionary(); Dictionary d = new Dictionary(); d.Add("LevelID", DB_ResidenceData.residenceData.residecenInfo.RegionID);// 199200); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/GetUserFolder", requestJson, true); if(revertObj == null || revertObj.ResponseData == null) { return new Dictionary(); } var jt = Newtonsoft.Json.JsonConvert.DeserializeObject>(revertObj.ResponseData.ToString()); foreach (var j in jt) { var folderId = (int)j.GetValue("FolderID"); var folderName = j.GetValue("FolderName").ToString(); backupList.Add(folderId, folderName); } return backupList; } /// /// 获取备份文件列表 /// public void GetBackupFileList(int levelId) { Dialog dialog = new Dialog(); dialog.Show(); Loading loading = new Loading(); dialog.AddChidren(loading); loading.Start(""); new System.Threading.Thread(() => { Dictionary d = new Dictionary(); d.Add("LevelID", levelId); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/UserBackupList", requestJson, true); var jt = Newtonsoft.Json.JsonConvert.DeserializeObject>(revertObj.ResponseData.ToString()); #region 恢复房间数据 GetBackupRoom(jt,loading); #endregion Application.RunOnMainThread(() => { loading.Hide(); dialog.Close(); }); }) { IsBackground = true }.Start(); } /// /// 下载图片 /// /// void DownloadImage(string fileName,int fId) { if (downImageList.Contains(fileName)) { return; } else { downDeviceList.Add(fileName); } System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(fileName, @"^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$", System.Text.RegularExpressions.RegexOptions.IgnoreCase); if (match.Success) { FileStream fs = null; try { Dictionary d = new Dictionary(); d.Add("Id", fId); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/BackupDetail", requestJson, true); var jsonBytes = Newtonsoft.Json.JsonConvert.SerializeObject(revertObj.ResponseData); var bytes = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonBytes); var byteStr = Encoding.UTF8.GetString(bytes); var ss = Newtonsoft.Json.JsonConvert.DeserializeObject(byteStr); var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/", fileName+".png"); fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); fs.Write(bytes, 0, bytes.Length); fs.Flush(); MainPage.Log($"download image {fileName}"); } catch (Exception ex) { MainPage.Log("FileUtiles Code 113:" + ex.ToString()); } finally { try { if (fs != null) { fs.Close(); } } catch (Exception ex) { MainPage.Log("FileUtils Code 121 :" + ex.ToString()); } } } } /// /// 获取备份房间数据 /// void GetBackupRoom(List jt, Loading loading) { var roomList = new Dictionary(); var roomsObject = jt.FindAll((room) => room.GetValue("FileName").ToString().StartsWith("Room_") && room.GetValue("FileName").ToString().Split('_').Length == 2); foreach(var pp in jt) { if(pp.GetValue("FileName").ToString().StartsWith("Equipment")) { MainPage.Log(pp.GetValue("FileName").ToString()); } } roomsObject = jt.FindAll((room) => room.GetValue("FileName").ToString().StartsWith("Equipment_OnePortBus")); foreach (var roomJObj in roomsObject) { Dictionary d = new Dictionary(); d.Add("Id", (int)roomJObj.GetValue("Id")); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/BackupDetail", requestJson, true); var jsonBytes = Newtonsoft.Json.JsonConvert.SerializeObject(revertObj.ResponseData); var byresss = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonBytes); var byteStr = Encoding.UTF8.GetString(byresss); var ss = Newtonsoft.Json.JsonConvert.DeserializeObject(byteStr); //var RootPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/"; //var filePath = Path.Combine(RootPath, ss.GetValue("BackGroundImage").ToString()) + ".png"; //var room1 = new Room() //{ // sid = Guid.NewGuid().ToString(), // name = ss.GetValue("Name").ToString(), // floorIndex = 1, // backgroundImage = "Classification/Room/Roombg.png", // //backgroundImage = ss.GetValue("BackGroundImage").ToString() == "Room/r1.png" ? "Classification/Room/Roombg.png" : filePath, //}; //DB_ResidenceData.residenceData.rooms.Add(room1); //roomList.Add(ss, room1); } var index = 1; foreach (var j in jt) { Application.RunOnMainThread(() => { int pro = (int)(index * 1.0 / jt.Count * 100); loading.Text = pro.ToString() + "%"; }); var fileName = j.GetValue("FileName").ToString(); var fileNameArrary = fileName.Split('_'); if (fileNameArrary.Length == 5 && fileName.Split('_')[0] == "Equipment") { GetBackupFile(fileName, (int)j.GetValue("Id"), roomList); } else { DownloadImage(fileName, (int)j.GetValue("Id")); } index++; } DB_ResidenceData.residenceData.SaveResidenceData(); } List downDeviceList = new List(); List downImageList = new List(); /// /// 获取备份设备文件 /// void GetBackupFile(string fileName, int fId, Dictionary dir) { var type = fileName.Split('_')[1]; if (downDeviceList.Contains(fileName)) { return; } else { downDeviceList.Add(fileName); } if (type == "LightSwitch" || type == "LightMixSwitch" || type == "LightDimming" || type == "LightDALI" || type == "LightMixDimming" || type == "LightLogic" || type == "LightRGB" || type == "AC" || type == "HVAC" || type == "ACPanel" || type == "ACInfrared" || type == "CurtainModel" || type == "CurtainRoller" || type == "CurtainTrietex") { MainPage.Log($"download file {fileName}"); Dictionary d = new Dictionary(); d.Add("Id", fId); var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); var revertObj = RequestHttps("https://developer.hdlcontrol.com/api/BackupDetail", requestJson, true); //var jt = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); var jsonBytes = Newtonsoft.Json.JsonConvert.SerializeObject(revertObj.ResponseData); var byresss = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonBytes); var byteStr = System.Text.Encoding.UTF8.GetString(byresss); var ss = Newtonsoft.Json.JsonConvert.DeserializeObject(byteStr); /// /// 功能ID /// /// "03010112345678901234560101230123AABB"; var buffer = Guid.NewGuid().ToByteArray(); string guid = ""; if (buffer != null) { for (int i = 0; i < buffer.Length; i++) { if (i > 7) break; guid += buffer[i].ToString("X2"); } } //var guid = BitConverter.ToUInt32(buffer, 16).ToString(); List roomIds = new List(); foreach (var d1 in dir) { var key = d1.Key; var des = key.GetValue("DeviceFilePathList"); if (Newtonsoft.Json.JsonConvert.DeserializeObject>(des.ToString()).Contains(fileName)) { roomIds.Add(d1.Value.sid); } } switch (type) { case "LightSwitch": case "LightMixSwitch": var light1 = DB_ResidenceData.residenceData.functionList.lights.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (light1 != null) { //light1.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.lights.Add(new Light() { sid = "030101" + guid + "0102010001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { attri="on_off", max=100,min = 0, value= new List { "on","off"} }, }, roomIdList = roomIds, bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; case "LightDimming": case "LightDALI": case "LightMixDimming": var light2 = DB_ResidenceData.residenceData.functionList.lights.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (light2 != null) { //light2.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.lights.Add(new Light() { sid = "030101" + guid + "0202020001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { attri="brightness", max=100,min = 0, value= new List { "up","down"} }, }, roomIdList = roomIds, //roomIdList = new List() { "0001" }, lastState = "20%", bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; case "LightLogic": case "LightRGB": var light3 = DB_ResidenceData.residenceData.functionList.lights.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (light3 != null) { //light3.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.lights.Add(new Light() { sid = "030101" + guid + "0202040001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { attri="brightness", max=100,min = 0, value= new List { "on","off"} }, new Trait { attri="color", max=100,min = 0, value= new List { "255", "255", "255" } }, }, roomIdList = roomIds, //roomIdList = new List() { roomSid }, bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; case "AC": case "HVAC": case "ACPanel": case "ACInfrared": var ac = DB_ResidenceData.residenceData.functionList.aCs.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (ac != null) { //ac.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.aCs.Add(new AC() { sid = "030101" + guid + "0204010001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { attri="on_off", max=1,min = 0, value= new List { "on","off"} }, new Trait { attri="mode", max = 2,min =0,value = new List{ "auto", "heat", "cool","dry" } }, new Trait { attri = "fan",max = 3,min =0,value = new List{ "low", "mid", "high" ,"auto"} }, new Trait { attri = "temperature", max = 32,min=16,value = new List{"up","down" } }, }, roomIdList = roomIds, //roomIdList = new List() { roomSid}, lastState = "制冷 中风 18°C", bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; //Entity. case "CurtainModel": var curtain1 = DB_ResidenceData.residenceData.functionList.curtains.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (curtain1 != null) { //curtain1.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.curtains.Add(new Curtain() { sid = "030101" + guid + "0203010001AABB", name = ss.GetValue("Name").ToString(), roomIdList = roomIds, //roomIdList = new List() { roomSid }, function = new List() { new Trait { attri="on_off", max=2,min = 0, value= new List { "on","off","stop"} }, },// "curtain", lastState = "开", bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; case "CurtainRoller": var curtain2 = DB_ResidenceData.residenceData.functionList.curtains.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (curtain2 != null) { //curtain2.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.curtains.Add(new Curtain() { sid = "030101" + guid + "0203040001AABB", name = ss.GetValue("Name").ToString(), roomIdList = roomIds, //roomIdList = new List() { roomSid }, function = new List() { new Trait { attri="on_off", max=100,min = 0, value= new List { "on","off","stop"} }, },// "rollingshutter", lastState = "20%", bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; case "CurtainTrietex": var curtain3 = DB_ResidenceData.residenceData.functionList.curtains.Find((obj) => obj.bus_Data.SubnetID == (byte)ss.GetValue("SubnetID") && obj.bus_Data.DeviceID == (byte)ss.GetValue("DeviceID") && obj.bus_Data.LoopID == (byte)ss.GetValue("LoopID")); if (curtain3 != null) { //curtain3.roomIdList.Add(roomSid); break; } DB_ResidenceData.residenceData.functionList.curtains.Add(new Curtain() { sid = "030101" + guid + "0203030001AABB", name = ss.GetValue("Name").ToString(), roomIdList = roomIds, //roomIdList = new List() { roomSid }, function = new List() { new Trait { attri="on_off", max=100,min = 0, value= new List { "on","off","stop"} }, }, lastState = "20%", bus_Data = new BusData { SubnetID = (byte)ss.GetValue("SubnetID"), DeviceID = (byte)ss.GetValue("DeviceID"), LoopID = (byte)ss.GetValue("LoopID"), }, }); break; //Entity.DB_ResidenceData.residenceData.functionList.floorHeatings.Add(new FloorHeating() //{ // sid = "12341212345678901234560704010004ABCD", // name = "地热", // roomIdList = new List() { "0001" }, // trait = new List() { // new Trait { attri="on_off", max=1,min = 0, value= new List { "on","off"} }, // new Trait { attri="mode", max = 2,min =0,value = new List{ "auto", "heat", "cool","dry" } }, // new Trait { attri = "temperature", max = 32,min=16,value = new List{"up","down" } }, // },// // lastState = "" //}); //Entity. //break; } } } #endregion } }