黄学彪
2019-11-25 5727cf0b9b54da0a191dd1e23cb5abf21320fbff
ZigbeeApp/Shared/Phone/UserCenter/Residence/AddNewRoomForm.cs
@@ -12,6 +12,10 @@
        #region ■ 变量声明___________________________
        /// <summary>
        /// 完成添加房间的事件
        /// </summary>
        public Action FinishEditorEvent = null;
        /// <summary>
        /// 列表控件
        /// </summary>
        private VerticalListControl listview = null;
@@ -85,19 +89,23 @@
            //底线
            txtRoomName.AddBottomLine();
            //【所属楼层】
            var btnBelone = new FrameCaptionViewControl(Language.StringByID(R.MyInternationalizationString.uBelongeFloor), Common.Config.Instance.Home.FloorDics[this.floorKeys], this.listview.rowSpace / 2);
            listview.AddChidren(btnBelone);
            btnBelone.InitControl();
            //右箭头
            btnBelone.AddRightArrow();
            //底线
            btnBelone.AddBottomLine();
            btnBelone.ButtonClickEvent += (sender, e) =>
            //该APP为有楼层的模式才开启这个菜单
            if (floorKeys != string.Empty)
            {
                //楼层选择
                this.ShowSelectFloor(btnBelone);
            };
                //【所属楼层】
                var btnBelone = new FrameCaptionViewControl(Language.StringByID(R.MyInternationalizationString.uBelongeFloor), Common.Config.Instance.Home.FloorDics[this.floorKeys], this.listview.rowSpace / 2);
                listview.AddChidren(btnBelone);
                btnBelone.InitControl();
                //右箭头
                btnBelone.AddRightArrow();
                //底线
                btnBelone.AddBottomLine();
                btnBelone.ButtonClickEvent += (sender, e) =>
                {
                    //楼层选择
                    this.ShowSelectFloor(btnBelone);
                };
            }
            //【温度】
            var rowTemperature = new FrameRowControl(this.listview.rowSpace / 2);
@@ -110,6 +118,8 @@
            rowTemperature.AddBottomLine();
            rowTemperature.ButtonClickEvent += (sender, e) =>
            {
                //显示温度传感器列表
                this.ShowTemperatrueDevice(btnTemper);
            };
            //【湿度】
@@ -123,6 +133,8 @@
            rowHumidity.AddBottomLine();
            rowHumidity.ButtonClickEvent += (sender, e) =>
            {
                //显示湿度传感器列表
                this.ShowHumidityDevice(btnHumi);
            };
            //初始化桌布完成
@@ -148,6 +160,8 @@
                }
                else
                {
                    this.FinishEditorEvent?.Invoke();
                    this.CloseForm();
                }
            };
@@ -191,6 +205,200 @@
        #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>() { newRoom.TemperatrueDevice };
            var form = new SelectDeviceForm();
            form.AddForm(listDevice, listSelect, true, true);
            form.ActionSelectDevice += (list) =>
            {
                if (list.Count == 0)
                {
                    newRoom.TemperatrueDevice = string.Empty;
                    btnTemper.Text = Language.StringByID(R.MyInternationalizationString.uNothing);
                    return;
                }
                newRoom.TemperatrueDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]);
                //获取温度值
                this.GetTemperatrueValue(btnTemper, newRoom.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 (newRoom.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>() { newRoom.HumidityDevice };
            var form = new SelectDeviceForm();
            form.AddForm(listDevice, listSelect, true, true);
            form.ActionSelectDevice += (list) =>
            {
                if (list.Count == 0)
                {
                    newRoom.HumidityDevice = string.Empty;
                    btnHumi.Text = Language.StringByID(R.MyInternationalizationString.uNothing);
                    return;
                }
                newRoom.HumidityDevice = Common.LocalDevice.Current.GetDeviceMainKeys(list[0]);
                //获取湿度值
                this.GetHumidityValue(btnHumi, newRoom.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 (newRoom.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()
        {
            this.FinishEditorEvent = null;
            HdlDeviceAttributeLogic.Current.RemoveEvent("TemperatrueDevice");
            HdlDeviceAttributeLogic.Current.RemoveEvent("HumidityDevice");
            base.CloseForm();
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
@@ -205,11 +413,24 @@
                this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uPleaseInputRoomName));
                return false;
            }
            if (Shared.Common.Room.Lists.Find((obj) => obj.Name == this.newRoom.Name) != null)
            if (string.IsNullOrEmpty(this.floorKeys) == true)
            {
                this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.HadSameRoom));
                return false;
                if (Shared.Common.Room.Lists.Find((obj) => obj.Name == this.newRoom.Name && obj.Id != this.newRoom.Id) != null)
                {
                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uRoomNameIsExist));
                    return false;
                }
            }
            else
            {
                var listRoom = Common.Room.CurrentRoom.GetFloorSortRoom(this.floorKeys);
                if (listRoom.Find((obj) => obj.Name == this.newRoom.Name && obj.Id != this.newRoom.Id) != null)
                {
                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uRoomNameIsExist));
                    return false;
                }
            }
            if (newRoom.BackgroundImageType == 1 || newRoom.BackgroundImageType == 2)
            {
                this.newRoom.MoveBackGroundIamageFileToDirectory(newRoom.BackgroundImage, newRoom.BackgroundImage);