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); */ string severAddress = "https://global.hdlcontrol.com/ProposedProductionApi"; public HttpServerRequest() { } /// /// 获取传感器历史数据 /// /// /// /// /// /// /// /// /// /// 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.AccountAlreadyUse); break; case "Self:Net_Error": result = Language.StringByID(StringId.NetworkAnomaly); break; } return result; } #region ■ 通用请求接口_______________________ /// /// 根椐用户账号获取注册区域 免登录 // 检测账号是否注册也用这个接口 /// /// /// public ResponsePackNew GetRegionByAccount(string account) { var requestJson = HttpUtil.GetSignRequestJson(new RegionByAccountObj() { account = account }); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_GetRegionByAccount, requestJson); } /// /// 刷新Token /// /// public bool RefreshToken() { var requestJson = HttpUtil.GetSignRequestJson(new RefreshTokenObj() { refreshToken = MainPage.LoginUser.refreshToken, }); var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_Login, requestJson); if (revertObj.Code.ToUpper() == StateCode.SUCCESS) { var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.Data.ToString()); MainPage.LoginUser.loginTokenString = revertData.headerPrefix + revertData.accessToken; MainPage.LoginUser.lastTime = DateTime.Now; MainPage.LoginUser.SaveUserInfo(); return true; } return false; } #endregion #region 注册、登录部分 /// /// 获取请求提交的语言参数 /// public string GetPostLanguageType() { return Language.CurrentLanguage == "Chinese" ? LanguageTypeEnum.CHINESE.ToString() : LanguageTypeEnum.ENGLISH.ToString(); } /// /// 通用 发送验证码方法 /// /// 1:注册 2:找回密码 3:绑定4:验证码登陆 5:敏感数据 /// 邮箱或者手机号 /// 是否手机 /// 手机国家区号 /// public ResponsePackNew VerificationCodeSend(VerifyType verifyType, string account, bool isPhone = false, string phoneZoneCode = "86") { var requestObj = new VerifyCodeSendObj() { verifyType = (int)verifyType, languageType = GetPostLanguageType() }; // 是否是手机 if (isPhone) { requestObj.phone = account; requestObj.phonePrefix = phoneZoneCode; } else { requestObj.mail = account; } // 超时时间设置为20秒,应该测试海外服务器发送验证码响应时间很久 var requestJson = HttpUtil.GetSignRequestJson(requestObj); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Verification_Send, requestJson, "", "", HttpUtil.TIME_OUT_LONG); } /// /// 账号登录-使用密码 /// /// 账号 /// 密码 /// public ResponsePackNew LoginByPassword(string account, string password) { var requestJson = HttpUtil.GetSignRequestJson(new LoginObj() { account = account, loginPwd = password }); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Login, requestJson); } /// /// 验证码登录 /// /// 账号 /// 验证码 /// public ResponsePackNew LoginValidCode(string account, string vCode) { var requestJson = HttpUtil.GetSignRequestJson(new LoginObj() { account = account, verifyCode = vCode, grantType = "verify" }); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Login, requestJson); } /// /// 验证短信或者邮箱验证码,之后注册 /// /// 邮箱或者手机号 /// 密码 /// 验证码 /// 是否手机 /// public ResponsePackNew ValidataCodeAndRegister(string account, string password, string code, bool isPhone = false) { var requestObj = new RegisterObj() { loginPwd = password, verifyCode = code, memberName = account }; if (isPhone) { requestObj.memberPhone = account; } else { requestObj.memberEmail = account; } var requestJson = HttpUtil.GetSignRequestJson(requestObj); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_Register, requestJson); } /// /// 忘记密码,重置密码 /// /// 邮箱或者手机号 /// 新密码 /// 验证码 /// 是否手机账号 /// public ResponsePackNew ForgetPassword(string account, string password, string vCode, bool isPhone) { var requestObj = new ForgetPwdObj() { verifyCode = vCode, loginPwd = password }; if (isPhone) { //手机忘记密码 requestObj.memberPhone = account; } else { //邮箱忘记密码 requestObj.memberEmail = account; } var requestJson = HttpUtil.GetSignRequestJson(requestObj); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_ForgetPwd, requestJson); } ///// ///// 获取登录验证码 ///// //public ResponsePack GetLoginVerCode(string account) //{ // string jsonString = "{" + // "\"Account\":" + "\"" + account + "\"" + "," + // "\"AreaCode\":" + "86" + // "}"; // return RequestHttps($"{severAddress}/ZigbeeUsers/LoginSendVerCode", jsonString, false); //} /// /// 验证验证码 /// /// /// /// public ResponsePackNew ValidatorCode(VerifyType verifyType, string account, string code, bool isPhone) { var requestObj = new VerifyCodeCheckObj() { verifyCode = code, verifyType = (int)verifyType }; if (isPhone) { //手机 requestObj.phone = account; } else { //邮箱 requestObj.mail = account; } var requestJson = HttpUtil.GetSignRequestJson(requestObj); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Verification_Check, requestJson); } /// /// 重设密码 /// /// 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(bool bGetHeadImage = true) { var requestJson = HttpUtil.GetSignRequestJson(new NullObj()); var resultObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_GetMemberInfo, requestJson); if (resultObj.Code == StateCode.SUCCESS) { var info = Newtonsoft.Json.JsonConvert.DeserializeObject(resultObj.Data.ToString()); MainPage.LoginUser.userEmailInfo = info.memberEmail; MainPage.LoginUser.userMobileInfo = info.memberPhone; MainPage.LoginUser.userName = info.memberName; MainPage.LoginUser.areaCode = info.memberPhonePrefix; //是否需要获取头像 if (bGetHeadImage) { var headImageBytes = DownHeadImage(); if (headImageBytes != null) { MainPage.LoginUser.headImagePageBytes = headImageBytes; FileStream fs = null; try { 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(); } } } } MainPage.LoginUser.SaveUserInfo(); MainPage.Log("获取用户信息成功。"); } // Dictionary d = new Dictionary(); //var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(d); //var revertObj = RequestHttps($"{severAddress}/ZigbeeUsers/GetAccountInfo", requestJson, true); //if (revertObj.StateCode.ToUpper() == StateCode.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 byte[] DownHeadImage() { return HttpUtil.RequestHttpsDownload(NewAPI.API_POST_Head_Down, null); } /// /// 更新用户昵称 /// /// /// public ResponsePackNew EditUserName(string userName) { var requestJson = HttpUtil.GetSignRequestJson(new UpdateMemberNameRes() { memberName = userName }); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_UpdateMemberInfo, requestJson); } /// /// 更新用户头像 /// /// /// 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); var revertObj = HttpUtil.RequestHttpsUpload(RestSharp.Method.POST, NewAPI.API_POST_Head_Upload, bytes); return revertObj.Code; } /// /// 更改绑定账户的邮箱或者手机号 /// 2020-11-16 待修改 /// /// /// /// /// public string BindAccount(string account, string code = "", bool isPhone = false) { var requestObj = new BindWithAccountObj() { verifyCode = code}; if (isPhone) { //手机 requestObj.memberPhone = account; } else { //邮箱 requestObj.memberEmail = account; } var requestJson = HttpUtil.GetSignRequestJson(requestObj); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_BindWithAccount, requestJson).Code; } /// /// 解绑手机或者邮箱 /// /// /// public string UnBindAccount(bool isPhone) { var requestObj = new UnBindAccountObj() { unBindLabel = isPhone ? "PHONE": "EMAIL" }; var requestJson = HttpUtil.GetSignRequestJson(requestObj); return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Member_UnbindWithAccount, requestJson).Code; } #endregion #region 住宅部分 /// /// 获取住宅列表 /// public string GetHomePager(HomeTypeEnum homeType = HomeTypeEnum.ALL) { var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new GetHomeListObj() { homeType = homeType.ToString() }); var resultObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_Gethomepager, requestJson); if(resultObj.Code == StateCode.SUCCESS) { var homeList = Newtonsoft.Json.JsonConvert.DeserializeObject>(resultObj.Data.ToString()); if (homeList == null || homeList.Count == 0) { } else { MainPage.LoginUser.regionList = new List(); foreach (var mHome in homeList) { var home = new RegionInfoRes() { RegionID = mHome.Id, Name = mHome.homeName, IsOthreShare = mHome.IsOtherShare, accountType = mHome.accountType, isRemoteControl = mHome.isRemoteControl, longitude = mHome.longitude, latitude = mHome.latitude, deliverstatus = mHome.deliverstatus, homeType = mHome.homeType, regionUrl = mHome.regionUrl, emqUrl = mHome.emqUrl, homeRegionName = mHome.homeRegionName, homeRegionId = mHome.homeRegionId, Address = mHome.homeAddress, }; if (home.IsOthreShare) { continue; } 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 resultObj.Code; //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() == StateCode.SUCCESS_CODE) //{ // 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"), // homeGateways = Newtonsoft.Json.JsonConvert.DeserializeObject>(homeJsonStr.GetValue("HomeGateways").ToString()), // }; // if (home.IsOthreShare) // { // continue; // } // 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 ResponsePackNew GetResidenceMemberAccount() { var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(new HomeIdObj() { homeId = DB_ResidenceData.residenceData.residecenInfo.RegionID }); var replaceToken = MainPage.LoginUser.loginTokenString; //如果当前所分享住宅和为管理员,替换为主人token //待处理... return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Child_FindAll, requestJson, DB_ResidenceData.residenceData.residecenInfo.regionUrl, replaceToken); } /// /// 删除住宅下的成员账号 /// /// public ResponsePackNew DeleteResidenceMemberAccount(ResidenceMemberInfo subaccount) { var requestObj = new ChildDeleteObj() { childAccountId = subaccount.childAccountId, homeId = subaccount.homeId }; var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj); var replaceToken = MainPage.LoginUser.loginTokenString; //如果当前所分享住宅和为管理员,替换为主人token //待处理... return HttpUtil.RequestHttpsPost(NewAPI.API_POST_Child_Delete, requestJson, DB_ResidenceData.residenceData.residecenInfo.regionUrl, replaceToken); } /// /// 修改子账号昵称 /// /// /// /// 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 mqtt远程连接(旧) /// /// 请求Mqtt数据 /// /// 请求的参数. public ResponsePack RequestMqttInfo(string dataStringJson) { ResponsePack revertObj = null; var webClient = new WebClient(); #region webClient.Headers.Add("CONTENT-TYPE", "application/json"); var url = "https://global.hdlcontrol.com/ProposedProductionApi/EmqMqtt/GetConnMqttInfo"; byte[] bytes = null; try { bytes = webClient.UploadData(url, Encoding.UTF8.GetBytes(dataStringJson)); } catch (Exception ex) { Console.WriteLine(ex.Message); revertObj = new ResponsePack() { StateCode = "Net_Error" }; } string responseString = null; if (bytes != null) { responseString = Encoding.UTF8.GetString(bytes); } if (responseString != null) { try { revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } return revertObj; #endregion } #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; } /* 2020-09-01 弃用 恢复旧数据功能在bus软件上实现 /// /// 获取备份文件列表 /// 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.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.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.functionList.lights.Add(new Light() { sid = "030101" + guid + "0102010001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { name="on_off", max=100,min = 0, value_key= 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.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.functionList.lights.Add(new Light() { sid = "030101" + guid + "0202020001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { name="brightness", max=100,min = 0, value_key= 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.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.functionList.lights.Add(new Light() { sid = "030101" + guid + "0202040001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { name="brightness", max=100,min = 0, value_key= new List { "on","off"} }, new Trait { name="color", max=100,min = 0, value_key= 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.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.functionList.aCs.Add(new AC() { sid = "030101" + guid + "0204010001AABB", name = ss.GetValue("Name").ToString(), function = new List() { new Trait { name="on_off", max=1,min = 0, value_key= new List { "on","off"} }, new Trait { name="mode", max = 2,min =0,value_key = new List{ "auto", "heat", "cool","dry" } }, new Trait { name = "fan",max = 3,min =0,value_key = new List{ "low", "mid", "high" ,"auto"} }, new Trait { name = "temperature", max = 32,min=16,value_key = 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.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.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 { name="on_off", max=2,min = 0, value_key= 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.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.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 { name="on_off", max=100,min = 0, value_key= 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.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.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 { name="on_off", max=100,min = 0, value_key= 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.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 } }