using System; using System.Collections.Generic; using System.Threading.Tasks; using Shared.Common; using Shared.Phone.Device.Category; using Shared.Phone.UserCenter.Device; using ZigBee.Device; using static ZigBee.Device.Panel; namespace Shared.Phone.UserCenter.Bind { public class BindInfo { /// /// 当前按键配置的功能 /// public static int clusterID = 0; /// /// 添加绑定目标 /// /// Key. /// Current cluster identifier. /// Current mode. public static void AddBindTarget(Panel key, int currentClusterID, int currentMode) { var selectDialog = new Dialog() { }; selectDialog.Show(); var itemFL = new FrameLayout() { Y = Application.GetRealHeight(1920 - 600 + 130), Width = Application.GetRealWidth(900), Height = Application.GetRealHeight(550 - 130), Radius = 10, Gravity = Gravity.CenterHorizontal }; selectDialog.AddChidren(itemFL); var selectedDeviceBtn = new Button() { Height = Application.GetRealHeight(130) - 1, TextID = R.MyInternationalizationString.Device, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, BackgroundColor = ZigbeeColor.Current.GXCTextWhiteColor }; itemFL.AddChidren(selectedDeviceBtn); var selectedDeviceLine = new Button() { Y = selectedDeviceBtn.Bottom, Height = 1, BackgroundColor = ZigbeeColor.Current.GXCLineColor, }; itemFL.AddChidren(selectedDeviceLine); var selectedSceneBtn = new Button() { Y = selectedDeviceLine.Bottom, Height = Application.GetRealHeight(130) - 1, TextID = R.MyInternationalizationString.Scence, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, BackgroundColor = ZigbeeColor.Current.GXCTextWhiteColor }; itemFL.AddChidren(selectedSceneBtn); var cancelBtn = new Button() { Y = selectedSceneBtn.Bottom + Application.GetRealHeight(30), Height = Application.GetRealHeight(150), TextID = R.MyInternationalizationString.Cancel, TextColor = ZigbeeColor.Current.GXCTextWhiteColor, BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor, TextAlignment = TextAlignment.Center, }; itemFL.AddChidren(cancelBtn); //添加设备 selectedDeviceBtn.MouseUpEventHandler += (send, ee) => { selectDialog.Close(); var addBindTargetsPage = new Shared.Phone.UserCenter.Bind.AddBindTargetsPage(); Shared.Phone.UserView.HomePage.Instance.AddChidren(addBindTargetsPage); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; addBindTargetsPage.Show(key, currentClusterID, true); }; //添加场景 selectedSceneBtn.MouseUpEventHandler += (send, ee) => { selectDialog.Close(); //被绑定设备的场景图片 bool isExistScene = false; bool isExistDevice = false; foreach (var sc in PanelBindPage.bindList) { if (sc.BindType == 2) { isExistScene = true; } else { isExistDevice = true; } } if (isExistScene) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.ChangeBindDeviceToScene), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(selectedSceneBtn); } else if (isExistDevice) { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.Tip), Language.StringByID(R.MyInternationalizationString.ChangeBindDeviceToScene), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); alert.ResultEventHandler += (sender1, e) => { if (e) { var editScenePage = new Shared.Phone.Device.Category.Category(); Shared.Phone.UserView.HomePage.Instance.AddChidren(editScenePage); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; editScenePage.Show(); } }; } else { var addBindTargetsPage = new Shared.Phone.UserCenter.Bind.AddBindTargetsPage(); Shared.Phone.UserView.HomePage.Instance.AddChidren(addBindTargetsPage); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; addBindTargetsPage.Show(key, currentClusterID, false); } }; cancelBtn.MouseUpEventHandler += (send, ee) => { selectDialog.Close(); }; } /// /// 检测控制面板(按键类)所拥有的功能,现支持的有以下几种(必定存在键值,出错会返回null) /// /// The panel key function level2. /// Key. public static async System .Threading .Tasks .Task> CheckPanelKeyFunctionLevel3 (Panel key) { Dictionary dicCheck = new Dictionary(); dicCheck["场景:触发"] = false; dicCheck["开关:开"] = false; dicCheck["开关:关"] = false; dicCheck["开关:切换"] = false; dicCheck["亮度:调大"] = false; dicCheck["亮度:调小"] = false; dicCheck["亮度:切换"] = false; dicCheck["窗帘:开"] = false; dicCheck["窗帘:关"] = false; dicCheck["窗帘:停"] = false; dicCheck["窗帘:上升停"] = false; dicCheck["窗帘:下降停"] = false; //获取第一级功能 var result =await key. GetPanelDeviceFunctionLevel1(); if(result ==null){ return null; } //面板没有按键类 if(result .Contains (256) == false){ return dicCheck; } //获取第二级功能 result = await key.GetPanelDeviceFunctionLevel2(256); if (result == null) { return null; } //特殊功能 if(result .Contains (1)==true){ //获取第三级功能 var result3 = await key.GetPanelDeviceFunctionLevel3(256,1); if(result3!=null) { if(result3.Contains(1)==true){ dicCheck["场景:触发"] = true; } } } //按键开关类 if(result.Contains(100) == true) { //获取第三级功能 var result3 = await key.GetPanelDeviceFunctionLevel3(256, 100); if (result3 != null) { if (result3.Contains(100) == true) { dicCheck["开关:开"] = true; } if (result3.Contains(101) == true) { dicCheck["开关:关"] = true; } if (result3.Contains(102) == true) { dicCheck["开关:切换"] = true; } } } //按键调光类 if (result.Contains(200) == true) { //获取第三级功能 var result3 = await key.GetPanelDeviceFunctionLevel3(256, 200); if (result3 != null) { if (result3.Contains(200) == true) { dicCheck["亮度:调大"] = true; } if (result3.Contains(201) == true) { dicCheck["亮度:调小"] = true; } if (result3.Contains(202) == true) { dicCheck["亮度:切换"] = true; } } } //窗帘类 if (result.Contains(300) == true) { //获取第三级功能 var result3 = await key.GetPanelDeviceFunctionLevel3(256, 300); if (result3 != null) { if (result3.Contains(300) == true) { dicCheck["窗帘:开"] = true; } if (result3.Contains(301) == true) { dicCheck["窗帘:关"] = true; } if (result3.Contains(302) == true) { dicCheck["窗帘:停"] = true; } if (result3.Contains(303) == true) { dicCheck["窗帘:上升停"] = true; } if (result3.Contains(304) == true) { dicCheck["窗帘:下降停"] = true; } } } return dicCheck; } ///// ///// 列表控件 ///// //private VerticalScrolViewLayout listView = null; ///// ///// 已经存在的绑定设备 ///// //private Dictionary dicEsixtDevice = new Dictionary(); ///// ///// 获取设备的唯一主键 ///// ///// ///// //public string GetDeviceMainKeys(CommonDevice device) //{ // return device.DeviceAddr + device.DeviceEpoint; //} ///// ///// 显示错误信息窗口 ///// ///// //private void ShowErrorMsg(string msg) //{ // Application.RunOnMainThread(() => // { // var contr = new Phone.UserCenter.ErrorMsgControl(msg); // contr.Show(); // }); //} ///// ///// 显示Tip信息窗口 ///// ///// //private void ShowTipMsg(string msg) //{ // Application.RunOnMainThread(() => // { // var contr = new Phone.UserCenter.TipViewControl(msg); // contr.ShowView(); // }); //} ///// ///// 显示一个需要确认的信息框 ///// ///// 信息 ///// 方法名(请确认这是一个共有方法) ///// 回调函数的启动参数 //public void ShowConfirmMsg(string msg, string methodName = null, params object[] obj) //{ // Application.RunOnMainThread(() => // { // var alert = new ConfirmMsgControl(msg); // alert.Show(); // if (methodName != null) // { // alert.ResultEventHandler += (sender, result) => // { // if (result == true) // { // this.LoadFormMethodByName(this, methodName, obj); // } // }; // } // }); //} ///// ///// 执行指定画面的方法 ///// ///// 指定画面的英文名 ///// 指定要加载的方法名 ///// 启动参数 //public object LoadFormMethodByName(BindInfo form, string method, params object[] parameter) //{ // return form.GetType().InvokeMember(method, System.Reflection.BindingFlags.InvokeMethod, null, form, parameter); //} ///// ///// 添加画面,启动参数由指定画面的ShowForm函数所指定 ///// ///// 对象画面 ///// 启动参数:参数由指定画面的ShowForm函数所指定 //public void AddForm(UserCenterCommonForm newform, params object[] parameter) //{ // //检测能否追加画面(防止画面二重添加),当点击过快时,会有几率二重添加 // if (UserCenterLogic.CheckCanAddForm(newform) == false) // { // return; // } // newform.FormID = UserCenterLogic.GetFormName(newform); // UserView.HomePage.Instance.AddChidren(newform); // UserView.HomePage.Instance.PageIndex += 1; // //初始化界面框架 // newform.InitForm(parameter); // //执行ShowForm()方法 // newform.LoadShowFormMethod(parameter); //} ///// ///// 能绑定到按键的设备 ///// ///// ///// //public bool SupportDevice(CommonDevice device,int currentClusterID) //{ // foreach (var data in device.InClusterList) // { // //拥有on/off功能的,才支持测试 // if (data.InCluster == currentClusterID) // { // return true; // } // } // return false; //} ///// ///// 绑定PIR传感器的目标(返回成功设置的设备,错误时,返回null) ///// ///// 传感器 ///// 要绑定的目标设备 ///// //public async Task> BindKeyDeviceTargets(Panel key, List listDevice,int currentClusterID) //{ // if (listDevice.Count == 0) // { // return new List(); // } // var dicDevice = new Dictionary(); // //组装数据 // var addData = new Panel.AddBindData(); // addData.DeviceAddr = key.DeviceAddr; // addData.Epoint = key.DeviceEpoint; // foreach (var device in listDevice) // { // var info = new Panel.AddBindListObj(); // info.BindCluster = currentClusterID; // 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 = await key.AddDeviceBindAsync(addData); // if (result.addedDeviceBindResponseData == null) // { // //如果网关已经掉线 // bool flage = Common.LocalGateway.Current.CheckGatewayOnLineOnTimeout(key.CurrentGateWayId, result.errorMessageBase); // if (flage == false) // { // return null; // } // //绑定目标设置失败 // string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail); // //拼接上【网关回复超时】的Msg // msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg); // this.ShowErrorMsg(msg); // return null; // } // var listSuccess = new List(); // foreach (var data in result.addedDeviceBindResponseData.BindList) // { // string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint); // //0:添加成功 3:已经存在,也可以代表成功 // if (data.Result == 0 || data.Result == 3) // { // if (dicDevice.ContainsKey(mainkeys) == true) // { // listSuccess.Add(dicDevice[mainkeys]); // } // } // //1:失败,节点设备或场景不存在 // else if (data.Result == 1) // { // if (dicDevice.ContainsKey(mainkeys) == true) // { // //设备名称 绑定失败 // string msg = Shared.Common.LocalDevice .Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; // msg += Language.StringByID(R.MyInternationalizationString.BindFailed); // this.ShowTipMsg(msg); // } // } // //2:未知,由节点设备反馈发送“Bind/BindResult”主题消息确定是否成功 // else if (data.Result == 2) // { // if (result.addBindResultResponseData == null) // { // //设备名称 绑定失败 // string msg = Shared.Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; // msg += Language.StringByID(R.MyInternationalizationString.BindFailed); // this.ShowTipMsg(msg); // } // else // { // //添加成功 // if (result.addBindResultResponseData.Result == 0) // { // if (dicDevice.ContainsKey(mainkeys) == true) // { // listSuccess.Add(dicDevice[mainkeys]); // } // } // //设备名称 绑定列表已满 // else if (result.addBindResultResponseData.Result == 140) // { // string msg = Shared.Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; // msg += Language.StringByID(R.MyInternationalizationString.uBindListIsFull); // this.ShowTipMsg(msg); // } // else // { // //设备名称 绑定失败 // string msg = Shared.Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; // msg += Language.StringByID(R.MyInternationalizationString.BindFailed); // this.ShowTipMsg(msg); // } // } // } // } // return listSuccess; //} ///// ///// 显示设备选择的界面 ///// //public void ShowDeviceSelectForm(Panel key, int currentClusterID) //{ // var listShowDevice = new List(); // foreach (var device in PanelBindPage.list) // { // if (SupportDevice(device, currentClusterID) == false) // { // continue; // } // string mainKeys = this.GetDeviceMainKeys(device); // if (this.dicEsixtDevice.ContainsKey(mainKeys) == true) // { // //如果已经添加了,则不再显示 // continue; // } // listShowDevice.Add(device); // } // var listSelect = new List(); // foreach (string mainkeys in this.dicEsixtDevice.Keys) // { // listSelect.Add(mainkeys); // } // var form = new SelectDeviceForm(); // this.AddForm(form, listShowDevice, listSelect, false); // //添加绑定目标 // form.SetTitleText(Language.StringByID(R.MyInternationalizationString.AddBindTargets)); // //设备选择确定 // form.ActionSelectDevice += (async (listDevice) => // { // if (listDevice.Count == 0) // { // return; // } // var listNewDevice = await this.BindKeyDeviceTargets(key, listDevice,currentClusterID); // if (listNewDevice == null || listNewDevice.Count == 0) // { // return; // } // foreach (CommonDevice device in listNewDevice) // { // string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); // this.dicEsixtDevice[mainKeys] = device; // Application.RunOnMainThread(() => // { // this.AddRowlayout(device); // }); // } // }); //} ///// ///// 添加行 ///// ///// //private void AddRowlayout(CommonDevice device) //{ // string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); // this.dicEsixtDevice[mainKeys] = device; // var row = new DeviceRoomViewRow(this.listView, device); // row.ChangedChidrenBindMode(row.btnIcon, ChidrenBindMode.BindEventOnly); // row.ChangedChidrenBindMode(row.btnRoom, ChidrenBindMode.BindEventOnly); // row.ChangedChidrenBindMode(row.btnDevie, ChidrenBindMode.BindEventOnly); // //删除 // var btnDelete = new RowDeleteButton(); // row.AddRightView(btnDelete); // btnDelete.MouseUpEventHandler += (sender, e) => // { // //确认要删除吗? // string msg = Language.StringByID(R.MyInternationalizationString.uShowDoDeleteMsg); // this . ShowConfirmMsg(msg, "DeleteTargetDevice", device, row); // }; //} } }