using System; using System.Collections; using System.Collections.Generic; using System.Linq; using ZigBee.Device; namespace Shared.Common { /// /// 设备(和UI相关,和device有区别) /// [System.Serializable] public class DeviceUI { #region ◆ 变量____________________________ /// /// 是否是自定义图片 /// public bool IsCustomizeImage = false; //DeviceUI_DeviceFilePath public override bool Equals(object obj) { var other= obj as DeviceUI; if (CommonDevice.DeviceAddr==other.CommonDevice.DeviceAddr && CommonDevice.DeviceEpoint==other.CommonDevice.DeviceEpoint) { return true; } return false; //CommonDevice.DeviceEpoint.Equals(other.CommonDevice.DeviceEpoint) && CommonDevice.DeviceAddr.Equals(other.CommonDevice.DeviceAddr); } public override int GetHashCode() { return base.GetHashCode(); } /// /// 设备文件 /// /// The name of the file. [Newtonsoft.Json.JsonIgnore] public string FileName { get { return $"DeviceUI_{DeviceFileName}"; } } /// /// 设备文件名(并非deviceUI设备文件名,指的是device) /// public string DeviceFileName = string.Empty; /// /// 图片 /// public string IconPath = string.Empty; /// /// 设备图片--在线或者选中状态 /// /// The online icon path. [Newtonsoft.Json.JsonIgnore] public string OnlineIconPath { get { if (string.IsNullOrEmpty(IconPath)) { return string.Empty; } var pathArr = IconPath.Split('.'); if (pathArr == null || string.IsNullOrEmpty(pathArr[0])) { return string.Empty; } return $"{pathArr[0]}Selected.png"; } } //[Newtonsoft.Json.JsonIgnore] //ZigBee.Device.CommonDevice commonDevice; [Newtonsoft.Json.JsonIgnore] public ZigBee.Device.CommonDevice CommonDevice { get { //commonDevice = ZigBee.Device.CommonDevice.CommonDeviceByFilePath(DeviceFilePath); //return commonDevice; //if (commonDevice == null) //{ // return ReCommonDevice; //} //else{ //return commonDevice; if (DeviceFileName.Split('_').Length < 4) { return null; } return Common.LocalDevice.Current.GetDevice(DeviceFileName.Split('_')[2], int.Parse(DeviceFileName.Split('_')[3])); //} } } //[Newtonsoft.Json.JsonIgnore] //public ZigBee.Device.CommonDevice ReCommonDevice //{ // get // { //commonDevice= ZigBee.Device.CommonDevice.CommonDeviceByFilePath(DeviceFilePath); //return commonDevice; // } //} /// /// 控制延时默认反馈的线程列表 /// public static List threads = new List { }; #endregion #region ◆ 发送控制命令延时反馈______________ /// /// 发送控制命令延时反馈 /// /// Common device. /// Action. /// Delay time. public static void SendCommandDelayAction(CommonDevice commonDevice, Action action, int delayTime = 3) { var threadName = commonDevice.GetHashCode().ToString(); if (threads.Find((obj) => obj.Name == threadName) == null) { var thread = new System.Threading.Thread(() => { var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalSeconds < delayTime) { System.Threading.Thread.Sleep(100); } lock (threads) { threads.RemoveAll((obj) => obj.Name == threadName); } action?.Invoke(); }) { IsBackground = true, Name = threadName }; lock (threads) { threads.Add(thread); } thread.Start(); } } #endregion #region ◆ 显示控制设备是否成功的提示_________ /// /// 显示控制设备是否成功的提示 /// /// The red component. public static void ShowStatuTip(int r) { Application.RunOnMainThread(() => { string msg = Language.StringByID(r); var tip = new Phone.UserCenter.TipViewControl(msg, 1000, 1); tip.ShowView(); }); } #endregion #region ◆ 保存____________________________ /// /// 保存 /// public void Save() { if (Global.IsExistsByHomeId(FileName)) { return; } ReSave(); } /// /// 重新保存 /// public void ReSave() { var paths = DeviceFileName.Split('_'); if (paths.Length < 3) { return; } if (IconPath == string.Empty) { //控制面板是一个点 if (paths[1] == ZigBee.Device.DeviceType.OnOffSwitch.ToString()) { IconPath = "Device/DryContact.png"; } else if (paths[1] == ZigBee.Device.DeviceType.ColorDimmableLight.ToString()) { //彩灯 IconPath = "Device/ColorDimmableLight.png"; } else if (paths[1] == ZigBee.Device.DeviceType.DimmableLight.ToString()) { //调光器 IconPath = "Device/DimmableLight.png"; } else if (CommonDevice != null) { //其他的图标有点特殊 string unSelectPic = string.Empty; string selectPic = string.Empty; LocalDevice.Current.GetDeviceBeloneIcon(new List { CommonDevice }, ref unSelectPic, ref selectPic); IconPath = unSelectPic; } } Global.WriteFileByBytesByHomeId(FileName, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this))); } #endregion #region ◆ 获取设备类型图片__________________ /// /// 通过设备类型获取通用的设备类型图片 /// /// The device type un selected image path. /// Device type. public static string GetDeviceTypeUnSelectedImagePath(ZigBee.Device.DeviceType deviceType) { string ImagePath; //窗帘 switch (deviceType) { case DeviceType.OnOffSwitch: //控制面板 ImagePath= "Device/DryContact.png"; break; case DeviceType.OnOffOutput: //继电器 ImagePath= "Device/Relay.png"; break; case DeviceType.DimmableLight: //调光灯 ImagePath= "Device/DimmableLight.png"; break; case DeviceType.WindowCoveringDevice: //窗帘 ImagePath= "Device/Curtain.png"; break; case DeviceType.Thermostat: //空调 ImagePath= "Device/AirConditioner.png"; break; case DeviceType.IASZone: //传感器 ImagePath= "Device/Sensor.png"; break; case DeviceType.AirSwitch: //空气开关 ImagePath= "Device/AirSwitch.png"; break; case DeviceType.Repeater: //中继器 ImagePath = "Device/AirSwitch.png"; break; default: ImagePath= "Device/Relay.png"; break; } return ImagePath; } /// /// 通过设备类型获取通用的选中状态的设备类型图片 /// /// The device type un selected image path. /// Device type. public static string GetDeviceTypeSelectedImagePath(ZigBee.Device.DeviceType deviceType) { string ImagePath; switch (deviceType) { case DeviceType.OnOffSwitch: //控制面板 ImagePath = "Device/DryContactSelected.png"; break; case DeviceType.OnOffOutput: //继电器 ImagePath = "Device/RelaySelected.png"; break; case DeviceType.DimmableLight: //调光灯 ImagePath = "Device/DimmableLightSelected.png"; break; case DeviceType.WindowCoveringDevice: //窗帘 ImagePath = "Device/CurtainSelected.png"; break; case DeviceType.Thermostat: //空调 ImagePath = "Device/AirConditionerSelected.png"; break; case DeviceType.IASZone: //传感器 ImagePath = "Device/SensorSelected.png"; break; case DeviceType.AirSwitch: //空气开关 ImagePath = "Device/AirSwitchSelected.png"; break; case DeviceType.Repeater: //中继器--还没图片 ImagePath = "Device/AirSwitchSelected.png"; break; default: ImagePath = "Device/RelaySelected.png"; break; } return ImagePath; } #endregion #region ◆ 获取设备类型名称__________________ public static string GetDeviceTypeName(ZigBee.Device.DeviceType deviceType) { int deviceTypeR; switch (deviceType) { case DeviceType.OnOffSwitch: //控制面板 deviceTypeR = R.MyInternationalizationString.OnOffSwitch; break; case DeviceType.OnOffOutput: //继电器--灯 deviceTypeR = R.MyInternationalizationString.OnOffOutput; break; case DeviceType.DimmableLight: //调光灯 deviceTypeR = R.MyInternationalizationString.DimmableLight; break; case DeviceType.WindowCoveringDevice: //窗帘 deviceTypeR = R.MyInternationalizationString.WindowCoveringDevice; break; case DeviceType.Thermostat: //空调 deviceTypeR = R.MyInternationalizationString.Thermostat; break; case DeviceType.IASZone: //传感器 deviceTypeR = R.MyInternationalizationString.IASZone; break; case DeviceType.AirSwitch: //空气开关 deviceTypeR = R.MyInternationalizationString.AirSwitch; break; case DeviceType.Repeater: //中继器 deviceTypeR = R.MyInternationalizationString.Repeater; break; default: deviceTypeR = R.MyInternationalizationString.UnknowDevice; break; } return Language.StringByID(deviceTypeR); } #endregion } }