using System; using System.Collections.Generic; using Shared; namespace HDL_ON.UI.UI2.Intelligence.Automation { public class LogicMethod { /// /// 表示是条件 /// public const string condition_if = "条件"; /// /// 表示是目标 /// public const string target_if = "目标"; /// /// 移除所有"Logic"界面 /// public static void RemoveAllView() { MainPage.BasePageView.RemoveViewByTag("Logic"); } /// /// 生成逻辑sid方法 /// public static string NewSid() { string logicId = ""; 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 = "00000000"; } logicId = sOidBeginsWith + sTimeSpan; logicId += "0A"; logicId += "0A01"; //0A01 物模型为逻辑, 0001 表示 1 号逻辑功能 int iTopLogicId = 1; Random random = new Random(); iTopLogicId = random.Next(0, 255); iTopLogicId += random.Next(0, 255); logicId += iTopLogicId.ToString("X4");//逻辑号 两个byte logicId += "1100"; } catch { return logicId; } return logicId; } /// /// 生成逻辑sid方法 /// //public static string NewSid() //{ // String sLogicid = ""; // try // { // String sOidBeginsWith = "000101";//厂商 + 通讯方式 // //生成4个byte时间戳 // DateTime dt = DateTime.Now; // long sTimeSp = GateWay.ConvertDateTimeLong(dt); // string sTimeSpan = ""; // GateWay.ConvertIntToByteArray(sTimeSp, ref sTimeSpan); // if (sTimeSpan.Length != 8) return sLogicid; // //间隔10毫秒 错开时间戳 // HDLUDP.TimeBetwnNext(10); // sLogicid = sOidBeginsWith + sTimeSpan; // //1501 物模型为自动化, 0001 表示 1 号自动化功能 // sLogicid += "15"; // sLogicid += "1501"; // //自动化号自增 // int iTopSceneId = 1; // if (myGateway.LogicResponse != null) // { // if (myGateway.LogicResponse.objects != null) // { // for (int i = 0; i < myGateway.LogicResponse.objects.Count; i++) // { // string ccc = myGateway.LogicResponse.objects[i].sid.Substring(myGateway.LogicResponse.objects[i].sid.Length - 8, 4); // int iThisSceneId = Convert.ToInt16(myGateway.LogicResponse.objects[i].sid.Substring(myGateway.LogicResponse.objects[i].sid.Length - 8, 4), 16); // if (iThisSceneId >= iTopSceneId) // iTopSceneId = iThisSceneId + 1; // } // } // } // sLogicid += iTopSceneId.ToString("X4");//场景号 两个byte // //大类小类没有用到 固定为0 // sLogicid += "0000"; // return sLogicid; // } // catch // { // return sLogicid; // } //} /// /// 封装Dictionary对象 /// /// Dictionary类 /// 健 /// 值 public static void dictionary(Dictionary dic, string key, string value) { if (dic.ContainsKey(key)) //判断是否存在键值 { //键存在移除 dic.Remove(key); } //添加键值 dic.Add(key, value); } /// /// 获取网关房间列表 /// /// public static List GetGatewayRoomList() { return HDL_ON.Entity.DB_ResidenceData.residenceData.Rooms; } /// /// 获取网关房间列表 /// /// public static List GetGatewayRoomList(string name) { List roomList = new List(); Entity.Room room1 = new Entity.Room(); room1.roomName = name;//默认一个房间名为:全部区域 room1.uid = "全部区域";//默认sid用识别该房间 roomList.Add(room1);//默认添加到房间列表里 var roomLists = GetGatewayRoomList(); foreach (var room in roomLists) { roomList.Add(room); } return roomList; } /// /// 获取网关设备列表 /// /// public static List GetGatewayDeviceList() { List list = new List(); for (int i=0;i<10;i++) { HDL_ON.Entity.Function function = new Entity.Function(); switch (i) { case 0: { function.sid = "1234560001212121020182"; function.name ="灯光"; list.Add(function); } break; case 1: { function.sid = "1234560001212121030182"; function.name = "窗帘"; list.Add(function); } break; case 2: { function.sid = "1234560001212121040182"; function.name = "空调"; list.Add(function); } break; case 3: { function.sid = "1234560001212121010282"; function.name = "RGBW"; list.Add(function); } break; case 4: { function.sid = "1234560001212121010382"; function.name = "CCT灯"; list.Add(function); } break; case 5: { function.sid = "1234560001212121010482"; function.name = "开合帘"; list.Add(function); } break; case 6: { function.sid = "1234560001212121010582"; function.name = "卷帘"; list.Add(function); } break; case 7: { function.sid = "1234560001212121040282"; function.name = "地热"; list.Add(function); } break; case 8: { function.sid = "1234560001212121020282"; function.name = "调关"; list.Add(function); } break; case 9: { function.sid = "1234560001212121020482"; function.name = "RGB"; list.Add(function); } break; } } return list; //return HDL_ON.Entity.DB_ResidenceData.functionList.GetAllFunction(); } /// /// 获取网关场景列表 /// /// public static List GetSceneList() { return HDL_ON.Entity.DB_ResidenceData.functionList.scenes; } /// /// 获取房间的设备列表 /// /// 当前房间 /// public static List GetRoomDevice(HDL_ON.Entity.Room room) { List deviceLists = new List(); List lists = GetGatewayDeviceList(); foreach (var dev in lists) { if (dev.roomIds.Find((id) => id == room.uid) != null) { deviceLists.Add(dev); } if (room.uid == "全部区域") { //房间名为全部区域时,显示网关全部设备 deviceLists = lists; } } return deviceLists; } /// /// 获取当个设备 /// /// 设备唯一标识 /// public static HDL_ON.Entity.Function GetDevice(string sid) { HDL_ON.Entity.Function device = new Entity.Function() { name= "Unknown",sid="设备不存在"}; List deviceLists = GetGatewayDeviceList(); foreach (var dev in deviceLists) { if (dev.sid == sid) { device = dev; break; } } return device; } /// /// 获取当个场景 /// /// 场景唯一标识 /// public static HDL_ON.Entity.Scene GetSecne(string sid) { HDL_ON.Entity.Scene scene = new Entity.Scene() { name = "Unknown", sid = "场景不存在" }; List sceneLists = GetSceneList(); foreach (var sce in sceneLists) { if (sce.sid == sid) { scene = sce; break; } } return scene; } /// /// 获取房间名(即是=区域名称) /// /// 设备 /// public static string GetGetRoomName(HDL_ON.Entity.Function device) { string roomName = ""; List roomLists = GetGatewayRoomList(); foreach (var dev in device.roomIds) { var room = roomLists.Find((c) => c.uid == dev); if (room != null) { roomName += room.floorName + "." + room.roomName + ","; } } return roomName.TrimEnd(','); } /// /// 获取设备类型图标 /// /// 设备类型 /// public static string GetIconPath(FunctionType functionType) { string strPath = ""; switch (functionType) { case FunctionType.Relay: case FunctionType.RGB: case FunctionType.RGBW: case FunctionType.CCT: case FunctionType.Dimmer: { strPath = "LogicIcon/lightloguc.png"; } break; case FunctionType.Curtain: case FunctionType.RollerCurtain: case FunctionType.TrietexCurtain: { strPath = "LogicIcon/curtainlogic.png"; } break; case FunctionType.AC: { strPath = "LogicIcon/airconditionerlogic.png"; } break; case FunctionType.FloorHeating: { strPath = "LogicIcon/heatlogic.png"; } break; } return strPath; } /// /// 设备类型的列表(灯光类,窗帘类。。。) /// /// 设备列表 /// public static List GetDeviceTypeList(List deviceList) { List deviceStrTypeList = new List(); deviceStrTypeList.Clear(); var lightjosn = deviceList.Find((device) => device.functionType == FunctionType.Relay || device.functionType == FunctionType.Dimmer|| device.functionType == FunctionType.CCT || device.functionType == FunctionType.RGB|| device.functionType == FunctionType.RGBW); if (lightjosn != null) { deviceStrTypeList.Add(Language.StringByID(StringId.Lights)); } var curtainjosn = deviceList.Find((device) => device.functionType ==FunctionType.Curtain|| device.functionType == FunctionType.TrietexCurtain|| device.functionType == FunctionType.RollerCurtain); if (curtainjosn != null) { deviceStrTypeList.Add(Language.StringByID(StringId.Curtain)); } var ac = deviceList.Find((device) => device.functionType == FunctionType.AC); if (ac != null) { deviceStrTypeList.Add(Language.StringByID(StringId.AC)); } var floorHeating = deviceList.Find((device) => device.functionType == FunctionType.FloorHeating); if (ac != null) { deviceStrTypeList.Add(Language.StringByID(StringId.FloorHeating)); } return deviceStrTypeList; } /// /// 设备类型FunctionType列表 /// /// 设备类型(灯光类,窗帘类。) /// public static List GetDeviceTypeFunctionList(string deviceType) { List functionTypeList = new List(); if (deviceType == Language.StringByID(StringId.Lights)) { functionTypeList.Add(FunctionType.Relay); functionTypeList.Add(FunctionType.Dimmer); functionTypeList.Add(FunctionType.RGB); functionTypeList.Add(FunctionType.RGBW); functionTypeList.Add(FunctionType.CCT); } else if (deviceType == Language.StringByID(StringId.Curtain)) { functionTypeList.Add(FunctionType.Curtain); functionTypeList.Add(FunctionType.RollerCurtain); functionTypeList.Add(FunctionType.TrietexCurtain); } else if (deviceType == Language.StringByID(StringId.AC)) { functionTypeList.Add(FunctionType.AC); } else if (deviceType == Language.StringByID(StringId.FloorHeating)) { functionTypeList.Add(FunctionType.FloorHeating); } return functionTypeList; } /// /// 条件/目标支持设备 /// /// public static List GetSupportEquipment(string if_type) { List deviceTypeList = new List(); switch (if_type) { case condition_if: { deviceTypeList.Add(FunctionType.Relay); deviceTypeList.Add(FunctionType.RGB); deviceTypeList.Add(FunctionType.RGBW); deviceTypeList.Add(FunctionType.Dimmer); deviceTypeList.Add(FunctionType.CCT); deviceTypeList.Add(FunctionType.Curtain); deviceTypeList.Add(FunctionType.RollerCurtain); deviceTypeList.Add(FunctionType.TrietexCurtain); deviceTypeList.Add(FunctionType.AC); deviceTypeList.Add(FunctionType.FloorHeating); } break; case target_if: { deviceTypeList.Add(FunctionType.Relay); deviceTypeList.Add(FunctionType.RGB); deviceTypeList.Add(FunctionType.RGBW); deviceTypeList.Add(FunctionType.Dimmer); deviceTypeList.Add(FunctionType.CCT); deviceTypeList.Add(FunctionType.Curtain); deviceTypeList.Add(FunctionType.RollerCurtain); deviceTypeList.Add(FunctionType.TrietexCurtain); deviceTypeList.Add(FunctionType.AC); deviceTypeList.Add(FunctionType.FloorHeating); } break; } return deviceTypeList; } /// /// 显示的设备列表 /// /// 源数据列表1 /// 源数据列表2 /// public static List GetShowDeviceList(List functionType, List deviceList) { List devList = new List(); foreach (var dev in deviceList) { if (functionType.Contains(dev.functionType)) { ///过滤掉不需要显示的设备 devList.Add(dev); } } return devList; } /// /// 返回最终支持显示出来的设备列表 /// /// 当前房间 /// 判断符(表示=输入设备和输出设备) /// public static List GetFunctionDeviceList(Entity.Room room, string str) { List functionTypeList = GetSupportEquipment(str); //返回房间设备列表 var roomDeviceList = GetRoomDevice(room); //返回最终支持显示出来的设备列表 var list = GetShowDeviceList(functionTypeList, roomDeviceList); return list; } } }