黄学彪
2020-04-02 9904031f5291daaf56985146bb671f25e18ebbdf
ZigbeeApp/Shared/Phone/Device/CommonForm/RoomView.cs
@@ -2,12 +2,11 @@
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
    public class RoomView : FrameLayout
    {
        /// <summary>
        /// Room
@@ -23,114 +22,14 @@
        Button temperatureText;
        Button humidityText;
        CommonDevice temperDevice;
        CommonDevice humidDevice;
        #region ◆ 接口__________________________
        /// <summary>
        /// 设备状态更新接口
        /// <para>type:如果为 DeviceInComingRespon:设备新上报</para>
        /// <para>type:如果为 IASInfoReport:RemoveDeviceRespon</para>
        /// <para>type:如果为 DeviceStatusReport:设备上报</para>
        /// <para>type:如果为 IASInfoReport:IAS安防信息上报</para>
        /// <para>type:如果为 OnlineStatusChange: 设备在线状态更新</para>
        /// <summary>
        /// 温度设备
        /// </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();
        }
        private CommonDevice temperDevice = null;
        /// <summary>
        /// 湿度设备
        /// </summary>
        private CommonDevice humidDevice = null;
        /// <summary>
        /// RoomView
@@ -143,7 +42,6 @@
            Y = Application.GetRealHeight(y);
            Width = Application.GetRealWidth(717);
            Height = Application.GetRealHeight(478);
            ZbGateway.StatusList.Add(this);
        }
        /// <summary>
@@ -201,7 +99,7 @@
                Text = room.Name,
                TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                TextSize = 10,
                TextAlignment=TextAlignment.CenterLeft,
                TextAlignment = TextAlignment.CenterLeft,
                IsBold = true
            };
            roomNameBackground.AddChidren(roomName);
@@ -235,7 +133,7 @@
                Width = Application.GetRealWidth(120),
                Text = "--℃",
                TextSize = 14,
                TextAlignment=TextAlignment.CenterLeft
                TextAlignment = TextAlignment.CenterLeft
            };
            if (string.IsNullOrEmpty(room.TemperatrueDevice) == false)
            {
@@ -305,6 +203,46 @@
                    this.Init(this.room);
                };
            };
            //设备属性上报
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("RoomView" + this.room.Id, ReceiveComandDiv.A设备属性上报, (report) =>
            {
                if (this.temperDevice != null)
                {
                    //温度设备
                    if (report.DeviceAddr == temperDevice.DeviceAddr && report.DeviceEpoint == temperDevice.DeviceEpoint)
                    {
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            if (((TemperatureSensor)temperDevice).Temperatrue == 0)
                            {
                                temperatureText.Text = "0.0℃";
                            }
                            else
                            {
                                temperatureText.Text = ((TemperatureSensor)temperDevice).Temperatrue + "℃";
                            }
                        }, ShowErrorMode.NO);
                    }
                }
                if (this.humidDevice != null)
                {
                    //湿度设备
                    if (report.DeviceAddr == humidDevice.DeviceAddr && report.DeviceEpoint == humidDevice.DeviceEpoint)
                    {
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            if (((TemperatureSensor)temperDevice).Humidity == 0)
                            {
                                humidityText.Text = "--%";
                            }
                            else
                            {
                                humidityText.Text = ((TemperatureSensor)temperDevice).Humidity + "%";
                            }
                        }, ShowErrorMode.NO);
                    }
                }
            });
        }
        /// <summary>
@@ -313,6 +251,15 @@
        public void HideName(bool statu)
        {
            roomNameBackground.Visible = roomTemperatureBackground.Visible = roomListBtn.Visible = !statu;
        }
        /// <summary>
        ///
        /// </summary>
        public override void RemoveFromParent()
        {
            HdlGatewayReceiveLogic.Current.RemoveEvent("RoomView" + this.room.Id);
            base.RemoveFromParent();
        }
    }
}