using System; using System.Collections.Generic; using HDL_ON.DAL; namespace HDL_ON.Entity { public class DB_ResidenceData { public DB_ResidenceData() { } /// /// 当前选择的住宅索引 /// public int CurReginIndex = 0; /// /// 住宅基础信息 /// public RegionInfoRes residecenInfo { get { return MainPage.LoginUser.regionList[CurReginIndex]; } } /// /// 楼层列表 /// public List floors = new List(); /// /// 房间列表 /// public List rooms = new List(); /// /// 功能列表 /// public FunctionList functionList = new FunctionList(); /// /// 功能类型列表 /// public List functionTypeList = new List(); static DB_ResidenceData instance; public static DB_ResidenceData residenceData { get { if (instance == null) { try { var residenceDataBytes = FileUtils.ReadFile("DB_ResidenceData"); var userConfigString = CommonPage.MyEncodingUTF8.GetString(residenceDataBytes); DB_ResidenceData temp = null; if (!string.IsNullOrEmpty(userConfigString)) { temp = Newtonsoft.Json.JsonConvert.DeserializeObject(userConfigString); } if (temp == null) { instance = new DB_ResidenceData { }; } else { instance = temp; } if (instance.functionTypeList.Count == 0) { instance.functionTypeList.AddRange(new List { ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain, ShowFunction.FloorHeating,ShowFunction.DoorLock, ShowFunction.Electric,ShowFunction.EnergyMonitoring, ShowFunction.Environmental, ShowFunction.FreshAir,ShowFunction.Music, ShowFunction.Panel,ShowFunction.SecurityMonitoring, ShowFunction.Sensor,ShowFunction.VideoIntercom }); } #if DEBUG if (DB_ResidenceData.residenceData.functionList.scenes.Count == 0) { var s0 = new Scene() { sid = "12341212345678901234560A00010001ABCD", name = "全关场景", sceneType = SceneType.OrdinaryScenes, roomIdList = new List() { "0001" }, bus_SceneData = new Dictionary(), }; s0.bus_SceneData.Add("12341212345678901234560202020002ABCD", new byte[] { 1, 0, 0, 0 }); s0.bus_SceneData.Add("12341212345678901234560202010005ABCD", new byte[] { 1, 0, 0, 0 }); s0.bus_SceneData.Add("12341212345678901234560202040006ABCD", new byte[] { 1, 0, 254, 0, 0, 3, 255, 0, 0, 0, 0 }); s0.bus_SceneData.Add("12341212345678901234560604010001ABCD", new byte[] { 1, 0, 32, 32, 32, 32, 32, 0, 0, 0, 1, 28, 0 }); s0.bus_SceneData.Add("12341212345678901234560303010003ABCD", new byte[] { 1, 2 }); DB_ResidenceData.residenceData.functionList.scenes.Add(s0); var s1 = new Scene() { sid = "12341212345678901234560A00010002ABCD", name = "全开场景", sceneType = SceneType.OrdinaryScenes, roomIdList = new List() { "0001" }, bus_SceneData = new Dictionary(), }; s1.bus_SceneData.Add("12341212345678901234560202020002ABCD", new byte[] { 1, 100, 0, 0 }); s1.bus_SceneData.Add("12341212345678901234560202010005ABCD", new byte[] { 1, 100, 0, 0 }); s1.bus_SceneData.Add("12341212345678901234560202040006ABCD", new byte[] { 1, 100, 254, 0, 0, 3, 255, 0, 0, 0, 0 }); s1.bus_SceneData.Add("12341212345678901234560604010001ABCD", new byte[] { 1, 0, 32, 32, 32, 32, 32, 0, 1, 0, 1, 28, 0 }); s1.bus_SceneData.Add("12341212345678901234560303010003ABCD", new byte[] { 1, 1 }); DB_ResidenceData.residenceData.functionList.scenes.Add(s1); var s2 = new Scene() { sid = "12341212345678901234560A00010004ABCD", name = "电影场景", sceneType = SceneType.MovieScene, roomIdList = new List() { "0001" }, }; DB_ResidenceData.residenceData.functionList.scenes.Add(s2); var s3 = new Scene() { sid = "12341212345678901234560A00010005ABCD", name = "电影场景2", sceneType = SceneType.MovieScene, roomIdList = new List() { "0001" }, }; DB_ResidenceData.residenceData.functionList.scenes.Add(s3); } if (instance.rooms.Count == 0) { //-------------------- var r111 = new Room() { sid = "0001", name = "Room-1", floorIndex = 1, backgroundImage = "Classification/Room/Roombg.png" }; instance.rooms.Add(r111); instance.functionList.aCs.Add(new AC() { sid = "12341212345678901234560604010001ABCD", name = "空调", 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 = "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 = new List() { "0001" }, lastState = "制冷 中风 18°C", bus_Data = new BusData { SubnetID = 42, DeviceID = 8, LoopID = 1, }, }); instance.functionList.lights.Add(new Light() { sid = "12341212345678901234560202020002ABCD", name = "调光灯", trait = new List() { new Trait { attri="brightness", max=100,min = 0, value= new List { "up","down"} }, },//"brightness", roomIdList = new List() { "0001" }, lastState = "20%", bus_Data = new BusData { SubnetID = 111, DeviceID = 2, LoopID = 1, }, }); instance.functionList.curtains.Add(new Curtain() { sid = "12341212345678901234560303010003ABCD", name = "窗帘模块", roomIdList = new List() { "0001" }, trait = new List() { new Trait { attri="on_off", max=2,min = 0, value= new List { "on","off","stop"} }, },// "curtain", lastState = "开", bus_Data = new BusData { SubnetID = 42, DeviceID = 7, LoopID = 1, }, }); instance.functionList.curtains.Add(new Curtain() { sid = "12341212345678901234560303030011ABCD", name = "开合帘", roomIdList = new List() { "0001" }, trait = new List() { new Trait { attri="on_off", max=100,min = 0, value= new List { "on","off","stop"} }, },//"curtaintype", lastState = "20%", bus_Data = new BusData { SubnetID = 42, DeviceID = 7, LoopID = 11, }, }); instance.functionList.curtains.Add(new Curtain() { sid = "12341212345678901234560503040012ABCD", name = "卷帘", roomIdList = new List() { "0001" }, trait = 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 = 42, DeviceID = 7, LoopID = 12, }, }); instance.functionList.floorHeatings.Add(new FloorHeating() { sid = "12341212345678901234560404020004ABCD", 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 = "" }); instance.functionList.lights.Add(new Light() { sid = "12341212345678901234560202010005ABCD", name = "吊灯", trait = new List() { new Trait { attri="on_off", max=100,min = 0, value= new List { "on","off"} }, },//"on_off", roomIdList = new List() { "0001" }, bus_Data = new BusData { SubnetID = 42, DeviceID = 6, LoopID = 1, }, }); instance.functionList.lights.Add(new Light() { sid = "12341212345678901234560202040006ABCD", name = "RGB灯", trait = 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" } }, },//"brightness,color", roomIdList = new List() { "0001" }, bus_Data = new BusData { SubnetID = 42, DeviceID = 4, LoopID = 1, }, }); instance.SaveResidenceData(); } #endif //}) //{ IsBackground = true }.Start(); } catch (Exception ex) { MainPage.Log($"住宅数据初始化失败:{ex.Message}"); } instance.residenceImage = "Classification/Room/Roombg.png"; //初始化住宅功能数据 InitRoomFunction(); } return instance; } } /// /// 住宅图片 /// public string residenceImage; /// /// 住宅数据是否存在变化 /// bool hasChange = false; /// /// 保存住宅数据 /// public void SaveResidenceData() { //if (hasChange) // return; //hasChange = true; //new System.Threading.Thread(() => //{ // System.Threading.Thread.Sleep(5000); if (this == null|| this.residecenInfo==null) return; var ssd = CommonPage.MyEncodingUTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); FileUtils.WriteFileByBytes("DB_ResidenceData", ssd); MainPage.Log("Save DB_ResidenceData"); // hasChange = false; //}) //{ IsBackground = true }.Start(); } /// /// 刷新住宅里面的搜索设备状态 /// public void RefreshResidenceFunctionStatus() { new System.Threading.Thread(() => { try { foreach (var function in functionList.functions) { System.Threading.Thread.Sleep(100); if (function.bus_Data != null) { switch (function.functionCategory) { case FunctionCategory.Light: Control.Send(CommandType_A.read, function); break; case FunctionCategory.Curtain: Control.Send(CommandType_A.read, function); break; case FunctionCategory.Thermostat: Control.Send(CommandType_A.read, function); break; } } else { } } } catch (Exception ex) { MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}"); } }) { IsBackground = true }.Start(); } /// /// 初始化每个房间的功能数据 /// public static void InitRoomFunction() { new System.Threading.Thread(() => { try { //初始化住宅功能数据 instance.functionList.GetAllFunction(); //初始化住宅所有房间功能数据 foreach (var r in instance.rooms) { r.functions.Clear(); foreach (var func in instance.functionList.functions) { MainPage.Log($"init room function sid {func.functionCategory.ToString()}:{r.sid}"); if (func.roomIdList.Contains(r.sid)) { r.functions.Add(func); } } } }catch(Exception ex) { MainPage.Log($"Init room function error : {ex.Message}"); } }) { IsBackground = true }.Start(); } } }