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
|
{
|
/// <summary>
|
/// Room
|
/// </summary>
|
private Common.Room room;
|
/// <summary>
|
/// action
|
/// </summary>
|
public Action action;
|
|
FrameLayout roomNameBackground;
|
|
FrameLayout roomTemperatureBackground;
|
|
Button roomListBtn;
|
|
Button temperatureText;
|
|
Button humidityText;
|
|
CommonDevice temperDevice;
|
|
CommonDevice humidDevice;
|
|
#region ◆ 接口__________________________
|
/// <summary>
|
/// 处理变化事件 --将弃用 改用DeviceInfoChange()
|
/// </summary>
|
/// <returns>The changed.</returns>
|
/// <param name="common">Common.</param>
|
public void Changed(CommonDevice common)
|
{
|
|
}
|
/// <summary>
|
/// Changeds the IL ogic status.
|
/// </summary>
|
/// <param name="logic">Logic.</param>
|
public void ChangedILogicStatus(ZigBee.Device.Logic logic)
|
{
|
//throw new NotImplementedException();
|
}
|
/// <summary>
|
/// Changeds the IS cene status.
|
/// </summary>
|
/// <param name="scene">Scene.</param>
|
public void ChangedISceneStatus(Scene scene)
|
{
|
//throw new NotImplementedException();
|
}
|
/// <summary>
|
/// 设备状态更新接口
|
/// <para>type:如果为 DeviceInComingRespon:设备新上报</para>
|
/// <para>type:如果为 IASInfoReport:RemoveDeviceRespon</para>
|
/// <para>type:如果为 DeviceStatusReport:设备上报</para>
|
/// <para>type:如果为 IASInfoReport:IAS安防信息上报</para>
|
/// <para>type:如果为 OnlineStatusChange: 设备在线状态更新</para>
|
/// </summary>
|
/// <param name="common">Common.</param>
|
/// <param name="typeTag">Type tag.</param>
|
public void DeviceInfoChange(CommonDevice common, string typeTag)
|
{
|
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();
|
}
|
|
/// <summary>
|
/// RoomView
|
/// </summary>
|
/// <param name="x"></param>
|
/// <param name="y"></param>
|
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);
|
}
|
|
/// <summary>
|
/// Init
|
/// </summary>
|
/// <param name="r"></param>
|
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();
|
};
|
};
|
}
|
|
/// <summary>
|
/// HideName
|
/// </summary>
|
public void HideName(bool statu)
|
{
|
roomNameBackground.Visible = roomTemperatureBackground.Visible = roomListBtn.Visible = !statu;
|
}
|
}
|
}
|