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>
|
/// 设备MAC地址
|
/// </summary>
|
public string DeviceAddr = string.Empty;
|
/// <summary>
|
/// 设备端点
|
/// </summary>
|
public int DeviceEpoint = 0;
|
|
/// <summary>
|
/// 设备文件
|
/// </summary>
|
/// <value>The name of the file.</value>
|
[Newtonsoft.Json.JsonIgnore]
|
public string FileName
|
{
|
get
|
{
|
var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
if (myDevice != null)
|
{
|
return myDevice.FilePath;
|
}
|
return $"Device_Unkwon";
|
}
|
}
|
|
|
[Newtonsoft.Json.JsonIgnore]
|
public ZigBee.Device.CommonDevice CommonDevice
|
{
|
get
|
{
|
return Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
}
|
}
|
|
/// <summary>
|
/// 是否是自定义图片
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public bool IsCustomizeImage
|
{
|
get
|
{
|
var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
if (myDevice != null)
|
{
|
return myDevice.IsCustomizeImage;
|
}
|
return false;
|
}
|
}
|
/// <summary>
|
/// 设备图片
|
/// </summary>
|
[Newtonsoft.Json.JsonIgnore]
|
public string IconPath
|
{
|
get
|
{
|
var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
if (myDevice != null)
|
{
|
return myDevice.IconPath;
|
}
|
return string.Empty;
|
}
|
}
|
/// <summary>
|
/// 设备图片--在线或者选中状态
|
/// </summary>
|
/// <value>The online icon path.</value>
|
[Newtonsoft.Json.JsonIgnore]
|
public string OnlineIconPath
|
{
|
get
|
{
|
var myDevice = Common.LocalDevice.Current.GetDevice(DeviceAddr, DeviceEpoint);
|
if (myDevice != null)
|
{
|
return myDevice.OnlineIconPath;
|
}
|
return string.Empty;
|
}
|
}
|
|
/// <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.ShowMsgControl(Phone.UserCenter.ShowMsgType.Tip, msg);
|
tip.Show();
|
});
|
}
|
|
#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
|
|
#region ◆ 通过id获取设备区域_____________
|
|
/// <summary>
|
/// GetZone
|
/// </summary>
|
/// <returns></returns>
|
public string GetZone()
|
{
|
var room = Room.CurrentRoom.GetRoomByDevice(CommonDevice);
|
if (room == null)
|
{
|
return Language.StringByID(R.MyInternationalizationString.UnallocatedArea);
|
}
|
var floorName = Config.Instance.Home.GetFloorNameById(room.FloorId);
|
if (floorName == null)
|
{
|
return room.Name;
|
}
|
return $"{floorName},{room.Name}";
|
}
|
|
#endregion
|
|
/// <summary>
|
/// GetDeviceStatu
|
/// </summary>
|
/// <returns></returns>
|
public string GetDeviceStatu()
|
{
|
var device = CommonDevice;
|
if (device.Type == DeviceType.OnOffOutput)
|
{
|
if ((device as ToggleLight).OnOffStatus == 1)
|
{
|
return Language.StringByID(R.MyInternationalizationString.Open);
|
}
|
return Language.StringByID(R.MyInternationalizationString.Shut);
|
}
|
else if (device.Type == DeviceType.AirSwitch)
|
{
|
if ((device as ZigBee.Device.AirSwitch).OnOffStatus == 1)
|
{
|
return Language.StringByID(R.MyInternationalizationString.Open);
|
}
|
return Language.StringByID(R.MyInternationalizationString.Shut);
|
}
|
else if (device.Type == DeviceType.DimmableLight)
|
{
|
if ((device as DimmableLight).OnOffStatus == 0 || (device as DimmableLight).Level == 0)
|
{
|
return Language.StringByID(R.MyInternationalizationString.Shut);
|
}
|
return $"{(int)((device as DimmableLight).Level * 1.0 / 254 * 100)}%";
|
}
|
else if (device.Type == DeviceType.WindowCoveringDevice)
|
{
|
if ((device as Rollershade).WcdCurrentPositionLiftPercentage == 0)
|
{
|
return Language.StringByID(R.MyInternationalizationString.Shut);
|
}
|
return $"{(device as Rollershade).WcdCurrentPositionLiftPercentage}%";
|
}
|
else if (device.Type == DeviceType.Thermostat)
|
{
|
//温度,模式,风速
|
string tempareture = string.Empty;
|
string model = string.Empty;
|
string wind = string.Empty;
|
|
var ac = CommonDevice as AC;
|
|
if (ac.currentSystemMode == 0)
|
{
|
return Language.StringByID(R.MyInternationalizationString.Shut);
|
}
|
else if (ac.currentSystemMode == 1)
|
{
|
model = Language.StringByID(R.MyInternationalizationString.Mode_Auto);
|
tempareture = $"{ac.currentCoolingSetpoint} ℃";
|
}
|
else if (ac.currentSystemMode == 3)
|
{
|
model = Language.StringByID(R.MyInternationalizationString.Mode_Cool);
|
tempareture = $"{ac.currentCoolingSetpoint} ℃";
|
}
|
else if (ac.currentSystemMode == 4)
|
{
|
model = Language.StringByID(R.MyInternationalizationString.Mode_Heat);
|
tempareture = $"{ac.currentHeatingSetpoint} ℃";
|
}
|
else if (ac.currentSystemMode == 7)
|
{
|
model = Language.StringByID(R.MyInternationalizationString.Mode_FanOnly);
|
}
|
else if (ac.currentSystemMode == 8)
|
{
|
model = Language.StringByID(R.MyInternationalizationString.Mode_Dry);
|
tempareture = $"{ac.currentCoolingSetpoint} ℃";
|
}
|
|
if (ac.currentFanMode == 1)
|
{
|
wind = Language.StringByID(R.MyInternationalizationString.Fan_Low);
|
}
|
else if (ac.currentFanMode == 2)
|
{
|
wind = Language.StringByID(R.MyInternationalizationString.Fan_Middle);
|
}
|
else
|
{
|
wind = Language.StringByID(R.MyInternationalizationString.Fan_Height);
|
}
|
|
if (string.IsNullOrEmpty(tempareture))
|
{
|
return $"{model},{wind}";
|
}
|
return $"{model},{wind},{tempareture}";
|
}
|
else
|
{
|
return null;
|
}
|
}
|
}
|
}
|