wxr
2024-12-02 ea0b1e8e5f43c5fd0a7d479e25ede3b8cbea464a
HDL_ON/Entity/Function/Function.cs
@@ -76,7 +76,8 @@
                DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
                return startTime.AddMilliseconds(Convert.ToDouble(time_stamp)).ToString("s");
            }
            catch {
            catch
            {
                return DateTime.MinValue.ToString("s");
            }
        }
@@ -100,7 +101,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;
        }
@@ -108,8 +109,9 @@
        /// 获取属性当前状态
        /// </summary>
        /// <param name="key"></param>
        /// <param name="defaultValue">默认值</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());
@@ -120,7 +122,7 @@
            if (string.IsNullOrEmpty(attrState.state))
            {
                //二级查询keyValue值
                return GetOriginalState(key);
                return GetOriginalState(key, defaultValue);
            }
            return attrState.state;
        }
@@ -130,33 +132,48 @@
        /// 默认值:0
        /// </summary>
        /// <param name="key">语雀定义的属性值</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns></returns>
        public string GetOriginalState(string key)
        public string GetOriginalState(string key, string defaultValue)
        {
            var originalState = status.Find((s) => s.key == key.ToString());
            if (originalState == null || string.IsNullOrEmpty(originalState.value))
            {
                return "0";
                return defaultValue;
            }
            return originalState.value;
        }
        /// <summary>
        /// 设置属性状态
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="setKey"></param>
        /// <param name="setValues"></param>
        /// <returns>修改结果</returns>
        public bool SetAttrState(string key, object value)
        public bool SetAttrState(string setKey, object setValues)
        {
            var attr = attributes.Find((s) => s.key == key);
            var attr = attributes.Find((s) => s.key == setKey);
            if (attr == null)
            {
                switch (setKey)
                {
                    case FunctionAttributeKey.CoolTemperatrue:
                    case FunctionAttributeKey.HeatTemperatrue:
                    case FunctionAttributeKey.AutoTemperatrue:
                    case FunctionAttributeKey.DehumiTemperatrue:
                        attributes.Add(new FunctionAttributes()
                        {
                            key = setKey,
                            state = setValues.ToString(),
                            curValue = setValues.ToString(),
                        });
                        return true;
                }
                return false;
            }
            else
            {
                attr.state = value.ToString();
                attr.curValue = value.ToString();
                attr.state = setValues.ToString();
                attr.curValue = setValues.ToString();
            }
            return true;
        }
@@ -171,6 +188,16 @@
                string iconPath = spk.Replace(".", "");
                switch (spk)
                {
                    case SPK.SensorDryContact2:
                    case SPK.OtherCommon:
                        iconPath = "sensordryContact";
                        break;
                    //case SPK.SensorLight:
                    //    iconPath = "lightswitch";
                    //    break;
                    case SPK.AirSwitchP3:
                        iconPath = "electricalbreaker";
                        break;
                    case SPK.PanelSocket:
                        iconPath = "electricalsocket";
                        break;
@@ -183,13 +210,18 @@
                    case SPK.HvacAirFresh:
                        iconPath = "airFreshstandard";
                        break;
                    case SPK.HvacAirFreshJinmao:
                        iconPath = "airFreshjinmao";
                        break;
                    case SPK.HvacAC:
                    case SPK.HvacAcPanel:
                        iconPath = "acstandard";
                        break;
                    case SPK.HvacFan:
                        iconPath = "electricalfan";
                        break;
                    case SPK.HvacFloorHeat:
                    case SPK.HvacFloorHeatPanel:
                        iconPath = "floorHeatstandard";
                        break;
                    case SPK.ElectricTuyaFan2:
@@ -234,7 +266,6 @@
        public Dictionary<string, byte> Fh_Mode_Temp = new Dictionary<string, byte>();
        #endregion
        #region base info    
        public string sid = "0301011234567801012301230123";
        /// <summary>
@@ -274,9 +305,18 @@
        /// </summary>
        public string extDevId = string.Empty;
        /// <summary>
        /// 物理设备(模块)型号
        /// </summary>
        public string omodel = string.Empty;
        /// <summary>
        /// 设备spk
        /// </summary>
        public string spk = "";
        /// <summary>
        /// 扩展信息
        /// 字符串
        /// </summary>
        public string extend = "";
        private string _SpkCategory = string.Empty;
        /// <summary>
@@ -366,6 +406,39 @@
        /// </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列表
        /// 该功能添加到到房间列表
@@ -402,20 +475,53 @@
        /// </summary>
        public bool collect = false;
        private bool _online = false;
        /// <summary>
        /// 是否在线
        /// </summary>
        private bool _online;
        public bool online
        {
            get
            {
                if (spk == SPK.AirSwitchP3 || spk == SPK.ElectricalTvHisense)
                {
                    return _online;
                }
                return true;
            }
            set
            {
                _online = value;
            }
        }
        ///// <summary>
        ///// 是否在线
        ///// </summary>
        //public bool online
        //{
        //    get
        //    {
        //        if(spk == SPK.AirSwitchP3)
        //        {
        //            return _online;
        //        }
        //        return true;
        //    }
        //    set
        //    {
        //        _online = value;
        //    }
        //}
        public bool isOnline()
        {
            if (spk == SPK.AirSwitchP3)
            {
                return online;
            }
            return true;
        }
        public void setOnine(bool isOnline)
        {
            online = isOnline;
        }
        /// <summary>
@@ -438,10 +544,6 @@
        #endregion
        //public void
        /// <summary>
        /// 延时
        /// </summary>
@@ -451,6 +553,31 @@
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string lastState = "";
        /// <summary>
        /// 获取状态显示文本
        /// </summary>
        /// <returns></returns>
        public string GetLastStateText()
        {
            var text = "";
            switch (spk)
            {
                case SPK.HvacCac:
                    switch (GetAttrState(FunctionAttributeKey.Mode))
                    {
                        case "cool":
                            text = Language.StringByID(StringId.Cool);
                            break;
                        case "heat":
                            text = Language.StringByID(StringId.Heat);
                            break;
                    }
                    break;
            }
            return text;
        }
        FunctionAttributes _trait_on_off;
        [Newtonsoft.Json.JsonIgnore]
@@ -495,6 +622,14 @@
                SetAttrState(sta.key, sta.value);
            }
        }
        /// <summary>
        /// 功能列表排序
        /// </summary>
        public int FunctionOrderNumber = 9999;
        /// <summary>
        /// 房间列表排序
        /// </summary>
        public int RoomOrderNumber = 9999;
        /// <summary>
@@ -525,29 +660,41 @@
            new System.Threading.Thread(() =>
            {
                if (collect)
                if (spk == SPK.GroupControl)
                {
                    result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code;
                    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)
                {
                    Application.RunOnMainThread(() =>
                    {
                        collect = !collect;
                        IMessageCommon.Current.ShowErrorInfoAlter(result);
                    });
                } else
                {
                    Application.RunOnMainThread(() =>
                    {
                        UI.HomePage.RefreshFunctionView();
                    });
                }
                Application.RunOnMainThread(() =>
                {
                    this.SaveFunctionFile();
                    UI.HomePage.RefreshFunctionView();
                });
            })
            { IsBackground = true }.Start();
        }
@@ -640,7 +787,7 @@
        /// <summary>
        /// 保存房间绑定信息
        /// </summary>
        public void UpdataRoomIds()
        public async void UpdataRoomIds()
        {
            new System.Threading.Thread(() =>
            {
@@ -712,10 +859,154 @@
        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 tempDevice = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
                            if (tempDevice != null)
                            {
                                foreach (var attr in tempDevice.attributes)
                                {
                                    if (list.Find((obj) => obj.key == attr.key) == null)
                                    {
                                        list.Add(attr);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else if (spk == SPK.MusicStandard || spk == SPK.AvMusic)
            {
                list.Add(new FunctionAttributes
                {
                    key = FunctionAttributeKey.OnOff,
                    curValue = string.Empty,
                });
                list.Add(new FunctionAttributes
                {
                    key = FunctionAttributeKey.Volume,
                    curValue = string.Empty,
                });
                list.Add(new FunctionAttributes
                {
                    key = FunctionAttributeKey.SongName,
                    curValue = string.Empty,
                });
            }
            else if (spk == SPK.ElectricalTvHisense)
            {
                list.Add(new FunctionAttributes
                {
                    key = FunctionAttributeKey.OnOff,
                    curValue = string.Empty,
                });
                list.Add(new FunctionAttributes
                {
                    key = FunctionAttributeKey.SetVolume,
                    curValue = string.Empty,
                });
                list.Add(new FunctionAttributes
                {
                    key = FunctionAttributeKey.Signal,
                    curValue = string.Empty,
                });
            }
            else
            {
                list.AddRange(attributes);
            }
            foreach (var attr in list)
            {
                if (attr.key == FunctionAttributeKey.ColorfulBegin || attr.key == FunctionAttributeKey.ColorfulEnd || attr.key == FunctionAttributeKey.ColorfulTime)
                {
                    continue;
                }
                //窗帘同时发送开关跟百分比会有问题,
                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";
                }
                switch (attr.key)
                {
                    case FunctionAttributeKey.SetTemp:
                        var tt = GetAttribute(FunctionAttributeKey.TempType);
                        if (tt == null)
                        {
                            attr.unit = "°C";
                        }
                        else
                        {
                            if (tt.unit == string.Empty)
                            {
                                attr.unit = "°C";
                            }
                            else
                            {
                                if (tt.unit == "C")
                                {
                                    attr.unit = "°C";
                                }
                                else if (tt.unit == "F")
                                {
                                    attr.unit = "°F";
                                }
                                else
                                {
                                    attr.unit = tt.unit;
                                }
                            }
                        }
                        break;
                    case FunctionAttributeKey.RoomTemp:
                        attr.unit = "°C";
                        var tempType = attributes.Find((obj) => obj.key == FunctionAttributeKey.TempType);
                        if (tempType != null)
                        {
                            attr.unit = tempType.curValue.ToString();
                        }
                        break;
                    case FunctionAttributeKey.Percent:
                    case FunctionAttributeKey.Brightness:
                        attr.unit = "%";
                        break;
                    case FunctionAttributeKey.CCT:
                        attr.unit = "K";
                        break;
                    case FunctionAttributeKey.Angle:
                        attr.unit = "°";
                        break;
                }
                switch (attr.key)
                {
                    case FunctionAttributeKey.SongName:
                    case FunctionAttributeKey.Volume:
                    case FunctionAttributeKey.SetVolume:
                    case FunctionAttributeKey.Signal:
                    case FunctionAttributeKey.OnOff:
                    case FunctionAttributeKey.Brightness:
                    case FunctionAttributeKey.Mode:
@@ -725,11 +1016,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";
                            }
@@ -751,7 +1046,7 @@
                                    }
                                }
                            }
                            else if(attr.key == "security")
                            else if (attr.key == "security")
                            {
                                attr.curValue = "false";
                            }
@@ -768,13 +1063,26 @@
                            {
                                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 = attr.unit,
                                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 = attr.unit,
                                key = attr.key,
                                value = attr.curValue.ToString(),
                                max = attr.max,
                                min = attr.min
                            });
                        }
                        break;
                }
            }
@@ -786,6 +1094,11 @@
        /// 更新时间
        /// </summary>
        public DateTime refreshTime = DateTime.MinValue;
        /// <summary>
        /// 最后更新状态的时间
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public DateTime updateTime = DateTime.MinValue;
        /// <summary>
        /// 获取本地控制数据
@@ -920,6 +1233,10 @@
        /// 云端负责生成
        /// </summary>
        public string deviceId = "0";
        /// <summary>
        /// 在线状态
        /// </summary>
        public bool online = true;
        public List<AttributesStatus> status = new List<AttributesStatus>();
    }
    /// <summary>
@@ -979,6 +1296,10 @@
        /// 当前值
        /// </summary>
        public object curValue = new object();
        /// <summary>
        /// 属性单位
        /// </summary>
        public string unit = string.Empty;
    }
    /// <summary>
@@ -986,6 +1307,118 @@
    /// </summary>
    public static class FunctionAttributeKey
    {
        #region 空调bus属性
        /// <summary>
        /// 制冷模式温度
        /// </summary>
        public const string CoolTemperatrue = "CoolTemperatrue";
        /// <summary>
        /// 制热模式温度
        /// </summary>
        public const string HeatTemperatrue = "HeatTemperatrue";
        /// <summary>
        /// 自动模式温度
        /// </summary>
        public const string AutoTemperatrue = "AutoTemperatrue";
        /// <summary>
        /// 除湿模式温度
        /// </summary>
        public const string DehumiTemperatrue = "DehumiTemperatrue";
        #endregion
        #region 空调bus属性
        /// <summary>
        /// [4]普通:设置温度(摄氏0-100,华氏32-212)/功率值(0-10) (1byte)
        /// </summary>
        public const string NormalTemperatrue = "NormalTemperatrue";
        /// <summary>
        /// [5]白天:设置温度(摄氏0-100,华氏32-212)/功率值(0-10) (1byte)
        /// </summary>
        public const string DayTemperatrue = "DayTemperatrue";
        /// <summary>
        /// [6]夜晚:设置温度(摄氏0-100,华氏32-212)/功率值(0-10) (1byte)
        /// </summary>
        public const string NightTemperatrue = "NightTemperatrue";
        /// <summary>
        /// [7]离开:设置温度(摄氏0-100,华氏32-212)/功率值(0-10) (1byte)
        /// </summary>
        public const string AwayTemperatrue = "AwayTemperatrue";
        #region 三相空开属性
        /// <summary>
        /// A相功率
        /// </summary>
        public const string PowerA = "power_a";
        /// <summary>
        /// B相功率
        /// </summary>
        public const string PowerB = "power_b";
        /// <summary>
        /// C相功率
        /// </summary>
        public const string PowerC = "power_c";
        /// <summary>
        /// A相电压
        /// </summary>
        public const string VoltageA = "voltage_a";
        /// <summary>
        /// B相电压
        /// </summary>
        public const string VoltageB = "voltage_b";
        /// <summary>
        /// C相电压
        /// </summary>
        public const string VoltageC = "voltage_c";
        /// <summary>
        /// A相电流
        /// </summary>
        public const string CurrentA = "current_a";
        /// <summary>
        /// B相电流
        /// </summary>
        public const string CurrentB = "current_b";
        /// <summary>
        /// C相电流
        /// </summary>
        public const string CurrentC = "current_c";
        /// <summary>
        /// A相温度
        /// </summary>
        public const string TempA = "temp_a";
        /// <summary>
        /// B相温度
        /// </summary>
        public const string TempB = "temp_b";
        /// <summary>
        /// C相温度
        /// </summary>
        public const string TempC = "temp_c";
        /// <summary>
        /// 过流值
        /// </summary>
        public const string MaxCurrent = "max_current";
        /// <summary>
        /// 过温值
        /// </summary>
        public const string MaxTemp = "max_temp";
        /// <summary>
        /// A相电量
        /// </summary>
        public const string ElectricityA = "electricity_a";
        /// <summary>
        /// B相电量
        /// </summary>
        public const string ElectricityB = "electricity_b";
        /// <summary>
        /// C相电量
        /// </summary>
        public const string ElectricityC = "electricity_c";
        #endregion
        #endregion
        public const string _null = "";
        /// <summary>
        /// 安防布防状态
@@ -999,6 +1432,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>
@@ -1111,7 +1560,12 @@
        public const string Temperature = "temperature";
        public const string Hcho = "hcho";
        public const string Humidity = "humidity";
        /// <summary>
        /// 照度
        /// </summary>
        public const string Illuminance = "illuminance";
        public const string Pm25 = "pm25";
        public const string Pm10 = "pm10";
        public const string Tvoc = "tvoc";
        /// <summary>
        /// 状态,传感器
@@ -1249,6 +1703,32 @@
        /// </summary>
        public const string TotalElectricity = "total_electricity";
        /// <summary>
        /// 海信tv音量
        /// </summary>
        public const string SetVolume = "set_volume";
        /// <summary>
        /// 海信tv信号源(0:LiveTV;2:PS;3:HDMI_1;4:HDMI_2;5:HDMI_3;6:HDMI_4;11:AV;)
        /// </summary>
        public const string Signal = "signal";
        /// <summary>
        /// 音乐音量
        /// </summary>
        public const string Volume = "volume";
        /// <summary>
        /// 歌曲名
        /// </summary>
        public const string SongName = "song_name";
        /// <summary>
        /// 列表名
        /// </summary>
        public const string PlaylistName = "playlist_name";
        /// <summary>
        /// 播放路径
        /// </summary>
        public const string Url = "url";
    }
    /// <summary>
@@ -1293,7 +1773,8 @@
                try
                {
                    return Convert.ToByte(loopId, 16);
                } catch
                }
                catch
                {
                    return 0;
                }
@@ -1308,9 +1789,31 @@
    public static class SPK
    {
        /// <summary>
        /// 未知SPK
        /// (自定义)
        /// </summary>
        public const string NULL = "NULL";
        /// <summary>
        /// 电梯
        /// </summary>
        public const string Elevator = "Elevator";
        /// <summary>
        /// 西墨可视对讲门口机
        /// (自定义)
        /// </summary>
        public const string LinphoneXiMo = "door.gate";
        /// <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>
@@ -1319,11 +1822,32 @@
        /// 机械手
        /// </summary>
        public const string MechanicalArm = "electrical.mechanical_arm";
        /// <summary>
        /// 空调科技系统(绿建)
        /// 总控
        /// </summary>
        public const string AcstParent = "acst.parent";
        /// <summary>
        /// 空调科技系统(绿建)
        /// 子控
        /// </summary>
        public const string AcstSub = "acst.sub";
        /// <summary>
        /// 热水器
        /// 金茂
        /// </summary>
        public const string WaterHeaterJinmao = "electrical.water_heater.jinmao";
        /// <summary>
        /// 逆变器/新能源
        /// 金茂
        /// </summary>
        public const string InverterJinmao = "energy.inverter.jinmao";
        /// <summary>
        /// 门锁
        /// </summary>
        public const string DoorLock = "security.door";
        /// <summary>
        /// 门锁spk列表
        /// </summary>
@@ -1336,6 +1860,63 @@
        }
        /// <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>
@@ -1426,6 +2007,14 @@
        /// 空调
        /// </summary>
        public const string HvacAC = "hvac.ac";
        /// <summary>
        /// 面板空调
        /// </summary>
        public const string HvacAcPanel = "hvac.ac_panel";
        /// <summary>
        /// 毛细管空调
        /// </summaryc
        public const string HvacCac = "hvac.cac";
        /// <summary>
        /// 空调spk列表
@@ -1436,7 +2025,9 @@
            var spkList = new List<string>();
            spkList.Add(AcStandard);
            spkList.Add(HvacAC);
            spkList.Add(HvacAcPanel);
            spkList.Add(AcIr);
            spkList.Add(HvacCac);
            return spkList;
        }
        #endregion
@@ -1450,6 +2041,10 @@
        /// 地暖
        /// </summary>
        public const string HvacFloorHeat = "hvac.floorHeat";
        /// <summary>
        /// 面板地暖
        /// </summary>
        public const string HvacFloorHeatPanel = "hvac.floorHeat_panel";
        /// <summary>
        /// 地热spk列表
@@ -1459,7 +2054,7 @@
        {
            var spkList = new List<string>();
            spkList.Add(FloorHeatStandard);
            spkList.Add(HvacFloorHeat);
            spkList.Add(HvacFloorHeat); spkList.Add(HvacFloorHeatPanel);
            return spkList;
        }
        #endregion
@@ -1473,6 +2068,14 @@
        /// 新风
        /// </summary>
        public const string HvacAirFresh = "hvac.airFresh";
        /// <summary>
        /// 新风 ——金茂定制
        /// </summary>
        public const string AirFreshJinmao = "airFresh.jinmao";
        /// <summary>
        /// 新风 ——金茂定制
        /// </summary>
        public const string HvacAirFreshJinmao = "hvac.airFresh.jinmao";
        /// <summary>
        /// 新风spk列表
@@ -1482,12 +2085,22 @@
        {
            var spkList = new List<string>();
            spkList.Add(AirFreshStandard);
            spkList.Add(AirFreshJinmao);
            spkList.Add(HvacAirFresh);
            spkList.Add(HvacAirFreshJinmao);
            return spkList;
        }
        #endregion
        #region 能源
        /// <summary>
        /// 逆变器
        /// </summary>
        public const string Inverter = "energy.inverter";
        /// <summary>
        /// 三相逆变器
        /// </summary>
        public const string InverterRst = "energy.inverter_rst";
        /// <summary>
        /// 能源模块
        /// </summary>
@@ -1505,6 +2118,8 @@
        {
            var spkList = new List<string>();
            spkList.Add(ElectricEnergy);
            spkList.Add(AirSwitch);
            spkList.Add(AirSwitchP3);
            return spkList;
        }
        #endregion
@@ -1543,6 +2158,10 @@
        /// (红外移动传感器)
        /// </summary>
        public const string SensorPir = "sensor.pir";
        /// <summary>
        /// 人体存在传感器
        /// </summary>
        public const string SensorPirHold = "sensor.pir_hold";
        /// <summary>
        /// (门窗传感器)
        /// </summary>
@@ -1598,6 +2217,7 @@
            var spkList = new List<string>();
            //spkList.Add(SensorLight);
            spkList.Add(SensorPir);
            spkList.Add(SensorPirHold);
            spkList.Add(SensorHelp);
            spkList.Add(SensorDoorWindow);
            spkList.Add(SensorSmoke);
@@ -1687,10 +2307,11 @@
            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);
            spkList.Add(SensorLight);
            return spkList;
        }
        /// <summary>
@@ -1707,6 +2328,7 @@
            spkList.Add(SensorTVOC);
            spkList.Add(SensorHumidity);
            spkList.Add(SensorHcho);
            spkList.Add(SensorLight);
            return spkList;
        }
@@ -1717,9 +2339,10 @@
        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;
        }
@@ -1727,6 +2350,10 @@
        #endregion
        #region 家电
        /// <summary>
        /// 海信电视
        /// </summary>
        public const string ElectricalTvHisense = "electrical.tv.hisense";
        /// <summary>
        /// 家电、插座
        /// </summary>
@@ -1779,7 +2406,7 @@
        /// <summary>
        /// 红外热水器
        /// </summary>
        public const string HeaterIr = " ir.water_heater";
        public const string HeaterIr = "ir.water_heater";
        /// <summary>
        /// 红外风扇
        /// </summary>
@@ -1788,6 +2415,10 @@
        /// 智能空开
        /// </summary>
        public const string AirSwitch = "electrical.breaker";
        /// <summary>
        /// 三相智能空开
        /// </summary>
        public const string AirSwitchP3 = "electrical.breakerP3";
        #region 涂鸦
        /// <summary>
@@ -1841,6 +2472,7 @@
            spkList.Add(ElectricTuyaWaterValve);
            spkList.Add(ElectricTuyaWaterValve2);
            spkList.Add(AirSwitch);
            spkList.Add(ElectricalTvHisense);
            return spkList;
        }
@@ -1869,7 +2501,7 @@
        /// <summary>
        /// HDL可视对讲
        /// </summary>
        public const string doorgate="door.gate";
        public const string doorgate = "door.gate";
        #endregion
        #region 第三方spk列表