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 ◆ 变量____________________________ /// /// 设备MAC地址 /// public string DeviceAddr = string.Empty; /// /// 设备端点 /// public int DeviceEpoint = 0; /// /// 设备文件 /// /// The name of the file. [Newtonsoft.Json.JsonIgnore] public string FileName { get { var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint); if (myDevice != null) { return $"DeviceUI_{myDevice.FilePath}"; } return $"DeviceUI_Unkwon"; } } [Newtonsoft.Json.JsonIgnore] public ZigBee.Device.CommonDevice CommonDevice { get { return Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint); } } /// /// 是否是自定义图片 /// [Newtonsoft.Json.JsonIgnore] public bool IsCustomizeImage { get { var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint); if (myDevice != null) { return myDevice.IsCustomizeImage; } return false; } } /// /// 设备图片 /// [Newtonsoft.Json.JsonIgnore] public string IconPath { get { var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint); if (myDevice != null) { return myDevice.IconPath; } return string.Empty; } } /// /// 设备图片--在线或者选中状态 /// /// The online icon path. [Newtonsoft.Json.JsonIgnore] public string OnlineIconPath { get { var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint); if (myDevice != null) { return myDevice.OnlineIconPath; } return string.Empty; } } /// /// 控制延时默认反馈的线程列表 /// 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.ShowMsgControl(Phone.UserCenter.ShowMsgType.Tip, msg); tip.Show(); }); } #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 #region ◆ 通过id获取场景区域_____________ /// /// GetZone /// /// public string GetZone() { var room = Room.CurrentRoom.GetRoomByDevice(CommonDevice); if (room == null) { return null; } var floorName = Shared.Common.Config.Instance.Home.GetFloorNameById(room.FloorId); if (floorName == null) { return room.Name; } return $"{floorName},{room.Name}"; } #endregion } }