using System; using System.Collections.Generic; using HDL_ON.Common; using HDL_ON.DAL.Server; using HDL_ON.UI; using Shared; namespace HDL_ON.Entity { public class SceneApiPack { static SceneApiPack _ScenePack; public static SceneApiPack ScenePack { get { if(_ScenePack == null) { _ScenePack = new SceneApiPack(); } return _ScenePack; } } } public class Scene { public Scene() { sid = NewSid(); if (!DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull()) { gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId; } } /// /// 云端唯一ID /// public string userSceneId = null; /// /// 场景sid /// public string sid = ""; /// /// 场景名称 /// public string name = ""; /// /// 网关ID /// public string gatewayId = ""; /// /// 云端oss存储图片的路径 /// public string image = ""; /// /// 所属房间列表 /// public List roomIds = new List(); ///// ///// 所属房间列表 ///// //public List uids = new List(); /// /// 延时 /// public string delay = "0"; /// /// 场景的最后一次执行时间 /// public string LastExecutionTime = ""; /// /// 场景分组 /// public string group = "1"; /// /// 场景类型 /// public SceneType sceneType = SceneType.OrdinaryScenes; /// /// 收藏标记 /// public bool collect = false; /// /// 创建该场景的用户ID /// public string userId = ""; ///// ///// 场景背景 ///// public string ImagePath { get { if (string.IsNullOrEmpty(image)) { return "Intelligence/Gallery/scenebg1.png"; } else { return image; } } set { image = value; } } /// /// 场景功能列表 /// public List functions = new List(); /// /// 场景推送配置列表 /// public List pushConfigs = new List(); /// /// 生成逻辑sid方法 /// public string NewSid() { string sceneId = ""; try { string sOidBeginsWith = "000101";//厂商 + 通讯方式 DateTime dt = DateTime.Now; DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1)); long m = (long)((dt - startTime).TotalMilliseconds / 10); string sTimeSpan = "00000000"; byte[] arry = new byte[4]; arry[0] = (byte)(m & 0xFF); arry[1] = (byte)((m & 0xFF00) >> 8); arry[2] = (byte)((m & 0xFF0000) >> 16); arry[3] = (byte)((m >> 24) & 0xFF); sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2"); if (sTimeSpan.Length >= 8) { sTimeSpan = sTimeSpan.Substring(0, 8); } else { sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8); //sTimeSpan = "00000000"; } sceneId = sOidBeginsWith + sTimeSpan; sceneId += "0A"; sceneId += "0A01"; int maxId = 1; for (int i = 0; i < FunctionList.List.scenes.Count; i++) { string s = FunctionList.List.scenes[i].sid.Substring(20, 4); int iThisSceneId = Convert.ToInt16(s, 16); if (iThisSceneId > maxId) maxId = iThisSceneId; } sceneId += (maxId + 1).ToString("X4"); sceneId += "0000"; } catch { return sceneId; } return sceneId; } /// /// 获取设备添加到房间的房间名称 /// /// public string GetRoomListName() { string roomNameList = ""; foreach (var roomId in roomIds) { var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId); if (findRoom == null) { continue; } if (roomNameList != "") { roomNameList += ","; } roomNameList += findRoom.floorName + findRoom.roomName; } if (roomNameList == "" ) { roomNameList = Shared.Language.StringByID(StringId.WholeZone); } return roomNameList; } /// /// 数据存储文件名 /// [Newtonsoft.Json.JsonIgnore] public string savePath { get { return "SceneData_" + sid; } } /// /// 场景执行\倒计时 /// /// public void SceneCountDown(Button btnShowDelay) { //场景正在倒计时执行中 if (LastExecutionTime != "" && Convert.ToDouble(LastExecutionTime) + Convert.ToDouble(delay) > Convert.ToDouble(Utlis.GetTimestamp(false))) { int time = 0; int.TryParse(Convert.ToInt32( Convert.ToDouble(LastExecutionTime) + Convert.ToDouble(delay) - Convert.ToDouble(Utlis.GetTimestamp(false)) ).ToString(), out time); if (time > 0) { new System.Threading.Thread(() => { if (time > 0) { while (time > 0) { Application.RunOnMainThread(() => { if (time > 60) { btnShowDelay.Text = (time / 60).ToString() + "min" + time % 60 + "s"; } else { btnShowDelay.Text = time.ToString() + "s"; } }); System.Threading.Thread.Sleep(1000); time--; } Application.RunOnMainThread(() => { btnShowDelay.Text = ""; }); } }) { IsBackground = true, Priority = System.Threading.ThreadPriority.BelowNormal }.Start(); } } } /// /// 保存场景数据文件 /// public void SaveSceneFile() { var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); FileUtlis.Files.WriteFileByBytes(savePath, ssd); MainPage.Log($"Save Scene Data : {savePath}"); } /// /// 收藏场景 /// /// public void CollectScene() { var result = StateCode.SUCCESS; new System.Threading.Thread(() => { if (collect) { result = ApiUtlis.Ins.HttpRequest.CollectScene(userSceneId); } else { result = ApiUtlis.Ins.HttpRequest.CancelCollectScene(userSceneId); } //提示错误 if (result != StateCode.SUCCESS) { Application.RunOnMainThread(() => { collect = !collect; IMessageCommon.Current.ShowErrorInfoAlter(result); }); } }) { IsBackground = true }.Start(); } /// /// 编辑场景 /// public string EditScene() { var pm = new HttpServerRequest(); var revPack = pm.EditScene(this); if (revPack.Code == StateCode.SUCCESS) { var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString()); var tempScene = scenes.Find((obj) => obj.sid == sid); if (tempScene != null) { var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene)); Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); } } return revPack.Code; } /// /// 修改场景 /// public string UpdateScene() { var pm = new HttpServerRequest(); var revPack = pm.EditScene(this); if (revPack.Code == StateCode.SUCCESS) { var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString()); var tempScene = scenes.Find((obj) => obj.sid == sid); if (tempScene != null) { var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene)); Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); } } return revPack.Code; } /// /// 延时显示的文本 /// public string GetDelayText() { var delayInt = 0; int.TryParse(delay,out delayInt); if(delayInt == 0) { return Language.StringByID(StringId.NoDelay); } string text = (delayInt / 60)+Language.StringByID(StringId.m)+(delayInt % 60)+Language.StringByID(StringId.s); return text; switch (delay) { case "0": text = Language.StringByID(StringId.NoDelay); break; case "30": text = "30s"; break; case "60": text = "1min"; break; case "120": text = "2min"; break; case "300": text = "5min"; break; } return text; } /// /// 云端数据创建的时间 /// public string createTime = ""; /// /// 云端数据修改的最后时间 /// public string modifyTime = ""; } /// /// 场景功能对象 /// public class SceneFunction { public string sid = ""; public List status = new List(); /// /// 功能延时 /// public string delay = "0"; Function _localFunction; /// /// 本地对应的功能 /// [Newtonsoft.Json.JsonIgnore] public Function localFunction { get { if (_localFunction == null) { _localFunction = ConvertFunctionObject(); } return _localFunction; } } /// /// 转换成功能对象 /// /// Function ConvertFunctionObject() { var localFunction = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.sid == sid); return localFunction; } /// /// 解析场景功能数据 /// /// public string GetFunctionScnenInfo() { var sceneFunctionInfo = ""; foreach (var sfs in status) { if (sfs.key == FunctionAttributeKey.OnOff) { if (sfs.value == "off") return Language.StringByID(StringId.Close); } } sceneFunctionInfo += Language.StringByID(StringId.Open) + " "; var modeState = status.Find((obj) => obj.key == FunctionAttributeKey.Mode); var tempState = status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp); var fanState = status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed); if (modeState != null) { sceneFunctionInfo += modeState.GetValueText() + " "; } if (tempState != null) { sceneFunctionInfo += tempState.GetValueText() + " "; sceneFunctionInfo += tempState.GetUintString(); } if (fanState != null) { sceneFunctionInfo += fanState.GetValueText() + " "; } var briState = status.Find((obj) => obj.key == FunctionAttributeKey.Brightness); if (briState != null) { sceneFunctionInfo += briState.value + "%"; } var perState = status.Find((obj) => obj.key == FunctionAttributeKey.Percent); if (perState != null) { sceneFunctionInfo += perState.value + "%"; } return sceneFunctionInfo; } } /// /// 场景功能属性 /// public class SceneFunctionStatus { public string key = ""; public string value = ""; /// /// 属性名称显示文本 /// 中英文显示 /// public string GetNameText() { string text = ""; switch (key) { case FunctionAttributeKey.OnOff: text = Language.StringByID(StringId.OnOff); break; case FunctionAttributeKey.Brightness: text = Language.StringByID(StringId.Brightness); break; case FunctionAttributeKey.RGB: text = Language.StringByID(StringId.ColorValue); break; case FunctionAttributeKey.Mode: text = Language.StringByID(StringId.Mode); break; case FunctionAttributeKey.FanSpeed: text = Language.StringByID(StringId.FanSpeed); break; case FunctionAttributeKey.SetTemp: text = Language.StringByID(StringId.Temp); break; case FunctionAttributeKey.RoomTemp: text = Language.StringByID(StringId.IndoorTemp); break; case FunctionAttributeKey.Delay: text = Language.StringByID(StringId.Delay); break; case FunctionAttributeKey.CCT: text = "CCT"; break; case FunctionAttributeKey.Percent: text = Language.StringByID(StringId.PercentAdjustment); break; case FunctionAttributeKey.FadeTime: text = Language.StringByID(StringId.FadeSpeed); break; } return text; } /// /// 属性值单位 /// public string GetUintString() { var us = ""; switch (key) { case FunctionAttributeKey.SetTemp: case FunctionAttributeKey.RoomTemp: us = "°C"; break; case FunctionAttributeKey.Percent: case FunctionAttributeKey.Brightness: us = "%"; break; } return us; } /// /// 获取指定属性的显示文本 /// 中英文显示 /// public string GetValueText() { string text = ""; switch (key) { case FunctionAttributeKey.OnOff: text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF); break; case FunctionAttributeKey.SetTemp: case FunctionAttributeKey.RoomTemp: case FunctionAttributeKey.Brightness: case FunctionAttributeKey.Percent: if (value == "") { value = "0"; } text = value; break; case FunctionAttributeKey.Mode: switch (value) { //----空调 case "auto": text = Language.StringByID(StringId.Auto); break; case "cool": text = Language.StringByID(StringId.Cool); break; case "heat": text = Language.StringByID(StringId.Heat); break; case "dry": text = Language.StringByID(StringId.Dry); break; case "fan": text = Language.StringByID(StringId.AirSupply); break; //-----地热 case "day": text = Language.StringByID(StringId.Day); break; case "night": text = Language.StringByID(StringId.Night); break; case "away": text = Language.StringByID(StringId.Away); break; case "normal": text = Language.StringByID(StringId.Normal); break; case "timer": text = Language.StringByID(StringId.Timer); break; } break; case FunctionAttributeKey.FanSpeed: switch (value) { case "high": text = Language.StringByID(StringId.HighWindSpeed); break; case "medium": text = Language.StringByID(StringId.MiddleWindSpeed); break; case "low": text = Language.StringByID(StringId.LowWindSpeed); break; case "auto": text = Language.StringByID(StringId.Auto); break; default: text = "low"; break; } break; case "high": text = Language.StringByID(StringId.HighWindSpeed); break; case "medium": text = Language.StringByID(StringId.MiddleWindSpeed); break; case "low": text = Language.StringByID(StringId.LowWindSpeed); break; case "auto": text = Language.StringByID(StringId.Auto); break; } return text; } } /// /// 场景推送配置 /// public class ScenePushConfig { /// /// 推送方式 /// public string pushMethod = ""; /// /// 推送内容 /// public string pushContent = ""; /// /// 推送目标集合 /// public List pushTarget = new List(); } }