黄学彪
2020-12-16 0d9f64668fd7350d6a21fd157e32009a96d98134
ZigbeeApp/Shared/Phone/Common/Common/TemplateDataCommon.cs
old mode 100755 new mode 100644
File was renamed from ZigbeeApp/Shared/Phone/TemplateData/TemplateDataCommon.cs
@@ -1,964 +1,966 @@
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.TemplateData
{
    #region ■ 共通模板数据定义___________________
    /// <summary>
    /// 模板缓存数据
    /// </summary>
    public class TemplateMemoryData
    {
        //★ テンプレートファイルに保存されたパラメーター ★ ↓
        /// <summary>
        /// 模板的名字
        /// </summary>
        public string TemplateName = string.Empty;
        /// <summary>
        /// 全部的设备配置缓存数据(主键是本地设备的主键)
        /// </summary>
        public Dictionary<string, List<TemplateDeviceDataCommon>> dicDeviceTemplateData = new Dictionary<string, List<TemplateDeviceDataCommon>>();
        /// <summary>
        /// 网关对象数据
        /// </summary>
        public Dictionary<string, ZigBee.Device.ZbGateway> dicGatewayInfo = new Dictionary<string, ZigBee.Device.ZbGateway>();
        /// <summary>
        /// 设备对象数据(key:设备Mac)
        /// </summary>
        public Dictionary<string, List<ZigBee.Device.CommonDevice>> dicDeviceInfo = new Dictionary<string, List<ZigBee.Device.CommonDevice>>();
        /// <summary>
        /// 模板中设备各自真实设备对应的房间(keys:设备Mac或者网关ID,  value:房间ID)
        /// </summary>
        public Dictionary<string, string> dicDeviceTemplateRealRoom = new Dictionary<string, string>();
        //★ テンプレートに保存されたパラメーター ★ ↑
        /// <summary>
        /// 临时缓存:模板中各自端点所处的房间(keys:设备主键 value:房间ID) 旨在针对设备来回选择模板的情况
        /// </summary>
        public Dictionary<string, string> dicDeviceTemplateRoom = new Dictionary<string, string>();
        /// <summary>
        /// 临时缓存:模板中各自端点所保存的内容(keys:模板中设备主键),设备选择模板时,模板数据迁移使用,因为是引用类型,所以需要重新New
        /// </summary>
        public Dictionary<string, List<TemplateDeviceContent>> dicDeviceFileContent = new Dictionary<string, List<TemplateDeviceContent>>();
        //★ 別のファイルに保存されたパラメーター ★ ↓
        /// <summary>
        /// 设备选择的模板对象(keys:本地设备的Mac value:模板中的Mac)
        /// </summary>
        public Dictionary<string, string> dicDeviceTemplateSelect = new Dictionary<string, string>();
        /// <summary>
        /// 网关对象选择的模板对象(keys:本地网关ID,  value:模板中的网关ID)
        /// </summary>
        public Dictionary<string, string> dicGatewayTemplateSelect = new Dictionary<string, string>();
        //★ 別のファイルに保存されたパラメーター ★ ↑
    }
    /// <summary>
    /// 一个设备的模板数据的共通
    /// </summary>
    public class TemplateDeviceDataCommon
    {
        /// <summary>
        /// 设备Mac地址
        /// </summary>
        public string DeviceMac = string.Empty;
        /// <summary>
        /// 设备端点
        /// </summary>
        public int DeviceEpoint = -1;
        /// <summary>
        /// 发送需要的大概时间(秒)
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public int SendTime { get { return this.GetSendTime(); } }
        /// <summary>
        /// 数据保存的区分(不需要再次设置)
        /// </summary>
        public ModelDeviceSaveEnum DataSaveDiv = ModelDeviceSaveEnum.A未定义;
        /// <summary>
        /// 接收的主题(考虑多条命令,正常都是1条命令)
        /// </summary>
        public List<string> ListReceiveTopic = new List<string>();
        /// <summary>
        /// 接收的结果(考虑多条命令,正常都是1条命令)
        /// </summary>
        public List<string> ListReceiveResult = new List<string>();
        /// <summary>
        /// 发送的主题(考虑多条命令,正常都是1条命令)
        /// </summary>
        public List<string> ListSendTopic = new List<string>();
        /// <summary>
        /// 获取更改设备配置的命令字符(考虑多条命令,正常都是1条命令)
        /// </summary>
        /// <returns></returns>
        public virtual List<string> GetSendGatewayValue()
        {
            return new List<string>();
        }
        /// <summary>
        /// 发送需要的大概时间(秒)
        /// </summary>
        /// <returns></returns>
        public virtual int GetSendTime()
        {
            return 0;
        }
        /// <summary>
        /// 获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public virtual List<string> GetFailMsg()
        {
            return new List<string>();
        }
        /// <summary>
        /// 变更Mac缓存(在网关执行完成导入之后执行)
        /// </summary>
        public virtual void ChangedMacMemmory()
        {
        }
    }
    /// <summary>
    /// 模板设备的版本信息
    /// </summary>
    public class TemplateDeviceVersionInfo
    {
        //目前只有 版本变量
        /// <summary>
        /// 当前版本
        /// </summary>
        public int Version = -1;
    }
    /// <summary>
    /// 模板设备在文件中的内容
    /// </summary>
    public class TemplateDeviceContent
    {
        /// <summary>
        /// 保存区分 参照:ModelDeviceSaveEnum
        /// </summary>
        public ModelDeviceSaveEnum saveDiv = ModelDeviceSaveEnum.A未定义;
        /// <summary>
        /// 有点用处
        /// </summary>
        public string DeviceMac = string.Empty;
        /// <summary>
        /// 文件中保存的内容
        /// </summary>
        public string FileContent = string.Empty;
    }
    /// <summary>
    /// 可选模板的内容
    /// </summary>
    public class TemplateCanSelectContent
    {
        /// <summary>
        /// 设备Mac
        /// </summary>
        public string DeviceMac = string.Empty;
        /// <summary>
        /// 设备Mac名字
        /// </summary>
        public string DeviceName = string.Empty;
        /// <summary>
        /// 该设备所在的房间
        /// </summary>
        public string RoomName = string.Empty;
    }
    /// <summary>
    /// 本地模板的基本信息
    /// </summary>
    public class LocalModelBaseInfo
    {
        /// <summary>
        /// <para>保存数据的文件名字(不需要保存到文件夹中)</para>
        /// <para>ModelData_Local_yyyyMMdd_HHmmss.bin -> 本地模板</para>
        /// <para>ModelData_Cloud_yyyyMMdd_HHmmss.bin -> 本地模板</para>
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string FileName = string.Empty;
        /// <summary>
        /// 是否是本地模板
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool IsLocalTemplate
        {
            get { return FileName.StartsWith("ModelData_Local"); }
        }
        /// <summary>
        /// 单元标题(这个目前是给查看模板使用的)
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<string> ListUintName = new List<string>();
        /// <summary>
        /// 单元名称(这个目前是给查看模板使用的)
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<string> ListUintContent = new List<string>();
        /// <summary>
        /// 当前住宅的地图位置名称
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string ResidenceAddressName = string.Empty;
        /// <summary>
        /// 模板名字
        /// </summary>
        public string ModelName = string.Empty;
        /// <summary>
        /// 编辑时间 2020.01.04 19:55格式
        /// </summary>
        public string EditorTime = string.Empty;
        /// <summary>
        /// 楼层数
        /// </summary>
        public int FloorCount = 0;
        /// <summary>
        /// 设备数
        /// </summary>
        public int DeviceCount = 0;
        /// <summary>
        /// 功能数
        /// </summary>
        public int FunctionCount = 0;
    }
    /// <summary>
    /// 云端模板的基本信息
    /// </summary>
    public class CloundModelBaseInfo
    {
        /// <summary>
        /// 模板名字
        /// </summary>
        public string TemplateName = string.Empty;
        /// <summary>
        /// 编辑时间 2020.01.04 19:55格式
        /// </summary>
        public string CreatedOnUtc = string.Empty;
        /// <summary>
        /// 主键
        /// </summary>
        public string Id = string.Empty;
    }
    /// <summary>
    /// 模板住宅的信息
    /// </summary>
    public class TemplateHomeInfo
    {
        /// <summary>
        /// 单元标题
        /// </summary>
        public List<string> ListUintName = new List<string>();
        /// <summary>
        /// 单元名称
        /// </summary>
        public List<string> ListUintContent = new List<string>();
        /// <summary>
        /// 当前住宅的地图位置名称
        /// </summary>
        public string ResidenceAddressName = string.Empty;
    }
    #endregion
    #region ■ 窗帘模板数据定义___________________
    /// <summary>
    /// 窗帘手拉控制模板定义
    /// </summary>
    public class ModelCurtainHandPullControl : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 状态
        /// </summary>
        public bool Statu = false;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceCurtainLogic.Current.GetHandPullControlText(DeviceMac, DeviceEpoint, Statu);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //切换手拉控制失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uChangeHandPullControlFail) };
        }
    }
    /// <summary>
    /// 窗帘限位模板定义
    /// </summary>
    public class ModelCurtainDirectionAndLimite : TemplateDeviceDataCommon
    {
        /// <summary>
        /// false:电机方向正向;true:电机方向反向
        /// </summary>
        public bool Direction = false;
        /// <summary>
        /// 开限位
        /// </summary>
        public int upLimit = 2;
        /// <summary>
        /// 合限位
        /// </summary>
        public int downLimit = 98;
        /// <summary>
        /// 导轨长度
        /// </summary>
        public int curtainLength = 100;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //方向
            var command1 = HdlDeviceCurtainLogic.Current.GetCurtainDirectionCommadText(DeviceMac, DeviceEpoint, Direction);
            //限位
            var command2 = HdlDeviceCurtainLogic.Current.GetAutoOpenCurtainLimitPointCommandText(DeviceMac, DeviceEpoint, upLimit, downLimit);
            return new List<string>() { command1, command2 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置窗帘限位点失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail) };
        }
    }
    #endregion
    #region ■ 空调模板数据定义___________________
    /// <summary>
    /// 空调自定义模式模板数据定义
    /// </summary>
    public class ModelAcModeSupport : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 值
        /// </summary>
        public int data = 0;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceAttributeLogic.Current.GetWriteDeviceAttributeText(DeviceMac, DeviceEpoint, 513, 4099, 25, data);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置空调模式失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetAcModeFail) };
        }
    }
    /// <summary>
    /// 空调摆风模式模板数据定义
    /// </summary>
    public class ModelAcSwingModeSupport : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 值
        /// </summary>
        public int data = 0;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceAttributeLogic.Current.GetWriteDeviceAttributeText(DeviceMac, DeviceEpoint, 513, 4099, 25, data);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置空调摆风失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetAirConditionerSwingFunctionFail) };
        }
    }
    #endregion
    #region ■ 设备绑定模板数据定义_______________
    /// <summary>
    /// 设备绑定模板数据定义
    /// </summary>
    public class ModelDeviceBindData : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 按键的功能模式
        /// </summary>
        public ZigBee.Device.Panel.KeyMode keyMode = ZigBee.Device.Panel.KeyMode.Default;
        /// <summary>
        /// 按键的功能模式的镞ID
        /// </summary>
        public int keyModeClusterID = -1;
        /// <summary>
        /// 绑定列表
        /// </summary>
        public List<ZigBee.Device.BindObj.BindListResponseObj> BindList = new List<ZigBee.Device.BindObj.BindListResponseObj>();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var addBindData = new ZigBee.Device.BindObj.AddBindData();
            addBindData.DeviceAddr = this.DeviceMac;
            addBindData.Epoint = this.DeviceEpoint;
            //当前选择的模板对象
            var dicChangedMac = new Dictionary<string, string>();
            var dicNowSelect = TemplateCommonLogic.Current.modelData.dicDeviceTemplateSelect;
            foreach (var localMac in dicNowSelect.Keys)
            {
                dicChangedMac[dicNowSelect[localMac]] = localMac;
            }
            foreach (var data in BindList)
            {
                //场景
                if (data.BindType == 2)
                {
                    var addData = new ZigBee.Device.BindObj.AddBindListObj();
                    addBindData.BindList.Add(addData);
                    addData.BindCluster = data.BindCluster;
                    addData.BindScenesId = data.BindScenesId;
                    addData.BindType = 1;
                }
                //设备
                else
                {
                    if (dicChangedMac.ContainsKey(data.BindMacAddr) == false)
                    {
                        //这个东西没有选择模板,则不执行
                        continue;
                    }
                    var addData = new ZigBee.Device.BindObj.AddBindListObj();
                    addBindData.BindList.Add(addData);
                    addData.BindCluster = data.BindCluster;
                    addData.BindEpoint = data.BindEpoint;
                    //替换mac
                    addData.BindMacAddr = dicChangedMac[data.BindMacAddr];
                    addData.BindType = 0;
                }
            }
            var listCommand = new List<string>();
            //清空绑定
            listCommand.Add(string.Empty);
            //这个判断是为了针对一路调光器和三路继电器的那个第七回路
            if (this.ListReceiveResult.Count > 0 && string.IsNullOrEmpty(this.ListReceiveResult[0]) == false)
            {
                var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", this.DeviceMac }, { "Epoint", this.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
                listCommand[0] = jObject.ToString();
            }
            //功能配置
            listCommand.Add(string.Empty);
            if (keyModeClusterID != -1)
            {
                var command1 = HdlDeviceBindLogic.Current.GetConfigureHdlKeyCommandText(this.DeviceMac, this.DeviceEpoint, keyMode, keyModeClusterID);
                listCommand[1] = command1;
            }
            //绑定列表
            listCommand.Add(string.Empty);
            if (addBindData.BindList.Count > 0)
            {
                var command2 = HdlDeviceBindLogic.Current.GetAddDeviceListBindCommandText(addBindData);
                listCommand[2] = command2;
            }
            return listCommand;
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要15秒
            return 15;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //清空绑定列表失败 , 设备属性变更失败 , 绑定目标设置失败
            return new List<string> {"清空绑定列表失败"
                ,Language.StringByID(R.MyInternationalizationString.uDeviceAttributeChangedFail)
                ,Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail)};
        }
        /// <summary>
        /// 变更绑定目标的Mac
        /// </summary>
        public override void ChangedMacMemmory()
        {
            //当前选择的模板对象
            var dicChangedMac = new Dictionary<string, string>();
            var dicNowSelect = TemplateCommonLogic.Current.modelData.dicDeviceTemplateSelect;
            foreach (var localMac in dicNowSelect.Keys)
            {
                dicChangedMac[dicNowSelect[localMac]] = localMac;
            }
            foreach (var data in BindList)
            {
                //设备
                if (data.BindType != 2)
                {
                    if (dicChangedMac.ContainsKey(data.BindMacAddr) == false)
                    {
                        //这个东西没有选择模板,则不执行
                        continue;
                    }
                    //替换mac
                    data.BindMacAddr = dicChangedMac[data.BindMacAddr];
                }
            }
            //变更缓存
            TemplateCommonLogic.Current.SaveDeviceMemmoryData(this.DeviceMac, this.DeviceEpoint);
        }
    }
    #endregion
    #region ■ Pir传感器模板数据定义______________
    /// <summary>
    /// Pir传感器模板数据定义
    /// </summary>
    public class ModelPirSensorSettion : TemplateDeviceDataCommon
    {
        /// <summary>
        /// pir的配置信息
        /// </summary>
        public ZigBee.Device.IASZone.ConfigureParamates pirConfigure = new ZigBee.Device.IASZone.ConfigureParamates();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDevicePirSensorLogic.Current.GetPirSensorSettionCommandText(DeviceMac, pirConfigure);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置传感器配置信息失败
            return new List<string> {Language.StringByID(R.MyInternationalizationString.uSetPirSensorSettionFail)};
        }
    }
    #endregion
    #region ■ 面板模板数据定义___________________
    /// <summary>
    /// 面板震动功能模板数据定义
    /// </summary>
    public class ModelPanelVibrationInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 震动功能
        /// </summary>
        public HdlDevicePanelLogic.PanelVibrationInfo vibrationInfo = new HdlDevicePanelLogic.PanelVibrationInfo();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDevicePanelLogic.Current.GetPanelVibrationCommandText(DeviceMac, vibrationInfo);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置震动反馈配置信息失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetVibrationFeedbackSettionFail) };
        }
    }
    /// <summary>
    /// 面板亮度调节模板数据定义
    /// </summary>
    public class ModelPanelBrightnessAdjustInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 按键开状态(指示)亮度(这个是点击后的值,或者 1-6干接点的背光灯)
        /// </summary>
        public int panelDirectionsLevel = -1;
        /// <summary>
        /// 按键关状态(背光)亮度(这个是点击前的值,或者 第七干接点的背光灯)
        /// </summary>
        public int panelBacklightLevel = -1;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //亮度调节
            var command1 = HdlDevicePanelLogic.Current.GetPanelLevelCommadText(DeviceMac, panelDirectionsLevel, panelBacklightLevel);
            return new List<string>() { command1 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要8秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置亮度调节失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetLightRegulationFail) };
        }
    }
    /// <summary>
    /// 面板节能模式模板数据定义
    /// </summary>
    public class ModelPanelEnergyModeInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 节能模式
        /// </summary>
        public ZigBee.Device.Panel.PanelSaveEnergyModeInfo energyModeInfo = new ZigBee.Device.Panel.PanelSaveEnergyModeInfo();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //节能模式
            var command1 = HdlDevicePanelLogic.Current.GetDeviceEnergyConservationModeCommandText(DeviceMac, energyModeInfo.enable, energyModeInfo.time, energyModeInfo.level);
            return new List<string>() { command1 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要8秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //节能模式配置失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetEnergyConservationFail) };
        }
    }
    /// <summary>
    /// 面板指示灯模板数据定义(也叫背光灯)
    /// </summary>
    public class ModelPanelIndicatorLightInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 按键的颜色数据
        /// </summary>
        public ZigBee.Device.Panel.KeyColorData keyColorData = new ZigBee.Device.Panel.KeyColorData();
        /// <summary>
        /// 和keyColorData一起用的东西
        /// </summary>
        public ZigBee.Device.Panel.KeyNumStatus KeyNum = new ZigBee.Device.Panel.KeyNumStatus();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //按键指示灯颜色
            var command1 = HdlDevicePanelLogic.Current.GetPanelColorCommandText(DeviceMac, keyColorData, KeyNum);
            return new List<string>() { command1 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要8秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置按键面板指示灯颜色失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetPanelPilolightSettionFail) };
        }
    }
    #endregion
    #region ■ 设备名称模板数据定义_______________
    /// <summary>
    /// 设备端点名称模板数据定义
    /// </summary>
    public class ModelDeviceEpointNameInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 设备端点名称
        /// </summary>
        public string deviceEpointName = string.Empty;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = Common.LocalDevice.Current.GetReDeviceEpointNameCommandText(DeviceMac, DeviceEpoint, deviceEpointName);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要3秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设备端点名称修改失败
            return new List<string> { "设备端点名称修改失败" };
        }
    }
    /// <summary>
    /// 设备Mac名称模板数据定义
    /// </summary>
    public class ModelDeviceMacNameInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 设备Mac名称
        /// </summary>
        public string deviceMacName = string.Empty;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = Common.LocalDevice.Current.GetReDeviceMacNameCommandText(DeviceMac, DeviceEpoint, deviceMacName);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要3秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设备名称修改失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uDeviceReNameFail) };
        }
    }
    #endregion
    #region ■ 自定义枚举_________________________
    /// <summary>
    /// 模板设备保存的区分
    /// </summary>
    public enum ModelDeviceSaveEnum
    {
        A未定义 = -1,
        /// <summary>
        /// 对象类:ModelDeviceMacNameInfo
        /// </summary>
        A设备名称 = 1,
        /// <summary>
        /// 对象类:ModelDeviceEpointNameInfo
        /// </summary>
        A端点名称 = 2,
        /// <summary>
        /// 对象类:ModelPirSensorSettion
        /// </summary>
        APir配置 = 3,
        /// <summary>
        /// 对象类:ModelCurtainDirectionAndLimite
        /// </summary>
        A窗帘方向及限位 = 8,
        /// <summary>
        /// 对象类:ModelCurtainHandPullControl
        /// </summary>
        A窗帘手拉控制 = 9,
        /// <summary>
        /// 对象类:ModelAcModeSupport
        /// </summary>
        A空调自定义模式 = 10,
        /// <summary>
        /// 对象类:ModelPanelVibrationInfo
        /// </summary>
        A面板震动功能 = 11,
        /// <summary>
        /// 对象类:ModelAcSwingModeSupport
        /// </summary>
        A空调摆风功能 = 12,
        /// <summary>
        /// 对象类:ModelDeviceBindData
        /// </summary>
        A设备绑定列表 = 14,
        /// <summary>
        /// 对象类:ModelPanelBrightnessAdjustInfo
        /// </summary>
        A面板亮度调节 = 15,
        /// <summary>
        /// 对象类:ModelPanelEnergyModeInfo
        /// </summary>
        A面板节能模式 = 16,
        /// <summary>
        /// 也叫背光灯 对象类:ModelPanelIndicatorLightInfo
        /// </summary>
        A面板指示灯 = 17
    }
    #endregion
}
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone
{
    #region ■ 共通模板数据定义___________________
    /// <summary>
    /// 模板缓存数据
    /// </summary>
    public class TemplateMemoryData
    {
        //★ テンプレートファイルに保存されたパラメーター ★ ↓
        /// <summary>
        /// 模板的名字
        /// </summary>
        public string TemplateName = string.Empty;
        /// <summary>
        /// 全部的设备配置缓存数据(主键是本地设备的主键)
        /// </summary>
        public Dictionary<string, List<TemplateDeviceDataCommon>> dicDeviceTemplateData = new Dictionary<string, List<TemplateDeviceDataCommon>>();
        /// <summary>
        /// 网关对象数据
        /// </summary>
        public Dictionary<string, ZigBee.Device.ZbGateway> dicGatewayInfo = new Dictionary<string, ZigBee.Device.ZbGateway>();
        /// <summary>
        /// 设备对象数据(key:设备Mac)
        /// </summary>
        public Dictionary<string, List<ZigBee.Device.CommonDevice>> dicDeviceInfo = new Dictionary<string, List<ZigBee.Device.CommonDevice>>();
        /// <summary>
        /// 模板中设备各自真实设备对应的房间(keys:设备Mac或者网关ID,  value:房间ID)
        /// </summary>
        public Dictionary<string, string> dicDeviceTemplateRealRoom = new Dictionary<string, string>();
        //★ テンプレートに保存されたパラメーター ★ ↑
        /// <summary>
        /// 临时缓存:模板中各自端点所处的房间(keys:设备主键 value:房间ID) 旨在针对设备来回选择模板的情况
        /// </summary>
        public Dictionary<string, string> dicDeviceTemplateRoom = new Dictionary<string, string>();
        /// <summary>
        /// 临时缓存:模板中各自端点所保存的内容(keys:模板中设备主键),设备选择模板时,模板数据迁移使用,因为是引用类型,所以需要重新New
        /// </summary>
        public Dictionary<string, List<TemplateDeviceContent>> dicDeviceFileContent = new Dictionary<string, List<TemplateDeviceContent>>();
        //★ 別のファイルに保存されたパラメーター ★ ↓
        /// <summary>
        /// 设备选择的模板对象(keys:本地设备的Mac value:模板中的Mac)
        /// </summary>
        public Dictionary<string, string> dicDeviceTemplateSelect = new Dictionary<string, string>();
        /// <summary>
        /// 网关对象选择的模板对象(keys:本地网关ID,  value:模板中的网关ID)
        /// </summary>
        public Dictionary<string, string> dicGatewayTemplateSelect = new Dictionary<string, string>();
        //★ 別のファイルに保存されたパラメーター ★ ↑
    }
    /// <summary>
    /// 一个设备的模板数据的共通
    /// </summary>
    public class TemplateDeviceDataCommon
    {
        /// <summary>
        /// 设备Mac地址
        /// </summary>
        public string DeviceMac = string.Empty;
        /// <summary>
        /// 设备端点
        /// </summary>
        public int DeviceEpoint = -1;
        /// <summary>
        /// 发送需要的大概时间(秒)
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public int SendTime { get { return this.GetSendTime(); } }
        /// <summary>
        /// 数据保存的区分(不需要再次设置)
        /// </summary>
        public ModelDeviceSaveEnum DataSaveDiv = ModelDeviceSaveEnum.A未定义;
        /// <summary>
        /// 接收的主题(考虑多条命令,正常都是1条命令)
        /// </summary>
        public List<string> ListReceiveTopic = new List<string>();
        /// <summary>
        /// 接收的结果(考虑多条命令,正常都是1条命令)
        /// </summary>
        public List<string> ListReceiveResult = new List<string>();
        /// <summary>
        /// 发送的主题(考虑多条命令,正常都是1条命令)
        /// </summary>
        public List<string> ListSendTopic = new List<string>();
        /// <summary>
        /// 获取更改设备配置的命令字符(考虑多条命令,正常都是1条命令)
        /// </summary>
        /// <returns></returns>
        public virtual List<string> GetSendGatewayValue()
        {
            return new List<string>();
        }
        /// <summary>
        /// 发送需要的大概时间(秒)
        /// </summary>
        /// <returns></returns>
        public virtual int GetSendTime()
        {
            return 0;
        }
        /// <summary>
        /// 获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public virtual List<string> GetFailMsg()
        {
            return new List<string>();
        }
        /// <summary>
        /// 变更Mac缓存(在网关执行完成导入之后执行)
        /// </summary>
        public virtual void ChangedMacMemmory()
        {
        }
    }
    /// <summary>
    /// 模板设备的版本信息
    /// </summary>
    public class TemplateDeviceVersionInfo
    {
        //目前只有 版本变量
        /// <summary>
        /// 当前版本
        /// </summary>
        public int Version = -1;
    }
    /// <summary>
    /// 模板设备在文件中的内容
    /// </summary>
    public class TemplateDeviceContent
    {
        /// <summary>
        /// 保存区分 参照:ModelDeviceSaveEnum
        /// </summary>
        public ModelDeviceSaveEnum saveDiv = ModelDeviceSaveEnum.A未定义;
        /// <summary>
        /// 有点用处
        /// </summary>
        public string DeviceMac = string.Empty;
        /// <summary>
        /// 文件中保存的内容
        /// </summary>
        public string FileContent = string.Empty;
    }
    /// <summary>
    /// 可选模板的内容
    /// </summary>
    public class TemplateCanSelectContent
    {
        /// <summary>
        /// 设备Mac
        /// </summary>
        public string DeviceMac = string.Empty;
        /// <summary>
        /// 设备Mac名字
        /// </summary>
        public string DeviceName = string.Empty;
        /// <summary>
        /// 该设备所在的房间
        /// </summary>
        public string RoomName = string.Empty;
    }
    /// <summary>
    /// 本地模板的基本信息
    /// </summary>
    public class LocalModelBaseInfo
    {
        /// <summary>
        /// <para>保存数据的文件名字(不需要保存到文件夹中)</para>
        /// <para>ModelData_Local_yyyyMMdd_HHmmss.bin -> 本地模板</para>
        /// <para>ModelData_Cloud_yyyyMMdd_HHmmss.bin -> 本地模板</para>
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string FileName = string.Empty;
        /// <summary>
        /// 是否是本地模板
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool IsLocalTemplate
        {
            get { return FileName.StartsWith("ModelData_Local"); }
        }
        /// <summary>
        /// 单元标题(这个目前是给查看模板使用的)
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<string> ListUintName = new List<string>();
        /// <summary>
        /// 单元名称(这个目前是给查看模板使用的)
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<string> ListUintContent = new List<string>();
        /// <summary>
        /// 当前住宅的地图位置名称
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string ResidenceAddressName = string.Empty;
        /// <summary>
        /// 模板名字
        /// </summary>
        public string ModelName = string.Empty;
        /// <summary>
        /// 编辑时间 2020.01.04 19:55格式
        /// </summary>
        public string EditorTime = string.Empty;
        /// <summary>
        /// 楼层数
        /// </summary>
        public int FloorCount = 0;
        /// <summary>
        /// 设备数
        /// </summary>
        public int DeviceCount = 0;
        /// <summary>
        /// 功能数
        /// </summary>
        public int FunctionCount = 0;
    }
    /// <summary>
    /// 云端模板的基本信息
    /// </summary>
    public class CloundModelBaseInfo
    {
        /// <summary>
        /// 模板名字
        /// </summary>
        public string TemplateName = string.Empty;
        /// <summary>
        /// 编辑时间 2020.01.04 19:55格式
        /// </summary>
        public string CreateTime = string.Empty;
        /// <summary>
        /// 主键
        /// </summary>
        public string Id = string.Empty;
    }
    /// <summary>
    /// 模板住宅的信息
    /// </summary>
    public class TemplateHomeInfo
    {
        /// <summary>
        /// 单元标题
        /// </summary>
        public List<string> ListUintName = new List<string>();
        /// <summary>
        /// 单元名称
        /// </summary>
        public List<string> ListUintContent = new List<string>();
        /// <summary>
        /// 当前住宅的地图位置名称
        /// </summary>
        public string ResidenceAddressName = string.Empty;
    }
    #endregion
    #region ■ 窗帘模板数据定义___________________
    /// <summary>
    /// 窗帘手拉控制模板定义
    /// </summary>
    public class ModelCurtainHandPullControl : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 状态
        /// </summary>
        public bool Statu = false;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceCurtainLogic.Current.GetHandPullControlText(DeviceMac, DeviceEpoint, Statu);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //切换手拉控制失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uChangeHandPullControlFail) };
        }
    }
    /// <summary>
    /// 窗帘限位模板定义
    /// </summary>
    public class ModelCurtainDirectionAndLimite : TemplateDeviceDataCommon
    {
        /// <summary>
        /// false:电机方向正向;true:电机方向反向
        /// </summary>
        public bool Direction = false;
        /// <summary>
        /// 开限位
        /// </summary>
        public int upLimit = 2;
        /// <summary>
        /// 合限位
        /// </summary>
        public int downLimit = 98;
        /// <summary>
        /// 导轨长度
        /// </summary>
        public int curtainLength = 100;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //方向
            var command1 = HdlDeviceCurtainLogic.Current.GetCurtainDirectionCommadText(DeviceMac, DeviceEpoint, Direction);
            //限位
            var command2 = HdlDeviceCurtainLogic.Current.GetAutoOpenCurtainLimitPointCommandText(DeviceMac, DeviceEpoint, upLimit, downLimit);
            return new List<string>() { command1, command2 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置窗帘限位点失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetCurtainDirectionFail),
                 Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail)
            };
        }
    }
    #endregion
    #region ■ 空调模板数据定义___________________
    /// <summary>
    /// 空调自定义模式模板数据定义
    /// </summary>
    public class ModelAcModeSupport : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 值
        /// </summary>
        public int data = 0;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceAttributeLogic.Current.GetWriteDeviceAttributeText(DeviceMac, DeviceEpoint, 513, 4099, 25, data);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置空调模式失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetAcModeFail) };
        }
    }
    /// <summary>
    /// 空调摆风模式模板数据定义
    /// </summary>
    public class ModelAcSwingModeSupport : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 值
        /// </summary>
        public int data = 0;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceAttributeLogic.Current.GetWriteDeviceAttributeText(DeviceMac, DeviceEpoint, 513, 4099, 25, data);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置空调摆风失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetAirConditionerSwingFunctionFail) };
        }
    }
    #endregion
    #region ■ 设备绑定模板数据定义_______________
    /// <summary>
    /// 设备绑定模板数据定义
    /// </summary>
    public class ModelDeviceBindData : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 按键的功能模式
        /// </summary>
        public ZigBee.Device.Panel.KeyMode keyMode = ZigBee.Device.Panel.KeyMode.Default;
        /// <summary>
        /// 按键的功能模式的镞ID
        /// </summary>
        public int keyModeClusterID = -1;
        /// <summary>
        /// 绑定列表
        /// </summary>
        public List<ZigBee.Device.BindObj.BindListResponseObj> BindList = new List<ZigBee.Device.BindObj.BindListResponseObj>();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var addBindData = new ZigBee.Device.BindObj.AddBindData();
            addBindData.DeviceAddr = this.DeviceMac;
            addBindData.Epoint = this.DeviceEpoint;
            //当前选择的模板对象
            var dicChangedMac = new Dictionary<string, string>();
            var dicNowSelect = HdlTemplateCommonLogic.Current.modelData.dicDeviceTemplateSelect;
            foreach (var localMac in dicNowSelect.Keys)
            {
                dicChangedMac[dicNowSelect[localMac]] = localMac;
            }
            foreach (var data in BindList)
            {
                //场景
                if (data.BindType == 2)
                {
                    var addData = new ZigBee.Device.BindObj.AddBindListObj();
                    addBindData.BindList.Add(addData);
                    addData.BindCluster = data.BindCluster;
                    addData.BindScenesId = data.BindScenesId;
                    addData.BindType = 1;
                }
                //设备
                else
                {
                    if (dicChangedMac.ContainsKey(data.BindMacAddr) == false)
                    {
                        //这个东西没有选择模板,则不执行
                        continue;
                    }
                    var addData = new ZigBee.Device.BindObj.AddBindListObj();
                    addBindData.BindList.Add(addData);
                    addData.BindCluster = data.BindCluster;
                    addData.BindEpoint = data.BindEpoint;
                    //替换mac
                    addData.BindMacAddr = dicChangedMac[data.BindMacAddr];
                    addData.BindType = 0;
                }
            }
            var listCommand = new List<string>();
            //清空绑定
            listCommand.Add(string.Empty);
            //这个判断是为了针对一路调光器和三路继电器的那个第七回路
            if (this.ListReceiveResult.Count > 0 && string.IsNullOrEmpty(this.ListReceiveResult[0]) == false)
            {
                var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", this.DeviceMac }, { "Epoint", this.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
                listCommand[0] = jObject.ToString();
            }
            //功能配置
            listCommand.Add(string.Empty);
            if (keyModeClusterID != -1)
            {
                var command1 = HdlDeviceBindLogic.Current.GetConfigureHdlKeyCommandText(this.DeviceMac, this.DeviceEpoint, keyMode, keyModeClusterID);
                listCommand[1] = command1;
            }
            //绑定列表
            listCommand.Add(string.Empty);
            if (addBindData.BindList.Count > 0)
            {
                var command2 = HdlDeviceBindLogic.Current.GetAddDeviceListBindCommandText(addBindData);
                listCommand[2] = command2;
            }
            return listCommand;
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要15秒
            return 15;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //清空绑定列表失败 , 设备属性变更失败 , 绑定目标设置失败
            return new List<string> {"清空绑定列表失败"
                ,Language.StringByID(R.MyInternationalizationString.uDeviceAttributeChangedFail)
                ,Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail)};
        }
        /// <summary>
        /// 变更绑定目标的Mac
        /// </summary>
        public override void ChangedMacMemmory()
        {
            //当前选择的模板对象
            var dicChangedMac = new Dictionary<string, string>();
            var dicNowSelect = HdlTemplateCommonLogic.Current.modelData.dicDeviceTemplateSelect;
            foreach (var localMac in dicNowSelect.Keys)
            {
                dicChangedMac[dicNowSelect[localMac]] = localMac;
            }
            foreach (var data in BindList)
            {
                //设备
                if (data.BindType != 2)
                {
                    if (dicChangedMac.ContainsKey(data.BindMacAddr) == false)
                    {
                        //这个东西没有选择模板,则不执行
                        continue;
                    }
                    //替换mac
                    data.BindMacAddr = dicChangedMac[data.BindMacAddr];
                }
            }
            //变更缓存
            HdlTemplateCommonLogic.Current.SaveDeviceMemmoryData(this.DeviceMac, this.DeviceEpoint);
        }
    }
    #endregion
    #region ■ Pir传感器模板数据定义______________
    /// <summary>
    /// Pir传感器模板数据定义
    /// </summary>
    public class ModelPirSensorSettion : TemplateDeviceDataCommon
    {
        /// <summary>
        /// pir的配置信息
        /// </summary>
        public ZigBee.Device.IASZone.ConfigureParamates pirConfigure = new ZigBee.Device.IASZone.ConfigureParamates();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDevicePirSensorLogic.Current.GetPirSensorSettionCommandText(DeviceMac, pirConfigure);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置传感器配置信息失败
            return new List<string> {Language.StringByID(R.MyInternationalizationString.uSetPirSensorSettionFail)};
        }
    }
    #endregion
    #region ■ 面板模板数据定义___________________
    /// <summary>
    /// 面板震动功能模板数据定义
    /// </summary>
    public class ModelPanelVibrationInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 震动功能
        /// </summary>
        public HdlDevicePanelLogic.PanelVibrationInfo vibrationInfo = new HdlDevicePanelLogic.PanelVibrationInfo();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDevicePanelLogic.Current.GetPanelVibrationCommandText(DeviceMac, vibrationInfo);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要5秒
            return 5;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置震动反馈配置信息失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetVibrationFeedbackSettionFail) };
        }
    }
    /// <summary>
    /// 面板亮度调节模板数据定义
    /// </summary>
    public class ModelPanelBrightnessAdjustInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 按键开状态(指示)亮度(这个是点击后的值,或者 1-6干接点的背光灯)
        /// </summary>
        public int panelDirectionsLevel = -1;
        /// <summary>
        /// 按键关状态(背光)亮度(这个是点击前的值,或者 第七干接点的背光灯)
        /// </summary>
        public int panelBacklightLevel = -1;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //亮度调节
            var command1 = HdlDevicePanelLogic.Current.GetPanelLevelCommadText(DeviceMac, panelDirectionsLevel, panelBacklightLevel);
            return new List<string>() { command1 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要8秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置亮度调节失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetLightRegulationFail) };
        }
    }
    /// <summary>
    /// 面板节能模式模板数据定义
    /// </summary>
    public class ModelPanelEnergyModeInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 节能模式
        /// </summary>
        public ZigBee.Device.Panel.PanelSaveEnergyModeInfo energyModeInfo = new ZigBee.Device.Panel.PanelSaveEnergyModeInfo();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //节能模式
            var command1 = HdlDevicePanelLogic.Current.GetDeviceEnergyConservationModeCommandText(DeviceMac, energyModeInfo.enable, energyModeInfo.time, energyModeInfo.level);
            return new List<string>() { command1 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要8秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //节能模式配置失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetEnergyConservationFail) };
        }
    }
    /// <summary>
    /// 面板指示灯模板数据定义(也叫背光灯)
    /// </summary>
    public class ModelPanelIndicatorLightInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 按键的颜色数据
        /// </summary>
        public ZigBee.Device.Panel.KeyColorData keyColorData = new ZigBee.Device.Panel.KeyColorData();
        /// <summary>
        /// 和keyColorData一起用的东西
        /// </summary>
        public ZigBee.Device.Panel.KeyNumStatus KeyNum = new ZigBee.Device.Panel.KeyNumStatus();
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            //按键指示灯颜色
            var command1 = HdlDevicePanelLogic.Current.GetPanelColorCommandText(DeviceMac, keyColorData, KeyNum);
            return new List<string>() { command1 };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要8秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设置按键面板指示灯颜色失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uSetPanelPilolightSettionFail) };
        }
    }
    #endregion
    #region ■ 设备名称模板数据定义_______________
    /// <summary>
    /// 设备端点名称模板数据定义
    /// </summary>
    public class ModelDeviceEpointNameInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 设备端点名称
        /// </summary>
        public string deviceEpointName = string.Empty;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceCommonLogic.Current.GetReDeviceEpointNameCommandText(DeviceMac, DeviceEpoint, deviceEpointName);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要3秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设备端点名称修改失败
            return new List<string> { "设备端点名称修改失败" };
        }
    }
    /// <summary>
    /// 设备Mac名称模板数据定义
    /// </summary>
    public class ModelDeviceMacNameInfo : TemplateDeviceDataCommon
    {
        /// <summary>
        /// 设备Mac名称
        /// </summary>
        public string deviceMacName = string.Empty;
        /// <summary>
        /// 获取更改设备配置的命令字符
        /// </summary>
        /// <returns></returns>
        public override List<string> GetSendGatewayValue()
        {
            var command = HdlDeviceCommonLogic.Current.GetReDeviceMacNameCommandText(DeviceMac, DeviceEpoint, deviceMacName);
            return new List<string>() { command };
        }
        /// <summary>
        /// 获取发送命令大概需要的时间(秒)
        /// </summary>
        /// <returns></returns>
        public override int GetSendTime()
        {
            //执行这个命令大约需要3秒
            return 3;
        }
        /// <summary>
        ///  获取失败时的Msg(log显示使用)
        /// </summary>
        /// <returns></returns>
        public override List<string> GetFailMsg()
        {
            //设备名称修改失败
            return new List<string> { Language.StringByID(R.MyInternationalizationString.uDeviceReNameFail) };
        }
    }
    #endregion
    #region ■ 自定义枚举_________________________
    /// <summary>
    /// 模板设备保存的区分
    /// </summary>
    public enum ModelDeviceSaveEnum
    {
        A未定义 = -1,
        /// <summary>
        /// 对象类:ModelDeviceMacNameInfo
        /// </summary>
        A设备名称 = 1,
        /// <summary>
        /// 对象类:ModelDeviceEpointNameInfo
        /// </summary>
        A端点名称 = 2,
        /// <summary>
        /// 对象类:ModelPirSensorSettion
        /// </summary>
        APir配置 = 3,
        /// <summary>
        /// 对象类:ModelCurtainDirectionAndLimite
        /// </summary>
        A窗帘方向及限位 = 8,
        /// <summary>
        /// 对象类:ModelCurtainHandPullControl
        /// </summary>
        A窗帘手拉控制 = 9,
        /// <summary>
        /// 对象类:ModelAcModeSupport
        /// </summary>
        A空调自定义模式 = 10,
        /// <summary>
        /// 对象类:ModelPanelVibrationInfo
        /// </summary>
        A面板震动功能 = 11,
        /// <summary>
        /// 对象类:ModelAcSwingModeSupport
        /// </summary>
        A空调摆风功能 = 12,
        /// <summary>
        /// 对象类:ModelDeviceBindData
        /// </summary>
        A设备绑定列表 = 14,
        /// <summary>
        /// 对象类:ModelPanelBrightnessAdjustInfo
        /// </summary>
        A面板亮度调节 = 15,
        /// <summary>
        /// 对象类:ModelPanelEnergyModeInfo
        /// </summary>
        A面板节能模式 = 16,
        /// <summary>
        /// 也叫背光灯 对象类:ModelPanelIndicatorLightInfo
        /// </summary>
        A面板指示灯 = 17
    }
    #endregion
}