using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using ZigBee.Device;
|
|
namespace Shared.Common
|
{
|
/// <summary>
|
/// 设备(和UI相关,和device有区别)
|
/// </summary>
|
[System.Serializable]
|
public class DeviceUI
|
{
|
#region ◆ 变量____________________________
|
|
/// <summary>
|
/// 是否是自定义图片
|
/// </summary>
|
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();
|
}
|
|
/// <summary>
|
/// 设备文件
|
/// </summary>
|
/// <value>The name of the file.</value>
|
[Newtonsoft.Json.JsonIgnore]
|
public string FileName
|
{
|
get
|
{
|
return $"DeviceUI_{DeviceFileName}";
|
}
|
}
|
/// <summary>
|
/// 设备文件名(并非deviceUI设备文件名,指的是device)
|
/// </summary>
|
public string DeviceFileName = string.Empty;
|
|
/// <summary>
|
/// 图片
|
/// </summary>
|
public string IconPath = string.Empty;
|
|
/// <summary>
|
/// 设备图片--在线或者选中状态
|
/// </summary>
|
/// <value>The online icon path.</value>
|
[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;
|
// }
|
//}
|
|
/// <summary>
|
/// 控制延时默认反馈的线程列表
|
/// </summary>
|
public static List<System.Threading.Thread> threads = new List<System.Threading.Thread> { };
|
|
#endregion
|
|
#region ◆ 发送控制命令延时反馈______________
|
|
/// <summary>
|
/// 发送控制命令延时反馈
|
/// </summary>
|
/// <param name="commonDevice">Common device.</param>
|
/// <param name="action">Action.</param>
|
/// <param name="delayTime">Delay time.</param>
|
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 ◆ 显示控制设备是否成功的提示_________
|
|
/// <summary>
|
/// 显示控制设备是否成功的提示
|
/// </summary>
|
/// <param name="r">The red component.</param>
|
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 ◆ 保存____________________________
|
|
/// <summary>
|
/// 保存
|
/// </summary>
|
public void Save()
|
{
|
if (Global.IsExistsByHomeId(FileName))
|
{
|
return;
|
}
|
ReSave();
|
}
|
|
/// <summary>
|
/// 重新保存
|
/// </summary>
|
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> { CommonDevice }, ref unSelectPic, ref selectPic);
|
IconPath = unSelectPic;
|
}
|
}
|
Global.WriteFileByBytesByHomeId(FileName, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)));
|
}
|
|
#endregion
|
|
#region ◆ 获取设备类型图片__________________
|
|
/// <summary>
|
/// 通过设备类型获取通用的设备类型图片
|
/// </summary>
|
/// <returns>The device type un selected image path.</returns>
|
/// <param name="deviceType">Device type.</param>
|
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;
|
}
|
|
/// <summary>
|
/// 通过设备类型获取通用的选中状态的设备类型图片
|
/// </summary>
|
/// <returns>The device type un selected image path.</returns>
|
/// <param name="deviceType">Device type.</param>
|
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
|
}
|
}
|