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
{
///
/// 主页
///
public class UserHomeView : FrameLayout, ZigBee.Common.IStatus
{
#region ◆ 变量____________________________
///
/// 设备是否在线标识--Online
///
private readonly string deviceStatus_Online = "Online";
///
/// 设备状态开关标识--Switch
///
private readonly string deviceStatus_OnOffStatus = "Switch";
///
/// 功能ScrolViewLayout
///
private VerticalScrolViewLayout deviceVerticalScrolViewLayout;
///
/// 功能和场景bodyView
///
private FrameLayout functionSceneBodyView;
///
/// The height of the room page view. -- 550
///
private static readonly int roomPageView_Height = 550;
///
/// 功能卡片高度 --250
///
private static readonly int deviceFL_Height = 250;
///
/// 功能按键
///
private Button functionBtn;
///
/// 读取设备状态的线程列表
///
private static List threadList = new List { };
///
/// 网关
///
private ZbGateway zbGateway = null;
///
/// 网关列表
///
private List zbGatewayList = new List { };
///
/// 设备列表
///
private List commonDeviceList = new List { };
///
/// 是否发送控制命令成功了
///
private bool sendedControlCommand = false;
///
/// 延时 300毫秒
///
private readonly int sleepSpan = 300;
private FrameLayout itemView = new FrameLayout();
///
/// floorBtn
///
private Button floorBtn;
///
/// timeDic
///
private Dictionary timerDic = new Dictionary { };
///
/// sceneScrolView
///
private VerticalScrolViewLayout sceneScrolView ;
#endregion
#region ◆ 接口____________________________
///
/// 该接口将弃用 !!!!!!
/// 改用DeviceInfoChange()
///
/// The changed.
/// Common.
public void Changed(CommonDevice common)
{
}
///
/// 设备状态更新接口
/// type:如果为 DeviceInComingRespon:设备新上报
/// type:如果为 IASInfoReport:RemoveDeviceRespon
/// type:如果为 DeviceStatusReport:设备上报
/// type:如果为 IASInfoReport:IAS安防信息上报
/// type:如果为 OnlineStatusChange: 设备在线状态更新
///
/// Common.
/// Type tag.
public void DeviceInfoChange(CommonDevice common, string typeTag)
{
//设备上报状态中 当CluterID=3,就证明该设备在线,直接标记
if (typeTag == "DeviceStatusReport")
{
Application.RunOnMainThread(() =>
{
try
{
if (common.DeviceStatusReport.AttriBute == null || common.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 = (rowFL.GetChildren(j) as FunctionMainView).Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
//设备为空或者控件为空
continue;
}
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
{
//判断是否为当前设备
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.OnOffOutput:
//开关功能
if (common.DeviceStatusReport.CluterID == 6)
{
var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1;
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
onOffOutputLight.LastDateTime = DateTime.Now;
}
break;
case DeviceType.AirSwitch:
//开关功能
if (common.DeviceStatusReport.CluterID == 6)
{
var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
airSwitch.DeviceStatusReport = common.DeviceStatusReport;
airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1;
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
airSwitch.LastDateTime = DateTime.Now;
}
//当CluterID=3,就证明该设备在线,直接标记
if (common.DeviceStatusReport.CluterID == 3)
{
deviceUI.CommonDevice.IsOnline = 1;
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
}
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;
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
}
if (common.DeviceStatusReport.AttriBute[0].AttributeId == 8)
{
//窗帘百分比
var rollerShade = deviceUI.CommonDevice as Rollershade;
rollerShade.DeviceStatusReport = common.DeviceStatusReport;
rollerShade.WcdCurrentPositionLiftPercentage = common.DeviceStatusReport.AttriBute[0].AttriButeData;
rollerShade.LastDateTime = DateTime.Now;
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100;
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
}
}
if (common.DeviceStatusReport.CluterID == 3)
{
deviceUI.CommonDevice.IsOnline = 1;
deviceUI.CommonDevice.LastDateTime = DateTime.Now;
}
break;
case DeviceType.Thermostat:
//AC功能
if (common.DeviceStatusReport.CluterID == 513)
{
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
ac.DeviceStatusReport = common.DeviceStatusReport;
var attriButeList = ac.DeviceStatusReport.AttriBute;
foreach (var attList in attriButeList)
{
var curTemp = (attList.AttriButeData / 100 < ACControlBase.Temperature_High && attList.AttriButeData / 100 > ACControlBase.Temperature_Low) ? attList.AttriButeData / 100 : ACControlBase.Temperature_Default;
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 = deviceUI.GetDeviceStatu();
}
if (common.DeviceStatusReport.CluterID == 514)
{
var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
var attriButeList = common.DeviceStatusReport.AttriBute;
ac.DeviceStatusReport = common.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 = deviceUI.GetDeviceStatu();
}
//当CluterID=3,就证明该设备在线,直接标记
if (common.DeviceStatusReport.CluterID == 3)
{
var ac = deviceUI.CommonDevice as AC;
ac.IsOnline = 1;
ac.LastDateTime = DateTime.Now;
}
break;
case DeviceType.DimmableLight:
//调光灯功能
if (common.DeviceStatusReport.CluterID == 6)
{
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
(rowFL.GetChildren(j) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1;
(rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = deviceUI.GetDeviceStatu();
dimmableLight.LastDateTime = DateTime.Now;
}
//亮度
if (common.DeviceStatusReport.CluterID == 8)
{
var dimmableLight = deviceUI.CommonDevice as DimmableLight;
dimmableLight.DeviceStatusReport = common.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 = deviceUI.GetDeviceStatu();
break;
}
}
break;
case DeviceType.TemperatureSensor:
//温度
if (common.DeviceStatusReport.CluterID == 1026)
{
var tempera = deviceUI.CommonDevice as TemperatureSensor;
foreach (var data in common.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 = deviceUI.GetDeviceStatu();
}
}
}
//湿度
if (common.DeviceStatusReport.CluterID == 1029)
{
var tempera = deviceUI.CommonDevice as TemperatureSensor;
foreach (var data in common.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 = deviceUI.GetDeviceStatu();
}
}
}
break;
}
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"Error:{ex.Message}");
}
});
}
else if (typeTag == "IASInfoReport")
{
Application.RunOnMainThread(() =>
{
try
{
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 = (rowFL.GetChildren(j) as FunctionMainView).Tag as DeviceUI;
if (deviceUI == null || deviceUI.CommonDevice == null)
{
//设备为空或者控件为空
continue;
}
if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
{
//判断是否为当前设备
continue;
}
switch (deviceUI.CommonDevice.Type)
{
case DeviceType.IASZone:
//ias
var ias = common as IASZone;
var iAS = deviceUI.CommonDevice 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 = deviceUI.GetDeviceStatu();
iAS.LastDateTime = DateTime.Now;
break;
}
}
}
}
catch (Exception ex)
{
System.Console.WriteLine($"Error:{ex.Message}");
}
});
}
}
///
/// Changeds the IL ogic status.
///
/// Logic.
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
{
//throw new NotImplementedException();
}
///
/// Changeds the IS cene status.
///
/// Scene.
public void ChangedISceneStatus(Scene scene)
{
//throw new NotImplementedException();
}
#endregion
#region ◆ 初始化__________________________
///
/// Removes from parent.
///
public override void RemoveFromParent()
{
RemoveStatuList();
base.RemoveFromParent();
}
private void RemoveStatuList()
{
ZbGateway.StatusList.Remove(this);
RemoveAllUpdateControlDeviceStatuAction();
}
///
/// 主页 --我的家
///
public UserHomeView()
{
ZbGateway.StatusList.Add(this);
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
}
///
/// 显示界面
///
public void Show()
{
this.RemoveAll();
#region topview
var topFrameLayout = new FrameLayout()
{
Y = Application.GetRealHeight(60),
Height = Application.GetRealHeight(127),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
};
AddChidren(topFrameLayout);
var floor = new Button
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Width = Application.GetMinRealAverage(69),
Height = Application.GetMinRealAverage(69),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/Floor.png"
};
if (Config.Instance.Home.FloorDics.Count > 0)
{
topFrameLayout.AddChidren(floor);
}
floorBtn = new Button
{
X = floor.Right,
Width = Application.GetRealWidth(500),
Height = Application.GetRealHeight(100),
Gravity = Gravity.CenterVertical,
TextAlignment = TextAlignment.CenterLeft,
TextColor = ZigbeeColor.Current.GXCTextColor,
Text = Config.Instance.Home.GetCurrentFloorName,
IsBold = true,
TextSize = 14
};
if (Config.Instance.Home.FloorDics.Count > 0)
{
topFrameLayout.AddChidren(floorBtn);
}
if(UserCenterResourse.Option.SafetyShortcut)
{
var safetyBtn = new SafetyShortcutControl();
safetyBtn.X = Application.GetRealWidth(860);
safetyBtn.Gravity = Gravity.CenterVertical;
topFrameLayout.AddChidren(safetyBtn);
}
var messageBtn = new MessageManagementControl();
messageBtn.X = Application.GetRealWidth(953);
messageBtn.Gravity = Gravity.CenterVertical;
messageBtn.UnSelectedImagePath = "Item/Message.png";
messageBtn.SelectedImagePath = "Item/MessageSelected.png";
topFrameLayout.AddChidren(messageBtn);
var residecneName = new Button()
{
X = Application.GetRealWidth(CommonFormResouce.X_Left),
Y = Application.GetRealHeight(161),
Width = Application.GetRealWidth(700),
Height = Application.GetRealHeight(95),
TextAlignment = TextAlignment.CenterLeft,
Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull),
TextSize = 24,
TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor,
IsBold=true
};
if (Config.Instance.Home.IsOthreShare)
{
residecneName.Text = $"{Config.Instance.Home.Name}";
}
AddChidren(residecneName);
floor.MouseUpEventHandler += SelectFloor;
floorBtn.MouseUpEventHandler += SelectFloor;
//切换住宅
residecneName.MouseLongEventHandler += (send, e) =>
{
var tempHomeBtn = send as Button;
if (Config.Instance.HomeFilePathList.Count == 0)
{
var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst), Language.StringByID(R.MyInternationalizationString.Close), Language.StringByID(R.MyInternationalizationString.Confrim));
alert.Show();
alert.ResultEventHandler += (senderHouse, eHouse) =>
{
if (eHouse)
{
return;
}
};
}
else
{
var selectHouse = new Device.Category.SelectHouse();
selectHouse.Init();
selectHouse.HouseAction = (houseId) =>
{
ChangeResidence(House.GetHouseByHouseId(houseId));
};
}
};
#endregion
if (CanBindGateway() == false)
{
var roomPageView = new HorizontalPages()
{
Y = Application.GetRealHeight(302),
Width = Application.GetRealWidth(CommonPage.AppRealWidth),
Height = Application.GetRealHeight(478),
};
AddChidren(roomPageView);
//突出边距
roomPageView.TCBJ = Application.GetRealWidth(181);
//两个page之间的间距
roomPageView.JMBJ = Application.GetRealWidth(0);
//当前房间
var rList = Room.CurrentRoom.GetRoomsByCurrentFloorIdAppendLoveRoom();
Room.CurrentRoom = Room.CurrentRoom ?? rList[0];
foreach (var room in rList)
{
var roomView = new Device.CommonForm.RoomView(0, 0);
roomPageView.AddChidren(roomView);
roomView.Init(room);
roomView.HideName(true);
roomView.action += () =>
{
Show();
};
}
var curIndex = rList.FindIndex((obj) => obj.Id == Room.CurrentRoom.Id);
roomPageView.PageIndex = curIndex;
if (roomPageView.GetChildren(roomPageView.PageIndex) != null)
{
(roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false);
}
var functionSceneView = new FrameLayout()
{
Y = Application.GetRealHeight(861),
Width = Application.GetRealWidth(832),
Height = Application.GetRealHeight(167),
Gravity = Gravity.CenterHorizontal,
BackgroundImagePath = "Item/SceneFunctionBG.png"
};
AddChidren(functionSceneView);
//场景
var sceneBtn = new Button()
{
X = Application.GetRealWidth(30),
Y = Application.GetRealHeight(12),
Width = Application.GetRealWidth(350),
Height = Application.GetRealHeight(100),
TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextID = R.MyInternationalizationString.Scence,
IsSelected = true,
TextSize=16,
IsBold=true
};
functionSceneView.AddChidren(sceneBtn);
//场景
functionBtn = new Button()
{
X = Application.GetRealWidth(430),
Y = Application.GetRealHeight(12),
Width = Application.GetRealWidth(360),
Height = Application.GetRealHeight(100),
TextColor = ZigbeeColor.Current.GXCTextGrayColor3,
SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextID = R.MyInternationalizationString.Function,
IsSelected = false,
TextSize=14
};
functionSceneView.AddChidren(functionBtn);
//功能和场景bodyView
functionSceneBodyView = new FrameLayout()
{
Y = functionSceneView.Bottom,
Height = Application.GetRealHeight(750),
Gravity = Gravity.CenterHorizontal,
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor
};
AddChidren(functionSceneBodyView);
//选择功能分栏
functionBtn.MouseUpEventHandler += (sender, e) =>
{
sceneBtn.IsSelected = false;
functionBtn.IsSelected = true;
sceneBtn.TextSize = 14;
sceneBtn.IsBold = false;
functionBtn.TextSize = 16;
functionBtn.IsBold = true;
RefreshBodyView();
};
//选择场景分栏
sceneBtn.MouseUpEventHandler += (sender, e) =>
{
functionBtn.IsSelected = false;
sceneBtn.IsSelected = true;
sceneBtn.TextSize = 16;
sceneBtn.IsBold = true;
functionBtn.TextSize = 14;
functionBtn.IsBold = false;
RefreshBodyView();
};
RefreshBodyView();
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);
}
//切换当前房间
Room.CurrentRoom = rList[roomPageView.PageIndex];
RefreshBodyView();
};
}
else
{
ShowNoGatewayTip();
}
}
#endregion
#region ◆ 刷新____________________________
///
/// RefreshBodyView
///
public void RefreshBodyView()
{
functionSceneBodyView.RemoveAll();
if (functionBtn.IsSelected)
{
ShowFunction();
}
else
{
ShowScene();
}
}
///
/// SelectFloor
///
///
///
public void SelectFloor(object sender, MouseEventArgs mouseEventArgs)
{
var floorFL = new Phone.Device.Category.SelectFloor();
AddChidren(floorFL);
floorFL.Init(35, 153);
floorFL.changeFloor = true;
floorFL.FloorAction = (floorId) =>
{
floorBtn.Text = Config.Instance.Home.GetFloorNameById(floorId);
Common.Room.CurrentRoom = Common.Room.CurrentRoom?.GetLoveRoom();
Show();
};
}
#endregion
#region ◆ 检测是否绑定了网关________________
///
/// 当没有绑定网关时,是否有权限添加网关
///
/// true, if bing gateway was caned, false otherwise.
private bool CanBindGateway()
{
if (HadBindGateway() == false && (UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 2))
{
return true;
}
return false;
}
///
/// 是否绑定了网关
///
/// true, if bind gateway was haded, false otherwise.
private bool HadBindGateway()
{
var gatewayList = UserCenter.HdlGatewayLogic.Current.GetAllLocalGateway();
if (gatewayList.Count == 0)
{
return false;
}
return true;
}
///
/// 提示用户没有网关,并快速跳转到添加网关界面
///
private void ShowNoGatewayTip()
{
var bg = new Button
{
Y = Application.GetRealHeight(302),
Width = Application.GetMinRealAverage(717),
Height = Application.GetMinRealAverage(478),
Gravity = Gravity.CenterHorizontal,
UnSelectedImagePath = "Item/NoBindGW.png"
};
AddChidren(bg);
var tip = new Button
{
Y = Application.GetRealHeight(815),
Width = Application.GetMinRealAverage(717),
Height = Application.GetMinRealAverage(58),
Gravity = Gravity.CenterHorizontal,
TextID = R.MyInternationalizationString.NewAccountNeedBingGW,
TextColor = ZigbeeColor.Current.GXCTextGrayColor
};
AddChidren(tip);
var addBG = new Button
{
Y = Application.GetRealHeight(1048),
Height = Application.GetMinRealAverage(366),
Width = Application.GetMinRealAverage(971),
UnSelectedImagePath = "Item/VirtualFrame.png",
Gravity = Gravity.CenterHorizontal
};
AddChidren(addBG);
var addGatewayBtn = new Button()
{
Y = Application.GetRealHeight(1143),
Height = Application.GetMinRealAverage(89),
Width = Application.GetMinRealAverage(89),
UnSelectedImagePath = "Item/Add_GW.png",
Gravity = Gravity.CenterHorizontal
};
AddChidren(addGatewayBtn);
addGatewayBtn.MouseUpEventHandler += GoToAddGateWay;
var addTip = new Button
{
Y = Application.GetRealHeight(1256),
Width = Application.GetMinRealAverage(717),
Height = Application.GetMinRealAverage(58),
Gravity = Gravity.CenterHorizontal,
TextID = R.MyInternationalizationString.AddSmartGW,
TextColor = ZigbeeColor.Current.GXCTextBlackColor
};
AddChidren(addTip);
addTip.MouseUpEventHandler += GoToAddGateWay;
}
///
/// 前往添加网关界面
///
/// Sender.
/// The ${ParameterType} instance containing the event data.
private void GoToAddGateWay(object sender, MouseEventArgs mouseEventArgs)
{
var selectNewGateWayForm = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm { };
selectNewGateWayForm.AddForm(selectNewGateWayForm);
}
#endregion
#region ◆ 功能_____________________________
///
/// 显示没有功能
///
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);
}
///
/// 显示功能
///
private void ShowFunction()
{
functionSceneBodyView.RemoveAll();
//选择功能--直接从房间的devicelist中获取
var deviceList = Room.CurrentRoom.DeviceUIList;
if (deviceList == null)
{
return;
}
if (deviceList.Count == 0)
{
ShowNoFunctionTip();
}
else
{
var dList = new List { };
foreach(var device in deviceList)
{
var info = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device.CommonDevice);
if (info.BeloneType == DeviceBeloneType.A干接点 || info.BeloneType == DeviceBeloneType.A中继器)
{
continue;
}
dList.Add(device);
}
deviceVerticalScrolViewLayout = new VerticalScrolViewLayout { };
functionSceneBodyView.AddChidren(deviceVerticalScrolViewLayout);
for (int i = 0; i < dList.Count; i++)
{
var device = dList[i];
//new System.Threading.Thread(() =>
//{
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 collectionEvent = (sender, e) =>
{
if ((sender as Button).IsSelected)
{
Common.Room.CurrentRoom.GetLoveRoom().DeleteDevice(device.FileName);
(sender as Button).IsSelected = false;
}
else
{
Common.Room.CurrentRoom.GetLoveRoom().AddDevice(device.FileName);
(sender as Button).IsSelected = true;
}
if (Room.CurrentRoom.IsLove)
{
RefreshBodyView();
}
};
if (device.CommonDevice.Type == DeviceType.WindowCoveringDevice)
{
//窗帘 卷帘
var rollerShade = (ZigBee.Device.Rollershade)device.CommonDevice;
if (rollerShade.Gateway != null)
{
new System.Threading.Thread(() =>
{
System.Threading.Thread.Sleep(100 * i);
if (rollerShade.Gateway.IsVirtual)
{
ReadStatus(rollerShade, () =>
{
ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device.CommonDevice);
});
}
else
{
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds)
{
ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var functionView = new FunctionMainView(xx, yy);
functionView.Tag = device;
itemView.AddChidren(functionView);
functionView.Init();
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetStatuText(device.GetDeviceStatu());
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.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
(device.CommonDevice as Rollershade).CurtainUpDownStopControl(0);
((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Open));
((sender as Button).Parent as FunctionMainView).IsSelected = true;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
(device.CommonDevice as Rollershade).CurtainUpDownStopControl(1);
((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
((sender as Button).Parent as FunctionMainView).IsSelected = false;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.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, Room.CurrentRoom);
rollerShadeControl.action += (curDev, curRoom) =>
{
ReFreshEditDeviceAction(device, curRoom, functionView);
};
};
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
else if (device.CommonDevice.Type == DeviceType.OnOffOutput)
{
//开关灯
var light = device.CommonDevice 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.CommonDevice);
});
}
else
{
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds)
{
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var functionView = new FunctionMainView(xx, yy);
itemView.AddChidren(functionView);
functionView.Init();
functionView.Tag = device;
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetStatuText(device.GetDeviceStatu());
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
functionView.IsSelected = light.OnOffStatus == 1;
functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == 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.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
light.SwitchControl(1);
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = true;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
light.SwitchControl(0);
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = false;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.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, Room.CurrentRoom);
lightControl.action += (curDev, curRoom) =>
{
ReFreshEditDeviceAction(device, curRoom, functionView);
};
};
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
else if (device.CommonDevice.Type == DeviceType.AirSwitch)
{
//空气开关
var airSwitch = device.CommonDevice 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.CommonDevice);
});
}
else
{
if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var functionView = new FunctionMainView(xx, yy);
itemView.AddChidren(functionView);
functionView.Init();
functionView.Tag = device;
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetStatuText(device.GetDeviceStatu());
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(airSwitch));
functionView.IsSelected = airSwitch.OnOffStatus == 1;
functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom( device.FileName));
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
{
(sender as Button).IsSelected = !(sender as Button).IsSelected;
if ((sender as Button).IsSelected)
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
airSwitch.SwitchControl(1);
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = true;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
airSwitch.SwitchControl(0);
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = false;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.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, Room.CurrentRoom);
lightControl.action += (curDev, curRoom) =>
{
ReFreshEditDeviceAction(device, curRoom, functionView);
};
};
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
else if (device.CommonDevice.Type == DeviceType.Thermostat)
{
//恒温器-AC-空调
var ac = device.CommonDevice 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.CommonDevice);
});
}
else
{
if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var functionView = new FunctionMainView(xx, yy);
itemView.AddChidren(functionView);
functionView.Init();
functionView.Tag = device;
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetStatuText(device.GetDeviceStatu());
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
functionView.IsSelected = ac.currentSystemMode != 0;
functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
functionView.SwitchButton.MouseUpEventHandler += (sender, e) =>
{
(sender as Button).IsSelected = !(sender as Button).IsSelected;
if ((sender as Button).IsSelected)
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
ac.Open();
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = true;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
ac.Close();
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = false;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.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, Room.CurrentRoom);
lightControl.action += (curDev, curRoom) =>
{
ReFreshEditDeviceAction(device, curRoom, functionView);
};
};
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
else if (device.CommonDevice.Type == DeviceType.DimmableLight)
{
//调光灯
var dimmableLight = device.CommonDevice 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.CommonDevice);
});
}
else
{
//防止短时间内多次读取设备状态
if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
{
ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device.CommonDevice);
}
}
})
{ IsBackground = true }.Start();
var functionView = new FunctionMainView(xx, yy);
itemView.AddChidren(functionView);
functionView.Init();
functionView.Tag = device;
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetStatuText(device.GetDeviceStatu());
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
functionView.IsSelected = dimmableLight.OnOffStatus == 1;
functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == 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.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
dimmableLight.SwitchControl(1);
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = true;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL);
}
});
}
else
{
zbGateway = device.CommonDevice.Gateway;
sendedControlCommand = false;
zbGateway.ReportAction += UpdateDeviceControllStatu;
AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice);
dimmableLight.SwitchControl(0);
((sender as Button).Parent as FunctionMainView).SetStatuText(device.GetDeviceStatu());
((sender as Button).Parent as FunctionMainView).IsSelected = false;
//控制延时回调
DeviceUI.SendCommandDelayAction(device.CommonDevice, () =>
{
if (Parent == null)
{
return;
}
RemoveUpdateControlDeviceStatuAction(zbGateway);
if (sendedControlCommand == false)
{
DeviceUI.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, Room.CurrentRoom);
dimmableLightControl.action += (curDev, curRoom) =>
{
ReFreshEditDeviceAction(device, curRoom, functionView);
};
};
functionView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
else if (device.CommonDevice.Type == DeviceType.IASZone)
{
//各类传感器
var ias = device.CommonDevice as IASZone;
var lightView = new FunctionMainView(xx, yy);
itemView.AddChidren(lightView);
lightView.Init();
lightView.Tag = device;
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
lightView.SetStatuText(device.GetDeviceStatu());
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
lightView.IsSelected = ias.iASInfo?.Alarm1 == 1;
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
lightView.CanControl(false);
if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
{
lightView.CollectButton.IsSelected = false;
}
else
{
lightView.CollectButton.IsSelected = true;
}
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
}
else if (device.CommonDevice.Type == DeviceType.TemperatureSensor)
{
var tempera = device.CommonDevice 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.CommonDevice);
}
else if (tempera.SensorDiv == 2)
{
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device.CommonDevice);
}
});
}
else
{
if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - tempera.LastDateTime).TotalSeconds)
{
if (tempera.SensorDiv == 1)
{
ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device.CommonDevice);
}
else if (tempera.SensorDiv == 2)
{
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device.CommonDevice);
}
}
}
})
{ IsBackground = true }.Start();
var lightView = new FunctionMainView(xx, yy);
itemView.AddChidren(lightView);
lightView.Init();
lightView.Tag = device;
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
lightView.SetStatuText(device.GetDeviceStatu());
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
lightView.IsSelected = false;
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
lightView.CanControl(false);
if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
{
lightView.CollectButton.IsSelected = false;
}
else
{
lightView.CollectButton.IsSelected = true;
}
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
else if (device.CommonDevice.Type == DeviceType.DoorLock)
{
//门锁
var dimmableLight = device.CommonDevice as DoorLock;
var lightView = new FunctionMainView(xx, yy);
itemView.AddChidren(lightView);
lightView.Init();
lightView.Tag = device;
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
lightView.SetStatuText(device.GetDeviceStatu());
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
lightView.IsSelected = false;
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
lightView.CanControl(false);
if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
{
lightView.CollectButton.IsSelected = false;
}
else
{
lightView.CollectButton.IsSelected = true;
}
lightView.CardBG.MouseUpEventHandler += (sender, e) =>
{
CommonPage.Instance.IsDrawerLockMode = true;
var userDoorLockPage = new UserDoorLockPage(Room.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 = device;
lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
lightView.SetStatuText(device.GetDeviceStatu());
lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
lightView.CanControl(false);
lightView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
if (Common.Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
{
lightView.CollectButton.IsSelected = false;
}
else
{
lightView.CollectButton.IsSelected = true;
}
lightView.CollectButton.MouseUpEventHandler += collectionEvent;
}
}
catch(Exception ex)
{
}
});
//})
//{ IsBackground = true }.Start();
}
}
}
///
/// ReFreshEditDeviceAction
///
///
///
///
private void ReFreshEditDeviceAction(DeviceUI device, Common.Room curRoom, FunctionMainView functionView)
{
if (Common.Room.CurrentRoom.IsLove)
{
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
if (Room.CurrentRoom.IsCollectInRoom(device.FileName) == false)
{
ShowFunction();
}
}
else
{
if (curRoom.Id != Common.Room.CurrentRoom.Id)
{
Common.Room.CurrentRoom.DeleteDevice(device.FileName);
ShowFunction();
}
else
{
functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath);
functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device.CommonDevice));
functionView.SetCollect(Room.CurrentRoom.IsCollectInRoom(device.FileName));
}
}
}
#endregion
#region ◆ 场景_____________________________
///
/// 显示没场景
///
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);
}
///
/// 显示场景
///
private void ShowScene()
{
functionSceneBodyView.RemoveAll();
//选择场景
var sceneList = Room.CurrentRoom.SceneUIList;
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
};
sceneScrolView.AddChidren(itemView);
}
var sceneView = new SceneMainView(xx, yy);
sceneView.Init(scene);
itemView.AddChidren(sceneView);
sceneView.CollectionAction += ShowScene;
}
GetDelayScene(sceneScrolView);
}
}
///
/// GetDelayScene
///
///
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 ◆ 切换住宅_________________________
///
/// 切换住宅
///
/// Home.
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();
Room.InitAllRoom();
Application.RunOnMainThread(() =>
{
Show();
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 ◆ 进行设备状态读取__________________
///
/// 判断是否可以进行设备状态读取。在回调中读取
///
/// Common device.
/// 回调处理--发送读取命令
/// Span. 默认30秒
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 ◆ 控制状态_________________________
///
/// 显示设备控制状态
///
/// Command.
/// Object value.
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);
}
///
/// 移除全部更新控制设备的action
///
private void RemoveAllUpdateControlDeviceStatuAction()
{
foreach (var gateway in zbGatewayList)
{
//移除action
if (gateway != null)
{
gateway.ReportAction -= UpdateDeviceControllStatu;
}
}
}
///
/// 移除单个控制设备的更新状态action
///
/// Gateway.
private void RemoveUpdateControlDeviceStatuAction(ZbGateway gateway)
{
//移除action
if (gateway != null)
{
gateway.ReportAction -= UpdateDeviceControllStatu;
}
}
///
/// 添加需要监控回调状态的网关和设备
///
/// Gateway list.
/// Gateway.
/// Device list.
/// Common.
private void AddZbGateway(List gatewayList, ZbGateway gateway, List 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
}
}