using System; using System.Collections.Generic; using HDL_ON.DAL; namespace HDL_ON.Entity { public class DB_ResidenceData { public DB_ResidenceData() { } /// /// 0:A协议网关 /// 1:bus网关 /// 2:knx网关 /// public int GatewayType = 0; /// /// 住宅基础信息 /// public RegionInfoRes residecenInfo { get { return MainPage.LoginUser.regionList.Find((obj) => obj.RegionID == CurReginID); } } /// /// 当前选择的住宅索引 /// public string CurReginID = ""; /// /// 楼层列表 /// 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 = "12341212345678901234560A0A010001ABCD", name = "全关场景", sceneType = SceneType.OrdinaryScenes, roomIdList = new List() { "0001" }, bus_SceneData = new Dictionary(), }; s0.bus_SceneData.Add("12341212345678901234560202010002ABCD", new byte[] { 1, 0, 0, 0 }); s0.bus_SceneData.Add("12341212345678901234560202020005ABCD", 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 = "12341212345678901234560A0A00010002ABCD", name = "全开场景", sceneType = SceneType.OrdinaryScenes, roomIdList = new List() { "0001" }, bus_SceneData = new Dictionary(), }; s1.bus_SceneData.Add("12341212345678901234560202010002ABCD", new byte[] { 1, 100, 0, 0 }); s1.bus_SceneData.Add("12341212345678901234560202020005ABCD", 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 = "12341212345678901234560A0A010004ABCD", name = "电影场景", sceneType = SceneType.MovieScene, roomIdList = new List() { "0001" }, }; DB_ResidenceData.residenceData.functionList.scenes.Add(s2); var s3 = new Scene() { sid = "12341212345678901234560A0A010005ABCD", 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", floorId = "", backgroundImage = "Classification/Room/Roombg.png" }; instance.rooms.Add(r111); instance.floors.Add(new Floor() { sid = "", name = "1 F" }); instance.functionList.aCs.Add(new AC() { sid = "12341212345678901234560604010001ABCD", name = "空调", 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", "medium", "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 = "12341212345678901234560202010002ABCD", name = "调光灯", function = 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" }, 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 = 42, DeviceID = 7, LoopID = 1, }, }); instance.functionList.curtains.Add(new Curtain() { sid = "12341212345678901234560303030011ABCD", name = "开合帘", roomIdList = new List() { "0001" }, function = 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" }, function = new List() { new Trait { attri="on_off", max=2,min = 0, value= new List { "on","off","stop"} }, new Trait { attri="openLevel", max=100,min = 0, value= new List { "percent" } }, },// "rollingshutter", lastState = "20%", bus_Data = new BusData { SubnetID = 42, DeviceID = 17, LoopID = 1, }, }); instance.functionList.floorHeatings.Add(new FloorHeating() { sid = "12341212345678901234560404020004ABCD", name = "地热", roomIdList = new List() { "0001" }, 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{ "ordinary", "day", "night","timer","away" } }, new Trait { attri = "temperature", max = 32,min=16,value = new List{"up","down" } }, },// lastState = "自动 25°C", bus_Data = new BusData { SubnetID = 111, DeviceID = 12, LoopID = 1 } }); instance.functionList.lights.Add(new Light() { sid = "12341212345678901234560202020005ABCD", name = "吊灯", function = 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灯", 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" } }, },//"brightness,color", roomIdList = new List() { "0001" }, bus_Data = new BusData { SubnetID = 42, DeviceID = 4, LoopID = 1, }, }); instance.functionList.fans.Add(new Fan() { sid = "12341212345678901234561010020006ABCD", name = "风扇", function = new List() { new Trait { attri="on_off", max=1,min = 0, value= new List { "on","off"} }, new Trait { attri="openLevel", max=7,min = 0, value= new List { "percent" } }, },//"brightness,color", roomIdList = new List() { "0001" }, bus_Data = new BusData { SubnetID = 142, DeviceID = 4, LoopID = 11, }, }); instance.functionList.tVs.Add(new TV() { sid = "12341212345678901234561010030006ABCD", name = "电视", function = new List() { new Trait { attri="on_off", max=1,min = 0, value= new List { "on","off"} }, }, roomIdList = new List() { "0001" }, bus_Data = new BusData { SubnetID = 142, DeviceID = 4, LoopID = 111, }, }); instance.functionList.switchSockets.Add(new SwitchSocket() { sid = "12341212345678901234560101020006ABCD", name = "插座", function = new List() { new Trait { attri="on_off", max=1,min = 0, value= new List { "on","off"} }, },//"brightness,color", roomIdList = new List() { "0001" }, bus_Data = new BusData { SubnetID = 42, DeviceID = 6, LoopID = 1, }, }); instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() { sid = "1234121234567890123456100B010006ABCD", name = "PM1.0", roomIdList = new List() { "0001" }, function = new List() { new Trait { attri="values", max=1,min = 0, value= new List { "135"} }, }, bus_Data = new BusData { SubnetID = 111, DeviceID = 15, LoopID = 1, }, });; instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() { sid = "1234121234567890123456100B060006ABCD", name = "PM2.5", roomIdList = new List() { "0001" }, function = new List() { new Trait { attri="values", max=1,min = 0, value= new List { "22"} }, }, bus_Data = new BusData { SubnetID = 111, DeviceID = 15, LoopID = 1, }, }); //instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() //{ // sid = "1234121234567890123456100B030006ABCD", // name = "噪音", // roomIdList = new List() { "0001" }, // propertList = new List() { // new Trait { attri="values", max=1,min = 0, value= new List { "120"} }, // }, // bus_Data = new BusData // { // SubnetID = 142, // DeviceID = 4, // LoopID = 111, // }, //}); //instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() //{ // sid = "1234121234567890123456100B040006ABCD", // name = "风力", // roomIdList = new List() { "0001" }, // propertList = new List() { // new Trait { attri="values", max=1,min = 0, value= new List { "1.8"} }, // }, // bus_Data = new BusData // { // SubnetID = 142, // DeviceID = 4, // LoopID = 111, // }, //}); instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() { sid = "1234121234567890123456100B070006ABCD", name = "CO2", roomIdList = new List() { "0001" }, function = new List() { new Trait { attri="values", max=1,min = 0, value= new List { "1352"} }, }, bus_Data = new BusData { SubnetID = 111, DeviceID = 15, LoopID = 1, }, }); instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() { sid = "1234121234567890123456100B020006ABCD", name = "温度", roomIdList = new List() { "0001" }, function = new List() { new Trait { attri="values", max=1,min = 0, value= new List { "28"} }, }, bus_Data = new BusData { SubnetID = 111, DeviceID = 15, LoopID = 1, }, }); instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() { sid = "1234121234567890123456100B050006ABCD", name = "TVOC", roomIdList = new List() { "0001" }, function = new List() { new Trait { attri="values", max=1,min = 0, value= new List { "0.3"} }, }, bus_Data = new BusData { SubnetID = 111, DeviceID = 15, LoopID = 1, }, }); instance.functionList.sensorsEnvironmentalScience.Add(new Sensor() { sid = "1234121234567890123456100B030006ABCD", name = "湿度", roomIdList = new List() { "0001" }, function = new List() { new Trait { attri="values", max=1,min = 0, value= new List { "15"} }, }, bus_Data = new BusData { SubnetID = 111, DeviceID = 15, 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 void EixtAccount() { instance = null; } /// /// 住宅图片 /// 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: case FunctionCategory.Electrical: case FunctionCategory.SwitchDevice: case FunctionCategory.Curtain: 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(); } } }