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; } } }