| | |
| | | /// <summary>
|
| | | /// 新上报的设备
|
| | | /// </summary>
|
| | | private Dictionary<string, List<CommonDevice>> dicNewDevice = new Dictionary<string, List<CommonDevice>>();
|
| | | private List<CommonDevice> listNewDevice = new List<CommonDevice>();
|
| | | /// <summary>
|
| | | /// 显示设备线程是否已经开启
|
| | | /// </summary>
|
| | |
| | | /// </summary>
|
| | | private ZbGateway realGateway = null;
|
| | | /// <summary>
|
| | | /// 进度条
|
| | | /// 进度条控件
|
| | | /// </summary>
|
| | | private FrameLayout btnProgressBar = null;
|
| | | /// <summary>
|
| | | /// 进度值显示文本的整体
|
| | | /// </summary>
|
| | | private FrameLayout frameProgress = null;
|
| | | /// <summary>
|
| | | /// 进度值的显示文本
|
| | | /// </summary>
|
| | | private NormalViewControl btnProgressView = null;
|
| | | private ProgressRowBar btnProgressBar = null;
|
| | | /// <summary>
|
| | | /// 网关是否允许入网的标识
|
| | | /// </summary>
|
| | |
| | | //设置标题信息
|
| | | base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddDevice));
|
| | |
|
| | | this.gatewayId = GatewayResourse.NowSelectGatewayId;
|
| | | this.gatewayId = HdlGatewayResourse.NowSelectGatewayId;
|
| | | HdlGatewayLogic.Current.GetRealGateway(ref this.realGateway, this.gatewayId);
|
| | |
|
| | | //初始化中部控件
|
| | |
| | | bodyFrameLayout.AddChidren(btnSearch);
|
| | |
|
| | | //进度条
|
| | | var btnProRow = new FrameLayout();
|
| | | btnProRow.Gravity = Gravity.CenterHorizontal;
|
| | | btnProRow.Y = Application.GetRealHeight(861);
|
| | | btnProRow.Width = Application.GetRealWidth(559);
|
| | | btnProRow.Height = Application.GetRealHeight(29);
|
| | | btnProRow.BackgroundColor = 0xffe6e6e6;
|
| | | btnProRow.Radius = (uint)Application.GetRealHeight(29) / 2;
|
| | | bodyFrameLayout.AddChidren(btnProRow);
|
| | | this.btnProgressBar = new FrameLayout();
|
| | | btnProgressBar.Width = 0;
|
| | | btnProgressBar.Height = btnProRow.Height;
|
| | | btnProgressBar.BackgroundColor = 0xfffb744a;
|
| | | btnProgressBar.Radius = (uint)Application.GetRealHeight(29) / 2;
|
| | | btnProRow.AddChidren(btnProgressBar);
|
| | |
|
| | | //进度值文本
|
| | | this.frameProgress = new FrameLayout();
|
| | | frameProgress.Width = Application.GetRealWidth(84);
|
| | | frameProgress.Height = Application.GetRealHeight(60);
|
| | | frameProgress.Y = Application.GetRealHeight(772);
|
| | | bodyFrameLayout.AddChidren(frameProgress);
|
| | | frameProgress.X = btnProRow.X + btnProgressBar.Right - frameProgress.Width / 2;
|
| | | var btnProgressPic = new PicViewControl(84, 60);
|
| | | btnProgressPic.UnSelectedImagePath = "Item/ProgressMsg.png";
|
| | | frameProgress.AddChidren(btnProgressPic);
|
| | | this.btnProgressView = new NormalViewControl(84, 32, true);
|
| | | btnProgressView.TextSize = 10;
|
| | | btnProgressView.TextAlignment = TextAlignment.Center;
|
| | | btnProgressView.Text = "0%";
|
| | | frameProgress.AddChidren(btnProgressView);
|
| | | this.btnProgressBar = new ProgressRowBar(559, 29);
|
| | | btnProgressBar.ProgressBarGoback = false;
|
| | | btnProgressBar.Gravity = Gravity.CenterHorizontal;
|
| | | btnProgressBar.Y = Application.GetRealHeight(861);
|
| | | bodyFrameLayout.AddChidren(btnProgressBar);
|
| | | btnProgressBar.StartMode1(true);
|
| | |
|
| | | if (this.realGateway != null)
|
| | | {
|
| | |
| | | //停止接收
|
| | | this.realGateway.GwResDataAction -= this.AdjustGatewayResultData;
|
| | |
|
| | | Application.RunOnMainThread(() =>
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | this.CloseForm();
|
| | | });
|
| | |
| | | return;
|
| | | }
|
| | |
|
| | | lock (this.dicNewDevice)
|
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(resultData);
|
| | | CommonDevice.DeviceInfoData info = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceInfoData>(jobject["Data"].ToString());
|
| | | if (info.DriveCode != 0)
|
| | | {
|
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(resultData);
|
| | | CommonDevice.DeviceInfoData info = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceInfoData>(jobject["Data"].ToString());
|
| | | if (info.DriveCode != 0)
|
| | | {
|
| | | //不需要虚拟设备
|
| | | return;
|
| | | }
|
| | | //根据设备Type创建对应的设备对象
|
| | | var device = Common.LocalDevice.Current.NewDeviceObjectByDeviceId((DeviceType)jobject.Value<int>("Device_ID"));
|
| | | if (device == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | device.DeviceInfo = info;
|
| | |
|
| | | //给新设备设置主键属性
|
| | | Common.LocalDevice.Current.SetNewDeviceMainKeys(device, jobject);
|
| | | device.CurrentGateWayId = HdlGatewayLogic.Current.GetGatewayId(this.realGateway);
|
| | | //将DeviceInfo的属性设置到主属性中
|
| | | Common.LocalDevice.Current.SetDeviceInfoToMain(device, device);
|
| | |
|
| | | //添加设备的缓存
|
| | | device.IsOnline = 1;
|
| | | Common.LocalDevice.Current.AddDeviceToMemory(ref device);
|
| | | |
| | | if (this.dicNewDevice.ContainsKey(device.DeviceAddr) == false)
|
| | | {
|
| | | this.dicNewDevice[device.DeviceAddr] = new List<CommonDevice>();
|
| | | }
|
| | |
|
| | | //刷新超时时间
|
| | | this.waitDeviceTimeOut = 20;
|
| | |
|
| | | //获取设备的固定属性
|
| | | HdlDeviceFixedAttributeLogic.Current.SetAllFixedAttributeToDevice(device);
|
| | |
|
| | | //不需要200端点的那个设备 2020.01.13 变更:ota也加进来
|
| | | this.dicNewDevice[device.DeviceAddr].Add(device);
|
| | |
|
| | | //有新设备,开启显示设备信息界面的线程(里面会等待三秒这样)
|
| | | this.StartShowDeviceAddSuccessFormThread();
|
| | | //不需要虚拟设备
|
| | | return;
|
| | | }
|
| | | //根据设备Type创建对应的设备对象
|
| | | var device = HdlDeviceCommonLogic.Current.NewDeviceObjectByDeviceId((DeviceType)jobject.Value<int>("Device_ID"), jobject.Value<int>("Epoint"));
|
| | | if (device == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | device.DeviceInfo = info;
|
| | |
|
| | | //给新设备设置主键属性
|
| | | HdlDeviceCommonLogic.Current.SetNewDeviceMainKeys(device, jobject);
|
| | | device.CurrentGateWayId = this.realGateway.GwId;
|
| | | //将DeviceInfo的属性设置到主属性中
|
| | | HdlDeviceCommonLogic.Current.SetDeviceInfoToMain(device, device);
|
| | |
|
| | | //添加设备的缓存
|
| | | device.IsOnline = 1;
|
| | | HdlDeviceCommonLogic.Current.AddDeviceToMemory(ref device);
|
| | |
|
| | | //刷新超时时间
|
| | | this.waitDeviceTimeOut = 20;
|
| | |
|
| | | //不需要200端点的那个设备 2020.01.13 变更:ota也加进来
|
| | | this.listNewDevice.Add(device);
|
| | |
|
| | | //有新设备,开启显示设备信息界面的线程(里面会等待三秒这样)
|
| | | this.StartShowDeviceAddSuccessFormThread();
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | this.realGateway.GwResDataAction -= this.AdjustGatewayResultData;
|
| | | System.Threading.Thread.Sleep(200);
|
| | |
|
| | | //目前就弄一个
|
| | | Application.RunOnMainThread(() =>
|
| | | var listDevice = new List<CommonDevice>();
|
| | | for (int i = 0; i < this.listNewDevice.Count; i++)
|
| | | {
|
| | | foreach (var listDevice in this.dicNewDevice.Values)
|
| | | var device = this.listNewDevice[i];
|
| | | if (device.DeviceAddr != this.listNewDevice[0].DeviceAddr)
|
| | | {
|
| | | //重新变更UI
|
| | | foreach (var device in listDevice)
|
| | | {
|
| | | if (device is OTADevice)
|
| | | {
|
| | | continue;
|
| | | }
|
| | | device.IconPath = string.Empty;
|
| | | device.ReSave();
|
| | | }
|
| | | //显示设备信息画面
|
| | | this.ShowDeviceAddSuccessForm(listDevice);
|
| | | break;
|
| | | continue;
|
| | | }
|
| | | listDevice.Add(device);
|
| | | //重新变更UI
|
| | | if (device is OTADevice)
|
| | | {
|
| | | continue;
|
| | | }
|
| | | device.IconPath = string.Empty;
|
| | | device.ReSave();
|
| | |
|
| | | //设置设备功能类型 (不能在接收回路的地方写入,不然网关可能会超负荷)
|
| | | HdlDeviceCommonLogic.Current.RefreshDeviceFunctionType(device, device, true);
|
| | | System.Threading.Thread.Sleep(200);
|
| | | //获取设备的固定属性
|
| | | if (HdlDeviceAttributeLogic.Current.ReadDeviceAllFixedAttribute(device) == true)
|
| | | {
|
| | | System.Threading.Thread.Sleep(200);
|
| | | }
|
| | | }
|
| | |
|
| | | //读取设备的其他信息
|
| | | this.ReadDeviceOtherInfo(listDevice);
|
| | |
|
| | | //目前就弄一个
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | //显示设备信息画面
|
| | | this.ShowDeviceAddSuccessForm(listDevice);
|
| | | });
|
| | | });
|
| | | }
|
| | |
| | | if (this.targetFormId != string.Empty)
|
| | | {
|
| | | //再关闭设备入网指导界面
|
| | | this.CloseFormByFormName(this.targetFormId);
|
| | | HdlFormLogic.Current.CloseFormByFormName(this.targetFormId);
|
| | | }
|
| | |
|
| | | //添加设备
|
| | |
| | | timeCount = 0;
|
| | | }
|
| | | }
|
| | | Application.RunOnMainThread(() =>
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | if (btnRound != null)
|
| | | {
|
| | |
| | | return 0;
|
| | | }
|
| | | //网关告知客户端有设备声明
|
| | | this.SetDeviceProgressValue(1);
|
| | | this.btnProgressBar.SetValue(1, 6);
|
| | | return 2;
|
| | | }
|
| | | else if (topic == gatewayId + "/Device/DeviceGetActiveEP_Respon")
|
| | |
| | | return 2;
|
| | | }
|
| | | //设置进度值
|
| | | this.SetDeviceProgressValue(2);
|
| | | this.btnProgressBar.SetValue(2, 6);
|
| | | return 2;
|
| | | }
|
| | | else if (topic == gatewayId + "/Device/DeviceGetActiveEPSimpleDesc_Respon")
|
| | |
| | | return 2;
|
| | | }
|
| | | //设置进度值
|
| | | this.SetDeviceProgressValue(3);
|
| | | this.btnProgressBar.SetValue(3, 6);
|
| | | return 2;
|
| | | }
|
| | | else if (topic == gatewayId + "/Device/DeviceGetDefaultBind_Respon")
|
| | |
| | | return 2;
|
| | | }
|
| | | //设置进度值
|
| | | this.SetDeviceProgressValue(4);
|
| | | this.btnProgressBar.SetValue(4, 6);
|
| | | return 2;
|
| | | }
|
| | | else if (topic == gatewayId + "/Device/DeviceAutoBindZBCoord_Respon")
|
| | |
| | | return 2;
|
| | | }
|
| | | //设置进度值
|
| | | this.SetDeviceProgressValue(5);
|
| | | this.btnProgressBar.SetValue(5, 6);
|
| | | return 2;
|
| | | }
|
| | | else if (topic == gatewayId + "/DeviceInComingRespon")
|
| | | {
|
| | | this.topTimeOut = topMaxTime;
|
| | |
|
| | | //设备入网时,有时候网关会上报虚拟设备
|
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(resultData);
|
| | | CommonDevice.DeviceInfoData info = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceInfoData>(jobject["Data"].ToString());
|
| | | if (info.DriveCode != 0)
|
| | | {
|
| | | //不需要虚拟设备
|
| | | return 0;
|
| | | }
|
| | | //网关最终上报节点设备信息
|
| | | this.SetDeviceProgressValue(6);
|
| | | this.btnProgressBar.SetValue(6, 6);
|
| | | return 1;
|
| | | }
|
| | | return 0;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 设置设备的进度值
|
| | | /// </summary>
|
| | | /// <param name="value"></param>
|
| | | private void SetDeviceProgressValue(decimal value)
|
| | | {
|
| | | Application.RunOnMainThread(() =>
|
| | | {
|
| | | //进度条
|
| | | decimal result = value / 6;
|
| | | int width = (int)(result * Application.GetRealWidth(559));
|
| | | if (btnProgressBar.Width >= width)
|
| | | {
|
| | | //有些设备会上报两次,这里不能让它的进度条往回走
|
| | | return;
|
| | | }
|
| | | btnProgressBar.Width = width;
|
| | |
|
| | | //文本显示
|
| | | btnProgressView.Text = ((int)(result * 100)) + "%";
|
| | | //文本显示的那个图片框移动
|
| | | frameProgress.X = Application.GetRealWidth(262) + btnProgressBar.Right - frameProgress.Width / 2;
|
| | | });
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | {
|
| | | //响应超时,请重新入网
|
| | | this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndReAccessNetwork));
|
| | | Application.RunOnMainThread(() =>
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | //关闭界面
|
| | | this.CloseForm();
|
| | |
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 读取设备的其他信息
|
| | | /// </summary>
|
| | | /// <param name="listDevice"></param>
|
| | | private void ReadDeviceOtherInfo(List<CommonDevice> listDevice)
|
| | | {
|
| | | var myTypeInfo = HdlDeviceCommonLogic.Current.GetMyDeviceEnumInfo(listDevice);
|
| | | if (myTypeInfo.BeloneType == DeviceBeloneType.A窗帘 && listDevice[0] is Rollershade)
|
| | | {
|
| | | HdlThreadLogic.Current.RunThread(async () =>
|
| | | {
|
| | | for (int i = 1; i <= 3; i++)
|
| | | {
|
| | | //重置窗帘
|
| | | var result = await HdlDeviceCurtainLogic.Current.RestoreCurtain((Rollershade)listDevice[0], i != 3 ? ShowErrorMode.NO : ShowErrorMode.YES);
|
| | | if (result == true)
|
| | | {
|
| | | return;
|
| | | }
|
| | | await System.Threading.Tasks.Task.Delay(1000);
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 结构体_____________________________
|
| | |
|
| | | /// <summary>
|