黄学彪
2019-10-12 c6b35c3138b944830b5336bf610f918154dd47c7
ZigbeeApp/Shared/Phone/UserCenter/Residence/EditorRoomInforForm.cs
@@ -107,7 +107,14 @@
            rowTemperature.AddBottomLine();
            rowTemperature.ButtonClickEvent += (sender, e) =>
            {
                //显示温度传感器列表
                this.ShowTemperatrueDevice(btnTemper);
            };
            if (string.IsNullOrEmpty(cloneRoom.TemperatrueDevice) == false)
            {
                //获取温度
                this.GetTemperatrueValue(btnTemper, cloneRoom.TemperatrueDevice);
            }
            //【湿度】
            var rowHumidity = new FrameRowControl(this.listview.rowSpace / 2);
@@ -120,7 +127,14 @@
            rowHumidity.AddBottomLine();
            rowHumidity.ButtonClickEvent += (sender, e) =>
            {
                //显示湿度传感器列表
                this.ShowHumidityDevice(btnHumi);
            };
            if (string.IsNullOrEmpty(cloneRoom.HumidityDevice) == false)
            {
                //获取湿度
                this.GetHumidityValue(btnHumi, cloneRoom.HumidityDevice);
            }
            //初始化桌布完成
            tableContr.FinishInitControl(bodyFrameLayout, this.listview);
@@ -180,6 +194,198 @@
        #endregion
        #region ■ 温度传感器相关_____________________
        /// <summary>
        /// 显示温度传感器列表
        /// </summary>
        /// <param name="btnTemper"></param>
        private void ShowTemperatrueDevice(NormalViewControl btnTemper)
        {
            var listDevice = new List<ZigBee.Device.CommonDevice>();
            foreach (var device in Common.LocalDevice.Current.listAllDevice)
            {
                //获取温度传感器
                if (device is ZigBee.Device.TemperatureSensor && ((ZigBee.Device.TemperatureSensor)device).SensorDiv == 1)
                {
                    listDevice.Add(device);
                }
            }
            var listSelect = new List<string>() { cloneRoom.TemperatrueDevice };
            var form = new SelectDeviceForm();
            form.AddForm(listDevice, listSelect, true, true);
            form.ActionSelectDevice += (list) =>
            {
                if (list.Count == 0)
                {
                    cloneRoom.TemperatrueDevice = string.Empty;
                    btnTemper.Text = Language.StringByID(R.MyInternationalizationString.uNothing);
                    return;
                }
                cloneRoom.TemperatrueDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]);
                //获取温度值
                this.GetTemperatrueValue(btnTemper, cloneRoom.TemperatrueDevice);
            };
        }
        /// <summary>
        /// 获取温度值
        /// </summary>
        /// <param name="btnHumi"></param>
        /// <param name="deviceKey"></param>
        private void GetTemperatrueValue(NormalViewControl btnTemper, string deviceKey)
        {
            var device = Common.LocalDevice.Current.GetDevice(deviceKey);
            if (device == null)
            {
                return;
            }
            //获取中...
            btnTemper.Text = Language.StringByID(R.MyInternationalizationString.uGetting);
            HdlDeviceAttributeLogic.Current.RemoveEvent("TemperatrueDevice");
            HdlDeviceAttributeLogic.Current.AddAttributeEvent("TemperatrueDevice", "DeviceStatusReport", (Action<ZigBee.Device.CommonDevice>)((report) =>
            {
                string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report);
                if (cloneRoom.TemperatrueDevice != mainKeys || btnTemper == null)
                {
                    return;
                }
                //移除掉事件
                HdlDeviceAttributeLogic.Current.RemoveEvent("TemperatrueDevice");
                foreach (var data in report.DeviceStatusReport.AttriBute)
                {
                    if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                    {
                        if (data.AttriButeData == 0)
                        {
                            //0℃
                            btnTemper.Text = "0.0℃";
                        }
                        else if (data.AttriButeData > 32767)
                        {
                            //负数(特殊处理)
                            string strValue = (data.AttriButeData - 65536).ToString();
                            //小数点需要一位
                            strValue = strValue.Substring(0, strValue.Length - 1);
                            btnTemper.Text = strValue.Insert(strValue.Length - 1, ".") + "℃";
                        }
                        else
                        {
                            //小数点需要一位
                            string strValue = data.AttriButeData.ToString();
                            strValue = strValue.Substring(0, strValue.Length - 1);
                            btnTemper.Text = strValue.Insert(strValue.Length - 1, ".") + "℃";
                        }
                    }
                }
            }));
            //发送获取温度的命令
            ((ZigBee.Device.TemperatureSensor)device).ReadTemperatureOrHumidity();
        }
        #endregion
        #region ■ 湿度传感器相关_____________________
        /// <summary>
        /// 显示湿度传感器列表
        /// </summary>
        /// <param name="btnHumi"></param>
        private void ShowHumidityDevice(NormalViewControl btnHumi)
        {
            var listDevice = new List<ZigBee.Device.CommonDevice>();
            foreach (var device in Common.LocalDevice.Current.listAllDevice)
            {
                //获取湿度传感器
                if (device is ZigBee.Device.TemperatureSensor && ((ZigBee.Device.TemperatureSensor)device).SensorDiv == 2)
                {
                    listDevice.Add(device);
                }
            }
            var listSelect = new List<string>() { cloneRoom.HumidityDevice };
            var form = new SelectDeviceForm();
            form.AddForm(listDevice, listSelect, true, true);
            form.ActionSelectDevice += (list) =>
            {
                if (list.Count == 0)
                {
                    cloneRoom.HumidityDevice = string.Empty;
                    btnHumi.Text = Language.StringByID(R.MyInternationalizationString.uNothing);
                    return;
                }
                cloneRoom.HumidityDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]);
                //获取湿度值
                this.GetHumidityValue(btnHumi, cloneRoom.HumidityDevice);
            };
        }
        /// <summary>
        /// 获取湿度值
        /// </summary>
        /// <param name="btnHumi"></param>
        /// <param name="deviceKey"></param>
        private void GetHumidityValue(NormalViewControl btnHumi, string deviceKey)
        {
            var device = Common.LocalDevice.Current.GetDevice(deviceKey);
            if (device == null)
            {
                return;
            }
            //获取中...
            btnHumi.Text = Language.StringByID(R.MyInternationalizationString.uGetting);
            HdlDeviceAttributeLogic.Current.RemoveEvent("HumidityDevice");
            HdlDeviceAttributeLogic.Current.AddAttributeEvent("HumidityDevice", "DeviceStatusReport", (report) =>
            {
                string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report);
                if (cloneRoom.HumidityDevice != mainKeys || btnHumi == null)
                {
                    return;
                }
                //移除掉事件
                HdlDeviceAttributeLogic.Current.RemoveEvent("HumidityDevice");
                foreach (var data in report.DeviceStatusReport.AttriBute)
                {
                    if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                    {
                        if (data.AttriButeData == 0)
                        {
                            //0
                            btnHumi.Text = "0.0%";
                        }
                        else
                        {
                            //小数点需要一位(湿度没有负数)
                            string strValue = data.AttriButeData.ToString();
                            strValue = strValue.Substring(0, strValue.Length - 1);
                            btnHumi.Text = strValue.Insert(strValue.Length - 1, ".") + "%";
                        }
                    }
                }
            });
            //发送获取湿度的命令
            ((ZigBee.Device.TemperatureSensor)device).ReadTemperatureOrHumidity();
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseForm()
        {
            HdlDeviceAttributeLogic.Current.RemoveEvent("TemperatrueDevice");
            HdlDeviceAttributeLogic.Current.RemoveEvent("HumidityDevice");
            base.CloseForm();
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
@@ -207,6 +413,8 @@
            editorRoom.FloorId = cloneRoom.FloorId;
            editorRoom.Name = cloneRoom.Name;
            editorRoom.HumidityDevice = cloneRoom.HumidityDevice;
            editorRoom.TemperatrueDevice = cloneRoom.TemperatrueDevice;
            editorRoom.BackgroundImage = cloneRoom.BackgroundImage;
            editorRoom.BackgroundImageType = cloneRoom.BackgroundImageType;
            cloneRoom = null;