using System;
|
using System.Collections.Generic;
|
using Shared.Common;
|
using Shared.Phone.UserView;
|
using Shared.R;
|
using ZigBee.Device;
|
using Shared.Phone.Device.CommonForm;
|
using Shared.Phone.Device.AC;
|
|
namespace Shared.Phone.Device.Category
|
{
|
/// <summary>
|
/// Category.
|
/// </summary>
|
public class Category : FrameLayout, ZigBee.Common.IStatus
|
{
|
|
#region ◆ 变量____________________________
|
/// <summary>
|
/// The instance.
|
/// </summary>
|
public static Category instance;
|
/// <summary>
|
/// low_High
|
/// </summary>
|
private const int low_High= 127;
|
/// <summary>
|
/// 功能
|
/// </summary>
|
private ButtonLineForm functionBtn;
|
/// <summary>
|
/// 场景
|
/// </summary>
|
private ButtonLineForm sceneBtn;
|
/// <summary>
|
/// 自动化
|
/// </summary>
|
private ButtonLineForm automationBtn;
|
/// <summary>
|
/// 场景功能中部背景bodyView
|
/// </summary>
|
public FrameLayout functionSceneBodyView;
|
/// <summary>
|
/// 中部背景bodyView
|
/// </summary>
|
public FrameLayout functionSceneAutoBodyView;
|
/// <summary>
|
/// 相同的设备列表
|
/// </summary>
|
public VerticalScrolViewLayout deviceListScrolView;
|
/// <summary>
|
/// 设备是否在线标识--Online
|
/// </summary>
|
private readonly string deviceStatus_Online = "Online";
|
/// <summary>
|
/// 设备状态开关标识--Switch
|
/// </summary>
|
private readonly string deviceStatus_OnOffStatus = "Switch";
|
/// <summary>
|
/// 右上角添加按钮
|
/// </summary>
|
private Device.CommonForm.SelectedStatuButton addBtn;
|
/// <summary>
|
/// 网关
|
/// </summary>
|
private ZbGateway zbGateway = null;
|
/// <summary>
|
/// 网关列表
|
/// </summary>
|
private List<ZbGateway> zbGatewayList = new List<ZbGateway> { };
|
/// <summary>
|
/// 设备列表
|
/// </summary>
|
private List<CommonDevice> commonDeviceList = new List<CommonDevice> { };
|
/// <summary>
|
/// 是否发送控制命令成功了
|
/// </summary>
|
private bool sendedControlCommand = false;
|
/// <summary>
|
/// 当前功能类型按钮
|
/// </summary>
|
private FunctionButton tempFunctionTypeBtn;
|
/// <summary>
|
/// 功能类型按钮
|
/// </summary>
|
private FunctionButton functionTypeIMG;
|
/// <summary>
|
/// 功能类型
|
/// </summary>
|
private HorizontalScrolViewLayout functionTypeScrowView;
|
/// <summary>
|
/// 设备类型RowLayout
|
/// </summary>
|
private FrameLayout typeRowLayout;
|
/// <summary>
|
/// 楼层
|
/// </summary>
|
private Button floorBtn;
|
/// <summary>
|
/// 选择楼层
|
/// </summary>
|
private Button selectFloorBtn;
|
|
#endregion
|
|
#region ◆ 接口____________________________
|
/// <summary>
|
/// 该接口将弃用 改用DeviceInfoChange()
|
/// </summary>
|
/// <param name="common">Common.</param>
|
public void Changed(CommonDevice common)
|
{
|
|
}
|
/// <summary>
|
/// Changeds the IL ogic status.
|
/// </summary>
|
/// <param name="logic">Logic.</param>
|
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
|
{
|
|
}
|
/// <summary>
|
/// Changeds the IS cene status.
|
/// </summary>
|
/// <param name="scene">Scene.</param>
|
public void ChangedISceneStatus(Scene scene)
|
{
|
|
}
|
/// <summary>
|
/// 设备状态更新接口
|
/// <para>type:如果为 DeviceInComingRespon:设备新上报</para>
|
/// <para>type:如果为 IASInfoReport:RemoveDeviceRespon</para>
|
/// <para>type:如果为 DeviceStatusReport:设备上报</para>
|
/// <para>type:如果为 IASInfoReport:IAS安防信息上报</para>
|
/// <para>type:如果为 OnlineStatusChange: 设备在线状态更新</para>
|
/// </summary>
|
/// <param name="common">Common.</param>
|
/// <param name="typeTag">Type tag.</param>
|
public void DeviceInfoChange(CommonDevice common, string typeTag)
|
{
|
//设备上报状态中 当CluterID=3,就证明该设备在线,直接标记
|
if (typeTag == "DeviceStatusReport")
|
{
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
|
{
|
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
|
var deviceUI = rowLayout.Tag as DeviceUI;
|
if (deviceUI == null || deviceUI.CommonDevice == null)
|
{
|
continue;
|
}
|
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
|
{
|
continue;
|
}
|
switch (deviceUI.CommonDevice.Type)
|
{
|
case DeviceType.OnOffOutput:
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var light = deviceUI.CommonDevice as ToggleLight;
|
light.DeviceStatusReport = common.DeviceStatusReport;
|
if (light.DeviceStatusReport.AttriBute == null || light.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
continue;
|
}
|
light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(light.OnOffStatus == 1);
|
row.SetStatuText(deviceUI.GetDeviceStatu());
|
light.LastDateTime = DateTime.Now;
|
}
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.CommonDevice.IsOnline = 1;
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(true);
|
}
|
break;
|
|
case DeviceType.AirSwitch:
|
//开关功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
|
airSwitch.DeviceStatusReport = common.DeviceStatusReport;
|
if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
return;
|
}
|
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(airSwitch.OnOffStatus == 1);
|
row.SetStatuText(deviceUI.GetDeviceStatu());
|
airSwitch.LastDateTime = DateTime.Now;
|
}
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.CommonDevice.IsOnline = 1;
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(true);
|
}
|
break;
|
case DeviceType.WindowCoveringDevice:
|
|
if (common.DeviceStatusReport.CluterID == 258)
|
{
|
if (common.DeviceStatusReport.AttriBute[0].AttributeId == 0)
|
{
|
//窗帘类型
|
var rollerShade = deviceUI.CommonDevice as Rollershade;
|
rollerShade.DeviceStatusReport = common.DeviceStatusReport;
|
rollerShade.WcdType = common.DeviceStatusReport.AttriBute[0].AttriButeData;
|
rollerShade.LastDateTime = DateTime.Now;
|
}
|
if (common.DeviceStatusReport.AttriBute[0].AttributeId == 8)
|
{
|
var row = rowLayout.GetChildren(0) as CategoryFunctionForWinRow;
|
//窗帘百分比
|
var rollerShade = deviceUI.CommonDevice as Rollershade;
|
rollerShade.DeviceStatusReport = common.DeviceStatusReport;
|
rollerShade.WcdCurrentPositionLiftPercentage = common.DeviceStatusReport.AttriBute[0].AttriButeData;
|
row.SetStatuText($"{Language.StringByID(R.MyInternationalizationString.Current)} { deviceUI.GetDeviceStatu()}");
|
rollerShade.LastDateTime = DateTime.Now;
|
}
|
}
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.CommonDevice.IsOnline = 1;
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionForWinRow;
|
row.SetStatu(true);
|
}
|
break;
|
|
case DeviceType.Thermostat:
|
//AC功能
|
if (common.DeviceStatusReport.CluterID == 513)
|
{
|
var attriButeList = common.DeviceStatusReport.AttriBute;
|
if (attriButeList == null || attriButeList.Count == 0)
|
{
|
return;
|
}
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
ac.DeviceStatusReport = common.DeviceStatusReport;
|
|
var curTemp = (attriButeList[0].AttriButeData / 100 < ACControlBase.Temperature_High || attriButeList[0].AttriButeData / 100 > ACControlBase.Temperature_Low) ? attriButeList[0].AttriButeData / 100 : ACControlBase.Temperature_Default;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
ac.currentLocalTemperature = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 17:
|
ac.currentCoolingSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 18:
|
ac.currentHeatingSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 4096:
|
ac.currentAutoSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 28:
|
//此属性描述恒温设备正处于哪种模式
|
ac.currentSystemMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
}
|
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(ac.currentSystemMode != 0);
|
row.SetStatuText(deviceUI.GetDeviceStatu());
|
}
|
|
if (common.DeviceStatusReport.CluterID == 514)
|
{
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
var attriButeList = common.DeviceStatusReport.AttriBute;
|
if (attriButeList == null || attriButeList.Count == 0)
|
{
|
return;
|
}
|
ac.DeviceStatusReport = common.DeviceStatusReport;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
ac.currentFanMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case 4096:
|
ac.currentFanSwingMode = attriButeList[0].AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
}
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(ac.currentSystemMode != 0);
|
row.SetStatuText(deviceUI.GetDeviceStatu());
|
}
|
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
ac.IsOnline = 1;
|
ac.LastDateTime = DateTime.Now;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(true);
|
}
|
break;
|
case DeviceType.DimmableLight:
|
//调光灯功能
|
if (common.DeviceStatusReport.CluterID == 6)
|
{
|
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
|
dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
|
//记录、更新状态
|
if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
continue;
|
}
|
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(dimmableLight.OnOffStatus == 1);
|
row.SetStatuText(deviceUI.GetDeviceStatu());
|
dimmableLight.LastDateTime = DateTime.Now;
|
}
|
if (common.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.CommonDevice.IsOnline = 1;
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(true);
|
}
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
|
}
|
});
|
}
|
else if (typeTag == "OnlineStatusChange")
|
{
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++)
|
{
|
var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout;
|
var deviceUI = rowLayout.Tag as DeviceUI;
|
if (deviceUI == null || deviceUI.CommonDevice == null)
|
{
|
continue;
|
}
|
if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint)
|
{
|
continue;
|
}
|
switch (deviceUI.CommonDevice.Type)
|
{
|
case DeviceType.OnOffOutput:
|
deviceUI.CommonDevice.IsOnline = common.IsOnline;
|
var row = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
break;
|
case DeviceType.AirSwitch:
|
deviceUI.CommonDevice.IsOnline = common.IsOnline;
|
var row1 = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row1.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
break;
|
case DeviceType.WindowCoveringDevice:
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
deviceUI.CommonDevice.IsOnline = common.IsOnline;
|
var row2 = rowLayout.GetChildren(0) as CategoryFunctionForWinRow;
|
row2.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
|
break;
|
|
case DeviceType.DimmableLight:
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
deviceUI.CommonDevice.IsOnline = common.IsOnline;
|
var row3 = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row3.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
|
break;
|
case DeviceType.Thermostat:
|
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
|
deviceUI.CommonDevice.IsOnline = common.IsOnline;
|
var row5 = rowLayout.GetChildren(0) as CategoryFunctionRow;
|
row5.SetStatu(deviceUI.CommonDevice.IsOnline == 1);
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
System.Console.WriteLine($"分类设备状态-Error:{ex.Message}");
|
}
|
});
|
}
|
}
|
#endregion
|
|
#region ◆ 初始化__________________________
|
/// <summary>
|
/// Removes from parent.
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
ZbGateway.StatusList.Remove(this);
|
RemoveAllUpdateControlDeviceStatuAction();
|
base.RemoveFromParent();
|
}
|
|
/// <summary>
|
/// 构造方法
|
/// </summary>
|
public Category()
|
{
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
|
instance = this;
|
ZbGateway.StatusList.Add(this);
|
}
|
|
/// <summary>
|
/// 显示界面--默认场景界面
|
/// </summary>
|
/// <param name="selectedBtn">选中那个界面 0--功能 1--场景 2--自动化 </param>
|
public void Show(int selectedBtn = 1)
|
{
|
RemoveAll();
|
|
#region topview
|
var topView = new FrameLayout()
|
{
|
Y = Application.GetRealHeight(104),
|
Height = Application.GetRealHeight(low_High),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
|
};
|
this.AddChidren(topView);
|
|
var title = new Button()
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Height = Application.GetRealHeight(95),
|
Width = Application.GetRealWidth(CommonFormResouce.TopTitle_Width),
|
Gravity = Gravity.CenterVertical,
|
TextAlignment = TextAlignment.CenterLeft,
|
TextID = R.MyInternationalizationString.Category,
|
TextSize = 20,
|
TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
|
};
|
topView.AddChidren(title);
|
|
addBtn = new SelectedStatuButton()
|
{
|
X = Application.GetRealWidth(953),
|
Width = Application.GetMinRealAverage(104),
|
Height = Application.GetMinRealAverage(104),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/Add_Category.png",
|
SelectedImagePath = "Item/Add_Category.png"
|
};
|
topView.AddChidren(addBtn);
|
#endregion
|
|
#region midFL
|
var midFL = new FrameLayout
|
{
|
Y = topView.Bottom,
|
Height = Application.GetRealHeight(1549),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
AddChidren(midFL);
|
|
var functionSceneAutoBG = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(low_High),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
midFL.AddChidren(functionSceneAutoBG);
|
|
//场景
|
sceneBtn = new ButtonLineForm(CommonFormResouce.X_Left, 34, 150, 68);
|
functionSceneAutoBG.AddChidren(sceneBtn);
|
sceneBtn.Init();
|
sceneBtn.SetTitle(R.MyInternationalizationString.Scence);
|
//功能
|
functionBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 + 20, 34, 150, 68);
|
functionSceneAutoBG.AddChidren(functionBtn);
|
functionBtn.Init();
|
functionBtn.SetTitle(R.MyInternationalizationString.Function);
|
//自动化
|
automationBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 * 2 + 20, 34, 150, 68);
|
automationBtn.Init();
|
automationBtn.SetTitle(R.MyInternationalizationString.Automation);
|
//隐藏自动化
|
if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo != 3)
|
{
|
functionSceneAutoBG.AddChidren(automationBtn);
|
}
|
|
floorBtn = new Button()
|
{
|
X = Application.GetRealWidth(750),
|
Width = Application.GetRealWidth(200),
|
Height = Application.GetRealHeight(60),
|
Gravity = Gravity.CenterVertical,
|
TextAlignment = TextAlignment.CenterRight,
|
TextColor = ZigbeeColor.Current.GXCTextBlackColor,
|
};
|
|
selectFloorBtn = new Button()
|
{
|
X = Application.GetRealWidth(950),
|
Width = Application.GetMinRealAverage(69),
|
Height = Application.GetMinRealAverage(69),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/Drop_Down.png"
|
};
|
|
if (Config.Instance.Home.FloorDics.Count > 0)
|
{
|
floorBtn.Text = Config.Instance.Home.GetCurrentFloorName;
|
functionSceneAutoBG.AddChidren(floorBtn);
|
functionSceneAutoBG.AddChidren(selectFloorBtn);
|
}
|
|
functionSceneAutoBodyView = new FrameLayout
|
{
|
Y = functionSceneAutoBG.Bottom,
|
Height = Application.GetRealHeight(1423),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
midFL.AddChidren(functionSceneAutoBodyView);
|
|
if (selectedBtn == 0)
|
{
|
addBtn.Visible = false;
|
functionBtn.IsSelected = true;
|
}
|
else if (selectedBtn == 1)
|
{
|
addBtn.Visible = true;
|
sceneBtn.IsSelected = true;
|
}
|
else if (selectedBtn == 2)
|
{
|
addBtn.Visible = true;
|
automationBtn.IsSelected = true;
|
}
|
RefreshBodyView();
|
|
#endregion
|
//绑定按钮事件
|
BindEvent();
|
}
|
#endregion
|
|
#region ◆ 切换/添加 功能、场景、自动化________
|
|
/// <summary>
|
/// 绑定按钮的事件
|
/// </summary>
|
private void BindEvent()
|
{
|
//选择功能分栏
|
functionBtn.NameBtn.MouseUpEventHandler += FunctionBtn_MouseUpEventHandler;
|
//选择场景分栏
|
sceneBtn.NameBtn.MouseUpEventHandler += SceneBtn_MouseUpEventHandler;
|
//选中自动化
|
automationBtn.NameBtn.MouseUpEventHandler += AutomationBtn_MouseUpEventHandler;
|
//右上角添加按钮
|
addBtn.MouseUpEventHandler += AddBtn_MouseUpEventHandler;
|
|
selectFloorBtn.MouseUpEventHandler += SelectedFloor_MouseUpEventHandler;
|
floorBtn.MouseUpEventHandler+= SelectedFloor_MouseUpEventHandler;
|
|
}
|
|
/// <summary>
|
/// 选择楼层
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void SelectedFloor_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
|
{
|
var floors = new SelectFloor ();
|
AddChidren(floors);
|
floors.Init(580,330,Direction.Right);
|
floors.FloorAction += (floorName) =>
|
{
|
floorBtn.Text = floorName;
|
RefreshBodyView();
|
};
|
}
|
|
/// <summary>
|
/// 选择功能分栏
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void FunctionBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
|
{
|
functionBtn.IsSelected = true;
|
sceneBtn.IsSelected = false;
|
automationBtn.IsSelected = false;
|
addBtn.Visible = false;
|
RefreshBodyView();
|
}
|
|
/// <summary>
|
/// 选择场景分栏
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void SceneBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
|
{
|
functionBtn.IsSelected = false;
|
sceneBtn.IsSelected = true;
|
automationBtn.IsSelected = false;
|
addBtn.Visible = true;
|
RefreshBodyView();
|
}
|
|
/// <summary>
|
/// 选中自动化
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void AutomationBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
|
{
|
Common.Logic.LogicDviceList.Clear();
|
if (Common.Logic.LogicDviceList.Count == 0)
|
{
|
Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray());
|
}
|
functionBtn.IsSelected = false;
|
sceneBtn.IsSelected = false;
|
automationBtn.IsSelected = true;
|
addBtn.Visible = true;
|
RefreshBodyView();
|
}
|
|
/// <summary>
|
/// 右上角添加按钮事件
|
/// </summary>
|
/// <param name="sender">Sender.</param>
|
/// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
|
private void AddBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs)
|
{
|
if (functionBtn.IsSelected)
|
{
|
//功能
|
}
|
else if (sceneBtn.IsSelected)
|
{
|
//添加场景
|
Add_Scene();
|
}
|
else if (automationBtn.IsSelected)
|
{
|
//添加自动化
|
Add_Automation();
|
}
|
}
|
|
/// <summary>
|
/// 添加场景
|
/// </summary>
|
private void Add_Scene()
|
{
|
var scene = new CategoryAddScene();
|
UserView.HomePage.Instance.AddChidren(scene);
|
UserView.HomePage.Instance.PageIndex += 1;
|
scene.Show();
|
}
|
|
/// <summary>
|
/// 添加自动化
|
/// </summary>
|
private void Add_Automation()
|
{
|
//new一个新逻辑对象;
|
Common.Logic.CurrentLogic = new Common.Logic();
|
Common.Logic.CurrentLogic.IsEnable = 1;//默认为开
|
Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1);
|
var addLogicPage = new Shared.Phone.Device.Logic.AddLogicPage();
|
UserView.HomePage.Instance.AddChidren(addLogicPage);
|
UserView.HomePage.Instance.PageIndex += 1;
|
addLogicPage.Show();
|
}
|
/// <summary>
|
/// HidenFloor
|
/// </summary>
|
/// <param name="statu"></param>
|
private void HidenFloor(bool statu)
|
{
|
selectFloorBtn.Visible = !statu;
|
floorBtn.Visible = !statu;
|
}
|
|
#endregion
|
|
#region ◆ 刷新____________________________
|
/// <summary>
|
/// 刷新bodyView
|
/// </summary>
|
public void RefreshBodyView()
|
{
|
functionSceneAutoBodyView.RemoveAll();
|
if (functionBtn.IsSelected)
|
{
|
HidenFloor(false);
|
ShowFunction();
|
}
|
else if (sceneBtn.IsSelected)
|
{
|
HidenFloor(false);
|
ShowScene();
|
}
|
else if (automationBtn.IsSelected)
|
{
|
HidenFloor(true);
|
ShowAutotion();
|
}
|
}
|
|
#endregion
|
|
#region ◆ 功能____________________________
|
/// <summary>
|
/// 功能
|
/// </summary>
|
public void ShowFunction()
|
{
|
AddRoomView();
|
}
|
|
/// <summary>
|
/// 提示没有功能
|
/// </summary>
|
private void ShowNoFunctionTip()
|
{
|
var noFunction = new Button()
|
{
|
Y=Application.GetRealHeight(320),
|
Width=Application.GetMinRealAverage(757),
|
Height = Application.GetMinRealAverage(435),
|
UnSelectedImagePath="Item/NoFunction.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
functionSceneBodyView.AddChidren(noFunction);
|
|
var noFunctionTip = new Button()
|
{
|
Y = noFunction.Bottom + Application.GetRealHeight(32),
|
Height = Application.GetRealHeight(200),
|
Width = Application.GetRealWidth(700),
|
Gravity = Gravity.CenterHorizontal,
|
Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}","\r\n"),
|
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
TextAlignment = TextAlignment.Center,
|
IsMoreLines=true
|
};
|
functionSceneBodyView.AddChidren(noFunctionTip);
|
}
|
|
/// <summary>
|
/// RefreshFunction
|
/// </summary>
|
/// <param name="room"></param>
|
private void RefreshFunction(Common.Room room)
|
{
|
//移除监听
|
RemoveAllUpdateControlDeviceStatuAction();
|
functionSceneBodyView.RemoveAll();
|
|
if (room.DeviceUIList.Count == 0)
|
{
|
ShowNoFunctionTip();
|
}
|
else
|
{
|
functionTypeScrowView = new HorizontalScrolViewLayout
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Height = Application.GetRealHeight(279),
|
Width = Application.GetRealWidth(1028),
|
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
|
};
|
functionSceneBodyView.AddChidren(functionTypeScrowView);
|
|
deviceListScrolView = new VerticalScrolViewLayout
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Y = Application.GetRealHeight(35+275),
|
Width = Application.GetRealWidth(1028),
|
Height = Application.GetRealHeight(938) - 1,
|
BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor
|
};
|
functionSceneBodyView.AddChidren(deviceListScrolView);
|
tempFunctionTypeBtn = new FunctionButton();
|
|
EventHandler<MouseEventArgs> ShowSameTypeFunction = (object typeSender, MouseEventArgs mouseEventArgs) =>
|
{
|
tempFunctionTypeBtn.IsSelected = false;
|
tempFunctionTypeBtn = (typeSender as Button).Parent as FunctionButton;
|
((typeSender as Button).Parent as FunctionButton).IsSelected = true;
|
|
deviceListScrolView.RemoveAll();
|
|
var sameTypeList = new List<DeviceUI> { };
|
foreach (var devieceUI in room.DeviceUIList)
|
{
|
if (devieceUI == null || devieceUI.CommonDevice == null)
|
{
|
continue;
|
}
|
if (devieceUI.CommonDevice.Type.ToString() == (typeSender as Button).Tag.ToString())
|
{
|
if (!sameTypeList.Contains(devieceUI))
|
{
|
sameTypeList.Add(devieceUI);
|
}
|
}
|
}
|
foreach (var deviceUI in sameTypeList)
|
{
|
//删除设备
|
EventHandler<MouseEventArgs> delEvent = (delSender, delE) =>
|
{
|
var alert = new CustomAlert();
|
AddChidren(alert);
|
alert.Show(Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
|
alert.ResultEventHandler += (e2) =>
|
{
|
if (e2)
|
{
|
Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.CommonDevice);
|
deviceListScrolView.RemoveViewByTag((delSender as Button).Tag);
|
sameTypeList.Remove(deviceUI);
|
if (sameTypeList.Count == 0)
|
{
|
RefreshBodyView();
|
}
|
}
|
};
|
};
|
EventHandler<MouseEventArgs> deviceDetailHandler = (send2, e2) =>
|
{
|
var detailInfo = new Device.CommonForm.DeviceDetailInfo { };
|
UserView.HomePage.Instance.AddChidren(detailInfo);
|
UserView.HomePage.Instance.PageIndex += 1;
|
detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom);
|
detailInfo.action = RefreshBodyView;
|
};
|
|
if (deviceUI.CommonDevice.Type == DeviceType.OnOffOutput)
|
{
|
//灯
|
var light = deviceUI.CommonDevice as ToggleLight;
|
//补上非远程
|
if (light.Gateway == null)
|
{
|
continue;
|
}
|
if (light.Gateway.IsVirtual)
|
{
|
UserHomeView.ReadStatus(light, () =>
|
{
|
light.ReadOnOffStatus();
|
light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
});
|
}
|
else
|
{
|
//防止短时间内多次读取状态
|
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
|
{
|
light.ReadOnOffStatus();
|
light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
}
|
}
|
|
var deviceTypeRowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(129 + 35),
|
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
|
Tag = deviceUI
|
};
|
deviceListScrolView.AddChidren(deviceTypeRowLayout);
|
|
var deviceRow = new CategoryFunctionRow(0, 35);
|
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
|
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
|
deviceRow.SetOnLineStatu(light.IsOnline == 1);
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
deviceRow.SetStatu(light.OnOffStatus == 1);
|
deviceTypeRowLayout.AddChidren(deviceRow);
|
|
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
zbGateway = deviceUI.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
|
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
|
deviceRow.IsSelected = (send2 as Button).IsSelected;
|
if ((send2 as Button).IsSelected)
|
{
|
light.SwitchControl(1);
|
}
|
else
|
{
|
light.SwitchControl(0);
|
}
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
};
|
|
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
if (deviceUI.CommonDevice.DfunctionType == DeviceFunctionType.A开关)
|
{
|
var lightControl = new Phone.Device.Light.OnOffControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(deviceUI, room);
|
}
|
else if (deviceUI.CommonDevice.DfunctionType == DeviceFunctionType.A插座)
|
{
|
var lightControl = new Phone.Device.Light.PlugControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(deviceUI, room);
|
}
|
else
|
{
|
var lightControl = new Phone.Device.Light.LightControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(deviceUI, room);
|
}
|
};
|
|
var editBtn = new CommonForm.RowLayoutEditButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(editBtn);
|
editBtn.MouseUpEventHandler += deviceDetailHandler;
|
|
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(delBtn);
|
delBtn.MouseUpEventHandler += delEvent;
|
}
|
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.AirSwitch)
|
{
|
//空气开关
|
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
|
//补上非远程
|
if (airSwitch.Gateway == null)
|
{
|
continue;
|
}
|
if (airSwitch.Gateway.IsVirtual)
|
{
|
UserHomeView.ReadStatus(airSwitch, () =>
|
{
|
airSwitch.ReadOnOffStatus();
|
airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
});
|
}
|
else
|
{
|
if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
airSwitch.ReadOnOffStatus();
|
airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
}
|
}
|
|
var deviceTypeRowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(129 + 35),
|
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
|
Tag = deviceUI
|
};
|
deviceListScrolView.AddChidren(deviceTypeRowLayout);
|
|
var deviceRow = new CategoryFunctionRow(0, 35);
|
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
|
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
|
deviceRow.SetOnLineStatu(airSwitch.IsOnline == 1);
|
deviceRow.SetStatu(airSwitch.OnOffStatus == 1);
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
deviceTypeRowLayout.AddChidren(deviceRow);
|
|
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
zbGateway = deviceUI.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
|
|
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
|
if ((send2 as Button).IsSelected)
|
{
|
airSwitch.SwitchControl(1);
|
}
|
else
|
{
|
airSwitch.SwitchControl(0);
|
}
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
};
|
|
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
var lightControl = new Phone.Device.Light.AirSwitchControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
//lightControl.action = RefreshBodyView;
|
lightControl.Show(deviceUI, room);
|
};
|
|
var editBtn = new CommonForm.RowLayoutEditButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(editBtn);
|
editBtn.MouseUpEventHandler += deviceDetailHandler;
|
|
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(delBtn);
|
delBtn.MouseUpEventHandler += delEvent;
|
}
|
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.DimmableLight)
|
{
|
//调光灯
|
var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
|
//补上非远程
|
if (dimmableLight.Gateway == null)
|
{
|
continue;
|
}
|
if (dimmableLight.Gateway.IsVirtual)
|
{
|
UserHomeView.ReadStatus(dimmableLight, () =>
|
{
|
dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
dimmableLight.ReadOnOffStatus();
|
dimmableLight.ReadLevel();
|
});
|
}
|
else
|
{
|
if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
dimmableLight.ReadOnOffStatus();
|
dimmableLight.ReadLevel();
|
}
|
}
|
|
var deviceTypeRowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(129 + 35),
|
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
|
Tag = deviceUI
|
};
|
deviceListScrolView.AddChidren(deviceTypeRowLayout);
|
|
var deviceRow = new CategoryFunctionRow(0, 35);
|
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
|
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
|
deviceRow.SetOnLineStatu(dimmableLight.IsOnline == 1);
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
deviceRow.SetStatu(dimmableLight.OnOffStatus == 1);
|
deviceTypeRowLayout.AddChidren(deviceRow);
|
|
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
zbGateway = deviceUI.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
|
|
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
|
if ((send2 as Button).IsSelected)
|
{
|
dimmableLight.SwitchControl(1);
|
}
|
else
|
{
|
dimmableLight.SwitchControl(0);
|
}
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
};
|
|
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
var dimmableLightControl = new Phone.Device.Light.DimmableLightControl();
|
UserView.HomePage.Instance.AddChidren(dimmableLightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
UserView.HomePage.Instance.ScrollEnabled = false;
|
//dimmableLightControl.action = RefreshBodyView;
|
dimmableLightControl.Show(deviceUI, room);
|
};
|
|
var editBtn = new CommonForm.RowLayoutEditButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(editBtn);
|
editBtn.MouseUpEventHandler += deviceDetailHandler;
|
|
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(delBtn);
|
delBtn.MouseUpEventHandler += delEvent;
|
|
}
|
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.Thermostat)
|
{
|
//空调
|
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
|
//补上非远程
|
if (ac.Gateway == null)
|
{
|
continue;
|
}
|
if (ac.Gateway.IsVirtual)
|
{
|
//发送读取状态命令
|
UserView.UserHomeView.ReadStatus(ac, () =>
|
{
|
ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
ac.ReadLocalTemperature();
|
ac.ReadCoolingSetpoint();
|
ac.ReadHeatingSetpoint();
|
ac.ReadAutoSetpoint();
|
ac.ReadFanMode();
|
ac.ReadSystemMode();
|
ac.ReadSystemFansSwingMode();
|
});
|
}
|
else
|
{
|
//防止短时间内多次读取设备状态
|
if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
ac.ReadLocalTemperature();
|
ac.ReadCoolingSetpoint();
|
ac.ReadHeatingSetpoint();
|
ac.ReadAutoSetpoint();
|
ac.ReadFanMode();
|
ac.ReadSystemMode();
|
ac.ReadSystemFansSwingMode();
|
}
|
}
|
|
var deviceTypeRowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(127 + 35),
|
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
|
Tag = deviceUI
|
};
|
deviceListScrolView.AddChidren(deviceTypeRowLayout);
|
|
var deviceRow = new CategoryFunctionRow(0, 35);
|
deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
|
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
|
deviceRow.SetOnLineStatu(ac.IsOnline == 1);
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
deviceRow.SetStatu(ac.currentSystemMode != 1);
|
deviceTypeRowLayout.AddChidren(deviceRow);
|
|
deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
zbGateway = deviceUI.CommonDevice.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice);
|
|
(send2 as Button).IsSelected = !(send2 as Button).IsSelected;
|
if ((send2 as Button).IsSelected)
|
{
|
ac.Open();
|
}
|
else
|
{
|
ac.Close();
|
}
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
//控制延时回调
|
DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
};
|
|
var editBtn = new CommonForm.RowLayoutEditButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(editBtn);
|
editBtn.MouseUpEventHandler += deviceDetailHandler;
|
|
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(delBtn);
|
delBtn.MouseUpEventHandler += delEvent;
|
|
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
var acControl = new Phone.Device.AC.ACControl();
|
UserView.HomePage.Instance.AddChidren(acControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
UserView.HomePage.Instance.ScrollEnabled = false;
|
//rollerShadeControl.action = RefreshBodyView;
|
acControl.Show(deviceUI, room);
|
};
|
}
|
else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.WindowCoveringDevice)
|
{
|
//卷帘
|
var rollerShade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
|
//不上非远程
|
if (rollerShade.Gateway == null)
|
{
|
continue;
|
}
|
if (rollerShade.Gateway.IsVirtual)
|
{
|
UserHomeView.ReadStatus(rollerShade, () =>
|
{
|
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
rollerShade.ReadWcdCurrentPositionLiftPercentage();
|
});
|
}
|
else
|
{
|
//防止短时间内多次读取
|
if ((DateTime.Now - rollerShade.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch);
|
rollerShade.ReadWcdCurrentPositionLiftPercentage();
|
}
|
}
|
|
|
var deviceTypeRowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(129 + 35),
|
LineColor = ZigbeeColor.Current.GXCBackgroundColor,
|
Tag = deviceUI
|
};
|
deviceListScrolView.AddChidren(deviceTypeRowLayout);
|
|
var deviceRow = new CategoryFunctionForWinRow(0, 35);
|
deviceRow.Init(deviceUI);
|
deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
|
deviceRow.SetOnLineStatu(rollerShade.IsOnline == 1);
|
deviceRow.SetStatuText(deviceUI.GetDeviceStatu());
|
deviceRow.SetStatu(rollerShade.WcdCurrentPositionLiftPercentage != 0);
|
deviceRow.SetRollerShadeIcon(rollerShade.WcdType);
|
deviceTypeRowLayout.AddChidren(deviceRow);
|
|
if (rollerShade.WcdType == -1)
|
{
|
CommonPage.Loading.Start();
|
new System.Threading.Thread(() =>
|
{
|
Rollershade.ReadWcdTypeAction(rollerShade, () =>
|
{
|
Application.RunOnMainThread(() =>
|
{
|
deviceRow.SetRollerShadeIcon(rollerShade.WcdType);
|
CommonPage.Loading.Hide();
|
});
|
});
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
var editBtn = new CommonForm.RowLayoutEditButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(editBtn);
|
editBtn.MouseUpEventHandler += deviceDetailHandler;
|
|
var delBtn = new Device.CommonForm.RowLayoutDeleteButton()
|
{
|
Tag = deviceUI,
|
Radius = 0
|
};
|
deviceTypeRowLayout.AddRightView(delBtn);
|
delBtn.MouseUpEventHandler += delEvent;
|
|
deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) =>
|
{
|
var rollerShadeControl = new Phone.Device.Curtain.RollerShadeControl();
|
UserView.HomePage.Instance.AddChidren(rollerShadeControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
UserView.HomePage.Instance.ScrollEnabled = false;
|
//rollerShadeControl.action = RefreshBodyView;
|
rollerShadeControl.Show(deviceUI, room);
|
};
|
}
|
else
|
{
|
|
}
|
}
|
};
|
|
foreach (var deviceType in Common.Room.GetdeviceTypes(room))
|
{
|
typeRowLayout = new FrameLayout()
|
{
|
Width = Application.GetRealWidth(CommonPage.AppRealWidth / 5),
|
Tag = deviceType
|
};
|
functionTypeScrowView.AddChidren(typeRowLayout);
|
|
functionTypeIMG = new FunctionButton()
|
{
|
Tag = deviceType
|
};
|
functionTypeIMG.Init(DeviceUI.GetDeviceTypeUnSelectedImagePath(deviceType), DeviceUI.GetDeviceTypeUnSelectedImagePath(deviceType));
|
functionTypeIMG.SetTitle(DeviceUI.GetDeviceTypeName(deviceType));
|
typeRowLayout.AddChidren(functionTypeIMG);
|
|
functionTypeIMG.ClickBtn.MouseUpEventHandler += ShowSameTypeFunction;
|
|
|
if (deviceType == room.DeviceUIList[0].CommonDevice.Type)
|
{
|
ShowSameTypeFunction(functionTypeIMG.ImageBtn, null);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// AddRoomView
|
/// </summary>
|
private void AddRoomView()
|
{
|
var roomFL = new HorizontalScrolViewLayout()
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Height = Application.GetRealHeight(170),
|
Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonFormResouce.X_Left),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
functionSceneAutoBodyView.AddChidren(roomFL);
|
|
//功能和场景bodyView
|
functionSceneBodyView = new FrameLayout()
|
{
|
Y = roomFL.Bottom,
|
Height = Application.GetRealHeight(973+279),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
functionSceneAutoBodyView.AddChidren(functionSceneBodyView);
|
|
Button curBtn = new Button();
|
foreach (var room in Common.Room.CurrentRoom.GetRoomsByCurrentFloorIdAppendLoveRoom())
|
{
|
var row = new FrameLayout()
|
{
|
Width = Application.GetRealWidth(187 + 50),
|
Height = Application.GetRealHeight(167)
|
};
|
roomFL.AddChidren(row);
|
|
var roomBtn = new Button()
|
{
|
Width = Application.GetRealWidth(187),
|
Height = Application.GetRealHeight(78),
|
Radius = (uint)Application.GetRealHeight(78 / 2),
|
Gravity = Gravity.Center,
|
Text = room.Name,
|
TextColor = ZigbeeColor.Current.GXCTextGrayColor,
|
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
BackgroundColor = ZigbeeColor.Current.GXCButtonUnSelectedColor3,
|
SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonSelectedColor,
|
BorderColor = ZigbeeColor.Current.GXCBorderUnSelectedColor,
|
BorderWidth = 1
|
};
|
row.AddChidren(roomBtn);
|
if (room.IsLove)
|
{
|
roomBtn.IsSelected = true;
|
curBtn = roomBtn;
|
|
if(sceneBtn.IsSelected)
|
{
|
RefreshScene(room);
|
}
|
else
|
{
|
RefreshFunction(room);
|
}
|
|
}
|
roomBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
if ((sender as Button) == curBtn)
|
{
|
return;
|
}
|
(sender as Button).IsSelected = true;
|
curBtn.IsSelected = false;
|
curBtn = sender as Button;
|
if (sceneBtn.IsSelected)
|
{
|
RefreshScene(room);
|
}
|
else
|
{
|
RefreshFunction(room);
|
}
|
};
|
}
|
|
}
|
|
#endregion
|
|
#region ◆ 场景____________________________
|
/// <summary>
|
/// 选择场景--所有房间的所有场景
|
/// </summary>
|
public void ShowScene()
|
{
|
AddRoomView();
|
}
|
|
/// <summary>
|
/// RefreshScene
|
/// </summary>
|
/// <param name="room"></param>
|
public void RefreshScene(Common.Room room)
|
{
|
functionSceneBodyView.RemoveAll();
|
var sceneList = room.SceneUIList;
|
if (sceneList.Count == 0)
|
{
|
ShowNoSceneTip();
|
}
|
else
|
{
|
var sceneScrolView = new VerticalScrolViewLayout
|
{
|
//Y = Application.GetRealHeight(58)
|
};
|
functionSceneBodyView.AddChidren(sceneScrolView);
|
foreach (var scene in sceneList)
|
{
|
var sceneFL = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(446),
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
|
Tag = scene
|
};
|
sceneScrolView.AddChidren(sceneFL);
|
var sceneRowLayout = new RowLayout
|
{
|
Y = Application.GetRealHeight(46),
|
Height = Application.GetRealHeight(446 - 46),
|
LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
|
Radius = CommonPage.BigFormRadius
|
};
|
sceneFL.AddChidren(sceneRowLayout);
|
|
var sceneImg = new Button()
|
{
|
X = Application.GetRealWidth(179),
|
Width = Application.GetRealWidth(844),
|
Height = Application.GetRealHeight(400),
|
BackgroundColor = ZigbeeColor.Current.GXCRedColor,
|
UnSelectedImagePath = scene.IconPath,
|
Radius = (uint)Application.GetRealHeight(17)
|
};
|
sceneRowLayout.AddChidren(sceneImg);
|
|
var leftFL = new FrameLayout
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Y = Application.GetRealHeight(58),
|
Width = Application.GetRealWidth(251),
|
Height = Application.GetRealHeight(282),
|
BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor2,
|
Radius = (uint)Application.GetRealHeight(17)
|
};
|
sceneRowLayout.AddChidren(leftFL);
|
|
var collectionBtn = new Button
|
{
|
X = Application.GetRealWidth(23),
|
Y = Application.GetRealHeight(23),
|
Width = Application.GetMinRealAverage(65),
|
Height = Application.GetMinRealAverage(65),
|
UnSelectedImagePath = "Item/Collection.png",
|
SelectedImagePath = "Item/CollectionSelected.png",
|
IsSelected = Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName),
|
Tag = scene
|
};
|
leftFL.AddChidren(collectionBtn);
|
|
var sceneNameBtn = new Button()
|
{
|
Width = Application.GetRealWidth(176),
|
Height = Application.GetRealHeight(150),
|
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
Text = scene.Name,
|
Gravity = Gravity.Center,
|
IsMoreLines = true
|
};
|
leftFL.AddChidren(sceneNameBtn);
|
|
var collection = new Button
|
{
|
Tag=scene
|
};
|
leftFL.AddChidren(collection);
|
collection.MouseUpEventHandler += (sender, e) =>
|
{
|
if (room.IsLove)
|
{
|
Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
|
sceneScrolView.RemoveViewByTag(collectionBtn.Tag);
|
}
|
else
|
{
|
collectionBtn.IsSelected = !collectionBtn.IsSelected;
|
if (collectionBtn.IsSelected)
|
{
|
Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene);
|
}
|
else
|
{
|
Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
|
}
|
}
|
};
|
|
//定时
|
var delayBtn = new RowLayoutDeleteButton
|
{
|
TextID = R.MyInternationalizationString.Delay,
|
Tag = scene.SceneDelayTime
|
};
|
sceneRowLayout.AddLeftView(delayBtn);
|
|
//编辑
|
var settingBtn = new Device.CommonForm.RowLayoutEditButton()
|
{
|
TextID = R.MyInternationalizationString.Editor,
|
Tag = scene.SceneDelayTime
|
};
|
//删除
|
var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
|
{
|
Tag = scene
|
};
|
|
|
if(room.IsSharedRoom)
|
{
|
|
}
|
else
|
{
|
if(room.IsLove)
|
{
|
sceneRowLayout.AddRightView(deleteBtn);
|
}
|
else
|
{
|
sceneRowLayout.AddRightView(settingBtn);
|
sceneRowLayout.AddRightView(deleteBtn);
|
}
|
}
|
|
|
//调用场景
|
EventHandler<MouseEventArgs> sceneUpHandler = async (sender, e) =>
|
{
|
//1成功 0失败
|
//后面补上相关提示
|
//要先从网关读取延时是否正在执行,如果是进行倒计时,不允许在点击
|
var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
|
//主网关不在线
|
if (sceneOpenAllData == null)
|
{
|
//CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine);
|
CommonPage.Instance.FailureToServer();
|
return;
|
}
|
if (sceneOpenAllData.sceneOpenData == null)
|
{
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
|
return;
|
}
|
//成功
|
if (sceneOpenAllData.sceneOpenData.Result == 1)
|
{
|
|
}
|
//失败
|
else
|
{
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
|
return;
|
}
|
};
|
sceneImg.MouseUpEventHandler += sceneUpHandler;
|
//删除场景
|
EventHandler<MouseEventArgs> delEvent = (sender, e) =>
|
{
|
if(room.IsLove)
|
{
|
Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
|
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
|
}
|
else
|
{
|
var tip = new CustomAlert { };
|
AddChidren(tip);
|
tip.Show(Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
|
|
//var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.ConfirmDelete), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
|
//alert.Show();
|
tip.ResultEventHandler += async (e1) =>
|
{
|
if (e1)
|
{
|
//0 移除失败 1 移除成功 2 没有该场景
|
var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
|
if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
|
{
|
//CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine);
|
CommonPage.Instance.FailureToServer();
|
return;
|
}
|
//1成功
|
if (removeSceneAllData.removeSceneData.Result == 1)
|
{
|
room.RemoveScene(scene);
|
//RefreshBodyView();
|
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
|
}
|
//0 移除失败
|
else if (removeSceneAllData.removeSceneData.Result == 0)
|
{
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
|
return;
|
}
|
//2 没有该场景
|
else if (removeSceneAllData.removeSceneData.Result == 2)
|
{
|
room.RemoveScene(scene);
|
//RefreshBodyView();
|
sceneScrolView.RemoveViewByTag((sender as Button).Tag);
|
CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheSceneIsNull);
|
return;
|
}
|
}
|
};
|
}
|
|
};
|
deleteBtn.MouseUpEventHandler += delEvent;
|
//编辑场景
|
settingBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
SceneUI.EditScene(scene, room);
|
};
|
//编辑延时
|
delayBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
var timeSelect = new SelectTime();
|
CommonPage.Instance.AddChidren(timeSelect);
|
timeSelect.TempTime = scene.SceneDelayTime;
|
timeSelect.Init();
|
timeSelect.TimeAction = (t) =>
|
{
|
scene.SceneDelayTime = t;
|
};
|
};
|
}
|
}
|
}
|
|
/// <summary>
|
/// 显示没有场景
|
/// </summary>
|
private void ShowNoSceneTip()
|
{
|
var noFunction = new Button()
|
{
|
Y = Application.GetRealHeight(320),
|
Width = Application.GetMinRealAverage(757),
|
Height = Application.GetMinRealAverage(435),
|
UnSelectedImagePath = "Item/NoFunction.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
functionSceneBodyView.AddChidren(noFunction);
|
|
var noScenceTip = new Button()
|
{
|
Y = noFunction.Bottom + Application.GetRealHeight(32),
|
Height = Application.GetRealHeight(200),
|
Width = Application.GetRealWidth(700),
|
Gravity = Gravity.CenterHorizontal,
|
Text = Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}","\r\n"),
|
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
TextAlignment = TextAlignment.Center,
|
IsMoreLines = true
|
};
|
functionSceneBodyView.AddChidren(noScenceTip);
|
}
|
|
|
#endregion
|
|
#region ◆ 自动化__________________________
|
|
/// <summary>
|
/// 自动化
|
/// </summary>
|
private async void ShowAutotion()
|
{
|
|
functionSceneAutoBodyView.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
|
var bjFrameLayout = new FrameLayout
|
{
|
Width = Application.GetRealWidth(1080 - 58),
|
Height = Application.GetRealHeight(170),
|
BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
|
X = Application.GetRealWidth(58),
|
Radius = (uint)Application.GetRealHeight(50),
|
Y = Application.GetRealHeight(30),
|
};
|
functionSceneAutoBodyView.AddChidren(bjFrameLayout);
|
|
var sigBtn = new Button
|
{
|
Width = Application.GetMinRealAverage(84),
|
Height = Application.GetMinRealAverage(84),
|
UnSelectedImagePath = "ZigeeLogic/sign.png",
|
X = Application.GetRealWidth(58),
|
Gravity = Gravity.CenterVertical,
|
};
|
bjFrameLayout.AddChidren(sigBtn);
|
|
var recommendtextBtn = new Button
|
{
|
Width = Application.GetMinRealAverage(300),
|
Height = Application.GetMinRealAverage(84),
|
X = sigBtn.Right + Application.GetRealWidth(35),
|
TextAlignment = TextAlignment.CenterLeft,
|
//Text = "推荐模板",
|
TextID = MyInternationalizationString.logictemplate,
|
Gravity = Gravity.CenterVertical,
|
TextColor = ZigbeeColor.Current.LogicBtnSelectedColor,
|
};
|
bjFrameLayout.AddChidren(recommendtextBtn);
|
|
var recommendswitchBtn = new Button
|
{
|
Width = Application.GetMinRealAverage(104),
|
Height = Application.GetMinRealAverage(63),
|
UnSelectedImagePath = "ZigeeLogic/logicclose.png",
|
SelectedImagePath = "ZigeeLogic/logicopen.png",
|
X = bjFrameLayout.Width - Application.GetRealWidth(104 + 58),
|
Gravity = Gravity.CenterVertical,
|
};
|
bjFrameLayout.AddChidren(recommendswitchBtn);
|
|
|
var scenehorizontalScrol = new HorizontalScrolViewLayout
|
{
|
Width = Application.GetRealWidth(1080 - 58),
|
X = Application.GetRealWidth(58),
|
Y = bjFrameLayout.Bottom + Application.GetRealHeight(30),
|
Height = Application.GetRealHeight(0),
|
};
|
functionSceneAutoBodyView.AddChidren(scenehorizontalScrol);
|
|
var logicScrolView = new VerticalScrolViewLayout
|
{
|
Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30),
|
BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
|
X = Application.GetRealWidth(58),
|
Radius = (uint)Application.GetRealHeight(50),
|
Y = scenehorizontalScrol.Bottom,
|
};
|
functionSceneAutoBodyView.AddChidren(logicScrolView);
|
|
|
recommendswitchBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
int Yheight = 0;
|
recommendswitchBtn.IsSelected = !recommendswitchBtn.IsSelected;
|
scenehorizontalScrol.RemoveAll();
|
if (recommendswitchBtn.IsSelected)
|
{
|
scenehorizontalScrol.Height = Application.GetRealHeight(246);
|
Yheight = 20;
|
for (int i = 1; i < 4; i++)
|
{
|
|
var frameLayout = new FrameLayout
|
{
|
Width = Application.GetMinRealAverage(369 + 46),
|
Height = Application.GetMinRealAverage(246),
|
};
|
scenehorizontalScrol.AddChidren(frameLayout);
|
var logiciocnBtn = new Button
|
{
|
Width = Application.GetMinRealAverage(369),
|
Height = Application.GetMinRealAverage(246),
|
UnSelectedImagePath = "ZigeeLogic/" + i + ".png",
|
Tag = i,
|
};
|
frameLayout.AddChidren(logiciocnBtn);
|
|
var logicnameBtn = new Button
|
{
|
Width = Application.GetMinRealAverage(250),
|
Height = Application.GetMinRealAverage(80),
|
X = Application.GetRealWidth(23),
|
Y = Application.GetRealHeight(246 - 23 - 80),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
|
};
|
frameLayout.AddChidren(logicnameBtn);
|
|
if (i == 1)
|
{
|
logicnameBtn.Text = Language.StringByID(MyInternationalizationString.onlight);
|
}
|
else if (i == 2)
|
{
|
logicnameBtn.Text = Language.StringByID(MyInternationalizationString.offlight);
|
}
|
else if (i == 3)
|
{
|
logicnameBtn.Text = Language.StringByID(MyInternationalizationString.automation1);
|
}
|
|
|
EventHandler<MouseEventArgs> iconclick = (sender1, e1) =>
|
{
|
Common.Logic.CurrentLogic = new Common.Logic();
|
Common.Logic.CurrentLogic.IsEnable = 1;//默认为开
|
if (logiciocnBtn.Tag.ToString() == "3")
|
{
|
Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;// Language.StringByID(MyInternationalizationString.automation1);
|
var addLogicPage = new Logic.AddLogicPage();
|
HomePage.Instance.AddChidren(addLogicPage);
|
HomePage.Instance.PageIndex += 1;
|
addLogicPage.Show();
|
}
|
else
|
{
|
|
Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;
|
Logic.TemplatePage templatePage = new Logic.TemplatePage();
|
Logic.TemplatePage.s = logiciocnBtn.Tag.ToString();
|
HomePage.Instance.AddChidren(templatePage);
|
HomePage.Instance.PageIndex += 1;
|
templatePage.Show();
|
}
|
};
|
logiciocnBtn.MouseUpEventHandler += iconclick;
|
logicnameBtn.MouseUpEventHandler += iconclick;
|
}
|
}
|
else
|
{
|
scenehorizontalScrol.Height = Application.GetRealHeight(0);
|
Yheight = 0;
|
}
|
logicScrolView.Y = scenehorizontalScrol.Bottom + Yheight;
|
logicScrolView.Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30) - Yheight;
|
Automationview(logicScrolView);
|
};
|
|
CommonPage.Loading.Start();
|
if (Common.Logic.LogicList.Count == 0)
|
{
|
var Idlist = await Logic.Send.GetLogicId(0);
|
if (Idlist.Count != 0)
|
{
|
var listlogic = await Logic.Send.ReadList(Idlist.Count,0);
|
//foreach可能集合已被修改,枚举操作可能不会执行,可能出现崩溃(建议for)。
|
for (int j = 0; j < listlogic.Count; j++)
|
{
|
var logic = listlogic[j];
|
if (logic.LogicType != 0)
|
{
|
continue;
|
}
|
Common.Logic.LogicList.Add(logic);
|
}
|
}
|
}
|
//自动化
|
Automationview(logicScrolView);
|
CommonPage.Loading.Hide();
|
|
}
|
|
/// <summary>
|
/// 自动化列表界面
|
/// </summary>
|
/// <param name="refresview">Refresview.</param>
|
private async void Automationview(VerticalScrolViewLayout refresview)
|
{
|
refresview.RemoveAll();
|
foreach (var logic in Common.Logic.LogicList)
|
{
|
|
|
var logicRowlayout = new RowLayout
|
{
|
Height = Application.GetRealHeight(190 + 30),
|
Width = Application.GetRealWidth(1080),
|
LineColor = ZigbeeColor.Current.LogicBackgroundColor,
|
BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
|
};
|
refresview.AddChidren(logicRowlayout);
|
|
|
|
var logicnameBtn = new Button
|
{
|
Height = Application.GetRealHeight(58),
|
Width = Application.GetRealWidth(350),
|
Text = logic.LogicName,
|
X = Application.GetRealWidth(12 + 46),
|
Y = Application.GetRealHeight(30),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = ZigbeeColor.Current.LogicTextBlackColor,
|
};
|
logicRowlayout.AddChidren(logicnameBtn);
|
|
|
var logicswitchBtn = new Button
|
{
|
Width = Application.GetMinRealAverage(104),
|
Height = Application.GetMinRealAverage(63),
|
UnSelectedImagePath = "ZigeeLogic/logicclose.png",
|
SelectedImagePath = "ZigeeLogic/logicopen.png",
|
X = logicRowlayout.Width - Application.GetRealWidth(104 + 58 + 58),
|
Y = Application.GetRealHeight(58 + 30 + 9 + 30),
|
};
|
logicRowlayout.AddChidren(logicswitchBtn);
|
|
|
|
logicswitchBtn.MouseUpEventHandler += (sender1, e1) =>
|
{
|
logicswitchBtn.IsSelected = !logicswitchBtn.IsSelected;
|
if (logicswitchBtn.IsSelected)
|
{
|
//逻辑开
|
logic.IsEnable = 1;
|
StatusColor(logic, logicRowlayout, 1);
|
}
|
else
|
{
|
//逻辑关
|
logic.IsEnable = 0;
|
StatusColor(logic, logicRowlayout, 0);
|
}
|
Logic.Send.LogicControlSwitch(logic);
|
//Logic.Send.AddModifyLogic(logic);
|
};
|
if (logic.IsEnable == 1)
|
{
|
logicswitchBtn.IsSelected = true;
|
StatusColor(logic, logicRowlayout, 1);
|
}
|
else if (logic.IsEnable == 0)
|
{
|
logicswitchBtn.IsSelected = false;
|
StatusColor(logic, logicRowlayout, 0);
|
}
|
///编辑
|
var edit = new Button
|
{
|
BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1,
|
Text = Language.StringByID(MyInternationalizationString.edit),
|
TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
|
};
|
logicRowlayout.AddRightView(edit);
|
edit.MouseUpEventHandler += (sender, e) =>
|
{
|
Common.Logic.CurrentLogic = logic;
|
var logicCommunalPage = new Logic.LogicCommunalPage();
|
HomePage.Instance.AddChidren(logicCommunalPage);
|
HomePage.Instance.PageIndex += 1;
|
logicCommunalPage.Show(() => { logicnameBtn.Text = logic.LogicName; Automationview(refresview); });
|
|
};
|
|
|
///删除
|
var del = new Button
|
{
|
BackgroundColor = ZigbeeColor.Current.LogicDelBlackColor1,
|
Text = Language.StringByID(MyInternationalizationString.del),
|
TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor,
|
};
|
logicRowlayout.AddRightView(del);
|
del.MouseUpEventHandler += (sender, e) =>
|
{
|
var alert = new Alert(Language.StringByID(MyInternationalizationString.tip), Language.StringByID(MyInternationalizationString.doyouwanttodelete),
|
Language.StringByID(MyInternationalizationString.cancel), Language.StringByID(MyInternationalizationString.confrim));
|
alert.ResultEventHandler += (sender1, e1) =>
|
{
|
if (e1)
|
{
|
Common.Logic.LogicList.Remove(logic);
|
Automationview(refresview);
|
Logic.Send.DelLogic(logic.LogicId);
|
}
|
};
|
alert.Show();
|
|
};
|
var line = new Button
|
{
|
Y = Application.GetRealHeight(215),
|
Height = Application.GetRealHeight(5),
|
Width = Application.GetRealWidth(1080 - 58),
|
BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor,
|
X = Application.GetRealWidth(58),
|
};
|
logicRowlayout.AddChidren(line);
|
}
|
|
}
|
/// <summary>
|
/// 显示图标的颜色
|
/// </summary>
|
/// <param name="logic"></param>
|
/// <param name="logicRowlayout"></param>
|
/// <param name="intvalue"></param>
|
private void StatusColor(Common.Logic logic, RowLayout logicRowlayout, int intvalue)
|
{
|
|
var logictimeBtn = new Button
|
{
|
Height = Application.GetRealHeight(58),
|
Width = logicRowlayout.Width - Application.GetRealWidth(58 + 12 + 350 + 58),
|
Y = Application.GetRealHeight(30),
|
X = Application.GetRealWidth(365),
|
TextAlignment = TextAlignment.CenterRight,
|
TextColor = ZigbeeColor.Current.LogicListWeekTextColor,
|
};
|
logicRowlayout.AddChidren(logictimeBtn);
|
|
///显示执行周期
|
switch (logic.TimeAttribute.Repeat)
|
{
|
///0:只执行一次,执行后IsEnable值置;1,今年内执行;2:每天执行;3:每月执行;4:每年执行;5:周重复。
|
case 0:
|
{
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.executeonce);
|
}; break;
|
case 1: { }; break;
|
case 2:
|
{
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyday);
|
}; break;
|
case 3:
|
{
|
|
string len = "", value = "";
|
var stringvalue = Convert.ToString(logic.TimeAttribute.MonthDate, 2);
|
var str = stringvalue.Insert(0, new string('0', 32 - stringvalue.Length));
|
for (int j = 31; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
value += (j + 1).ToString() + ",";
|
}
|
}
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.monthly) + value.TrimEnd(',') + Language.StringByID(MyInternationalizationString.day);
|
|
}; break;
|
case 4:
|
{
|
|
Dictionary<int, int> dictionary = new Dictionary<int, int>();
|
///找出执行的月份和天数
|
if (logic.TimeAttribute.SelectMonDate.Count != 0)
|
{
|
for (int i = 0; i < logic.TimeAttribute.SelectMonDate.Count; i++)
|
{
|
var dayvalue = logic.TimeAttribute.SelectMonDate[i];
|
if (dayvalue != 0)
|
{
|
dictionary.Add(i + 1, dayvalue);
|
}
|
}
|
}
|
if (dictionary.Count != 0 && dictionary.Count == 1)
|
{
|
string len = "", leng = "";
|
int minvalue = 0, Maximum = 0;
|
foreach (var value in dictionary)
|
{
|
///取出月份
|
var month = value.Key;
|
///取出日数
|
var day = value.Value;
|
var maxvalue = Convert.ToString(day, 2);
|
var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length));
|
for (int j = 31; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
minvalue = j + 1;
|
break;
|
}
|
}
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
Maximum = j + 1;
|
}
|
}
|
|
if (month.ToString().Length < 2)
|
{
|
leng = "0" + month.ToString();
|
}
|
else
|
{
|
leng = month.ToString();
|
}
|
if (minvalue == Maximum)
|
{
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString());
|
}
|
else
|
{
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-" + leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString());
|
}
|
}
|
|
}
|
else
|
{
|
int b = 0;
|
string stringtext = "";
|
foreach (var value in dictionary)
|
{
|
string len = "", leng = "";
|
int minvalue = 0, Maximum = 0;
|
///取出月份
|
var month = value.Key;
|
///取出日数
|
var day = value.Value;
|
var maxvalue = Convert.ToString(day, 2);
|
var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length));
|
for (int j = 31; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
|
|
if (month.ToString().Length < 2)
|
{
|
leng = "0" + month.ToString();
|
}
|
else
|
{
|
leng = month.ToString();
|
}
|
|
|
|
if (b == 0)
|
{
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
minvalue = j + 1;
|
break;
|
}
|
}
|
stringtext += leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-";
|
|
}
|
|
if (b == dictionary.Count - 1)
|
{
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
Maximum = j + 1;
|
}
|
}
|
stringtext += leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString());
|
|
}
|
b++;
|
}
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.everyyear) + stringtext;
|
}
|
|
}; break;
|
case 5:
|
{
|
string len = "", text = "";
|
List<int> listvalueInt = new List<int>();
|
listvalueInt.Clear();
|
var maxvalue = Convert.ToString(logic.TimeAttribute.WeekDay, 2);
|
var str = maxvalue.Insert(0, new string('0', 8 - maxvalue.Length));
|
for (int j = 7; j >= 0; j--)
|
{
|
len += str.Substring(j, 1);
|
}
|
|
for (int j = 0; j < len.Length; j++)
|
{
|
var strvalue = len.Substring(j, 1);
|
if (strvalue == "1")
|
{
|
listvalueInt.Add(j + 1);
|
|
|
if ((j + 1) == 1)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.mon1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.mon) + ",";
|
}
|
else if ((j + 1) == 2)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.tue1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.tue) + ",";
|
}
|
else if ((j + 1) == 3)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.wed1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.wed) + ",";
|
}
|
else if ((j + 1) == 4)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.thu1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.thu) + ",";
|
}
|
else if ((j + 1) == 5)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.frl1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.frl) + ",";
|
}
|
else if ((j + 1) == 6)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.sat1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.sat) + ",";
|
}
|
else if ((j + 1) == 7)
|
{
|
text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.sun1) + ",";
|
//text += Language.StringByID(MyInternationalizationString.sun) + ",";
|
}
|
|
|
}
|
}
|
//暂时隐藏掉,需要显示周末和工作日再放开;
|
//if (listvalueInt.Count == 5 && !listvalueInt.Contains(6) && !listvalueInt.Contains(7))
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.workingday);
|
//}
|
//else if (listvalueInt.Count == 2 && listvalueInt.Contains(6) && listvalueInt.Contains(7))
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.weekend);
|
//}
|
//else if (listvalueInt.Count == 7)
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyday);
|
//}
|
//else
|
//{
|
// btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(',');
|
//}
|
logictimeBtn.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(',');
|
//btndisplaycycle.Text = text.TrimEnd(',');
|
}; break;
|
}
|
|
List<string> indexlist = new List<string>();
|
List<string> iconIndexlist = new List<string>();
|
for (int i = 0; i < logic.Actions.Count; i++)
|
{
|
var linkType = logic.Actions[i]["LinkType"].ToString();
|
var d = indexlist.Find((value) => { return value == linkType; });
|
if (d == null)
|
{
|
indexlist.Add(linkType);
|
}
|
}
|
if (indexlist.Contains("0"))
|
{
|
iconIndexlist.Add("0");
|
}
|
if (indexlist.Contains("2"))
|
{
|
iconIndexlist.Add("2");
|
}
|
if (indexlist.Contains("6"))
|
{
|
iconIndexlist.Add("6");
|
}
|
if (indexlist.Contains("7"))
|
{
|
iconIndexlist.Add("7");
|
}
|
for (int i = 0; i < iconIndexlist.Count; i++)
|
{
|
var iconindex = iconIndexlist[i];
|
var typebjBtn = new FrameLayout
|
{
|
Width = Application.GetRealWidth(82),
|
Height = Application.GetRealHeight(82),
|
X = Application.GetRealWidth(58) + Application.GetRealWidth(12 + (12 + 82 + 45 + 12) * i),
|
Y = Application.GetRealHeight(58 + 30 + 30),
|
Radius = (uint)Application.GetRealHeight(41),
|
BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
|
};
|
logicRowlayout.AddChidren(typebjBtn);
|
|
var typeIconBtn = new Button
|
{
|
Width = Application.GetRealWidth(58),
|
Height = Application.GetRealHeight(58),
|
Gravity = Gravity.Center,
|
|
};
|
typebjBtn.AddChidren(typeIconBtn);
|
|
var connectIconBtn = new Button
|
{
|
Y = typebjBtn.Y + Application.GetRealHeight(35),
|
X = Application.GetRealWidth(58) + Application.GetRealWidth((12 + 82 + 12) + (12 + 45 + 82 + 12) * i),
|
Width = Application.GetRealWidth(48),
|
Height = Application.GetRealHeight(15),
|
UnSelectedImagePath = "ZigeeLogic/connect.png",
|
};
|
logicRowlayout.AddChidren(connectIconBtn);
|
if (iconIndexlist.Count - 1 == i)
|
{
|
connectIconBtn.Visible = false;
|
}
|
switch (iconindex)
|
{
|
case "0":
|
{
|
if (intvalue == 1)
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/function1.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicFunction1Color;
|
}
|
else
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nofunction.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
|
}
|
}
|
break;
|
case "2":
|
{
|
|
if (intvalue == 1)
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/scene1.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicScene1Color;
|
}
|
else
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/noscene.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
|
}
|
|
}
|
break;
|
case "6":
|
{
|
if (intvalue == 1)
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/security1.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicSecurity1Color;
|
|
}
|
else
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nosecurity.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
|
}
|
|
}
|
break;
|
case "7":
|
{
|
if (intvalue == 1)
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/delay1.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicDelay1Color;
|
}
|
else
|
{
|
typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nodelay.png";
|
typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
|
}
|
|
}
|
break;
|
|
}
|
}
|
}
|
#endregion
|
|
#region ◆ 控制状态_________________________
|
|
/// <summary>
|
/// 显示设备控制状态
|
/// </summary>
|
/// <param name="command">Command.</param>
|
/// <param name="objValue">Object value.</param>
|
private void UpdateDeviceControllStatu(string command, object objValue)
|
{
|
if (command != "DeviceDefaultAck" || objValue == null)
|
{
|
return;
|
}
|
var tempDevice = (CommonDevice)objValue;
|
if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == tempDevice.DeviceEpoint && obj.DeviceAddr == tempDevice.DeviceAddr))
|
{
|
return;
|
}
|
//标记已经发送控制命令到网关
|
sendedControlCommand = true;
|
//DeviceUI.ShowStatuTip(R.MyInternationalizationString.Success);
|
}
|
|
/// <summary>
|
/// 移除全部更新控制设备的action
|
/// </summary>
|
private void RemoveAllUpdateControlDeviceStatuAction()
|
{
|
foreach (var gateway in zbGatewayList)
|
{
|
//移除action
|
if (gateway != null)
|
{
|
gateway.ReportAction -= UpdateDeviceControllStatu;
|
}
|
}
|
}
|
|
/// <summary>
|
/// 移除单个控制设备的更新状态action
|
/// </summary>
|
/// <param name="gateway">Gateway.</param>
|
private void RemoveUpdateControlDeviceStatuAction(ZbGateway gateway)
|
{
|
//移除action
|
if (gateway != null)
|
{
|
gateway.ReportAction -= UpdateDeviceControllStatu;
|
}
|
}
|
|
/// <summary>
|
/// 添加需要监控回调状态的网关和设备
|
/// </summary>
|
/// <param name="gatewayList">Gateway list.</param>
|
/// <param name="gateway">Gateway.</param>
|
/// <param name="deviceList">Device list.</param>
|
/// <param name="common">Common.</param>
|
private void AddZbGateway(List<ZbGateway> gatewayList, ZbGateway gateway, List<CommonDevice> deviceList, CommonDevice common)
|
{
|
if (null == gatewayList.Find((obj) => obj.getGatewayBaseInfo.gwID == gateway.getGatewayBaseInfo.gwID))
|
{
|
gatewayList.Add(gateway);
|
}
|
if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == common.DeviceEpoint && obj.DeviceAddr == common.DeviceAddr))
|
{
|
commonDeviceList.Add(common);
|
}
|
}
|
|
#endregion
|
|
|
}
|
}
|