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