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
}