using System;
|
using System.Threading;
|
|
namespace Shared.SimpleControl.Phone
|
{
|
|
/// <summary>
|
/// 地热设备房间
|
/// </summary>
|
public class UserDeviceToFH : FrameLayout
|
{
|
static UserDeviceToFH curView;
|
|
VerticalScrolViewLayout bodyScrolView;
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
public UserDeviceToFH ()
|
{
|
curView = this;
|
BackgroundColor = SkinStyle.Current.MainColor;
|
showAllRoomFH ();
|
readAllStatus ();
|
}
|
|
|
/// <summary>
|
/// 更新当前地热开关 - 针对单一属性更新
|
/// </summary>
|
public static void UpdatePower (string updataFalg,byte power)
|
{
|
Application.RunOnMainThread (() => {
|
if (curView == null) {
|
return;
|
}
|
for (int i = 0; i < curView.bodyScrolView.ChildrenCount; i++) {
|
if (curView.bodyScrolView.GetChildren (i).GetType () == typeof (FrameLayout)) {
|
var fhRow = (FrameLayout)curView.bodyScrolView.GetChildren (i);
|
if (fhRow.Tag.ToString () != updataFalg) {
|
continue;
|
}
|
for (int j = 0; j < fhRow.ChildrenCount; j++) {
|
if (fhRow.GetChildren (j).GetType () == typeof (Button)) {
|
var btn = (Button)fhRow.GetChildren (j);
|
if (btn.Tag == null) {
|
continue;
|
}
|
if (btn.Tag.ToString () == "Switch") {
|
if (power == 0) {
|
btn.IsSelected = false;
|
} else {
|
btn.IsSelected = true;
|
}
|
}
|
}
|
}
|
}
|
}
|
});
|
}
|
|
/// <summary>
|
/// 更新当前地热工作温度 - 针对单一属性更新
|
/// </summary>
|
public static void UpdateWorkingTemp (string updataFalg, byte workingTemp)
|
{
|
Application.RunOnMainThread (() => {
|
if (curView == null) {
|
return;
|
}
|
for (int i = 0; i < curView.bodyScrolView.ChildrenCount; i++) {
|
if (curView.bodyScrolView.GetChildren (i).GetType () == typeof (FrameLayout)) {
|
var fhRow = (FrameLayout)curView.bodyScrolView.GetChildren (i);
|
if (fhRow.Tag.ToString () != updataFalg) {
|
continue;
|
}
|
for (int j = 0; j < fhRow.ChildrenCount; j++) {
|
if (fhRow.GetChildren (j).GetType () == typeof (Button)) {
|
var btn = (Button)fhRow.GetChildren (j);
|
if (btn.Tag == null) {
|
continue;
|
}
|
if (btn.Tag.ToString () == "Temperature") {
|
btn.Text = workingTemp + "°";
|
}
|
}
|
}
|
}
|
}
|
});
|
}
|
|
/// <summary>
|
/// 更新当前地热
|
/// </summary>
|
public static void UpdateStatus (Common updataFH)
|
{
|
Application.RunOnMainThread (() => {
|
if (curView == null) {
|
return;
|
}
|
for (int i = 0; i < curView.bodyScrolView.ChildrenCount; i++) {
|
if (curView.bodyScrolView.GetChildren (i).GetType () == typeof (FrameLayout)) {
|
var fhRow = (FrameLayout)curView.bodyScrolView.GetChildren (i);
|
if (fhRow.Tag.ToString () != updataFH.CommonLoopID) {
|
continue;
|
}
|
for (int j = 0; j < fhRow.ChildrenCount; j++) {
|
if (fhRow.GetChildren (j).GetType () == typeof (Button)) {
|
var btn = (Button)fhRow.GetChildren (j);
|
if (btn.Tag == null) {
|
continue;
|
}
|
if (btn.Tag.ToString () == "Switch") {
|
if ((updataFH as FoolHeat).Status == 0) {
|
btn.IsSelected = false;
|
} else {
|
btn.IsSelected = true;
|
}
|
} else if (btn.Tag.ToString () == "Temperature") {
|
btn.Text = (updataFH as FoolHeat).WorkingTemperature.ToString () + "°";
|
}
|
}
|
}
|
}
|
}
|
});
|
}
|
|
/// <summary>
|
/// 显示房间的所有地热
|
/// </summary>
|
public void showAllRoomFH ()
|
{
|
#region 标题
|
var topView = new FrameLayout () {
|
Y = Application.GetRealHeight (36),
|
Height = Application.GetRealHeight (90),
|
};
|
AddChidren (topView);
|
|
var title = new Button () {
|
TextAlignment = TextAlignment.Center,
|
Text = Language.StringByID (R.MyInternationalizationString.FoolHeat),
|
TextSize = 19,
|
TextColor = SkinStyle.Current.TextColor1,
|
};
|
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 (90),
|
Width = Application.GetRealWidth (85),
|
UnSelectedImagePath = "Item/Back.png",
|
SelectedImagePath = "Item/BackSelected.png",
|
};
|
topView.AddChidren (back);
|
back.MouseUpEventHandler += (sender, e) => {
|
(Parent as PageLayout).PageIndex -= 1;
|
try {
|
curView = null;
|
} catch {
|
base.RemoveFromParent ();
|
}
|
};
|
#endregion
|
|
#region 全开-全关
|
var powerView = new FrameLayout () {
|
Height = Application.GetRealHeight (110),
|
BackgroundColor = SkinStyle.Current.TitileView,
|
Y = topView.Bottom
|
};
|
AddChidren (powerView);
|
var btnAllON = new Button () {
|
Width = Application.GetRealWidth (320),
|
TextSize = 16,
|
TextID = R.MyInternationalizationString.ALLON,
|
TextColor = SkinStyle.Current.TextColor1
|
};
|
powerView.AddChidren (btnAllON);
|
var btnAllOff = new Button () {
|
Width = Application.GetRealWidth (320),
|
X = btnAllON.Right,
|
TextSize = 16,
|
TextID = R.MyInternationalizationString.ALLOFF,
|
TextColor = SkinStyle.Current.TextColor1
|
};
|
var btnLine = new Button () {
|
Width = 1,
|
Height = Application.GetRealHeight (110) - 1,
|
BackgroundColor = SkinStyle.Current.White20Transparent,
|
X = btnAllON.Right,
|
Y = 1,
|
};
|
powerView.AddChidren (btnLine);
|
btnAllON.MouseUpEventHandler += (sender, e) => {
|
btnAllON.TextColor = SkinStyle.Current.SelectedColor;
|
btnAllOff.TextColor = SkinStyle.Current.TextColor1;
|
controlAllFH (1);
|
};
|
powerView.AddChidren (btnAllOff);
|
btnAllOff.MouseUpEventHandler += (sender, e) => {
|
btnAllON.TextColor = SkinStyle.Current.TextColor1;
|
btnAllOff.TextColor = SkinStyle.Current.SelectedColor;
|
controlAllFH (0);
|
};
|
#endregion
|
|
bodyScrolView = new VerticalScrolViewLayout () {
|
Width = LayoutParams.MatchParent,
|
Height = Application.GetRealHeight (Application.DesignHeight - 126 - 110),
|
Y = powerView.Bottom,
|
BackgroundColor = SkinStyle.Current.ViewColor
|
};
|
AddChidren (bodyScrolView);
|
|
#region 显示全部的地热
|
foreach (var room in Room.Lists) {
|
if (string.IsNullOrEmpty(room.Name)) {
|
continue;
|
}
|
foreach (var common in room.DeviceList.FindAll ((obj) => { return obj.Type == DeviceType.FoolHeat || obj.Type == DeviceType.FoolHeatPanel; })) {
|
var roomFH = common as FoolHeat;
|
FrameLayout fhView = new FrameLayout () {
|
Height = Application.GetRealHeight (130),
|
};
|
fhView.Tag = roomFH.CommonLoopID;
|
bodyScrolView.AddChidren (fhView);
|
var tempDeviceName = new Button () {
|
X = Application.GetRealWidth (20),
|
Width = Application.GetRealWidth (400),
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = room.Name + "-" + roomFH.Name,
|
TextColor = SkinStyle.Current.TextColor1,
|
};
|
fhView.AddChidren (tempDeviceName);
|
tempDeviceName.MouseUpEventHandler += (sender2, e2) => {
|
var userFHPageView = new UserFHPage (roomFH, room);
|
UserMiddle.DevicePageView.AddChidren (userFHPageView);
|
userFHPageView.ShowRoomFH ();
|
UserMiddle.DevicePageView.PageIndex = 2;
|
};
|
|
var btnSetTemperature = new Button () {
|
Width = Application.GetRealWidth (310),
|
Height = Application.GetRealHeight (200),
|
X = Application.GetRealWidth (280),
|
Gravity = Gravity.CenterVertical,
|
Text = roomFH.WorkingTemperature.ToString () + "°",
|
TextSize = 28,
|
TextAlignment = TextAlignment.Center,
|
Enable = false,
|
Tag = "Temperature"
|
};
|
fhView.AddChidren (btnSetTemperature);
|
|
var tempSiwtch = new Button () {
|
Width = Application.GetMinRealAverage (90),
|
Height = Application.GetMinRealAverage (53),
|
X = Application.GetRealWidth (640 - 90 - 20),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/SwitchClose.png",
|
SelectedImagePath = "Item/SwitchOpen.png",
|
Tag = "Switch"
|
};
|
fhView.AddChidren (tempSiwtch);
|
|
if (roomFH.Status == 1) {
|
tempSiwtch.IsSelected = true;
|
} else {
|
tempSiwtch.IsSelected = false;
|
}
|
UpdateStatus (roomFH);
|
tempSiwtch.MouseUpEventHandler += (sender3, e3) => {
|
tempSiwtch.IsSelected = !tempSiwtch.IsSelected;
|
roomFH.Status = tempSiwtch.IsSelected ? (byte)1 : (byte)0;
|
System.Threading.Tasks.Task.Run (() => {
|
if (roomFH.Type == DeviceType.FoolHeatPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, roomFH.SubnetID, roomFH.DeviceID, new byte [] { 20, roomFH.Status, roomFH.LoopID });
|
} else if (roomFH.Type == DeviceType.FoolHeat) {
|
roomFH = roomFH.Serverx_FH_CMD (FoolHeat.CommandType.Switch);
|
}
|
});
|
};
|
|
if (0 < roomFH.Status) {
|
tempSiwtch.IsSelected = true;
|
}
|
|
Button btnFHNull = new Button () {
|
Y = Application.GetRealHeight (127),
|
Height = Application.GetRealHeight (3),
|
BackgroundColor = SkinStyle.Current.MainColor,
|
SelectedBackgroundColor = SkinStyle.Current.MainColor,
|
};
|
fhView.AddChidren (btnFHNull);
|
}
|
}
|
#endregion
|
|
}
|
|
/// <summary>
|
/// 控制所有地热
|
/// </summary>
|
/// <param name="b">The blue component.</param>
|
void controlAllFH (byte b)
|
{
|
System.Threading.Tasks.Task.Run (() => {
|
foreach (var room in Room.Lists) {
|
if (room == null)
|
continue;
|
if (string.IsNullOrEmpty(room.Name)) {
|
continue;
|
}
|
var list = room.DeviceList.FindAll ((obj) => {
|
return obj.Type == DeviceType.FoolHeat || obj.Type == DeviceType.FoolHeatPanel;
|
});
|
foreach (var common in list) {
|
var fh = common as FoolHeat;
|
fh.Status = b;
|
if (fh.Type == DeviceType.FoolHeatPanel) {
|
Control.ControlBytesSend (Command.InstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 20, fh.Status, fh.LoopID });
|
} else if (fh.Type == DeviceType.FoolHeat) {
|
fh = fh.Serverx_FH_CMD (FoolHeat.CommandType.Switch);
|
}
|
}
|
}
|
});
|
}
|
|
static System.Threading.Thread thread;
|
/// <summary>
|
/// 读取设备状态
|
/// </summary>
|
public static void readAllStatus (bool isRead = false)
|
{
|
if (isRead) {
|
foreach (Room room in Room.Lists) {
|
if (room == null) {
|
continue;
|
}
|
var list = room.DeviceList.FindAll ((obj) => {
|
return (obj.Type == DeviceType.FoolHeat || obj.Type == DeviceType.FoolHeatPanel);
|
});
|
foreach (Common common in list) {
|
common.LastUpdateTime = DateTime.MinValue;
|
}
|
}
|
}
|
if (thread != null) {
|
thread.Abort ();
|
}
|
thread = new Thread (() => {
|
try {
|
System.Collections.Generic.List<string> readList = new System.Collections.Generic.List<string> ();
|
foreach (Room room in Room.Lists) {
|
var list = room.DeviceList.FindAll ((obj) => {
|
return obj.LastUpdateTime.AddMinutes (Common.Time) <= DateTime.Now && (obj.Type == DeviceType.FoolHeat || obj.Type == DeviceType.FoolHeatPanel);
|
});
|
foreach (Common common in list) {
|
var s = common.Type + "_" + common.SubnetID + "_" + common.DeviceID + "_" + common.LoopID;
|
//已经读取过当前设备就不再读取
|
if (readList.Contains (s)) {
|
continue;
|
}
|
readList.Add (s);
|
|
var fh = common as FoolHeat;
|
Thread.Sleep (500);
|
|
if (fh.Type == DeviceType.FoolHeatPanel) {
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 20, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 21, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 24, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 25, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 26, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 27, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 28, fh.LoopID, fh.LoopID });
|
Control.ControlBytesSend (Command.ReadPanleTemp, fh.SubnetID, fh.DeviceID, new byte [] { fh.LoopID }, SendCount.Zero);
|
//Control.ControlBytesSend (Command.Read_Floor_Heat_State, fh.SubnetID, fh.DeviceID, new byte [] { (byte)(fh.LoopID - 1) });
|
|
|
//Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 20, fh.LoopID, fh.LoopID });
|
//Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 21, fh.LoopID, fh.LoopID });
|
//Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 24, fh.LoopID, fh.LoopID });
|
|
//switch (fh.TemperatureType) {
|
//case 1:
|
// Control.ControlBytesSend (Command.InstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 25, fh.LoopID, fh.LoopID });
|
// break;
|
//case 2:
|
// Control.ControlBytesSend (Command.InstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 26, fh.LoopID, fh.LoopID });
|
// break;
|
//case 3:
|
// Control.ControlBytesSend (Command.InstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 27, fh.LoopID, fh.LoopID });
|
// break;
|
//case 4:
|
// Control.ControlBytesSend (Command.InstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 28, fh.LoopID, fh.LoopID });
|
// break;
|
//default:
|
// break;
|
//}
|
|
Control.ControlBytesSend (Command.ReadPanleTemp, fh.SubnetID, fh.DeviceID, new byte [] { fh.LoopID }, SendCount.Zero);
|
Control.ControlBytesSend (Command.Read_Floor_Heat_State, fh.SubnetID, fh.DeviceID, new byte [] { (byte)(fh.LoopID - 1) });
|
|
|
} else if (fh.Type == DeviceType.FoolHeat) {
|
fh = fh.Serverx_FH_CMD (FoolHeat.CommandType.Read);
|
}
|
}
|
}
|
} catch { } finally {
|
thread = null;
|
}
|
});
|
thread.Start ();
|
}
|
}
|
}
|