wjc
2023-08-18 c1cb2d8c6034a2ee7aa8a5710bba15b14f76cebc
HDL_ON/Entity/Function/Function.cs
@@ -100,7 +100,7 @@
        /// <returns></returns>
        public FunctionAttributes GetAttribute(string key)
        {
            var attr = attributes.Find((a) => a.key == key);
            var attr = GetFunctionAttributes().Find((a) => a.key == key);
            return attr;
        }
@@ -109,7 +109,7 @@
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetAttrState(string key , string defaultValue = "0")
        public string GetAttrState(string key, string defaultValue = "0")
        {
            //一级查询keyValue值
            var attrState = attributes.Find((s) => s.key == key.ToString());
@@ -273,6 +273,14 @@
        /// </summary>
        public string deviceId = "0";
        /// <summary>
        /// 第三方设备扩展id
        /// </summary>
        public string extDevId = string.Empty;
        /// <summary>
        /// 物理设备(模块)型号
        /// </summary>
        public string omodel = string.Empty;
        /// <summary>
        /// 设备spk
        /// </summary>
        public string spk = "";
@@ -364,6 +372,39 @@
        /// attri
        /// </summary>
        public List<FunctionAttributes> attributes = new List<FunctionAttributes>();
        public List<FunctionAttributes> GetFunctionAttributes()
        {
            if (spk == SPK.GroupControl)
            {
                var list = new List<FunctionAttributes>();
                var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
                if (gc != null)
                {
                    foreach (var temp in gc.sids)
                    {
                        var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
                        if (light != null)
                        {
                            foreach (var attr in light.attributes)
                            {
                                if (list.Find((obj) => obj.key == attr.key) == null)
                                {
                                    list.Add(attr);
                                }
                            }
                        }
                    }
                }
                return list;
            }
            else
            {
                return attributes;
            }
        }
        /// <summary>
        /// 房间ID列表
@@ -519,6 +560,14 @@
                SetAttrState(sta.key, sta.value);
            }
        }
        /// <summary>
        /// 功能列表排序
        /// </summary>
        public int FunctionOrderNumber = 9999;
        /// <summary>
        /// 房间列表排序
        /// </summary>
        public int RoomOrderNumber = 9999;
        /// <summary>
@@ -549,13 +598,27 @@
            new System.Threading.Thread(() =>
            {
                if (collect)
                {
                    result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code;
                if (spk == SPK.GroupControl) {
                    var groupControl = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
                    if (collect)
                    {
                        result = ApiUtlis.Ins.HttpRequest.CollectGroupControl(groupControl.userDeviceGroupControlId).Code;
                    }
                    else
                    {
                        result = ApiUtlis.Ins.HttpRequest.CancelCollectGroupControl(groupControl.userDeviceGroupControlId).Code;
                    }
                }
                else
                {
                    result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(deviceId).Code;
                    if (collect)
                    {
                        result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code;
                    }
                    else
                    {
                        result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(deviceId).Code;
                    }
                }
                //提示错误
                if (result != StateCode.SUCCESS)
@@ -736,8 +799,79 @@
        public SceneFunction ConvertSceneFunction()
        {
            var sFunc = new SceneFunction();
            foreach (var attr in attributes)
            var list = new List<FunctionAttributes>();
            if (spk == SPK.GroupControl)
            {
                lock (list)
                {
                    var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
                    if (gc != null)
                    {
                        foreach (var temp in gc.sids)
                        {
                            var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
                            if (light != null)
                            {
                                foreach (var attr in light.attributes)
                                {
                                    if (list.Find((obj) => obj.key == attr.key) == null)
                                    {
                                        list.Add(attr);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                list.AddRange(attributes);
            }
            foreach (var attr in list)
            {
                //窗帘同时发送开关跟百分比会有问题,
                if(spk == SPK.CurtainRoller || spk == SPK.CurtainTrietex || spk == SPK.CurtainDream)
                {
                    if (attr.key == FunctionAttributeKey.OnOff)
                    {
                        if (attributes.Find((obj) => obj.key == FunctionAttributeKey.Percent) != null)
                        {
                            continue;
                        }
                    }
                }else if (spk == SPK.GroupControl)
                {
                    sFunc.type = "5";
                }
                string us = "";
                switch (attr.key)
                {
                    case FunctionAttributeKey.SetTemp:
                    case FunctionAttributeKey.RoomTemp:
                        us = "°C";
                        var tempType = attributes.Find((obj) => obj.key == FunctionAttributeKey.TempType);
                        if (tempType != null)
                        {
                            us = tempType.curValue.ToString();
                        }
                        break;
                    case FunctionAttributeKey.Percent:
                    case FunctionAttributeKey.Brightness:
                        us = "%";
                        break;
                    case FunctionAttributeKey.CCT:
                        us = "K";
                        break;
                    case FunctionAttributeKey.Angle:
                        us = "°";
                        break;
                }
                switch (attr.key)
                {
                    case FunctionAttributeKey.OnOff:
@@ -749,10 +883,15 @@
                    case FunctionAttributeKey.CCT:
                    case FunctionAttributeKey.RGB:
                    case FunctionAttributeKey.Angle:
                    case FunctionAttributeKey.Colorful:
                    case FunctionAttributeKey.ColorfulBegin:
                    case FunctionAttributeKey.ColorfulEnd:
                    case FunctionAttributeKey.ColorfulTime:
                    case "security":
                        //case FunctionAttributeKey.FadeTime:
                        if (attr.curValue.ToString() == "{}")
                        {
                            if (attr.key == FunctionAttributeKey.OnOff)
                            if (attr.key == FunctionAttributeKey.OnOff || attr.key == FunctionAttributeKey.Colorful)
                            {
                                attr.curValue = "off";
                            }
@@ -774,6 +913,10 @@
                                    }
                                }
                            }
                            else if(attr.key == "security")
                            {
                                attr.curValue = "false";
                            }
                            else
                            {
                                attr.curValue = "0";
@@ -787,13 +930,16 @@
                            {
                                vv = 26;
                            }
                            sFunc.status.Add(new SceneFunctionStatus() { key = attr.key, value = Convert.ToInt32(vv).ToString(), max = attr.max, min = attr.min });
                            sFunc.status.Add(new SceneFunctionStatus() {
                                UintString = us,
                                key = attr.key, value = Convert.ToInt32(vv).ToString(), max = attr.max, min = attr.min }) ;
                        }
                        else
                        {
                            sFunc.status.Add(new SceneFunctionStatus() { key = attr.key, value = attr.curValue.ToString(), max = attr.max, min = attr.min });
                            sFunc.status.Add(new SceneFunctionStatus() {
                                UintString = us,
                                key = attr.key, value = attr.curValue.ToString(), max = attr.max, min = attr.min });
                        }
                        break;
                }
            }
@@ -974,6 +1120,11 @@
        /// </summary>
        public List<string> value = new List<string>();
        /// <summary>
        /// 步进
        /// 空调温度控制 0.5 1
        /// </summary>
        public string step = "1";
        /// <summary>
        /// 最大值
        /// </summary>
        public int max = 100;
@@ -993,6 +1144,10 @@
        /// 当前值
        /// </summary>
        public object curValue = new object();
        /// <summary>
        /// 属性单位
        /// </summary>
        public string unit=string.Empty;
    }
    /// <summary>
@@ -1002,6 +1157,10 @@
    {
        public const string _null = "";
        /// <summary>
        /// 安防布防状态
        /// </summary>
        public const string Security = "security";
        /// <summary>
        /// 开关
        /// </summary>
        public const string OnOff = "on_off";
@@ -1009,6 +1168,22 @@
        /// 亮度
        /// </summary>
        public const string Brightness = "brightness";
        /// <summary>
        /// 炫彩开关
        /// </summary>
        public const string Colorful = "colorful";
        /// <summary>
        /// 炫彩开启颜色
        /// </summary>
        public const string ColorfulBegin = "colorful_begin";
        /// <summary>
        /// 炫彩结束颜色
        /// </summary>
        public const string ColorfulEnd = "colorful_end";
        /// <summary>
        /// 炫彩运行时间
        /// </summary>
        public const string ColorfulTime = "colorful_time";
        /// <summary>
        /// 颜色
        /// </summary>
@@ -1318,24 +1493,25 @@
    public static class SPK
    {
        /// <summary>
        /// 群控(自定义)
        /// </summary>
        public const string GroupControl = "groupControl";
        /// <summary>
        /// 通用开关
        /// </summary>
        public const string OtherCommon = "other.common";
        /// <summary>
        /// 机械手、机械臂
        /// 序列
        /// </summary>
        public const string CommonSeries = "other.series";
        /// <summary>
        /// 大华摄像头
        /// </summary>
        public const string IpCam_Imou = "security.ipcam.imou";
        /// <summary>
        /// 机械手
        /// </summary>
        public const string MechanicalArm = "electrical.mechanical_arm";
        /// <summary>
        /// 机械手spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> GetMechanicalArmList()
        {
            var list = new List<string>();
            list.Add(MechanicalArm);
            return list;
        }
        /// <summary>
        /// 空调科技系统(绿建)
        /// 总控
@@ -1351,6 +1527,7 @@
        /// 门锁
        /// </summary>
        public const string DoorLock = "security.door";
        /// <summary>
        /// 门锁spk列表
        /// </summary>
@@ -1361,8 +1538,65 @@
            list.Add(DoorLock);
            return list;
        }
        /// <summary>
        /// 猫眼(旧spk)
        /// </summary>
        public const string Peephole = "peephole";
        /// <summary>
        /// 猫眼(新spk 暂时没用)
        /// </summary>
        //public const string PeepholeEz = "security.peephole.ez";
        /// <summary>
        /// 萤石视频门锁
        /// </summary>
        public const string VideoDoorLock="security.door.ezviz";
        /// <summary>
        /// 萤石摄像头
        /// </summary>
        public const string Ev_Ipcam = "security.ipcam.ez";
        /// <summary>
        /// 影音中控
        /// </summary>
        public const string AvZkAiks = "av.zk.aiks";
        /// <summary>
        /// 萤石视频门锁spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> GetVideoDoorLockSPKList()
        {
            var list = new List<string>();
            list.Add(VideoDoorLock);
            return list;
        }
        /// <summary>
        /// 影音中控spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> GetVideoControlsSPKList()
        {
            var list = new List<string>
            {
                AvZkAiks
            };
            return list;
        }
        /// <summary>
        /// 萤石摄像头spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> GetEvIpcamSPKList()
        {
            var list = new List<string>();
            list.Add(Ev_Ipcam);
            return list;
        }
        #region 灯光
        /// <summary>
@@ -1455,7 +1689,7 @@
        public const string HvacAC = "hvac.ac";
        /// <summary>
        /// 毛细管空调
        /// </summary>
        /// </summaryc
        public const string HvacCac = "hvac.cac";
        /// <summary>
@@ -1535,6 +1769,10 @@
        /// </summary>
        public const string Inverter = "energy.inverter";
        /// <summary>
        /// 三相逆变器
        /// </summary>
        public const string InverterRst = "energy.inverter_rst";
        /// <summary>
        /// 能源模块
        /// </summary>
        public const string EnergyStandard = "energy.standard";
@@ -1590,6 +1828,10 @@
        /// </summary>
        public const string SensorPir = "sensor.pir";
        /// <summary>
        /// 人体存在传感器
        /// </summary>
        public const string SensorPirHold = "sensor.pir_hold";
        /// <summary>
        /// (门窗传感器)
        /// </summary>
        public const string SensorDoorWindow = "sensor.doorwindow";
@@ -1644,6 +1886,7 @@
            var spkList = new List<string>();
            //spkList.Add(SensorLight);
            spkList.Add(SensorPir);
            spkList.Add(SensorPirHold);
            spkList.Add(SensorHelp);
            spkList.Add(SensorDoorWindow);
            spkList.Add(SensorSmoke);
@@ -1675,6 +1918,10 @@
        }
        #region 环境传感器
        /// <summary>
        /// (PM10传感器)
        /// </summary>
        public const string SensorPm10 = "sensor.pm10";
        /// <summary>
        /// (温度传感器)
        /// </summary>
@@ -1724,11 +1971,12 @@
        {
            var spkList = new List<string>();
            spkList.Add(SensorTemperature);
            spkList.Add(SensorPm10);
            spkList.Add(SensorPm25);
            spkList.Add(SensorCO2);
            spkList.Add(SensorTVOC);
            spkList.Add(SensorHumidity);
            spkList.Add(SensorEnvironment);
            spkList.Add(SensorEnvironment); spkList.Add(SensorEnvironmentHailin);
            spkList.Add(SensorEnvironment2);
            spkList.Add(SensorEnvironment3);
            spkList.Add(SensorHcho);
@@ -1742,6 +1990,7 @@
        {
            var spkList = new List<string>();
            spkList.Add(SensorTemperature);
            spkList.Add(SensorPm10);
            spkList.Add(SensorPm25);
            spkList.Add(SensorCO2);
            spkList.Add(SensorTVOC);
@@ -1757,7 +2006,7 @@
        public static List<string> EvironmentSensorList()
        {
            var spkList = new List<string>();
            spkList.Add(SensorEnvironment);
            spkList.Add(SensorEnvironment); spkList.Add(SensorEnvironmentHailin);
            spkList.Add(SensorEnvironment2);
            spkList.Add(SensorEnvironment3);
            return spkList;
@@ -1767,6 +2016,10 @@
        #endregion
        #region 家电
        /// <summary>
        /// 海信电视
        /// </summary>
        public const string ElectricalTvHisense = "electrical.tv.hisense";
        /// <summary>
        /// 家电、插座
        /// </summary>
@@ -1881,6 +2134,7 @@
            spkList.Add(ElectricTuyaWaterValve);
            spkList.Add(ElectricTuyaWaterValve2);
            spkList.Add(AirSwitch);
            spkList.Add(ElectricalTvHisense);
            return spkList;
        }