| | |
| | | /// <summary> |
| | | /// 删除设备绑定的目标 |
| | | /// </summary> |
| | | public static HdlDeviceBindLogic Current
|
| | | {
|
| | | get
|
| | | {
|
| | | if (m_Current == null)
|
| | | {
|
| | | m_Current = new HdlDeviceBindLogic();
|
| | | }
|
| | | return m_Current;
|
| | | }
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 获取设备下面绑定的设备_____________
|
| | |
|
| | | /// <summary>
|
| | | /// 获取设备下面绑定的设备(错误时返回null),这个是给pir传感器用的
|
| | | /// </summary>
|
| | | /// <param name="mainDevice">设备对象</param>
|
| | | /// <returns></returns>
|
| | | public List<CommonDevice> GetBindTargetDevice(CommonDevice mainDevice)
|
| | | {
|
| | | var result = this.GetDeviceBindAsync(mainDevice);
|
| | | if (result == null || result.getAllBindResponseData == null)
|
| | | {
|
| | | //获取设备的绑定目标失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uGetDeviceBindTargetFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return null;
|
| | | }
|
| | | var listDevice = new List<CommonDevice>();
|
| | | foreach (var data in result.getAllBindResponseData.BindList)
|
| | | {
|
| | | CommonDevice deviceTemp = Common.LocalDevice.Current.GetDevice(data.BindMacAddr, data.BindEpoint);
|
| | | if (deviceTemp == null)
|
| | | {
|
| | | continue;
|
| | | }
|
| | | listDevice.Add(deviceTemp);
|
| | | }
|
| | | return listDevice;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | ///获取所有绑定
|
| | | /// </summary>
|
| | | public BindObj.GetDeviceBindResponseAllData GetDeviceBindAsync(CommonDevice device)
|
| | | {
|
| | | //如果当前住宅是虚拟住宅
|
| | | if (Common.Config.Instance.Home.IsVirtually == true)
|
| | | {
|
| | | var listBind = ModelData.DeviceModelDataLogic.Current.GetDeviceBindList(device, "Bind/GetDeviceBind");
|
| | | return new BindObj.GetDeviceBindResponseAllData()
|
| | | {
|
| | | getAllBindResponseData = new BindObj.GetDeviceBindResponseData
|
| | | {
|
| | | Result = 0,
|
| | | BindList = listBind
|
| | | }
|
| | | };
|
| | | }
|
| | |
|
| | | var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5007 } };
|
| | | string sendData = jObject.ToString();
|
| | | //发送
|
| | | var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/GetDeviceBind", sendData, "Bind/GetDeviceBind_Respon", 6);
|
| | | if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
|
| | | {
|
| | | return null;
|
| | | }
|
| | | var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.GetDeviceBindResponseData>(result.ReceiptData);
|
| | | return new BindObj.GetDeviceBindResponseAllData() { getAllBindResponseData = tempData };
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 执行绑定设备目标___________________
|
| | |
|
| | | /// <summary>
|
| | | /// 绑定设备的目标(返回成功设置的设备,错误时,返回null)
|
| | | /// </summary>
|
| | | /// <param name="mainDevice">设备对象</param>
|
| | | /// <param name="listDevice">要绑定的目标设备</param>
|
| | | /// <param name="BindCluster">BindCluster</param>
|
| | | /// <returns></returns>
|
| | | public List<CommonDevice> BindDeviceTarget(CommonDevice mainDevice, List<CommonDevice> listDevice, int BindCluster = 6)
|
| | | {
|
| | | if (listDevice.Count == 0)
|
| | | {
|
| | | return new List<CommonDevice>();
|
| | | }
|
| | |
|
| | | var dicDevice = new Dictionary<string, CommonDevice>();
|
| | |
|
| | | //组装数据
|
| | | var addData = new IASZone.AddBindData();
|
| | | addData.DeviceAddr = mainDevice.DeviceAddr;
|
| | | addData.Epoint = mainDevice.DeviceEpoint;
|
| | | foreach (var device in listDevice)
|
| | | {
|
| | | var info = new IASZone.AddBindListObj();
|
| | | info.BindCluster = BindCluster;
|
| | | info.BindMacAddr = device.DeviceAddr;
|
| | | info.BindEpoint = device.DeviceEpoint;
|
| | | info.BindType = 0;
|
| | |
|
| | | addData.BindList.Add(info);
|
| | |
|
| | | //返回成功设备的时候使用
|
| | | string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
|
| | | dicDevice[mainkeys] = device;
|
| | | }
|
| | | //执行绑定
|
| | | var result = this.AddDeviceBindAsync(addData);
|
| | | if (result == null || result.addedDeviceBindResponseData == null)
|
| | | {
|
| | | //绑定目标设置失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return null;
|
| | | }
|
| | |
|
| | | var listSuccess = new List<CommonDevice>();
|
| | | foreach (var data in result.addedDeviceBindResponseData.BindList)
|
| | | {
|
| | | string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint);
|
| | | if (dicDevice.ContainsKey(mainkeys) == true)
|
| | | {
|
| | | listSuccess.Add(dicDevice[mainkeys]);
|
| | | }
|
| | | }
|
| | |
|
| | | if (listSuccess.Count == 0)
|
| | | {
|
| | | //绑定目标设置失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail);
|
| | | this.ShowTipMsg(msg);
|
| | | }
|
| | | return listSuccess;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | ///设备绑定
|
| | | /// </summary>
|
| | | public BindObj.AddedDeviceBindResponseAllData AddDeviceBindAsync(BindObj.AddBindData addBindData)
|
| | | {
|
| | | //如果当前住宅是虚拟住宅
|
| | | if (Common.Config.Instance.Home.IsVirtually == true)
|
| | | {
|
| | | return ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
|
| | | }
|
| | |
|
| | | var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint);
|
| | | //获取发送的命令字符
|
| | | var sendData = this.GetAddDeviceListBindCommandText(addBindData);
|
| | | //发送
|
| | | var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Bind/SetBind", sendData, "Bind/SetBind_Respon", 20);
|
| | | if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
|
| | | {
|
| | | return null;
|
| | | }
|
| | |
|
| | | //修改缓存
|
| | | ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
|
| | |
|
| | | var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData);
|
| | | return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData };
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 获取添加设备绑定的命令字符
|
| | | /// </summary>
|
| | | /// <param name="addBindData"></param>
|
| | | /// <returns></returns>
|
| | | public string GetAddDeviceListBindCommandText(BindObj.AddBindData addBindData)
|
| | | {
|
| | | var jObject = new JObject { { "DeviceAddr", addBindData.DeviceAddr }, { "Epoint", addBindData.Epoint }, { "Cluster_ID", 0 }, { "Command", 5001 } };
|
| | | var bindList = new JArray { };
|
| | | foreach (var bindInfo in addBindData.BindList)
|
| | | {
|
| | | if (bindInfo.BindType == 0)
|
| | | {
|
| | | var dInfo = new JObject{{ "BindMacAddr",bindInfo.BindMacAddr},{ "BindEpoint", bindInfo.BindEpoint} ,
|
| | | { "BindCluster", bindInfo.BindCluster} ,{ "BindType",bindInfo.BindType}};
|
| | | bindList.Add(dInfo);
|
| | | }
|
| | | else if (bindInfo.BindType == 1)
|
| | | {
|
| | | var dInfo = new JObject{{ "BindCluster", bindInfo.BindCluster} ,{ "BindType",bindInfo.BindType},
|
| | | { "BindScenesId", bindInfo.BindScenesId}};
|
| | | bindList.Add(dInfo);
|
| | | }
|
| | | }
|
| | | var data = new JObject { { "BindName", addBindData.BindName }, { "BindList", bindList } };
|
| | | jObject.Add("Data", data);
|
| | | return jObject.ToString();
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 删除设备绑定的目标_________________
|
| | |
|
| | | /// <summary>
|
| | | /// 删除设备绑定的目标
|
| | | /// </summary>
|
| | | /// <param name="mainDevice">设备对象</param>
|
| | | /// <param name="deleteDevice">要删除的绑定目标设备</param>
|
| | | /// <param name="BindCluster">BindCluster</param>
|
| | | /// <returns></returns>
|
| | | public bool DeleteDeviceTarget(CommonDevice mainDevice, CommonDevice deleteDevice, int BindCluster = 6)
|
| | | {
|
| | | //组装数据
|
| | | var deleteData = new IASZone.DelDeviceBindData();
|
| | | deleteData.DeviceAddr = mainDevice.DeviceAddr;
|
| | | deleteData.Epoint = mainDevice.DeviceEpoint;
|
| | |
|
| | | var info = new IASZone.RemoveBindListObj();
|
| | | info.BindCluster = BindCluster;
|
| | | info.BindMacAddr = deleteDevice.DeviceAddr;
|
| | | info.BindEpoint = deleteDevice.DeviceEpoint;
|
| | | info.BindType = 0;
|
| | |
|
| | | deleteData.RemoveBindList.Add(info);
|
| | |
|
| | | //执行删除
|
| | | var result = this.DelDeviceBindAsync(deleteData);
|
| | | if (result == null || result.delDeviceBindResponseData == null)
|
| | | {
|
| | | //删除绑定目标失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | |
|
| | | foreach (var data in result.delDeviceBindResponseData.RemoveBindList)
|
| | | {
|
| | | //0:成功 1:设备不在绑定列表中 ,也可以代表成功
|
| | | if (data.Result == 0 || data.Result == 1 || data.Result == 5)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | //3:失败,在等待节点设备确认是否解除绑定成功
|
| | | else if (data.Result == 3)
|
| | | {
|
| | | //其他绑定目标正在删除中,请稍后再试
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uOtherBindTargetsIsDelettingPleaseWait);
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | //2:未知,由节点设备反馈发送“Bind/BindResult”主题消息确定是否成功
|
| | | else if (data.Result == 2)
|
| | | {
|
| | | if (result.removeBindResultResponseData == null)
|
| | | {
|
| | | //删除绑定目标失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | else
|
| | | {
|
| | | //成功
|
| | | if (result.removeBindResultResponseData.Result == 0)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | //136:控制设备本地绑定列表中无此绑定
|
| | | else if (result.removeBindResultResponseData.Result == 136)
|
| | | {
|
| | | //这个可以当做成功
|
| | | return true;
|
| | | }
|
| | | else
|
| | | {
|
| | | //删除绑定目标失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uDeleteBindTargetsFail);
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 删除设备绑定的目标
|
| | | /// </summary>
|
| | | /// <param name="mainDevice">设备对象</param> |
| | | /// <param name="listDeleteDevice">要删除的绑定目标设备</param> |
| | | /// <param name="BindCluster">BindCluster</param> |
| | |
| | | return reResult; |
| | | } |
| | | //网关ID |
| | | string gatewayID = HdlGatewayLogic.Current.GetGatewayId(device.Gateway); |
| | | string gatewayID = device.Gateway.GwId;
|
| | | //错误主题 |
| | | string errorTopic = gatewayID + "/" + "Error_Respon"; |
| | | //检测对象的主题 |
| | |
| | | |
| | | if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 1).Count) |
| | | { |
| | | //这种情况是按键中不存在绑定目标,没有第二种种情况返回 |
| | | canbreak = true; |
| | | } |
| | | else if (0 < delDeviceBindData.RemoveBindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 3).Count) |