| | |
| | | /// </summary> |
| | | public string MasterToken; |
| | | /// <summary> |
| | | /// 0:bus网关 |
| | | /// 1:A协议网关 |
| | | /// </summary> |
| | | public int GatewayType = 1; |
| | | /// <summary> |
| | | /// 住宅基础信息 |
| | | /// </summary> |
| | | public RegionInfoRes residecenInfo |
| | |
| | | else |
| | | { |
| | | var curRegion = UserInfo.Current.regionList.Find((obj) => obj.RegionID == CurReginID); |
| | | if (curRegion == null) |
| | | { |
| | | if (UserInfo.Current.regionList != null && UserInfo.Current.regionList.Count > 0) |
| | | { |
| | | CurReginID = UserInfo.Current.regionList[0].RegionID; |
| | | //恢复备份 |
| | | HDLCommon.Current.RestoreHomeBackup(CurReginID); |
| | | |
| | | return UserInfo.Current.regionList[0]; |
| | | } |
| | | else |
| | | { |
| | | return new RegionInfoRes(); |
| | | } |
| | | } |
| | | |
| | | //if (curRegion == null) |
| | | //{ |
| | | // CurReginID = UserInfo.Current.regionList[0].RegionID; |
| | |
| | | instance.SaveResidenceData(); |
| | | } |
| | | |
| | | new Light() |
| | | { |
| | | sid = "030101123456780202010005ABCD", |
| | | name = "灯光1", |
| | | attributes = new List<FunctionAttributes>() { |
| | | new FunctionAttributes { key="on_off", max=100,min = 0, value= new List<string> { "on","off"} }, |
| | | }, |
| | | roomIds = new List<string>() { "0001" }, |
| | | bus_Data = new BusData |
| | | { |
| | | addresses = "2A06", |
| | | loopId = 1, |
| | | }, |
| | | }.SaveFunctionData(); |
| | | |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | instance.residenceImage = "Classification/Room/Roombg.png"; |
| | | //初始化住宅功能数据 |
| | | InitRoomFunction(); |
| | | SpatialInfo.CurrentSpatial.InitRoomFunction(); |
| | | |
| | | } |
| | | return instance; |
| | |
| | | public void EixtAccount() |
| | | { |
| | | instance = null; |
| | | ins_Room = null; |
| | | Rooms = null; |
| | | ins_OidList = null; |
| | | ins_Function = null; |
| | | functionList = null; |
| | | HomeGateway = null; |
| | | if (MainPage.IsRemote) |
| | | { |
| | | DAL.Mqtt.MqttClient.DisConnectRemote("退出登录,或者切换住宅"); |
| | |
| | | /// </summary> |
| | | public HomeGatewayInfo HomeGateway; |
| | | |
| | | /// <summary> |
| | | /// 0:bus网关 |
| | | /// 1:A协议网关 |
| | | /// </summary> |
| | | public int GatewayType |
| | | { |
| | | get |
| | | { |
| | | //#if DEBUG |
| | | //return 0; |
| | | //#endif |
| | | if (HomeGateway == null) |
| | | return -1; |
| | | if (HomeGateway.gatewayType == "AGATEWAY") |
| | | { |
| | | return 1; |
| | | } |
| | | else |
| | | { |
| | | return 0; |
| | | } |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 检测住宅是否绑定了网关 |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | public string CurFoor = Language.StringByID(StringId.All); |
| | | |
| | | |
| | | |
| | | #region 房间数据相关 |
| | | /// <summary> |
| | | /// 初始化每个房间的功能数据 |
| | | /// 房间列表 |
| | | /// </summary> |
| | | public static void InitRoomFunction() |
| | | { |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | //初始化住宅所有房间功能数据 |
| | | foreach (var r in Rooms) |
| | | { |
| | | r.GetRoomFunctions(true); |
| | | r.GetRoomScenes(true); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"Init room function error : {ex.Message}"); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | |
| | | static List<Room> ins_Room; |
| | | public static List<Room> Rooms |
| | | { |
| | | get |
| | | { |
| | | if (ins_Room == null) |
| | | { |
| | | try |
| | | { |
| | | ins_Room = new List<Room> { }; |
| | | var filePathList = FileUtils.ReadFiles(); |
| | | |
| | | foreach (var filePath in filePathList) |
| | | { |
| | | if (filePath.StartsWith("RoomData_")) |
| | | { |
| | | var roomDataBytes = FileUtils.ReadFile(filePath); |
| | | var roomDataString = System.Text.Encoding.UTF8.GetString(roomDataBytes); |
| | | var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Room>(roomDataString); |
| | | if (room != null) |
| | | { |
| | | ins_Room.Add(room); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"功能数据初始化失败:{ex.Message}"); |
| | | } |
| | | } |
| | | return ins_Room; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 增加房间 |
| | | /// </summary> |
| | | /// <param name="room"></param> |
| | | public void AddRoom(Room room) |
| | | { |
| | | Rooms.Add(room); |
| | | room.SaveRoomData(); |
| | | } |
| | | /// <summary> |
| | | /// 删除房间 |
| | | /// </summary> |
| | | /// <param name="room"></param> |
| | | public void DelRoom(Room room) |
| | | { |
| | | var tRoom = Rooms.Find((obj) => obj.uid == room.uid); |
| | | if (tRoom != null) |
| | | { |
| | | FileUtils.DeleteFile(room.roomSavePath); |
| | | Rooms.Remove(room); |
| | | room.modifyTime = ""; |
| | | } |
| | | room.SaveRoomData(); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | public List<Room> Rooms = SpatialInfo.CurrentSpatial.RoomList; |
| | | |
| | | #region 功能数据 |
| | | static FunctionList ins_Function; |
| | | static FunctionList _functionList; |
| | | public static FunctionList functionList |
| | | { |
| | | get |
| | | { |
| | | if (ins_Function == null) |
| | | if (_functionList == null) |
| | | { |
| | | try |
| | | { |
| | | ins_Function = new FunctionList { }; |
| | | #region 恢复数据 |
| | | var filePathList = FileUtils.ReadFiles(); |
| | | |
| | | List<Function> fs = new List<Function>(); |
| | | |
| | | foreach (var filePath in filePathList) |
| | | { |
| | | if (filePath.StartsWith("FunctionData_") && filePath.Length == 13 + 28) |
| | | { |
| | | //var filePath = fp.Remove(0, 13); |
| | | var _functionTypeString = filePath.Substring(16 + 13, 4); |
| | | var ft = (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16)); |
| | | |
| | | switch (ft) |
| | | { |
| | | case FunctionType.AC: |
| | | //恢复空调数据 |
| | | var acDataBytes = FileUtils.ReadFile(filePath); |
| | | var acString = System.Text.Encoding.UTF8.GetString(acDataBytes); |
| | | ins_Function.aCs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AC>(acString)); |
| | | break; |
| | | case FunctionType.Relay: |
| | | case FunctionType.Dimmer: |
| | | case FunctionType.RGB: |
| | | //恢复灯光数据 |
| | | var lightsDataBytes = FileUtils.ReadFile(filePath); |
| | | var lightsString = System.Text.Encoding.UTF8.GetString(lightsDataBytes); |
| | | ins_Function.lights.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Light>(lightsString)); |
| | | break; |
| | | case FunctionType.Curtain: |
| | | case FunctionType.MotorCurtain: |
| | | case FunctionType.RollingShutter: |
| | | //恢复窗帘数据 |
| | | var curtainsDataBytes = FileUtils.ReadFile(filePath); |
| | | var curtainsString = System.Text.Encoding.UTF8.GetString(curtainsDataBytes); |
| | | ins_Function.curtains.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Curtain>(curtainsString)); |
| | | break; |
| | | case FunctionType.FloorHeating: |
| | | //恢复地热数据 |
| | | var fhDataBytes = FileUtils.ReadFile(filePath); |
| | | var fhString = System.Text.Encoding.UTF8.GetString(fhDataBytes); |
| | | ins_Function.floorHeatings.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<FloorHeating>(fhString)); |
| | | break; |
| | | case FunctionType.PM25: |
| | | case FunctionType.CO2: |
| | | case FunctionType.TVOC: |
| | | case FunctionType.Temp: |
| | | case FunctionType.Humidity: |
| | | //恢复环境数据 |
| | | var sesDataBytes = FileUtils.ReadFile(filePath); |
| | | var sesString = System.Text.Encoding.UTF8.GetString(sesDataBytes); |
| | | ins_Function.sensorsEnvironmentalScience.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Sensor>(sesString)); |
| | | break; |
| | | case FunctionType.Socket: |
| | | //恢复插座数据 |
| | | var eleDataBytes = FileUtils.ReadFile(filePath); |
| | | var eleString = System.Text.Encoding.UTF8.GetString(eleDataBytes); |
| | | ins_Function.switchSockets.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SwitchSocket>(eleString)); |
| | | break; |
| | | case FunctionType.TV: |
| | | //恢复电视数据 |
| | | var eleDataBytes1 = FileUtils.ReadFile(filePath); |
| | | var eleString1 = System.Text.Encoding.UTF8.GetString(eleDataBytes1); |
| | | ins_Function.tVs.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TV>(eleString1)); |
| | | break; |
| | | case FunctionType.Fan: |
| | | //恢复风扇数据 |
| | | var eleDataBytes2 = FileUtils.ReadFile(filePath); |
| | | var eleString2 = System.Text.Encoding.UTF8.GetString(eleDataBytes2); |
| | | ins_Function.fans.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(eleString2)); |
| | | break; |
| | | case FunctionType.Scene: |
| | | //恢复场景数据 |
| | | var scenesDataBytes = FileUtils.ReadFile(filePath); |
| | | var scenesString = System.Text.Encoding.UTF8.GetString(scenesDataBytes); |
| | | ins_Function.scenes.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<Scene>(scenesString)); |
| | | break; |
| | | |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"功能数据初始化失败:{ex.Message}"); |
| | | } |
| | | |
| | | _functionList = FunctionList.List; |
| | | } |
| | | return ins_Function; |
| | | return _functionList; |
| | | } |
| | | set |
| | | { |
| | | _functionList = value; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 删除手机存储都所有功能数据 |
| | | /// </summary> |
| | | public static void DelAllFunctionData() |
| | | { |
| | | var filePathList = FileUtils.ReadFiles(); |
| | | foreach (var filePath in filePathList) |
| | | { |
| | | if (filePath.StartsWith("FunctionData_") && filePath.Length == 13 + 28) |
| | | { |
| | | FileUtils.DeleteFile(filePath); |
| | | } |
| | | } |
| | | ins_Function = new FunctionList(); |
| | | ins_Function.aCs = new List<AC>(); |
| | | ins_Function.lights = new List<Light>(); |
| | | ins_Function.curtains = new List<Curtain>(); |
| | | ins_Function.floorHeatings = new List<FloorHeating>(); |
| | | ins_Function.sensorsEnvironmentalScience = new List<Sensor>(); |
| | | ins_Function.switchSockets = new List<SwitchSocket>(); |
| | | ins_Function.tVs = new List<TV>(); |
| | | ins_Function.fans = new List<Fan>(); |
| | | ins_Function.scenes = new List<Scene>(); |
| | | } |
| | | /// <summary> |
| | | /// 删除功能 |
| | | /// </summary> |
| | | public static void DelSceneFunction(string fSid) |
| | | { |
| | | var f = functionList.scenes.Find((obj) => obj.sid == fSid); |
| | | if (f != null) |
| | | { |
| | | FileUtils.DeleteFile(f.savePath); |
| | | functionList.scenes.Remove(f); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 刷新住宅里面的搜索设备状态 |
| | | /// </summary> |
| | | public void RefreshResidenceFunctionStatus() |
| | | { |
| | | new System.Threading.Thread(() => |
| | | { |
| | | try |
| | | { |
| | | foreach (var function in functionList.GetAllDeviceFunctionList()) |
| | | { |
| | | System.Threading.Thread.Sleep(100); |
| | | switch (function.functionCategory) |
| | | { |
| | | case FunctionCategory.Light: |
| | | case FunctionCategory.Electrical: |
| | | case FunctionCategory.SwitchDevice: |
| | | case FunctionCategory.Curtain: |
| | | case FunctionCategory.Thermostat: |
| | | if (DB_ResidenceData.residenceData.GatewayType == 0) |
| | | { |
| | | DriverLayer.Control.Ins.SendReadCommand(function); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}"); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |