using System;
|
using System.Collections.Generic;
|
using Shared.SimpleControl;
|
|
namespace Shared.SimpleControl.Phone
|
{
|
/// <summary>
|
/// 空调控制界面
|
/// </summary>
|
public class UserACPage : FrameLayout
|
{
|
/// <summary>
|
/// 当前视图
|
/// </summary>
|
static UserACPage curView;
|
FrameLayout acBodyView;
|
AC ac;
|
Room room;
|
ACMethod acM;
|
Button btnInterior;
|
Button btnACSwitch;
|
Button btnSetTemperature;
|
Button btnModeIcon;
|
Button btnWindIcon;
|
Button btnModeText;
|
Button btnWindModeText;
|
Button btnReduceTemperature;
|
Button BtnAddTemperature;
|
Button btnACModeRight;
|
Button btnACModeLeft;
|
Button btnACWindRight;
|
Button btnACWindLeft;
|
static DateTime controlTime = DateTime.MinValue;
|
static string TempTypeString = "°C";
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
/// <param name="room">Room.</param>
|
public UserACPage (AC ac, Room room)
|
{
|
this.ac = ac;
|
this.room = room;
|
curView = this;
|
acM = new ACMethod ();
|
|
BackgroundColor = SkinStyle.Current.MainColor;
|
if (ac.TemperatureMode == 0) {
|
TempTypeString = "°C";
|
} else {
|
TempTypeString = "°F";
|
}
|
readStatus (ac);
|
}
|
|
/// <summary>
|
/// 更新室内温度-针对面板单一状态更新
|
/// </summary>
|
public static void UpdateIndoorTemp (string updateFalg, byte indoorTemp)
|
{
|
Application.RunOnMainThread (() => {
|
if (curView == null) {
|
return;
|
}
|
if (curView.ac.CommonLoopID != updateFalg) {
|
return;
|
}
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
return;
|
}
|
try {
|
if (curView.ac.TemperatureMode == 1) {
|
var f = curView.ac.IndoorTemperature * 9 / 5 + 32;
|
curView.btnInterior.Text = f.ToString () + "°F";
|
} else {
|
curView.btnInterior.Text = indoorTemp + "°C";
|
}
|
} catch (Exception ex) {
|
Console.WriteLine (ex.ToString ());
|
}
|
});
|
}
|
|
/// <summary>
|
/// 更新工作温度-针对面板单一状态更新
|
/// </summary>
|
public static void UpdateWorkingTemp (string updateFalg, byte workingTemp)
|
{
|
if (curView == null) {
|
return;
|
}
|
if (curView.ac.CommonLoopID != updateFalg) {
|
return;
|
}
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
return;
|
}
|
Application.RunOnMainThread (() => {
|
curView.btnSetTemperature.Text = workingTemp + TempTypeString;
|
curView.ac.SetTemperature = workingTemp;
|
});
|
}
|
|
/// <summary>
|
/// 更新地热开关状态-针对面板单一状态更新
|
/// </summary>
|
public static void UpdatePower (string updateFalg, byte power)
|
{
|
if (curView == null) {
|
return;
|
}
|
if (curView.ac.CommonLoopID != updateFalg) {
|
return;
|
}
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
return;
|
}
|
Application.RunOnMainThread (() => {
|
if (power == 1) {
|
//考虑到其他人控制的情况下,得使当前界面更新的数据和别人控制的一样
|
curView.btnReduceTemperature.Enable = true;
|
curView.BtnAddTemperature.Enable = true;
|
curView.btnACModeLeft.Enable = true;
|
curView.btnACModeRight.Enable = true;
|
curView.btnACWindRight.Enable = true;
|
curView.btnACWindLeft.Enable = true;
|
curView.btnACSwitch.IsSelected = true;
|
} else {
|
curView.btnACSwitch.IsSelected = false;
|
curView.btnReduceTemperature.Enable = false;
|
curView.BtnAddTemperature.Enable = false;
|
curView.btnACModeLeft.Enable = false;
|
curView.btnACModeRight.Enable = false;
|
curView.btnACWindRight.Enable = false;
|
curView.btnACWindLeft.Enable = false;
|
curView.btnACSwitch.IsSelected = false;
|
}
|
|
#region 更新用户主界面灯光点亮总数
|
int acOponeCount = 0;
|
foreach (var room in Room.Lists) {
|
if (string.IsNullOrEmpty (room.Name)) {
|
continue;
|
}
|
foreach (var acTemp in room.DeviceList) {
|
if (acTemp.Type == DeviceType.HVAC || acTemp.Type == DeviceType.ACInfrared || acTemp.Type == DeviceType.ACPanel || acTemp.Type == DeviceType.LongXiAC)
|
if ((acTemp as AC).Power == 1) {
|
acOponeCount++;
|
}
|
}
|
}
|
UserDeviceView.UpdataDeviceCountNumber (acOponeCount, R.MyInternationalizationString.AC);
|
#endregion
|
});
|
}
|
|
/// <summary>
|
/// 更新工作模式-针对面板单一状态更新
|
/// </summary>
|
public static void UpdateSetMode (string updateFalg, byte setMode)
|
{
|
if (curView == null) {
|
return;
|
}
|
if (curView.ac.CommonLoopID != updateFalg) {
|
return;
|
}
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
return;
|
}
|
Application.RunOnMainThread (() => {
|
curView.acM.UpdataACHostModeIcon (setMode, curView.btnModeIcon, curView.btnModeText);
|
|
});
|
}
|
|
/// <summary>
|
/// 更新工作模式-针对面板单一状态更新
|
/// </summary>
|
public static void UpdateSetFanSpeed (string updateFalg, byte setFanSpeed)
|
{
|
if (curView == null) {
|
return;
|
}
|
if (curView.ac.CommonLoopID != updateFalg) {
|
return;
|
}
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
return;
|
}
|
Application.RunOnMainThread (() => {
|
try {
|
curView.acM.UpdataACHostWindIcon (setFanSpeed, curView.btnWindIcon, curView.btnWindModeText);
|
} catch { }
|
});
|
}
|
|
|
/// <summary>
|
/// 更新空调
|
/// </summary>
|
public static void UpdateStatus (AC ac , bool selfUpdate = false)
|
{
|
Application.RunOnMainThread (() => {
|
if (curView == null) {
|
return;
|
}
|
if (curView.ac != ac) {
|
return;
|
}
|
if (controlTime.AddSeconds (0.8) > DateTime.Now && !selfUpdate) {
|
return;
|
}
|
try {
|
if (ac.Power == 1) {
|
curView.btnACSwitch.IsSelected = true;
|
curView.btnInterior.Text = ac.IndoorTemperature.ToString () + TempTypeString;
|
if (ac.TemperatureMode == 1) {
|
var f = ac.IndoorTemperature * 9 / 5 + 32;
|
curView.btnInterior.Text = f + TempTypeString;
|
}
|
curView.acM.UpdataACHostModeIcon (ac.SetMode, curView.btnModeIcon, curView.btnModeText);
|
curView.acM.UpdataACHostWindIcon (ac.SetFanSpeed, curView.btnWindIcon, curView.btnWindModeText);
|
curView.acM.UpdataACModeTemperature (ac, ac.SetMode, curView.btnSetTemperature);
|
|
//考虑到其他人控制的情况下,得使当前界面更新的数据和别人控制的一样
|
curView.btnReduceTemperature.Enable = true;
|
curView.BtnAddTemperature.Enable = true;
|
curView.btnACModeLeft.Enable = true;
|
curView.btnACModeRight.Enable = true;
|
curView.btnACWindRight.Enable = true;
|
curView.btnACWindLeft.Enable = true;
|
} else {
|
curView.btnACSwitch.IsSelected = false;
|
curView.btnReduceTemperature.Enable = false;
|
curView.BtnAddTemperature.Enable = false;
|
curView.btnACModeLeft.Enable = false;
|
curView.btnACModeRight.Enable = false;
|
curView.btnACWindRight.Enable = false;
|
curView.btnACWindLeft.Enable = false;
|
}
|
} catch (Exception ex) {
|
Console.WriteLine (ex.ToString ());
|
}
|
});
|
}
|
|
public void UpdateACTempType ()
|
{
|
System.Threading.Tasks.Task.Factory.StartNew (() => {
|
var readRecBytes = Control.ControlBytesSendHasReturn (Command.ReadPanelTempType, ac.SubnetID, ac.DeviceID, new byte [] { });
|
if(readRecBytes!= null) {
|
try {
|
if (readRecBytes.Length > 0) {
|
if (readRecBytes [0] == 0) {
|
Application.RunOnMainThread (() => {
|
btnInterior.Text = ac.IndoorTemperature.ToString () + "°C";
|
btnSetTemperature.Text = ac.SetTemperature.ToString () + "°C";
|
TempTypeString = "°C";
|
});
|
} else {
|
var f = ac.IndoorTemperature * 9 / 5 + 32;
|
Application.RunOnMainThread (() => {
|
btnInterior.Text = f.ToString () + "°F";
|
btnSetTemperature.Text = ac.SetTemperature.ToString () + "°F";
|
TempTypeString = "°F";
|
});
|
}
|
ac.TemperatureMode = readRecBytes [0];
|
IO.FileUtils.SaveEquipmentMessage (ac, ac.LoopID.ToString ());
|
}
|
} catch (Exception ex) {
|
Console.WriteLine (ex.Message);
|
}
|
}
|
});
|
}
|
|
/// <summary>
|
/// 显示出当前房间所有的空调
|
/// </summary>
|
public void showRoomAC ()
|
{
|
#region 标题
|
var topView = new FrameLayout () {
|
Y = Application.GetRealHeight (36),
|
Height = Application.GetRealHeight (90),
|
Width = Application.GetRealWidth (640),
|
};
|
AddChidren (topView);
|
|
var title = new Button () {
|
TextAlignment = TextAlignment.Center,
|
Text = ac.Name,
|
TextColor = SkinStyle.Current.TextColor1,
|
TextSize = 19,
|
};
|
topView.AddChidren (title);
|
|
var logo = new Button () {
|
Width = Application.GetRealWidth (154),
|
Height = Application.GetRealHeight (90),
|
X = Application.GetRealWidth (486),
|
UnSelectedImagePath = MainPage.LogoString,
|
};
|
topView.AddChidren (logo);
|
var back = new Button () {
|
Height = Application.GetRealHeight (100),
|
Width = Application.GetRealWidth (85),
|
UnSelectedImagePath = "Item/Back.png",
|
SelectedImagePath = "Item/BackSelected.png",
|
};
|
topView.AddChidren (back);
|
back.MouseUpEventHandler += (sender, e) => {
|
(Parent as PageLayout).PageIndex -= 1;
|
curView = null;
|
};
|
#endregion
|
|
acBodyView = new FrameLayout {
|
Height = Application.GetRealHeight (Application.DesignHeight - 126),
|
Y = Application.GetRealHeight (126)
|
};
|
AddChidren (acBodyView);
|
#region roomBackgroundImage
|
var roomBackgroundImageView = new FrameLayout () {
|
Height = MainPage.GetDesignHeight (360),
|
};
|
acBodyView.AddChidren (roomBackgroundImageView);
|
roomBackgroundImageView.BackgroundImagePath = room.BackGroundImage;
|
|
FrameLayout setACTemp = new FrameLayout () {
|
Height = Application.GetMinRealAverage (106),
|
Width = Application.GetRealWidth (640),
|
BackgroundColor = SkinStyle.Current.MainColor,
|
Y = Application.GetMinRealAverage (360),
|
};
|
acBodyView.AddChidren (setACTemp);
|
|
btnACSwitch = new Button () {
|
Width = Application.GetMinRealAverage (115),
|
Height = Application.GetMinRealAverage (115),
|
X = Application.GetRealWidth (640 - 152),
|
UnSelectedImagePath = "FH/FH_Switch.png",
|
SelectedImagePath = "FH/FH_Switch_on.png",
|
};
|
btnACSwitch.IsSelected = ac.Power == 1;
|
btnACSwitch.MouseUpEventHandler += (sender, e) => {
|
btnACSwitch.IsSelected = !btnACSwitch.IsSelected;
|
ac.Power = btnACSwitch.IsSelected ? (byte)1 : (byte)0;
|
UpdateStatus (ac,true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
Console.WriteLine ("Control ac switch");
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.Power, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, ac.Power, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
};
|
setACTemp.AddChidren (btnACSwitch);
|
|
var btnText = new Button () {
|
Width = Application.GetRealWidth (150),
|
Height = Application.GetRealHeight (40),
|
X = Application.GetRealWidth (15),
|
Y = Application.GetRealHeight (22),
|
TextID = R.MyInternationalizationString.ACInterior,
|
TextAlignment = TextAlignment.BottomCenter,
|
TextColor = SkinStyle.Current.TextColor1
|
};
|
setACTemp.AddChidren (btnText);
|
|
btnInterior = new Button () {
|
Width = Application.GetRealWidth (150),
|
Height = Application.GetRealHeight (40),
|
X = Application.GetRealWidth (10),
|
Y = btnText.Bottom,
|
TextSize = 14,
|
TextAlignment = TextAlignment.Center,
|
TextColor = SkinStyle.Current.TextColor1
|
};
|
setACTemp.AddChidren (btnInterior);
|
|
if(ac.TemperatureMode == 1) {
|
var f = ac.IndoorTemperature * 9 / 5 + 32;
|
btnInterior.Text = f.ToString () + "°F";
|
} else {
|
btnInterior.Text = ac.IndoorTemperature.ToString () + "°C";
|
}
|
UpdateACTempType ();
|
//长按更换背景
|
#if wallon
|
#else
|
roomBackgroundImageView.MouseLongEventHandler += (sender, e) => {
|
Camera.SelectPicture ((obj) => {
|
if (obj != null) {
|
room.BackGroundImage = obj;
|
roomBackgroundImageView.BackgroundImagePath = obj;
|
room.Save (typeof (Room).Name + "_" + room.Name);
|
}
|
}, room.Name, false);
|
|
};
|
#endif
|
#endregion
|
|
#region acTemperature
|
FrameLayout acTemperatureView = new FrameLayout () {
|
Height = (acBodyView.Height - setACTemp.Height - roomBackgroundImageView.Height)/3,
|
BackgroundColor = SkinStyle.Current.ViewColor,
|
Y = setACTemp.Bottom,
|
};
|
acBodyView.AddChidren (acTemperatureView);
|
|
var btnACTemp = new Button () {
|
Width = Application.GetRealWidth (200),
|
Height = Application.GetRealHeight (30),
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight (19),
|
TextID = R.MyInternationalizationString.Temperature,
|
TextColor = SkinStyle.Current.ButtonColor,
|
};
|
acTemperatureView.AddChidren (btnACTemp);
|
|
btnSetTemperature = new Button () {
|
Width = Application.GetMinRealAverage (120),
|
Y = Application.GetRealHeight(10),
|
Gravity = Gravity.CenterHorizontal,
|
Text = ac.SetTemperature.ToString () + TempTypeString,
|
TextSize = 20,
|
TextAlignment = TextAlignment.Center,
|
Enable = false,
|
TextColor = SkinStyle.Current.TextColor1
|
};
|
acTemperatureView.AddChidren (btnSetTemperature);
|
if (ac.TemperatureMode == 1) {
|
btnSetTemperature.Text = ac.SetTemperature.ToString () + "°F";
|
} else {
|
btnSetTemperature.Text = ac.SetTemperature.ToString () + "°C";
|
}
|
btnReduceTemperature = new Button () {
|
Width = Application.GetMinRealAverage (129),
|
Height = Application.GetMinRealAverage (129),
|
X = Application.GetRealWidth (30),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "AC/ac-1.png",
|
SelectedImagePath = "AC/ac_on-.png",
|
};
|
acTemperatureView.AddChidren (btnReduceTemperature);
|
btnReduceTemperature.MouseDownEventHandler += (sender, e) => {
|
btnReduceTemperature.IsSelected = true;
|
};
|
btnReduceTemperature.MouseUpEventHandler += (sender, e) => {
|
btnReduceTemperature.IsSelected = false;
|
if (ac.SetMode == 2) {
|
return;
|
}
|
if (ac.SetTemperature < 17) {
|
return;
|
}
|
ac.SetTemperature--;
|
byte modeKey = 4;
|
switch (ac.SetMode) {
|
//cooling
|
case 0:
|
ac.CoolTemperature = ac.SetTemperature;
|
modeKey = 4;
|
break;
|
//Heating
|
case 1:
|
ac.HeatTemperature = ac.SetTemperature;
|
modeKey = 7;
|
break;
|
//Fan
|
case 2:
|
ac.IndoorTemperature = ac.SetTemperature;
|
modeKey = 2;
|
break;
|
// Auto
|
case 3:
|
ac.AutoTemperature = ac.SetTemperature;
|
modeKey = 8;
|
break;
|
//Dry
|
case 4:
|
ac.ChuShiTemperature = ac.SetTemperature;
|
modeKey = 19;
|
break;
|
}
|
UpdateStatus (ac,true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
};
|
|
BtnAddTemperature = new Button () {
|
Width = Application.GetMinRealAverage (129),
|
Height = Application.GetMinRealAverage (129),
|
X = Application.GetRealWidth (640 - 129 - 30),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "AC/ac+1.png",
|
SelectedImagePath = "AC/ac_on+.png",
|
};
|
acTemperatureView.AddChidren (BtnAddTemperature);
|
BtnAddTemperature.MouseDownEventHandler += (sender, e) => {
|
BtnAddTemperature.IsSelected = true;
|
};
|
BtnAddTemperature.MouseUpEventHandler += (sender, e) => {
|
BtnAddTemperature.IsSelected = false;
|
if (ac.SetMode == 2) {
|
return;
|
}
|
if (ac.TemperatureMode == 0) {
|
if (++ac.SetTemperature > 38) {
|
ac.SetTemperature = 38;
|
return;
|
}
|
} else {
|
if (++ac.SetTemperature > 120) {
|
ac.SetTemperature = 120;
|
return;
|
}
|
}
|
|
byte modeKey = 4;
|
switch (ac.SetMode) {
|
//cooling
|
case 0:
|
ac.CoolTemperature = ac.SetTemperature;
|
modeKey = 4;
|
break;
|
//Heating
|
case 1:
|
ac.HeatTemperature = ac.SetTemperature;
|
modeKey = 7;
|
break;
|
//Fan
|
case 2:
|
ac.IndoorTemperature = ac.SetTemperature;
|
break;
|
// Auto
|
case 3:
|
ac.AutoTemperature = ac.SetTemperature;
|
modeKey = 8;
|
break;
|
//Dry
|
case 4:
|
ac.ChuShiTemperature = ac.SetTemperature;
|
modeKey = 19;
|
break;
|
}
|
UpdateStatus (ac,true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
};
|
#endregion
|
Button btnTNull = new Button () {
|
Height = 1,
|
BackgroundColor = SkinStyle.Current.MainColor,
|
Y = acTemperatureView.Bottom,
|
};
|
acBodyView.AddChidren (btnTNull);
|
|
#region 模式
|
var acModeView = new FrameLayout () {
|
Height = (acBodyView.Height - setACTemp.Height - roomBackgroundImageView.Height) / 3,
|
Width = Application.GetRealWidth(640),
|
BackgroundColor = SkinStyle.Current.ViewColor,
|
Y = btnTNull.Bottom,
|
};
|
acBodyView.AddChidren (acModeView);
|
|
btnACModeLeft = new Button () {
|
Width = Application.GetMinRealAverage (129),
|
Height = Application.GetMinRealAverage (129),
|
X = Application.GetRealWidth (30),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "AC/ac_left.png",
|
SelectedImagePath = "AC/ACLeftSelected.png",
|
};
|
acModeView.AddChidren (btnACModeLeft);
|
var btnModeName = new Button () {
|
Width = Application.GetRealWidth (200),
|
Height = Application.GetRealHeight (30),
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight (25),
|
TextID = R.MyInternationalizationString.UserACMode,
|
TextColor = SkinStyle.Current.ButtonColor,
|
};
|
acModeView.AddChidren (btnModeName);
|
btnModeIcon = new Button () {
|
Width = Application.GetMinRealAverage (110),
|
Height = Application.GetMinRealAverage (112),
|
Gravity = Gravity.Center,
|
Y = btnModeName.Bottom + Application.GetRealHeight (10),
|
UnSelectedImagePath = "AC/ACRefrigeration.png",
|
};
|
acModeView.AddChidren (btnModeIcon);
|
btnModeText = new Button () {
|
Width = Application.GetRealWidth (200),
|
Height = Application.GetRealHeight (50),
|
TextID = R.MyInternationalizationString.Cool,
|
Gravity = Gravity.CenterHorizontal,
|
Y = btnModeIcon.Bottom - Application.GetRealHeight (20),
|
TextColor = SkinStyle.Current.TextColor1
|
};
|
acModeView.AddChidren (btnModeText);
|
btnACModeRight = new Button () {
|
Width = Application.GetMinRealAverage (129),
|
Height = Application.GetMinRealAverage (129),
|
X = Application.GetRealWidth (640 - 129 - 30),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "AC/ac_right.png",
|
SelectedImagePath = "AC/ACRightSelected.png",
|
};
|
acModeView.AddChidren (btnACModeRight);
|
|
btnACModeRight.MouseDownEventHandler += (sender, e) => {
|
btnACModeRight.IsSelected = true;
|
};
|
btnACModeRight.MouseUpEventHandler += (sender, e) => {
|
btnACModeRight.IsSelected = false;
|
try {
|
if (ac.SetMode > 4) {
|
ac.SetMode = 4;
|
}
|
if (++ac.SetMode > 4) {
|
ac.SetMode = 0;
|
}
|
UpdateStatus (ac, true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
} catch { }
|
};
|
btnACModeLeft.MouseDownEventHandler += (sender, e) => {
|
btnACModeLeft.IsSelected = true;
|
};
|
btnACModeLeft.MouseUpEventHandler += (sender, e) => {
|
btnACModeLeft.IsSelected = false;
|
try {
|
if (ac.SetMode == 0 )
|
ac.SetMode = 4;
|
else{
|
ac.SetMode--;
|
}
|
} catch {
|
ac.SetMode = 4;
|
}
|
UpdateStatus (ac,true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
acM.UpdataACHostModeIcon (ac.SetMode, btnModeIcon);
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
};
|
#endregion
|
|
var btnLine1 = new Button () {
|
Height = 1,
|
BackgroundColor = SkinStyle.Current.MainColor,
|
Y = acModeView.Bottom,
|
};
|
acBodyView.AddChidren (btnLine1);
|
|
#region 风速
|
var acWindView = new FrameLayout () {
|
Height = (acBodyView.Height - setACTemp.Height - roomBackgroundImageView.Height) / 3,
|
Y = btnLine1.Bottom,
|
BackgroundColor = SkinStyle.Current.ViewColor,
|
};
|
acBodyView.AddChidren (acWindView);
|
|
btnACWindLeft = new Button () {
|
Width = Application.GetMinRealAverage (129),
|
Height = Application.GetMinRealAverage (129),
|
X = Application.GetRealWidth (30),
|
Y = Application.GetMinRealAverage (44),
|
UnSelectedImagePath = "AC/ac_left.png",
|
SelectedImagePath = "AC/ACLeftSelected.png",
|
};
|
acWindView.AddChidren (btnACWindLeft);
|
var btnWindName = new Button () {
|
Width = Application.GetRealWidth (200),
|
Height = Application.GetRealHeight (30),
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight (21),
|
TextID = R.MyInternationalizationString.Speed,
|
TextColor = SkinStyle.Current.ButtonColor,
|
};
|
acWindView.AddChidren (btnWindName);
|
btnWindIcon = new Button () {
|
Width = Application.GetMinRealAverage (110),
|
Height = Application.GetMinRealAverage (112),
|
X = Application.GetRealWidth (262),
|
Y = Application.GetMinRealAverage (44),
|
UnSelectedImagePath = "AC/ACAuto.png",
|
};
|
acWindView.AddChidren (btnWindIcon);
|
btnWindModeText = new Button () {
|
Width = Application.GetRealWidth (200),
|
Height = Application.GetRealHeight (50),
|
TextID = R.MyInternationalizationString.High,
|
Gravity = Gravity.CenterHorizontal,
|
TextColor = SkinStyle.Current.TextColor1,
|
Y = btnWindIcon.Bottom - Application.GetRealHeight (16),
|
};
|
acWindView.AddChidren (btnWindModeText);
|
btnACWindRight = new Button () {
|
Width = Application.GetMinRealAverage (129),
|
Height = Application.GetMinRealAverage (129),
|
X = btnACModeRight.X,
|
Y = Application.GetMinRealAverage (44),
|
UnSelectedImagePath = "AC/ac_right.png",
|
SelectedImagePath = "AC/ACRightSelected.png",
|
};
|
btnACWindLeft.MouseDownEventHandler += (sender, e) => {
|
btnACWindLeft.IsSelected = true;
|
};
|
btnACWindLeft.MouseUpEventHandler += (sender, e) => {
|
btnACWindLeft.IsSelected = false;
|
if (ac.SetFanSpeed > 3) {
|
ac.SetFanSpeed = 3;
|
}
|
|
if (++ac.SetFanSpeed > 3)
|
ac.SetFanSpeed = 0;
|
//acM.UpdataACHostWindIcon (ac.SetFanSpeed, btnWindIcon);
|
UpdateStatus (ac,true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
};
|
acWindView.AddChidren (btnACWindRight);
|
btnACWindRight.MouseDownEventHandler += (sender, e) => {
|
btnACWindRight.IsSelected = true;
|
};
|
btnACWindRight.MouseUpEventHandler += (sender, e) => {
|
btnACWindRight.IsSelected = false;
|
try {
|
ac.SetFanSpeed--;
|
if (ac.SetFanSpeed < 0 || ac.SetFanSpeed > 3)
|
ac.SetFanSpeed = 3;
|
} catch {
|
ac.SetFanSpeed = 3;
|
}
|
UpdateStatus (ac,true);
|
if (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
controlTime = DateTime.Now;
|
return;
|
}
|
controlTime = DateTime.Now;
|
Console.WriteLine ("controlTime reset");
|
System.Threading.Tasks.Task.Run (() => {
|
while (controlTime.AddSeconds (0.8) > DateTime.Now) {
|
System.Threading.Thread.Sleep (800);
|
Console.WriteLine ("sleep 800");
|
}
|
Console.WriteLine ("control ac wind");
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID });
|
} else if (ac.Type == DeviceType.ACDevice || ac.Type == DeviceType.ACInfrared || ac.Type == DeviceType.HVAC) {
|
Control.ControlBytesSend (Command.SetACMode, ac.SubnetID, ac.DeviceID, new [] { ac.LoopID, ac.TemperatureMode, ac.IndoorTemperature, ac.CoolTemperature, ac.HeatTemperature, ac.AutoTemperature, ac.ChuShiTemperature, ac.RealModeAndFanSpeed, btnACSwitch.IsSelected ? (byte)1 : (byte)0, ac.SetMode, ac.SetFanSpeed, ac.SetTemperature, ac.ShaoFanMode });
|
} else if (ac.Type == DeviceType.CustomAC) {
|
var acCommon = ac as CustomAC;
|
var controlCommand = acCommon.customACControlLists.Find ((obj) => obj.UniversalModeType == ac.Power && obj.UniversalFanSpeed == ac.SetFanSpeed && obj.UniversalTemp == ac.SetTemperature);
|
if (controlCommand != null) {
|
Control.ControlBytesSend (Command.SetCommonSwitch, acCommon.SubnetID, acCommon.DeviceID, new byte [] { controlCommand.UniversalID, 255 }, SendCount.Zero);
|
IO.FileUtils.SaveEquipmentMessage (acCommon, acCommon.LoopID.ToString ());
|
}
|
}
|
});
|
};
|
|
#endregion
|
|
UpdateStatus (ac,true);
|
}
|
|
|
/// <summary>
|
/// 读取设备状态
|
/// </summary>
|
static void readStatus (AC ac)
|
{
|
System.Threading.Tasks.Task.Run (() => {
|
#if DEBUG
|
#else
|
if (ac.LastUpdateTime.AddMinutes (Common.Time) <= DateTime.Now) {
|
#endif
|
if (ac.Type == DeviceType.ACPanel) {
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 4, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 7, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 8, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 19, ac.LoopID, ac.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadPanelTempTypeACK, ac.SubnetID, ac.DeviceID, new byte [] { }, SendCount.Zero);
|
Control.ControlBytesSend (Command.ReadPanleTemp, ac.SubnetID, ac.DeviceID, new byte [] { ac.LoopID }, SendCount.Zero);
|
} else if (ac.Type == DeviceType.HVAC || ac.Type == DeviceType.ACInfrared) {
|
Control.ControlBytesSendHasReturn (Command.ReadACMode, ac.SubnetID, ac.DeviceID, new byte [] { ac.LoopID });
|
}
|
#if DEBUG
|
#else
|
}
|
#endif
|
});
|
}
|
}
|
}
|