wxr
2023-06-06 592974441a4df95fffd9167c90192da1a390b1c2
HDL_ON/Entity/Function/Function.cs
@@ -88,7 +88,7 @@
        {
            var attrs = new List<string>();
            foreach(var attr in  attributes)
            foreach (var attr in attributes)
            {
                attrs.Add(attr.key);
            }
@@ -109,14 +109,36 @@
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetAttrState(string key)
        public string GetAttrState(string key , string defaultValue = "0")
        {
            //一级查询keyValue值
            var attrState = attributes.Find((s) => s.key == key.ToString());
            if (attrState == null || string.IsNullOrEmpty(attrState.state))
            if (attrState == null)
            {
                return defaultValue;
            }
            if (string.IsNullOrEmpty(attrState.state))
            {
                //二级查询keyValue值
                return GetOriginalState(key);
            }
            return attrState.state;
        }
        /// <summary>
        /// 获取初始状态
        /// 默认值:0
        /// </summary>
        /// <param name="key">语雀定义的属性值</param>
        /// <returns></returns>
        public string GetOriginalState(string key)
        {
            var originalState = status.Find((s) => s.key == key.ToString());
            if (originalState == null || string.IsNullOrEmpty(originalState.value))
            {
                return "0";
            }
            return attrState.state;
            return originalState.value;
        }
        /// <summary>
        /// 设置属性状态
@@ -221,12 +243,43 @@
        /// <summary>
        /// 备注
        /// </summary>
        public string name;
        public string name = "";
        /// <summary>
        /// 设备绑定的homeId
        /// </summary>
        private string _homeId = "";
        public string homeId
        {
            get
            {
                if (string.IsNullOrEmpty(_homeId))
                {
                    return DB_ResidenceData.Instance.CurrentRegion.id;
                }
                else
                {
                    return _homeId;
                }
            }
            set
            {
                _homeId = value;
            }
        }
        /// <summary>
        /// 设备ID
        /// 云端负责生成
        /// </summary>
        public string deviceId = "0";
        /// <summary>
        /// 第三方设备扩展id
        /// </summary>
        public string extDevId = string.Empty;
        /// <summary>
        /// 物理设备(模块)型号
        /// </summary>
        public string omodel =string.Empty;
        /// <summary>
        /// 设备spk
        /// </summary>
@@ -327,6 +380,26 @@
        public List<string> roomIds = new List<string>();
        /// <summary>
        /// 存储属性配置
        /// 环境传感器的等级
        /// </summary>
        public List<AttrKeyConfig> attrKeyConfigs = new List<AttrKeyConfig>();
        public List<AttrKeyConfig> GetAttrKeyConfigs(string key)
        {
            if (attrKeyConfigs.Count == 0)
            {
                switch (key)
                {
                    case "pm2.5":
                        //
                        break;
                }
            }
            return attrKeyConfigs;
        }
        /// <summary>
        /// bus协议数据格式
        /// 使用A协议控制时,改属性为空
        /// </summary>
@@ -335,10 +408,27 @@
        /// 是否收藏
        /// </summary>
        public bool collect = false;
        private bool _online = false;
        /// <summary>
        /// 是否在线
        /// </summary>
        public bool online2d = true;
        public bool online
        {
            get
            {
                return true;
            }
            set
            {
                _online = value;
            }
        }
        /// <summary>
        /// 环境面板 绑定的 设备目标sid列表
        /// </summary>
        public List<string> targetSids = new List<string>();
        /// <summary>
        /// 云端数据创建的时间
        /// </summary>
@@ -348,7 +438,17 @@
        /// </summary>
        public string modifyTime = "";
        /// <summary>
        /// 扩展信息
        /// </summary>
        public ExtSet extSet = new ExtSet();
        #endregion
        //public void
        /// <summary>
        /// 延时
        /// </summary>
@@ -358,6 +458,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]
@@ -381,7 +506,7 @@
                        _trait_on_off.curValue = "off";
                    }
                }
                if(_trait_on_off.curValue.ToString() != "on"&& _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
                if (_trait_on_off.curValue.ToString() != "on" && _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
                {
                    _trait_on_off.curValue = "off";
                }
@@ -402,6 +527,14 @@
                SetAttrState(sta.key, sta.value);
            }
        }
        /// <summary>
        /// 功能列表排序
        /// </summary>
        public int FunctionOrderNumber = 9999;
        /// <summary>
        /// 房间列表排序
        /// </summary>
        public int RoomOrderNumber = 9999;
        /// <summary>
@@ -432,13 +565,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)
@@ -448,7 +595,7 @@
                        collect = !collect;
                        IMessageCommon.Current.ShowErrorInfoAlter(result);
                    });
                }else
                } else
                {
                    Application.RunOnMainThread(() =>
                    {
@@ -473,7 +620,7 @@
                }
                else
                {
                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId,roomId);
                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId, roomId);
                }
                //提示错误
                if (result != StateCode.SUCCESS)
@@ -516,9 +663,9 @@
                {
                    roomNameList += ",";
                }
                roomNameList += findRoom.floorName +"-"+ findRoom.roomName;
                roomNameList += findRoom.floorName + "-" + findRoom.roomName;
            }
            if (roomNameList == "" )
            if (roomNameList == "")
            {
                roomNameList = Language.StringByID(StringId.WholeZone);
            }
@@ -621,6 +768,18 @@
            var sFunc = new SceneFunction();
            foreach (var attr in attributes)
            {
                //窗帘同时发送开关跟百分比会有问题,
                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;
                        }
                    }
                }
                switch (attr.key)
                {
                    case FunctionAttributeKey.OnOff:
@@ -631,14 +790,16 @@
                    case FunctionAttributeKey.Percent:
                    case FunctionAttributeKey.CCT:
                    case FunctionAttributeKey.RGB:
                    //case FunctionAttributeKey.FadeTime:
                    case FunctionAttributeKey.Angle:
                    case "security":
                        //case FunctionAttributeKey.FadeTime:
                        if (attr.curValue.ToString() == "{}")
                        {
                            if (attr.key == FunctionAttributeKey.OnOff)
                            {
                                attr.curValue = "off";
                            }
                            else if (attr.key == FunctionAttributeKey.Mode )
                            else if (attr.key == FunctionAttributeKey.Mode)
                            {
                                if (DB_ResidenceData.Instance.GatewayType == 0)
                                {
@@ -656,7 +817,11 @@
                                    }
                                }
                            }
                            else
                            else if(attr.key == "security")
                            {
                                attr.curValue = "false";
                            }
                            else
                            {
                                attr.curValue = "0";
                            }
@@ -709,7 +874,7 @@
            return sendDataObj;
        }
        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId,string extStr)
        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId, string extStr)
        {
            var sendDataObj = new AlinkDoorlockObj();
            sendDataObj.id = Control.Ins.msg_id.ToString();
@@ -856,6 +1021,11 @@
        /// </summary>
        public List<string> value = new List<string>();
        /// <summary>
        /// 步进
        /// 空调温度控制 0.5 1
        /// </summary>
        public string step = "1";
        /// <summary>
        /// 最大值
        /// </summary>
        public int max = 100;
@@ -884,6 +1054,10 @@
    {
        public const string _null = "";
        /// <summary>
        /// 安防布防状态
        /// </summary>
        public const string Security = "security";
        /// <summary>
        /// 开关
        /// </summary>
        public const string OnOff = "on_off";
@@ -895,6 +1069,7 @@
        /// 颜色
        /// </summary>
        public const string RGB = "rgb";
        public const string RGBW = "rgbw";
        /// <summary>
        /// 渐变时间
        /// </summary>
@@ -957,9 +1132,42 @@
        /// </summary>
        public const string Percent = "percent";
        /// <summary>
        /// 角度
        /// </summary>
        public const string Angle = "angle";
        /// <summary>
        /// 室内温度
        /// </summary>
        public const string RoomTemp = "room_temp";
        /// <summary>
        /// 室内湿度
        /// </summary>
        public const string RoomHumidity = "room_humidity";
        /// <summary>
        /// 露点温度
        /// </summary>
        public const string dew_point_temp = "dew_point_temp";
        /// <summary>
        /// 表面温度
        /// </summary>
        public const string surface_temp = "surface_temp";
        /// <summary>
        /// 室内湿度补偿值
        /// </summary>
        public const string room_humidity_cc = "room_humidity_cc";
        /// <summary>
        /// 室内温度补偿值
        /// </summary>
        public const string room_temp_cc = "room_temp_cc";
        /// <summary>
        /// 毛细阀门
        /// </summary>
        public const string cac_valve = "cac_valve";
        /// <summary>
        /// 地暖阀门
        /// </summary>
        public const string fh_valve = "fh_valve";
        /// <summary>
        /// value
        /// </summary>
@@ -991,6 +1199,16 @@
        /// 毫米波传感器,动作状态
        /// </summary>
        public const string ActionStatus = "action_state";
        /// <summary>
        ///
        /// </summary>
        public const string PeopleNum = "people_num";
        public const string PeopleId = "people_id";
        /// <summary>
        /// 毫米波传感器 人物动作
        /// </summary>
        public const string TargetStatus = "target_status";//0空,1走,2跑,3坐,4跌倒,5站
        /// <summary>
        /// 电量状态
        /// </summary>
@@ -1055,6 +1273,7 @@
        /// 打开等级(风扇)
        /// </summary>
        public const string OpenLevel = "openLevel";
        public const string fan_speed_percent = "fan_speed_percent";
        /// <summary>
        /// 红外按键
        /// </summary>
@@ -1140,7 +1359,7 @@
                try
                {
                    return Convert.ToByte(loopId, 16);
                }catch
                } catch
                {
                    return 0;
                }
@@ -1149,21 +1368,88 @@
        public string loopId;
    }
    /// <summary>
    /// Tag 功能SPK
    /// </summary>
    public static class SPK
    {
        /// <summary>
        /// 群控(自定义)
        /// </summary>
        public const string GroupControl = "GroupControl";
        /// <summary>
        /// 通用开关
        /// </summary>
        public const string OtherCommon = "other.common";
        /// <summary>
        /// 大华摄像头
        /// </summary>
        public const string IpCam_Imou = "security.ipcam.imou";
        /// <summary>
        /// 机械手
        /// </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 DoorLock = "security.door";
        /// <summary>
        /// 门锁spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> GetDoorLockSPKList()
        {
            var list = new List<string>();
            list.Add(DoorLock);
            return list;
        }
        /// <summary>
        /// 猫眼
        /// </summary>
        public const string Peephole = "peephole";
        /// <summary>
        /// 萤石视频门锁
        /// </summary>
        public const string VideoDoorLock="security.door.ezviz";
        /// <summary>
        /// 萤石摄像头
        /// </summary>
        public const string Ev_Ipcam = "security.ipcam.ez";
        /// <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> GetEvIpcamSPKList()
        {
            var list = new List<string>();
            list.Add(Ev_Ipcam);
            return list;
        }
        #region 灯光
        /// <summary>
@@ -1220,6 +1506,10 @@
        /// (卷帘)
        /// </summary>
        public const string CurtainRoller = "curtain.roller";
        /// <summary>
        /// 梦幻帘
        /// </summary>
        public const string CurtainDream = "curtain.dream";
        /// <summary>
        /// 窗帘spk列表
@@ -1232,6 +1522,7 @@
            spkList.Add(CurtainSwitch);
            spkList.Add(CurtainShades);
            spkList.Add(CurtainTrietex);
            spkList.Add(CurtainDream);
            return spkList;
        }
        #endregion
@@ -1244,11 +1535,15 @@
        /// <summary>
        /// (红外空调)
        /// </summary>
        public const string AcIr= "ir.ac";
        public const string AcIr = "ir.ac";
        /// <summary>
        /// 空调
        /// </summary>
        public const string HvacAC = "hvac.ac";
        /// <summary>
        /// 毛细管空调
        /// </summaryc
        public const string HvacCac = "hvac.cac";
        /// <summary>
        /// 空调spk列表
@@ -1260,6 +1555,7 @@
            spkList.Add(AcStandard);
            spkList.Add(HvacAC);
            spkList.Add(AcIr);
            spkList.Add(HvacCac);
            return spkList;
        }
        #endregion
@@ -1322,6 +1618,14 @@
        #region 能源
        /// <summary>
        /// 逆变器
        /// </summary>
        public const string Inverter = "energy.inverter";
        /// <summary>
        /// 三相逆变器
        /// </summary>
        public const string InverterRst = "energy.inverter_rst";
        /// <summary>
        /// 能源模块
        /// </summary>
        public const string EnergyStandard = "energy.standard";
@@ -1377,6 +1681,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";
@@ -1415,6 +1723,14 @@
        public const string SenesorMegahealth = "sensor.megahealth";
        public const string SenesorMegahealth2 = "sensor.megahealth.zg";
        /// <summary>
        /// 毫米波传感器(姿态版)
        /// </summary>
        public const string SensorMmvPose = "sensor.mmv_pose";
        /// <summary>
        /// 紧急呼叫
        /// </summary>
        public const string SensorHelp = "sensor.help";
        /// <summary>
        /// 安防传感器spk列表
        /// </summary>
        /// <returns></returns>
@@ -1423,6 +1739,8 @@
            var spkList = new List<string>();
            //spkList.Add(SensorLight);
            spkList.Add(SensorPir);
            spkList.Add(SensorPirHold);
            spkList.Add(SensorHelp);
            spkList.Add(SensorDoorWindow);
            spkList.Add(SensorSmoke);
            spkList.Add(SensorWater);
@@ -1434,11 +1752,29 @@
            spkList.Add(SensorDryContact2);
            spkList.Add(SenesorMegahealth);
            spkList.Add(SenesorMegahealth2);
            spkList.Add(SensorMmvPose);
            return spkList;
        }
        #endregion
        public const string PanelEnvironment = "screen.panel";
        /// <summary>
        /// 面板spk列表
        /// </summary>
        /// <returns></returns>
        public static List<string> PanelSpkList()
        {
            var spkList = new List<string>();
            spkList.Add(SensorHelp);
            spkList.Add(PanelEnvironment);
            return spkList;
        }
        #region 环境传感器
        /// <summary>
        /// (PM10传感器)
        /// </summary>
        public const string SensorPm10 = "sensor.pm10";
        /// <summary>
        /// (温度传感器)
        /// </summary>
@@ -1488,11 +1824,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);
@@ -1506,6 +1843,7 @@
        {
            var spkList = new List<string>();
            spkList.Add(SensorTemperature);
            spkList.Add(SensorPm10);
            spkList.Add(SensorPm25);
            spkList.Add(SensorCO2);
            spkList.Add(SensorTVOC);
@@ -1521,7 +1859,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;
@@ -1669,6 +2007,13 @@
        }
        #endregion
        #region 可视对讲
        /// <summary>
        /// HDL可视对讲
        /// </summary>
        public const string doorgate="door.gate";
        #endregion
        #region 第三方spk列表
        /// <summary>
        /// 获取所有第三方品牌功能的spk
@@ -1685,6 +2030,7 @@
            spkList.Add(ElectricTuyaWaterValve2);
            spkList.Add(ElectricTuyaWeepRobot);
            spkList.Add(ElectricTuyaWeepRobot2);
            spkList.Add(SensorMmvPose);
            spkList.Add(SenesorMegahealth);
            spkList.Add(SenesorMegahealth2);
            return spkList;
@@ -1710,7 +2056,7 @@
                    list.Add(ElectricTuyaWeepRobot2);
                    break;
                case BrandType.All3tyBrand:
                    list.Add(SenesorMegahealth);//兆观
                    list.Add(SenesorMegahealth2);//兆观
                    break;
            }
            return list;
@@ -1797,9 +2143,60 @@
    //}
public class VersionInfo
{
    public string module = "";
    public string version = "";
}
    public class VersionInfo
    {
        public string module = "";
        public string version = "";
    }
    /// <summary>
    /// 功能属性相关配置信息
    /// 环境传感器等级使用
    /// </summary>
    public class AttrKeyConfig
    {
        public string key = string.Empty;
        /// <summary>
        /// 配置类型
        /// interval 区间
        /// 目前只支持:interval
        /// </summary>
        public string type = string.Empty;
        public string unit = string.Empty;
        public List<AttrKeyInfo> configs = new List<AttrKeyInfo>();
    }
    public class AttrKeyInfo
    {
        /// <summary>
        ///
        /// </summary>
        public string start = string.Empty;
        /// <summary>
        ///
        /// </summary>
        public string end = string.Empty;
        /// <summary>
        ///
        /// </summary>
        public string color = string.Empty;
        /// <summary>
        /// 描述
        /// </summary>
        public string desc = string.Empty;
    }
    /// <summary>
    /// 扩展信息设置
    /// </summary>
    public class ExtSet
    {
        /// <summary>
        /// 是否开启实验室模式
        /// </summary>
        public bool labModel = false;
    }
}