using System;
using Shared.Common;
using Shared.Phone.Device.DeviceLogic;
using Shared.Phone.UserCenter;
using Shared.Phone.UserView;
using ZigBee.Device;
namespace Shared.Phone.Device.CommonForm
{
public class RoomView:FrameLayout, ZigBee.Common.IStatus
{
///
/// Room
///
private Common.Room room;
///
/// action
///
public Action action;
FrameLayout roomNameBackground;
FrameLayout roomTemperatureBackground;
Button roomListBtn;
Button temperatureText;
Button humidityText;
CommonDevice temperDevice;
CommonDevice humidDevice;
#region ◆ 接口__________________________
///
/// 处理变化事件 --将弃用 改用DeviceInfoChange()
///
/// The changed.
/// Common.
public void Changed(CommonDevice common)
{
}
///
/// 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();
}
///
/// 设备状态更新接口
/// type:如果为 DeviceInComingRespon:设备新上报
/// type:如果为 IASInfoReport:RemoveDeviceRespon
/// type:如果为 DeviceStatusReport:设备上报
/// type:如果为 IASInfoReport:IAS安防信息上报
/// type:如果为 OnlineStatusChange: 设备在线状态更新
///
/// Common.
/// Type tag.
public void DeviceInfoChange(CommonDevice common, string typeTag)
{
if (typeTag == "DeviceStatusReport")
{
Application.RunOnMainThread(() =>
{
try
{
if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0)
{
return;
}
//是否为当前设备
if ((temperDevice?.DeviceEpoint != common.DeviceEpoint || temperDevice?.DeviceAddr != common.DeviceAddr) && (humidDevice?.DeviceEpoint != common.DeviceEpoint || humidDevice?.DeviceAddr != common.DeviceAddr) )
{
return;
}
//if (common.Type == DeviceType.TemperatureSensor)
//{
if (common.DeviceStatusReport.CluterID == 1026)
{
foreach (var data in common.DeviceStatusReport.AttriBute)
{
if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
{
if (data.AttriButeData == 0)
{
//0℃
temperatureText.Text = "0.0℃";
room.Temperatrue = 0;
}
else if (data.AttriButeData > 32767)
{
//负数(特殊处理)
string strValue = (data.AttriButeData - 65536).ToString();
//小数点需要一位
strValue = strValue.Substring(0, strValue.Length - 1);
temperatureText.Text = strValue.Insert(strValue.Length - 1, ".") + "℃";
room.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
}
else
{
//小数点需要一位
string strValue = data.AttriButeData.ToString();
strValue = strValue.Substring(0, strValue.Length - 1);
temperatureText.Text = strValue.Insert(strValue.Length - 1, ".") + "℃";
room.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
}
}
}
}
else if (common.DeviceStatusReport.CluterID == 1029)
{
foreach (var data in common.DeviceStatusReport.AttriBute)
{
if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
{
if (data.AttriButeData == 0)
{
//0
humidityText.Text = "--%";
room.Humidity = 0;
}
else
{
//小数点需要一位(湿度没有负数)
string strValue = data.AttriButeData.ToString();
strValue = strValue.Substring(0, strValue.Length - 1);
humidityText.Text = strValue.Insert(strValue.Length - 1, ".") + "%";
room.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
}
}
}
}
//}
}
catch (Exception ex)
{
System.Console.WriteLine($"Error:{ex.Message}");
}
});
}
}
#endregion
public override void RemoveFromParent()
{
ZbGateway.StatusList.Remove(this);
base.RemoveFromParent();
}
///
/// RoomView
///
///
///
public RoomView(int x, int y)
{
X = Application.GetRealWidth(x);
Y = Application.GetRealHeight(y);
Width = Application.GetRealWidth(717);
Height = Application.GetRealHeight(478);
ZbGateway.StatusList.Add(this);
}
///
/// Init
///
///
public void Init(Common.Room r)
{
this.room = r;
this.temperDevice= Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice);
this.humidDevice= Common.LocalDevice.Current.GetDevice(room.HumidityDevice);
var roomBackView = new FrameLayout()
{
Width = Application.GetRealWidth(717),
Height = Application.GetRealHeight(478)
};
AddChidren(roomBackView);
var roomImg = new ImageView()
{
ImagePath = room.BackgroundImageType == 0 ? room.BackgroundImage : System.IO.Path.Combine(Config.Instance.FullPath, room.BackgroundImage),
Radius = (uint)Application.GetRealHeight(17)
};
roomBackView.AddChidren(roomImg);
roomNameBackground = new FrameLayout
{
X = Application.GetRealWidth(29),
Y = Application.GetRealHeight(282),
Width = Application.GetRealWidth(200),
Height = Application.GetRealHeight(80),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor2
};
roomBackView.AddChidren(roomNameBackground);
roomNameBackground.SetCornerWithSameRadius(Application.GetRealHeight(40), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
var roomName = new Button()
{
X = Application.GetRealWidth(29),
Width = Application.GetRealWidth(190),
Text = room.Name,
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
TextSize = 10,
TextAlignment=TextAlignment.CenterLeft,
IsBold = true
};
roomNameBackground.AddChidren(roomName);
roomNameBackground.Width = (roomName.GetTextWidth() + Application.GetRealWidth(100)) > Application.GetRealWidth(600) ? Application.GetRealWidth(600) : roomName.GetTextWidth() + Application.GetRealWidth(100);
roomName.Width = roomNameBackground.Width - Application.GetRealWidth(40);
roomTemperatureBackground = new FrameLayout
{
X = Application.GetRealWidth(29),
Y = Application.GetRealHeight(374),
Width = Application.GetRealWidth(400),
Height = Application.GetRealHeight(80),
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor2
};
roomBackView.AddChidren(roomTemperatureBackground);
roomTemperatureBackground.SetCornerWithSameRadius(Application.GetRealHeight(40), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
var temperatureIcon = new Button
{
X = Application.GetRealWidth(12),
Width = Application.GetMinRealAverage(58),
Height = Application.GetMinRealAverage(58),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Room/Temperature.png"
};
roomTemperatureBackground.AddChidren(temperatureIcon);
temperatureText = new Button
{
X = Application.GetRealWidth(69),
Width = Application.GetRealWidth(120),
Text = room.Temperatrue == 0 ? "--℃" : $"{room.Temperatrue}℃",
TextSize = 14,
TextAlignment=TextAlignment.CenterLeft
};
roomTemperatureBackground.AddChidren(temperatureText);
temperatureText.Width = temperatureText.GetTextWidth() + Application.GetRealWidth(60);
var humidityIcon = new Button
{
X = temperatureText.Right,
Width = Application.GetMinRealAverage(58),
Height = Application.GetMinRealAverage(58),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Room/Humidity.png"
};
roomTemperatureBackground.AddChidren(humidityIcon);
humidityText = new Button
{
X = humidityIcon.Right,
Width = Application.GetRealWidth(120),
Text = room.Humidity == 0 ? "--%" : $"{room.Humidity}%",
TextSize = 14,
TextAlignment = TextAlignment.CenterLeft
};
roomTemperatureBackground.AddChidren(humidityText);
humidityText.Width = humidityText.GetTextWidth() + Application.GetRealWidth(60);
roomTemperatureBackground.Width = (humidityText.Width + temperatureText.Width + Application.GetRealWidth(150)) > Application.GetRealWidth(600) ? Application.GetRealWidth(600) : (humidityText.Width + temperatureText.Width + Application.GetRealWidth(150));
if (string.IsNullOrEmpty(room.TemperatrueDevice) == false)
{
//发送获取温度的命令
var dev = Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice);
ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(dev);
}
if (string.IsNullOrEmpty(room.HumidityDevice) == false)
{
var dev = Common.LocalDevice.Current.GetDevice(room.HumidityDevice);
ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(dev);
}
roomListBtn = new Button()
{
X = roomBackView.Width - Application.GetRealWidth(100 + 20),
Y = Application.GetRealHeight(20),
Width = Application.GetMinRealAverage(100),
Height = Application.GetMinRealAverage(100),
UnSelectedImagePath = "Room/List.png",
};
roomBackView.AddChidren(roomListBtn);
roomListBtn.MouseUpEventHandler += (send, e) =>
{
CommonPage.Instance.IsDrawerLockMode = true;
var editRoom = new Device.Room.EditRoom();
HomePage.Instance.AddChidren(editRoom);
HomePage.Instance.PageIndex += 1;
editRoom.temperDevice = this.temperDevice;
editRoom.humidDevice = this.humidDevice;
editRoom.Show(room);
editRoom.action += () =>
{
action?.Invoke();
};
};
}
///
/// HideName
///
public void HideName(bool statu)
{
roomNameBackground.Visible = roomTemperatureBackground.Visible = roomListBtn.Visible = !statu;
}
}
}