using System;
|
using System.Collections.Generic;
|
using System.Timers;
|
using Shared.Common;
|
using Shared.Phone.Device.AC;
|
using Shared.Phone.Device.CommonForm;
|
using Shared.Phone.Device.DeviceLogic;
|
using Shared.Phone.UserCenter;
|
using Shared.Phone.UserCenter.DoorLock;
|
using ZigBee.Device;
|
|
namespace Shared.Phone.UserView
|
{
|
/// <summary>
|
/// 主页
|
/// </summary>
|
public class UserHomeView : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 功能ScrolViewLayout
|
/// </summary>
|
private VerticalScrolViewLayout deviceVerticalScrolViewLayout;
|
/// <summary>
|
/// 功能和场景bodyView
|
/// </summary>
|
private FrameLayout functionSceneBodyView;
|
/// <summary>
|
/// 功能按键
|
/// </summary>
|
private NormalViewControl btnFunction;
|
|
/// <summary>
|
/// 读取设备状态的线程列表
|
/// </summary>
|
private static List<System.Threading.Thread> threadList = new List<System.Threading.Thread> { };
|
|
/// <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;
|
|
private FrameLayout itemView = new FrameLayout();
|
/// <summary>
|
/// btnFloor
|
/// </summary>
|
private NormalViewControl btnFloor;
|
/// <summary>
|
/// sceneScrolView
|
/// </summary>
|
private VerticalScrolViewLayout sceneScrolView;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 界面显示
|
/// </summary>
|
public void ShowForm()
|
{
|
this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
|
//清除全部
|
this.RemoveAll();
|
//初始化头部控件
|
this.InitTopFrameLayoutControl();
|
//初始化中间控件
|
this.InitMidFrameLayoutControl();
|
//添加设备状态上报事件
|
this.AddDeviceReportEvent();
|
}
|
|
/// <summary>
|
/// 初始化头部控件
|
/// </summary>
|
private void InitTopFrameLayoutControl()
|
{
|
//头部容器
|
base.topFrameLayout = new FrameLayout();
|
topFrameLayout.Y = Application.GetRealHeight(60);
|
topFrameLayout.Height = Application.GetRealHeight(127);
|
topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
|
this.AddChidren(topFrameLayout);
|
|
//拥有楼层
|
if (Config.Instance.Home.FloorDics.Count > 0)
|
{
|
//楼层图标
|
var btnFloorIcon = new IconViewControl(69);
|
btnFloorIcon.X = ControlCommonResourse.XXLeft;
|
btnFloorIcon.Gravity = Gravity.CenterVertical;
|
btnFloorIcon.UnSelectedImagePath = "Item/Floor.png";
|
topFrameLayout.AddChidren(btnFloorIcon);
|
btnFloorIcon.ButtonClickEvent += (sender, e) =>
|
{
|
//显示选择楼层的界面
|
this.ShowSelectFloorForm();
|
};
|
//楼层名
|
this.btnFloor = new NormalViewControl(500, 100, true);
|
btnFloor.X = btnFloorIcon.Right;
|
btnFloor.Gravity = Gravity.CenterVertical;
|
btnFloor.TextColor = ZigbeeColor.Current.GXCTextColor;
|
btnFloor.Text = Config.Instance.Home.GetCurrentFloorName;
|
btnFloor.IsBold = true;
|
topFrameLayout.AddChidren(btnFloor);
|
btnFloor.ButtonClickEvent += (sender, e) =>
|
{
|
//显示选择楼层的界面
|
this.ShowSelectFloorForm();
|
};
|
}
|
//安防快捷方式
|
if (UserCenterResourse.ResidenceOption.SafetyShortcut)
|
{
|
var btnSafety = new SafetyShortcutControl();
|
btnSafety.X = Application.GetRealWidth(860);
|
btnSafety.Gravity = Gravity.CenterVertical;
|
topFrameLayout.AddChidren(btnSafety);
|
}
|
//消息图标
|
var btnMessage = new MessageManagementControl();
|
btnMessage.X = Application.GetRealWidth(953);
|
btnMessage.Gravity = Gravity.CenterVertical;
|
btnMessage.UnSelectedImagePath = "Item/Message.png";
|
btnMessage.SelectedImagePath = "Item/MessageSelected.png";
|
topFrameLayout.AddChidren(btnMessage);
|
|
//住宅名字
|
var btnHouseName = new NormalViewControl(700, 95, true);
|
btnHouseName.X = ControlCommonResourse.XXLeft;
|
btnHouseName.Y = Application.GetRealHeight(161);
|
btnHouseName.TextSize = 24;
|
btnHouseName.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
|
btnHouseName.IsBold = true;
|
btnHouseName.Text = Config.Instance.Home.Name;
|
this.AddChidren(btnHouseName);
|
|
//切换住宅
|
btnHouseName.MouseLongEventHandler += (sender, e) =>
|
{
|
if (Config.Instance.HomeFilePathList.Count == 0)
|
{
|
//当前住宅为空,请先建立住宅
|
this.ShowMassage(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst));
|
}
|
else
|
{
|
var selectHouse = new Device.Category.SelectHouse();
|
selectHouse.Init();
|
selectHouse.HouseAction = (houseId) =>
|
{
|
ChangeResidence(House.GetHouseByHouseId(houseId));
|
};
|
}
|
};
|
}
|
|
/// <summary>
|
/// 初始化中间控件
|
/// </summary>
|
private void InitMidFrameLayoutControl()
|
{
|
//检测是否绑定有网关
|
if (this.CheckHadBindGateway() == false)
|
{
|
//显示没有绑定过网关的界面
|
this.ShowNoGatewayTip();
|
}
|
else
|
{
|
var roomPageView = new HorizontalPages();
|
roomPageView.Y = Application.GetRealHeight(302);
|
roomPageView.Width = Application.GetRealWidth(CommonPage.AppRealWidth);
|
roomPageView.Height = Application.GetRealHeight(478);
|
this.AddChidren(roomPageView);
|
//突出边距
|
roomPageView.TCBJ = Application.GetRealWidth(181);
|
//两个page之间的间距
|
roomPageView.JMBJ = Application.GetRealWidth(0);
|
|
//当前房间
|
var rList = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom();
|
foreach (var room in rList)
|
{
|
var roomView = new Device.CommonForm.RoomView(0, 0);
|
roomPageView.AddChidren(roomView);
|
roomView.Init(room);
|
roomView.HideName(true);
|
roomView.action += () =>
|
{
|
this.ShowForm();
|
};
|
}
|
//设置房间的初始选择
|
var curIndex = rList.FindIndex((obj) => obj.Id == HdlRoomLogic.Current.CurrentRoom.Id);
|
roomPageView.PageIndex = curIndex;
|
if (roomPageView.GetChildren(roomPageView.PageIndex) != null)
|
{
|
(roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false);
|
}
|
roomPageView.PageChange += (sender, e) =>
|
{
|
if (roomPageView.GetChildren(roomPageView.PageIndex - 1) != null)
|
{
|
(roomPageView.GetChildren(roomPageView.PageIndex - 1) as RoomView).HideName(true);
|
}
|
if (roomPageView.GetChildren(roomPageView.PageIndex + 1) != null)
|
{
|
(roomPageView.GetChildren(roomPageView.PageIndex + 1) as RoomView).HideName(true);
|
}
|
if (roomPageView.GetChildren(roomPageView.PageIndex) != null)
|
{
|
(roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false);
|
}
|
//切换当前房间
|
HdlRoomLogic.Current.CurrentRoom = rList[roomPageView.PageIndex];
|
//刷新设备桌布控件
|
this.RefreshBodyView();
|
};
|
|
//功能和场景的背景图
|
var functionSceneView = new FrameLayout();
|
functionSceneView.Y = Application.GetRealHeight(861);
|
functionSceneView.Width = Application.GetRealWidth(832);
|
functionSceneView.Height = Application.GetRealHeight(167);
|
functionSceneView.Gravity = Gravity.CenterHorizontal;
|
functionSceneView.BackgroundImagePath = "Item/SceneFunctionBG.png";
|
this.AddChidren(functionSceneView);
|
|
//场景
|
var btnScene = new NormalViewControl(350, 100, true);
|
btnScene.X = Application.GetRealWidth(30);
|
btnScene.Y = Application.GetRealHeight(12);
|
btnScene.TextColor = ZigbeeColor.Current.GXCTextGrayColor3;
|
btnScene.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor;
|
btnScene.TextID = R.MyInternationalizationString.Scence;
|
btnScene.IsSelected = true;
|
btnScene.TextSize = 16;
|
btnScene.IsBold = true;
|
btnScene.TextAlignment = TextAlignment.Center;
|
functionSceneView.AddChidren(btnScene);
|
|
//功能
|
btnFunction = new NormalViewControl(360, 100, true);
|
btnFunction.X = Application.GetRealWidth(430);
|
btnFunction.Y = Application.GetRealHeight(12);
|
btnFunction.TextColor = ZigbeeColor.Current.GXCTextGrayColor3;
|
btnFunction.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor;
|
btnFunction.TextID = R.MyInternationalizationString.Function;
|
btnFunction.IsSelected = false;
|
btnFunction.TextAlignment = TextAlignment.Center;
|
functionSceneView.AddChidren(btnFunction);
|
|
//功能和场景bodyView
|
functionSceneBodyView = new FrameLayout()
|
{
|
Y = functionSceneView.Bottom,
|
Height = Application.GetRealHeight(750),
|
Gravity = Gravity.CenterHorizontal,
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
|
};
|
this.AddChidren(functionSceneBodyView);
|
|
//选择功能分栏
|
btnFunction.ButtonClickEvent += (sender, e) =>
|
{
|
btnScene.IsSelected = false;
|
btnFunction.IsSelected = true;
|
btnScene.TextSize = 14;
|
btnScene.IsBold = false;
|
btnFunction.TextSize = 16;
|
btnFunction.IsBold = true;
|
//刷新设备桌布控件
|
this.RefreshBodyView();
|
};
|
//选择场景分栏
|
btnScene.ButtonClickEvent += (sender, e) =>
|
{
|
btnFunction.IsSelected = false;
|
btnScene.IsSelected = true;
|
btnScene.TextSize = 16;
|
btnScene.IsBold = true;
|
btnFunction.TextSize = 14;
|
btnFunction.IsBold = false;
|
this.RefreshBodyView();
|
};
|
//刷新设备桌布控件
|
this.RefreshBodyView();
|
}
|
}
|
|
/// <summary>
|
/// 提示用户没有网关,并快速跳转到添加网关界面
|
/// </summary>
|
private void ShowNoGatewayTip()
|
{
|
var bg = new PicViewControl(717, 478);
|
bg.Y = Application.GetRealHeight(302);
|
bg.Gravity = Gravity.CenterHorizontal;
|
bg.UnSelectedImagePath = "Item/NoBindGW.png";
|
this.AddChidren(bg);
|
|
var tip = new NormalViewControl(Application.GetMinRealAverage(717), Application.GetMinRealAverage(58), false);
|
tip.Y = Application.GetRealHeight(815);
|
tip.Gravity = Gravity.CenterHorizontal;
|
tip.TextID = R.MyInternationalizationString.NewAccountNeedBingGW;
|
tip.TextColor = ZigbeeColor.Current.GXCTextGrayColor;
|
tip.TextAlignment = TextAlignment.Center;
|
this.AddChidren(tip);
|
|
var addBG = new PicViewControl(971, 366);
|
addBG.Y = Application.GetRealHeight(1048);
|
addBG.UnSelectedImagePath = "Item/VirtualFrame.png";
|
addBG.Gravity = Gravity.CenterHorizontal;
|
this.AddChidren(addBG);
|
|
var addGatewayBtn = new IconViewControl(89);
|
addGatewayBtn.Y = Application.GetRealHeight(1143);
|
addGatewayBtn.UnSelectedImagePath = "Item/Add_GW.png";
|
addGatewayBtn.Gravity = Gravity.CenterHorizontal;
|
this.AddChidren(addGatewayBtn);
|
addGatewayBtn.ButtonClickEvent += (sender, e) =>
|
{
|
var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm();
|
form.AddForm();
|
};
|
|
var addTip = new PicViewControl(717, 58);
|
addTip.Y = Application.GetRealHeight(1256);
|
addTip.Gravity = Gravity.CenterHorizontal;
|
addTip.TextID = R.MyInternationalizationString.AddSmartGW;
|
addTip.TextColor = ZigbeeColor.Current.GXCTextBlackColor;
|
addTip.TextAlignment = TextAlignment.Center;
|
AddChidren(addTip);
|
|
addTip.ButtonClickEvent += (sender, e) =>
|
{
|
var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm();
|
form.AddForm();
|
};
|
}
|
|
#endregion
|
|
#region ■ 功能分支___________________________
|
|
/// <summary>
|
/// 显示没有功能
|
/// </summary>
|
private void ShowNoFunctionTip()
|
{
|
var noFunction = new Button
|
{
|
Y = Application.GetRealHeight(69),
|
Width = Application.GetMinRealAverage(683),
|
Height = Application.GetMinRealAverage(392),
|
Gravity = Gravity.CenterHorizontal,
|
UnSelectedImagePath = "Item/NoFunction.png"
|
};
|
functionSceneBodyView.AddChidren(noFunction);
|
|
var noFunctionTip = new Button()
|
{
|
Y = noFunction.Bottom,
|
Height = Application.GetRealHeight(200),
|
Text = Language.StringByID(R.MyInternationalizationString.NoFunction_Tip).Replace("{\\r\\n}", "\r\n"),
|
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
TextAlignment = TextAlignment.Center,
|
IsMoreLines = true
|
};
|
functionSceneBodyView.AddChidren(noFunctionTip);
|
}
|
|
/// <summary>
|
/// 显示功能
|
/// </summary>
|
private void ShowFunction()
|
{
|
functionSceneBodyView.RemoveAll();
|
//当前房间的设备数
|
if (HdlRoomLogic.Current.CurrentRoom.ListDevice.Count == 0)
|
{
|
ShowNoFunctionTip();
|
}
|
else
|
{
|
var dList = new List<CommonDevice>();
|
foreach (var mainkeys in HdlRoomLogic.Current.CurrentRoom.ListDevice)
|
{
|
var device = LocalDevice.Current.GetDevice(mainkeys);
|
if (device == null
|
|| device.Type == DeviceType.OnOffSwitch//干接点
|
|| device.Type == DeviceType.Repeater)//中继器
|
{
|
continue;
|
}
|
dList.Add(device);
|
}
|
|
deviceVerticalScrolViewLayout = new VerticalScrolViewLayout { };
|
functionSceneBodyView.AddChidren(deviceVerticalScrolViewLayout);
|
for (int i = 0; i < dList.Count; i++)
|
{
|
var device = dList[i];
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
int t = i % 2;
|
int tt = i / 2;
|
int xx = 43 + i % 2 * (20 + 487);
|
int yy = 14;
|
if (i % 2 == 0)
|
{
|
itemView = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(14 + 348),
|
};
|
deviceVerticalScrolViewLayout.AddChidren(itemView);
|
}
|
//收藏
|
EventHandler<MouseEventArgs> collectionEvent = (sender, e) =>
|
{
|
if ((sender as Button).IsSelected)
|
{
|
//删除我的喜爱
|
HdlRoomLogic.Current.DeleteLoveDevice(device);
|
(sender as Button).IsSelected = false;
|
}
|
else
|
{
|
//添加我的喜爱
|
HdlRoomLogic.Current.AddLoveDevice(device);
|
(sender as Button).IsSelected = true;
|
}
|
if (HdlRoomLogic.Current.CurrentRoom.IsLove)
|
{
|
//刷新设备桌布控件
|
this.RefreshBodyView();
|
}
|
};
|
|
if (device.Type == DeviceType.WindowCoveringDevice)
|
{
|
//窗帘 卷帘
|
var rollerShade = (ZigBee.Device.Rollershade)device;
|
if (rollerShade.Gateway != null)
|
{
|
new System.Threading.Thread(() =>
|
{
|
System.Threading.Thread.Sleep(100 * i);
|
if (rollerShade.Gateway.IsVirtual)
|
{
|
ReadStatus(rollerShade, () =>
|
{
|
ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device);
|
});
|
}
|
else
|
{
|
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds)
|
{
|
ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device);
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
var functionView = new FunctionMainView(xx, yy);
|
functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
itemView.AddChidren(functionView);
|
functionView.Init();
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(rollerShade));
|
functionView.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
|
functionView.SetCollect(true);
|
|
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
(device as Rollershade).CurtainUpDownStopControl(0);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Open));
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
else
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
(device as Rollershade).CurtainUpDownStopControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
functionView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
CommonPage.Instance.IsDrawerLockMode = true;
|
var rollerShadeControl = new Phone.Device.Curtain.RollerShadeControl();
|
UserView.HomePage.Instance.AddChidren(rollerShadeControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
UserView.HomePage.Instance.ScrollEnabled = false;
|
rollerShadeControl.IsDrawerLockMode = true;
|
rollerShadeControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
|
rollerShadeControl.action += (curDev, curRoom) =>
|
{
|
ReFreshEditDeviceAction(device, curRoom, functionView);
|
};
|
};
|
|
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
else if (device.Type == DeviceType.OnOffOutput)
|
{
|
//开关灯
|
var light = device as ToggleLight;
|
if (light.Gateway != null)
|
{
|
new System.Threading.Thread(() =>
|
{
|
System.Threading.Thread.Sleep(100 * i);
|
if (light.Gateway.IsVirtual)
|
{
|
ReadStatus(light, () =>
|
{
|
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
|
});
|
}
|
else
|
{
|
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
|
{
|
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
var functionView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(functionView);
|
functionView.Init();
|
functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
functionView.IsSelected = light.OnOffStatus == 1;
|
functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
functionView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
functionView.CollectButton.IsSelected = true;
|
}
|
|
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
light.SwitchControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
else
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
light.SwitchControl(0);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
functionView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
CommonPage.Instance.IsDrawerLockMode = true;
|
|
var lightControl = new Phone.Device.Light.OnOffControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
lightControl.IsDrawerLockMode = true;
|
lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
|
lightControl.action += (curDev, curRoom) =>
|
{
|
ReFreshEditDeviceAction(device, curRoom, functionView);
|
};
|
};
|
|
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
else if (device.Type == DeviceType.AirSwitch)
|
{
|
//空气开关
|
var airSwitch = device as AirSwitch;
|
if (airSwitch.Gateway != null)
|
{
|
new System.Threading.Thread(() =>
|
{
|
System.Threading.Thread.Sleep(100 * i);
|
if (airSwitch.Gateway.IsVirtual)
|
{
|
ReadStatus(airSwitch, () =>
|
{
|
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
|
});
|
}
|
else
|
{
|
if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device);
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
var functionView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(functionView);
|
functionView.Init();
|
functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(airSwitch));
|
functionView.IsSelected = airSwitch.OnOffStatus == 1;
|
functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
|
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
airSwitch.SwitchControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
else
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
airSwitch.SwitchControl(0);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
functionView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
CommonPage.Instance.IsDrawerLockMode = true;
|
var lightControl = new Phone.Device.Light.AirSwitchControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
lightControl.IsDrawerLockMode = true;
|
lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
|
lightControl.action += (curDev, curRoom) =>
|
{
|
ReFreshEditDeviceAction(device, curRoom, functionView);
|
};
|
|
};
|
|
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
else if (device.Type == DeviceType.Thermostat)
|
{
|
//恒温器-AC-空调
|
var ac = device as AC;
|
if (ac.Gateway != null)
|
{
|
new System.Threading.Thread(() =>
|
{
|
System.Threading.Thread.Sleep(100 * i);
|
if (ac.Gateway.IsVirtual)
|
{
|
ReadStatus(ac, () =>
|
{
|
ReadDeviceAttributeLogic.Instance.SendACStatuComand(device);
|
});
|
}
|
else
|
{
|
if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
ReadDeviceAttributeLogic.Instance.SendACStatuComand(device);
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
var functionView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(functionView);
|
functionView.Init();
|
functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
functionView.IsSelected = ac.currentSystemMode != 0;
|
functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
|
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
ac.Open();
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
else
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
ac.Close();
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
functionView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
CommonPage.Instance.IsDrawerLockMode = true;
|
var lightControl = new Phone.Device.AC.ACControl();
|
UserView.HomePage.Instance.AddChidren(lightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
lightControl.IsDrawerLockMode = true;
|
lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
|
lightControl.action += (curDev, curRoom) =>
|
{
|
ReFreshEditDeviceAction(device, curRoom, functionView);
|
};
|
};
|
|
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
else if (device.Type == DeviceType.DimmableLight)
|
{
|
//调光灯
|
var dimmableLight = device as DimmableLight;
|
if (dimmableLight.Gateway != null)
|
{
|
new System.Threading.Thread(() =>
|
{
|
System.Threading.Thread.Sleep(100 * i);
|
if (dimmableLight.Gateway.IsVirtual)
|
{
|
//发送读取状态命令
|
ReadStatus(dimmableLight, () =>
|
{
|
ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device);
|
});
|
}
|
else
|
{
|
//防止短时间内多次读取设备状态
|
if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
|
{
|
ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device);
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
var functionView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(functionView);
|
functionView.Init();
|
functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
functionView.IsSelected = dimmableLight.OnOffStatus == 1;
|
functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
functionView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
functionView.CollectButton.IsSelected = true;
|
}
|
|
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
|
{
|
(sender as Button).IsSelected = !(sender as Button).IsSelected;
|
if ((sender as Button).IsSelected)
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
dimmableLight.SwitchControl(1);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = true;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
else
|
{
|
zbGateway = device.Gateway;
|
sendedControlCommand = false;
|
zbGateway.ReportAction += UpdateDeviceControllStatu;
|
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device);
|
|
dimmableLight.SwitchControl(0);
|
|
((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
((sender as Button).Parent as FunctionMainView).IsSelected = false;
|
|
//控制延时回调
|
HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () =>
|
{
|
if (Parent == null)
|
{
|
return;
|
}
|
RemoveUpdateControlDeviceStatuAction(zbGateway);
|
if (sendedControlCommand == false)
|
{
|
HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL);
|
}
|
});
|
}
|
};
|
|
functionView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
CommonPage.Instance.IsDrawerLockMode = true;
|
var dimmableLightControl = new Phone.Device.Light.DimmableLightControl();
|
UserView.HomePage.Instance.AddChidren(dimmableLightControl);
|
UserView.HomePage.Instance.PageIndex += 1;
|
dimmableLightControl.IsDrawerLockMode = true;
|
dimmableLightControl.Show(device, HdlRoomLogic.Current.CurrentRoom);
|
dimmableLightControl.action += (curDev, curRoom) =>
|
{
|
ReFreshEditDeviceAction(device, curRoom, functionView);
|
};
|
};
|
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
else if (device.Type == DeviceType.IASZone)
|
{
|
//各类传感器
|
var ias = device as IASZone;
|
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
lightView.IsSelected = ias.iASInfo?.Alarm1 == 1;
|
lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
lightView.CanControl(false);
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
lightView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
lightView.CollectButton.IsSelected = true;
|
}
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
else if (device.Type == DeviceType.TemperatureSensor)
|
{
|
var tempera = device as TemperatureSensor;
|
|
if (tempera.Gateway != null)
|
{
|
new System.Threading.Thread(() =>
|
{
|
System.Threading.Thread.Sleep(100 * i);
|
if (tempera.Gateway.IsVirtual)
|
{
|
ReadStatus(tempera, () =>
|
{
|
if (tempera.SensorDiv == 1)
|
{
|
ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device);
|
}
|
else if (tempera.SensorDiv == 2)
|
{
|
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device);
|
}
|
});
|
}
|
else
|
{
|
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - tempera.LastDateTime).TotalSeconds)
|
{
|
if (tempera.SensorDiv == 1)
|
{
|
ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device);
|
}
|
else if (tempera.SensorDiv == 2)
|
{
|
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device);
|
}
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
lightView.IsSelected = false;
|
lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
lightView.CanControl(false);
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
lightView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
lightView.CollectButton.IsSelected = true;
|
}
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
else if (device.Type == DeviceType.DoorLock)
|
{
|
//门锁
|
var dimmableLight = device as DoorLock;
|
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
lightView.IsSelected = false;
|
lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
lightView.CanControl(false);
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
lightView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
lightView.CollectButton.IsSelected = true;
|
}
|
|
lightView.CardBG.MouseUpEventHandler += (sender, e) =>
|
{
|
CommonPage.Instance.IsDrawerLockMode = true;
|
var userDoorLockPage = new UserDoorLockPage(HdlRoomLogic.Current.CurrentRoom, device);
|
HomePage.Instance.AddChidren(userDoorLockPage);
|
HomePage.Instance.PageIndex += 1;
|
userDoorLockPage.Show();
|
};
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
else
|
{
|
var lightView = new FunctionMainView(xx, yy);
|
itemView.AddChidren(lightView);
|
lightView.Init();
|
lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device);
|
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device));
|
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
lightView.CanControl(false);
|
lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
lightView.CollectButton.IsSelected = false;
|
}
|
else
|
{
|
lightView.CollectButton.IsSelected = true;
|
}
|
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
|
}
|
}
|
catch (Exception ex)
|
{
|
|
}
|
});
|
//})
|
//{ IsBackground = true }.Start();
|
}
|
}
|
}
|
|
/// <summary>
|
/// ReFreshEditDeviceAction
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="curRoom"></param>
|
/// <param name="functionView"></param>
|
private void ReFreshEditDeviceAction(CommonDevice device, Common.Room curRoom, FunctionMainView functionView)
|
{
|
if (HdlRoomLogic.Current.CurrentRoom.IsLove)
|
{
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
|
{
|
ShowFunction();
|
}
|
}
|
else
|
{
|
if (curRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id)
|
{
|
ShowFunction();
|
}
|
else
|
{
|
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
|
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device));
|
functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device));
|
}
|
}
|
}
|
|
#endregion
|
|
#region ■ 场景分支___________________________
|
|
/// <summary>
|
/// 显示没场景
|
/// </summary>
|
private void ShowNoSceneTip()
|
{
|
var noScene = new Button
|
{
|
Y = Application.GetRealHeight(69),
|
Width = Application.GetMinRealAverage(683),
|
Height = Application.GetMinRealAverage(392),
|
Gravity = Gravity.CenterHorizontal,
|
UnSelectedImagePath = "Item/NoFunction.png"
|
};
|
functionSceneBodyView.AddChidren(noScene);
|
var noScenceTip = new Button()
|
{
|
Y = noScene.Bottom,
|
Height = Application.GetRealHeight(200),
|
Text = Language.StringByID(R.MyInternationalizationString.NoScene_Tip).Replace("{\\r\\n}", "\r\n"),
|
TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
|
TextAlignment = TextAlignment.Center,
|
IsMoreLines = true
|
};
|
functionSceneBodyView.AddChidren(noScenceTip);
|
}
|
|
/// <summary>
|
/// 显示场景
|
/// </summary>
|
private void ShowScene()
|
{
|
functionSceneBodyView.RemoveAll();
|
//选择场景
|
var sceneList = HdlSceneLogic.Current.GetRoomSceneList(HdlRoomLogic.Current.CurrentRoom);
|
if (sceneList == null)
|
{
|
return;
|
}
|
if (sceneList.Count == 0)
|
{
|
ShowNoSceneTip();
|
}
|
else
|
{
|
sceneScrolView = new VerticalScrolViewLayout { };
|
functionSceneBodyView.AddChidren(sceneScrolView);
|
for (int i = 0; i < sceneList.Count; i++)
|
{
|
var scene = sceneList[i];
|
int xx = 33 + i % 2 * (40 + 487);
|
int yy = 14;
|
if (scene == null)
|
{
|
continue;
|
}
|
|
if (i % 2 == 0)
|
{
|
itemView = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(14 + 348),
|
Tag = scene.Id
|
};
|
sceneScrolView.AddChidren(itemView);
|
}
|
|
var sceneView = new SceneMainView(xx, yy);
|
sceneView.Init(scene);
|
itemView.AddChidren(sceneView);
|
sceneView.CollectionAction += ShowScene;
|
}
|
GetDelayScene(sceneScrolView);
|
}
|
}
|
|
/// <summary>
|
/// GetDelayScene
|
/// </summary>
|
/// <param name="scrolViewLayout"></param>
|
private async void GetDelayScene(VerticalScrolViewLayout scrolViewLayout)
|
{
|
|
var catDelaySceneResponseAllData = await Scene.CatDelaySceneAsync();
|
if (catDelaySceneResponseAllData == null)
|
{
|
return;
|
}
|
var catDelaySceneResponseData = catDelaySceneResponseAllData.catDelaySceneResponseData;
|
if (catDelaySceneResponseData == null || catDelaySceneResponseData.DelayScenesList.Count == 0)
|
{
|
return;
|
}
|
var delayList = catDelaySceneResponseData.DelayScenesList;
|
|
for (int i = 0; scrolViewLayout != null && i < scrolViewLayout.ChildrenCount; i++)
|
{
|
var iView = scrolViewLayout.GetChildren(i) as FrameLayout;
|
for (int j = 0; iView != null && j < iView.ChildrenCount; j++)
|
{
|
var sceneView = iView.GetChildren(j) as SceneMainView;
|
foreach (var delayScenesListResponseInfo in delayList)
|
{
|
if (delayScenesListResponseInfo.ScenesId == sceneView.scene.Id)
|
{
|
var remainTime = delayScenesListResponseInfo.RemainTime;
|
sceneView.scene.RemainTime = remainTime;
|
|
if (remainTime > 0)
|
{
|
new System.Threading.Thread(() =>
|
{
|
while (remainTime-- > 0)
|
{
|
System.Threading.Thread.Sleep(1000);
|
Application.RunOnMainThread(() =>
|
{
|
sceneView.SetTimeText(CommonFormResouce.GetTimeString(remainTime));
|
});
|
}
|
Application.RunOnMainThread(() =>
|
{
|
sceneView.scene.RemainTime = 0;
|
sceneView.SetTimeImage();
|
});
|
})
|
{ IsBackground = true }.Start();
|
}
|
break;
|
}
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
#region ■ 刷新_______________________________
|
|
/// <summary>
|
/// 刷新设备桌布控件
|
/// </summary>
|
public void RefreshBodyView()
|
{
|
functionSceneBodyView.RemoveAll();
|
if (btnFunction.IsSelected)
|
{
|
ShowFunction();
|
}
|
else
|
{
|
ShowScene();
|
}
|
}
|
|
#endregion
|
|
#region ■ 切换住宅___________________________
|
/// <summary>
|
/// 切换住宅
|
/// </summary>
|
/// <param name="home">Home.</param>
|
private void ChangeResidence(House home)
|
{
|
try
|
{
|
CommonPage.Loading.Start();
|
new System.Threading.Thread(async () =>
|
{
|
Config.Instance.HomeId = home.Id;
|
Config.Instance.Home = House.GetHouseByFilePath(home.FileName);
|
Global.CreateHomeDirectory(home.Id);
|
Config.Instance.Save();
|
//刷新个人中心的内存及线程
|
await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread();
|
//初始化全部房间
|
HdlRoomLogic.Current.InitAllRoom();
|
|
Application.RunOnMainThread(() =>
|
{
|
ShowForm();
|
CommonPage.Loading.Hide();
|
});
|
})
|
{ IsBackground = true }.Start();
|
}
|
catch (Exception ex)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
CommonPage.Loading.Hide();
|
//new Alert(Language.StringByID(R.MyInternationalizationString.Tip), Language.StringByID(R.MyInternationalizationString.CheckInternet), Language.StringByID(R.MyInternationalizationString.Close)).Show();
|
Console.WriteLine(ex.Message);
|
});
|
}
|
}
|
|
#endregion
|
|
#region ■ 进行设备状态读取___________________
|
|
/// <summary>
|
/// 判断是否可以进行设备状态读取。在回调中读取
|
/// </summary>
|
/// <param name="commonDevice">Common device.</param>
|
/// <param name="action">回调处理--发送读取命令</param>
|
/// <param name="span">Span. 默认30秒</param>
|
public static void ReadStatus(CommonDevice commonDevice, Action action, int span = 30)
|
{
|
var threadName = commonDevice.GetHashCode().ToString();
|
if (null == threadList.Find((obj) => obj.Name == threadName))
|
{
|
var thread = new System.Threading.Thread(() =>
|
{
|
var dateTime = DateTime.Now;
|
while ((DateTime.Now - dateTime).TotalSeconds < 10)
|
{
|
System.Threading.Thread.Sleep(100);
|
if (commonDevice.Gateway == null)
|
{
|
return;
|
}
|
if (!commonDevice.Gateway.IsVirtual)
|
{
|
break;
|
}
|
}
|
lock (threadList)
|
{
|
threadList.RemoveAll((obj) => obj.Name == threadName);
|
}
|
//防止短时间内读取频繁
|
if (span < (DateTime.Now - commonDevice.LastDateTime).TotalSeconds)
|
{
|
action?.Invoke();
|
};
|
})
|
{ IsBackground = true, Name = threadName };
|
lock (threadList)
|
{
|
threadList.Add(thread);
|
}
|
thread.Start();
|
}
|
}
|
|
#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;
|
//HdlDeviceOtherLogic.Current.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
|
|
#region ■ 设备状态上报_______________________
|
|
/// <summary>
|
/// 添加设备状态上报事件
|
/// </summary>
|
private void AddDeviceReportEvent()
|
{
|
//设备属性上报
|
HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceStatus", ReceiveComandDiv.A设备属性上报, (report) =>
|
{
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
if (report.DeviceStatusReport.AttriBute == null || report.DeviceStatusReport.AttriBute.Count == 0)
|
{
|
return;
|
}
|
for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
|
{
|
var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
|
if (rowFL.ChildrenCount == 0)
|
{
|
//设备为空或者控件为空
|
continue;
|
}
|
|
for (int j = 0; j < rowFL.ChildrenCount; j++)
|
{
|
var deviceUI = LocalDevice.Current.GetDevice((rowFL.GetChildren(j) as FunctionMainView).Tag.ToString());
|
if (deviceUI == null)
|
{
|
//设备为空或者控件为空
|
continue;
|
}
|
if (report.DeviceAddr != deviceUI.DeviceAddr || report.DeviceEpoint != deviceUI.DeviceEpoint)
|
{
|
//判断是否为当前设备
|
continue;
|
}
|
|
switch (deviceUI.Type)
|
{
|
case DeviceType.OnOffOutput:
|
//开关功能
|
if (report.DeviceStatusReport.CluterID == 6)
|
{
|
var onOffOutputLight = deviceUI as ZigBee.Device.ToggleLight;
|
onOffOutputLight.DeviceStatusReport = report.DeviceStatusReport;
|
onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
onOffOutputLight.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.AirSwitch:
|
//开关功能
|
if (report.DeviceStatusReport.CluterID == 6)
|
{
|
var airSwitch = deviceUI as ZigBee.Device.AirSwitch;
|
airSwitch.DeviceStatusReport = report.DeviceStatusReport;
|
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
airSwitch.LastDateTime = DateTime.Now;
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (report.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.IsOnline = 1;
|
deviceUI.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.WindowCoveringDevice:
|
if (report.DeviceStatusReport.CluterID == 258)
|
{
|
if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0)
|
{
|
//窗帘类型
|
var rollerShade = deviceUI as Rollershade;
|
rollerShade.DeviceStatusReport = report.DeviceStatusReport;
|
rollerShade.WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData;
|
rollerShade.LastDateTime = DateTime.Now;
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
}
|
if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8)
|
{
|
//窗帘百分比
|
var rollerShade = deviceUI as Rollershade;
|
rollerShade.DeviceStatusReport = report.DeviceStatusReport;
|
rollerShade.WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData;
|
rollerShade.LastDateTime = DateTime.Now;
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
}
|
}
|
if (report.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.IsOnline = 1;
|
deviceUI.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.Thermostat:
|
//AC功能
|
if (report.DeviceStatusReport.CluterID == 513)
|
{
|
var ac = deviceUI as ZigBee.Device.AC;
|
ac.DeviceStatusReport = report.DeviceStatusReport;
|
var attriButeList = ac.DeviceStatusReport.AttriBute;
|
foreach (var attList in attriButeList)
|
{
|
var curTemp = attList.AttriButeData / 100;
|
switch (attList.AttributeId)
|
{
|
case 0:
|
//此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
|
ac.currentLocalTemperature = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case 17:
|
//此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。
|
ac.currentCoolingSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case 18:
|
//此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
|
ac.currentHeatingSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case 4096:
|
//此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。
|
ac.currentAutoSetpoint = curTemp;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
|
case 28:
|
//此属性描述恒温设备正处于哪种模式
|
ac.currentSystemMode = attList.AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
}
|
if (report.DeviceStatusReport.CluterID == 514)
|
{
|
var ac = deviceUI as ZigBee.Device.AC;
|
var attriButeList = report.DeviceStatusReport.AttriBute;
|
ac.DeviceStatusReport = report.DeviceStatusReport;
|
foreach (var attList in attriButeList)
|
{
|
switch (attList.AttributeId)
|
{
|
case 0:
|
ac.currentFanMode = attList.AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
case 4096:
|
ac.currentFanSwingMode = attList.AttriButeData;
|
ac.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
}
|
//当CluterID=3,就证明该设备在线,直接标记
|
if (report.DeviceStatusReport.CluterID == 3)
|
{
|
deviceUI.IsOnline = 1;
|
deviceUI.LastDateTime = DateTime.Now;
|
}
|
break;
|
|
case DeviceType.DimmableLight:
|
//调光灯功能
|
if (report.DeviceStatusReport.CluterID == 6)
|
{
|
var dimmableLight = deviceUI as DimmableLight;
|
dimmableLight.DeviceStatusReport = report.DeviceStatusReport;
|
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
dimmableLight.LastDateTime = DateTime.Now;
|
}
|
|
//亮度
|
if (report.DeviceStatusReport.CluterID == 8)
|
{
|
var dimmableLight = deviceUI as DimmableLight;
|
dimmableLight.DeviceStatusReport = report.DeviceStatusReport;
|
var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
|
switch (attriButeList[0].AttributeId)
|
{
|
case 0:
|
//此属性表明当前亮度程度
|
dimmableLight.Level = attriButeList[0].AttriButeData;
|
dimmableLight.LastDateTime = DateTime.Now;
|
//(rowFL.GetChildren(j) as FunctionMainView).IsSelected = true;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
break;
|
}
|
}
|
break;
|
case DeviceType.TemperatureSensor:
|
//温度
|
if (report.DeviceStatusReport.CluterID == 1026)
|
{
|
var tempera = deviceUI as TemperatureSensor;
|
foreach (var data in report.DeviceStatusReport.AttriBute)
|
{
|
if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
|
{
|
if (data.AttriButeData == 0)
|
{
|
tempera.Temperatrue = 0;
|
}
|
else if (data.AttriButeData > 32767)
|
{
|
//负数(特殊处理)
|
string strValue = (data.AttriButeData - 65536).ToString();
|
//小数点需要一位
|
strValue = strValue.Substring(0, strValue.Length - 1);
|
tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
|
}
|
else
|
{
|
//小数点需要一位
|
string strValue = data.AttriButeData.ToString();
|
strValue = strValue.Substring(0, strValue.Length - 1);
|
tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
|
}
|
|
tempera.LastDateTime = DateTime.Now;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
}
|
}
|
}
|
//湿度
|
if (report.DeviceStatusReport.CluterID == 1029)
|
{
|
var tempera = deviceUI as TemperatureSensor;
|
foreach (var data in report.DeviceStatusReport.AttriBute)
|
{
|
if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
|
{
|
if (data.AttriButeData == 0)
|
{
|
tempera.Humidity = 0;
|
}
|
else
|
{
|
//小数点需要一位(湿度没有负数)
|
string strValue = data.AttriButeData.ToString();
|
strValue = strValue.Substring(0, strValue.Length - 1);
|
tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
|
}
|
tempera.LastDateTime = DateTime.Now;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
}
|
}
|
}
|
break;
|
}
|
}
|
}
|
|
}, ShowErrorMode.NO);
|
});
|
|
//传感器上报
|
HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewSensor", ReceiveComandDiv.A传感器上报, (report) =>
|
{
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++)
|
{
|
var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout;
|
if (rowFL.ChildrenCount == 0)
|
{
|
//设备为空或者控件为空
|
continue;
|
}
|
|
for (int j = 0; j < rowFL.ChildrenCount; j++)
|
{
|
var deviceUI = LocalDevice.Current.GetDevice((rowFL.GetChildren(j) as FunctionMainView).Tag.ToString());
|
if (deviceUI == null)
|
{
|
//设备为空或者控件为空
|
continue;
|
}
|
if (report.DeviceAddr != deviceUI.DeviceAddr || report.DeviceEpoint != deviceUI.DeviceEpoint)
|
{
|
//判断是否为当前设备
|
continue;
|
}
|
|
switch (deviceUI.Type)
|
{
|
case DeviceType.IASZone:
|
//ias
|
var ias = report as IASZone;
|
var iAS = deviceUI as ZigBee.Device.IASZone;
|
iAS.iASInfo = ias.iASInfo;
|
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = iAS.iASInfo?.Alarm1 == 1;
|
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI);
|
iAS.LastDateTime = DateTime.Now;
|
break;
|
}
|
}
|
}
|
}, ShowErrorMode.NO);
|
});
|
}
|
|
#endregion
|
|
#region ■ 切换楼层___________________________
|
|
/// <summary>
|
/// 显示选择楼层的界面
|
/// </summary>
|
private void ShowSelectFloorForm()
|
{
|
var floorFL = new Device.Category.SelectFloor();
|
this.AddChidren(floorFL);
|
floorFL.Init(35, 153);
|
floorFL.changeFloor = true;
|
floorFL.FloorAction = (floorId) =>
|
{
|
this.btnFloor.Text = Config.Instance.Home.GetFloorNameById(floorId);
|
HdlRoomLogic.Current.CurrentRoom = HdlRoomLogic.Current.GetLoveRoom();
|
this.ShowForm();
|
};
|
}
|
|
#endregion
|
|
#region ■ 界面关闭___________________________
|
|
/// <summary>
|
/// 界面关闭
|
/// </summary>
|
public override void CloseFormBefore()
|
{
|
HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceStatus");
|
HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewSensor");
|
|
base.CloseFormBefore();
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 检测是否绑定有网关
|
/// </summary>
|
private bool CheckHadBindGateway()
|
{
|
//获取本地已经绑定的网关
|
var gatewayList = HdlGatewayLogic.Current.GetAllLocalGateway();
|
if (gatewayList.Count == 0)
|
{
|
return false;
|
}
|
//主人或者管理员才行
|
if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
#endregion
|
}
|
}
|