黄学彪
2020-05-21 98ceb6bd2021f9ff136cda27eef28676dd7b5d92
ZigbeeApp/Shared/Common/Device.cs
@@ -292,9 +292,9 @@
                    //在端点名字的后面附加【回路】字样
                    dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
                    HdlThreadLogic.Current.RunThread(async () =>
                    HdlThreadLogic.Current.RunThread(() =>
                    {
                        await this.ReName(device, dName, ShowErrorMode.NO);
                        this.ReName(device, dName, ShowErrorMode.NO);
                    });
                }
            }
@@ -431,7 +431,7 @@
        /// <param name="device">设备对象</param>
        /// <param name="newName">新名字</param>
        /// <param name="mode">是否显示错误</param>
        public async Task<bool> ReName(CommonDevice device, string newName, ShowErrorMode mode = ShowErrorMode.YES)
        public bool ReName(CommonDevice device, string newName, ShowErrorMode mode = ShowErrorMode.YES)
        {
            //先别管那么多,更改名字后,刷新设备缓存
            this.SetEpointName(device, newName);
@@ -450,7 +450,7 @@
            //成员只能修改自己本地的名字
            if (UserCenterResourse.UserInfo.AuthorityNo != 3)
            {
                var result = await device.RenameDeviceNameAsync(device.DeviceAddr, device.DeviceEpoint, newName);
                var result = this.RenameDeviceNameAsync(device, newName);
                if (result == null || result.deviceRenameData == null || result.deviceRenameData.Result == 1)
                {
                    //设备名称修改失败
@@ -464,8 +464,6 @@
                    }
                    return false;
                }
                //备份数据
                await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A端点名称, newName);
            }
            //修改设备名字的话,主页需要重新刷新
            Phone.UserView.UserPage.Instance.RefreshForm = true;
@@ -478,7 +476,7 @@
        /// <param name="listDevice">设备对象</param>
        /// <param name="newMacName">新名字</param>
        /// <param name="mode">是否显示错误</param>
        public async Task<bool> ReMacName(List<CommonDevice> listDevice, string newMacName, ShowErrorMode mode = ShowErrorMode.YES)
        public bool ReMacName(List<CommonDevice> listDevice, string newMacName, ShowErrorMode mode = ShowErrorMode.YES)
        {
            if (listDevice.Count == 0)
            {
@@ -506,7 +504,7 @@
            if (UserCenterResourse.UserInfo.AuthorityNo != 3)
            {
                //修改物理名字
                var result = await device.RenameDeviceMacNameAsync(device.DeviceAddr, device.DeviceEpoint, newMacName);
                var result = this.RenameDeviceMacNameAsync(device, newMacName);
                if (result == null || result.renameDeviceMacNameData == null || result.renameDeviceMacNameData.Result != 0)
                {
                    //设备名称修改失败
@@ -519,15 +517,13 @@
                    }
                    return false;
                }
                //备份数据
                await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.AMac名称, newMacName);
                //如果它只有一个回路,则更改端点名字
                if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true)
                {
                    //只有一个端点
                    if (this.dicDeviceEpoint[device.DeviceAddr].Count == 1)
                    {
                        return await this.ReName(device, newMacName);
                        return this.ReName(device, newMacName);
                    }
                    //如果它有两个端点时,pir传感器特殊处理
                    else if (this.dicDeviceEpoint[device.DeviceAddr].Count == 2)
@@ -539,7 +535,7 @@
                            {
                                if (myDevice.Type == DeviceType.IASZone)
                                {
                                    return await this.ReName(myDevice, newMacName);
                                    return this.ReName(myDevice, newMacName);
                                }
                            }
                        }
@@ -547,6 +543,100 @@
                }
            }
            return true;
        }
        ///<summary >
        /// 修改设备mac名称
        /// <para>macName:设备名称</para>
        /// </summary>
        private CommonDevice.RenameDeviceMacNameAllData RenameDeviceMacNameAsync(CommonDevice device, string macName)
        {
            //如果当前是虚拟住宅
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                return Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceMacName(device, macName, "MacRename");
            }
            //获取编辑设备Mac名字的命令字符
            var sendData = this.GetReDeviceMacNameCommandText(device.DeviceAddr, device.DeviceEpoint, macName);
            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "MacRename", sendData, "MacRename_Respon");
            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
            {
                return null;
            }
            //加缓存
            Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceMacName(device, macName, "MacRename");
            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.RenameDeviceMacNameData>(result.ReceiptData);
            return new CommonDevice.RenameDeviceMacNameAllData { renameDeviceMacNameData = tempData };
        }
        /// <summary>
        /// 修改设备端口(按键)名称
        /// </summary>
        /// <param name="device">设备对象</param>
        /// <param name="deviceName">设备端点名字</param>
        /// <returns></returns>
        private CommonDevice.DeviceRenameAllData RenameDeviceNameAsync(CommonDevice device, string deviceName)
        {
            //如果当前是虚拟住宅
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                return Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceEpointName(device, deviceName, "DeviceRename");
            }
            //获取编辑设备端点名字的命令字符
            var sendData = this.GetReDeviceEpointNameCommandText(device.DeviceAddr, device.DeviceEpoint, deviceName);
            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "DeviceRename", sendData, "DeviceRenameRespon");
            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
            {
                return null;
            }
            //加缓存
            Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceEpointName(device, deviceName, "DeviceRename");
            var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceRenameResponseData>(result.ReceiptData);
            return new CommonDevice.DeviceRenameAllData { deviceRenameData = tempData };
        }
        /// <summary>
        /// 获取编辑设备Mac名字的命令字符
        /// </summary>
        /// <param name="deviceAddr"></param>
        /// <param name="deviceEpoint"></param>
        /// <param name="deviceName"></param>
        /// <returns></returns>
        public string GetReDeviceMacNameCommandText(string deviceAddr, int deviceEpoint, string deviceName)
        {
            var bytes = new byte[64];
            var reamarkGwBytes = Encoding.UTF8.GetBytes(deviceName);
            System.Array.Copy(reamarkGwBytes, 0, bytes, 0, 64 < reamarkGwBytes.Length ? 64 : reamarkGwBytes.Length);
            deviceName = Encoding.UTF8.GetString(bytes);
            var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", deviceAddr }, { "Epoint", deviceEpoint }, { "Cluster_ID", 0 }, { "Command", 100 } };
            var data = new Newtonsoft.Json.Linq.JObject { { "MacName", deviceName } };
            jObject.Add("Data", data);
            return jObject.ToString();
        }
        /// <summary>
        /// 获取编辑设备端点名字的命令字符
        /// </summary>
        /// <param name="deviceAddr"></param>
        /// <param name="deviceEpoint"></param>
        /// <param name="deviceName"></param>
        /// <returns></returns>
        public string GetReDeviceEpointNameCommandText(string deviceAddr, int deviceEpoint, string deviceName)
        {
            var bytes = new byte[64];
            var reamarkGwBytes = Encoding.UTF8.GetBytes(deviceName);
            System.Array.Copy(reamarkGwBytes, 0, bytes, 0, 64 < reamarkGwBytes.Length ? 64 : reamarkGwBytes.Length);
            deviceName = Encoding.UTF8.GetString(bytes);
            var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", deviceAddr }, { "Epoint", deviceEpoint }, { "Cluster_ID", 0 }, { "Command", 96 } };
            var data = new Newtonsoft.Json.Linq.JObject { { "DeviceName", deviceName } };
            jObject.Add("Data", data);
            return jObject.ToString();
        }
        /// <summary>
@@ -732,7 +822,7 @@
        /// <returns></returns>
        public bool DeviceIsCanFixedPosition(CommonDevice device)
        {
            if (device.Type == DeviceType.DoorLock)
            if (device.Type == DeviceType.DoorLock || device.Type == DeviceType.PMSensor)
            {
                //门锁没有定位功能
                return false;
@@ -1442,7 +1532,6 @@
            selectPath = imageSelectFilePath;
        }
        #endregion
        #region ■ 获取自定义的设备类型_______________
@@ -1982,6 +2071,16 @@
                    this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
                    save = true;
                }
                else
                {
                    //2020.05.18追加:如果记录的房间ID是不存在的话,则重新覆盖
                    var room = HdlRoomLogic.Current.GetRoomById(this.dicDeviceRoomId[listDevice[0].DeviceAddr]);
                    if (room == null)
                    {
                        this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
                        save = true;
                    }
                }
            }
            if (save == true)
@@ -2061,6 +2160,25 @@
            //添加自动备份
            HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
        }
        /// <summary>
        /// 根据房间ID,移除指定的真实物理设备的所属房间记录
        /// </summary>
        /// <param name="i_RoomId"></param>
        public void DeleteRealDeviceByRoomId(string i_RoomId)
        {
            var listDeleteKey = new List<string>();
            foreach (var deviceAddr in this.dicDeviceRoomId.Keys)
            {
                if (this.dicDeviceRoomId[deviceAddr] == i_RoomId
                    && listDeleteKey.Contains(deviceAddr) == false)
                {
                    listDeleteKey.Add(deviceAddr);
                }
            }
            //将真实物理设备从房间中移除
            this.DeleteRealDeviceFromRoom(listDeleteKey);
        }
        #endregion
@@ -2776,7 +2894,7 @@
            this.dicDeviceModelIdEnum["MGCD01/ZB.10"] = "1306-1200-60000";//吸顶燃气传感器
            //PM2.5空气质量传感器 【该设备属于第三方设备,没有镜像ID】
            this.dicDeviceModelIdEnum["SZ_PM100"] = "1307-1200-60000";//PM2.5空气质量传感器
            this.dicDeviceModelIdEnum["MSPM25/M-ZB.10"] = "1307-1200-60000";//PM2.5空气质量传感器
            //=========★★继电器类(2300-2499)★★=========
            this.dicDeviceModelIdEnum["MPR0310-ZB.10"] = "2300-2300-60001";//3路继电器小模块