| | |
| | | |
| | | namespace Shared.SimpleControl.Phone |
| | | { |
| | | public class AlexaDeviceListPage : FrameLayout |
| | | public class AlexaDeviceListPage : BasePage |
| | | { |
| | | public AlexaDeviceListPage () |
| | | ///// <summary> |
| | | ///// 暂时测试后面去掉 |
| | | ///// </summary> |
| | | //string AlexaTestURL = "https://developer.hdlcontrol.com"; |
| | | |
| | | /// <summary> |
| | | /// 当前音箱、用户、住宅等数据 |
| | | /// </summary> |
| | | SpeakerInfo mAlexa = new SpeakerInfo (); |
| | | /// <summary> |
| | | /// 设备、场景列表 |
| | | /// </summary> |
| | | List<TargetInfo> targetInfoList = new List<TargetInfo> (); |
| | | |
| | | /////// <summary> |
| | | /////// 语音房间数据 |
| | | /////// </summary> |
| | | ////List<AlexaRoomsItem> alexaRoomsList = new List<AlexaRoomsItem> (); |
| | | ///// <summary> |
| | | ///// 设备列表 |
| | | ///// </summary> |
| | | //List<AlexaDeviceListItem> alexaDeviceList = new List<AlexaDeviceListItem> (); |
| | | ///// <summary> |
| | | ///// 场景列表 |
| | | ///// </summary> |
| | | //List<SceneListItem> alexaSceneList = new List<SceneListItem> (); |
| | | //AlexaRoomsItem mAlexaRoomsItem = new AlexaRoomsItem (); |
| | | |
| | | VerticalScrolViewLayout bodyView; |
| | | |
| | | bool IsDeviceList = true; |
| | | |
| | | public AlexaDeviceListPage (SpeakerInfo speakerInfo) |
| | | { |
| | | BackgroundColor = SkinStyle.Current.MainColor; |
| | | mAlexa = speakerInfo; |
| | | } |
| | | |
| | | public void ShowPage () |
| | | /// <summary> |
| | | /// 显示页面 |
| | | /// </summary> |
| | | public override void ShowPage () |
| | | { |
| | | #region 标题 |
| | | var topView = new FrameLayout () { |
| | | Y = Application.GetRealHeight (36), |
| | | Height = Application.GetRealHeight (90), |
| | | #region ---TopView--- |
| | | base.ShowPage (); |
| | | this.topTitleBtn.Text = "Alexa"; |
| | | //添加按钮点击事件 |
| | | EventHandler<MouseEventArgs> addSubaccountHandler = (sender, e) => { |
| | | OpenAlexaSettingPage (); |
| | | }; |
| | | AddChidren (topView); |
| | | this.topItemButton.MouseUpEventHandler += addSubaccountHandler; |
| | | #endregion |
| | | |
| | | var title = new Button () { |
| | | TextAlignment = TextAlignment.Center, |
| | | Text = "Alexa", |
| | | TextSize = 19, |
| | | #region 设备-场景 |
| | | var topView = new FrameLayout () { |
| | | Height = Application.GetRealHeight (110), |
| | | BackgroundColor = SkinStyle.Current.TitileView, |
| | | }; |
| | | BaseContentView.AddChidren (topView); |
| | | |
| | | var btnDevice = new Button () { |
| | | Width = Application.GetRealWidth (320), |
| | | TextSize = 16, |
| | | TextID = R.MyInternationalizationString.Device, |
| | | TextColor = SkinStyle.Current.SelectedColor |
| | | }; |
| | | topView.AddChidren (btnDevice); |
| | | var btnScene = new Button () { |
| | | Width = Application.GetRealWidth (320), |
| | | X = btnDevice.Right, |
| | | TextSize = 16, |
| | | TextID = R.MyInternationalizationString.Scenes, |
| | | TextColor = SkinStyle.Current.TextColor1 |
| | | }; |
| | | topView.AddChidren (title); |
| | | |
| | | Button ItemButton = new Button () { |
| | | Width = Application.GetRealWidth (55), |
| | | Height = Application.GetRealHeight (55), |
| | | UnSelectedImagePath = "Item/+.png", |
| | | SelectedImagePath = "Item/+.png", |
| | | X = Application.GetRealWidth (640 - 80), |
| | | Y = Application.GetRealHeight (17), |
| | | var btnLine = new Button () { |
| | | Width = 1, |
| | | BackgroundColor = SkinStyle.Current.White20Transparent, |
| | | X = btnDevice.Right, |
| | | }; |
| | | topView.AddChidren (ItemButton); |
| | | topView.AddChidren (btnLine); |
| | | btnDevice.MouseUpEventHandler += (sender, e) => { |
| | | btnDevice.TextColor = SkinStyle.Current.SelectedColor; |
| | | btnScene.TextColor = SkinStyle.Current.TextColor1; |
| | | if (!IsDeviceList) { |
| | | IsDeviceList = true; |
| | | InitDevcieRow (bodyView); |
| | | } |
| | | |
| | | var back = new Button () { |
| | | Height = Application.GetRealHeight (90), |
| | | Width = Application.GetRealWidth (85), |
| | | UnSelectedImagePath = "Item/Back.png", |
| | | SelectedImagePath = "Item/BackSelected.png", |
| | | |
| | | }; |
| | | topView.AddChidren (back); |
| | | back.MouseUpEventHandler += (sender, e) => { |
| | | (Parent as PageLayout).PageIndex -= 1; |
| | | topView.AddChidren (btnScene); |
| | | btnScene.MouseUpEventHandler += (sender, e) => { |
| | | btnDevice.TextColor = SkinStyle.Current.TextColor1; |
| | | btnScene.TextColor = SkinStyle.Current.SelectedColor; |
| | | |
| | | if (IsDeviceList) { |
| | | IsDeviceList = false; |
| | | InitSceneRow (bodyView); |
| | | } |
| | | }; |
| | | #endregion |
| | | |
| | | var bodyView = new VerticalScrolViewLayout () { |
| | | bodyView = new VerticalScrolViewLayout () { |
| | | Y = topView.Bottom, |
| | | Height = Application.GetRealHeight (1136 - 126), |
| | | Height = BaseContentView.Height - topView.Bottom, |
| | | BackgroundColor = SkinStyle.Current.ViewColor, |
| | | }; |
| | | AddChidren (bodyView); |
| | | var alexaDeviceLista = new List<UpdateDeviceObj> (); |
| | | var alexaSceneList = new List<SceneByRegion> (); |
| | | BaseContentView.AddChidren (bodyView); |
| | | |
| | | System.Threading.Tasks.Task.Factory.StartNew (() => { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start ("Please wait..."); |
| | | }); |
| | | ///请求获取设备和场景列表 |
| | | GetDeviceAndSceneList (); |
| | | } |
| | | |
| | | #region 接口请求方法 |
| | | /// <summary> |
| | | /// 请求获取设备和场景列表 |
| | | /// </summary> |
| | | void GetDeviceAndSceneList () |
| | | { |
| | | |
| | | System.Threading.Tasks.Task.Run (() => { |
| | | try { |
| | | alexaDeviceLista = ReadDeviceList (); |
| | | alexaSceneList = ReadSceneList (); |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start (Language.StringByID (R.MyInternationalizationString.load)); |
| | | }); |
| | | |
| | | if (alexaDeviceLista.Count > 0) { |
| | | var revertObj = HttpServerRequest.Current.GetSpeakerDeviceList (0, mAlexa.tokenId); |
| | | |
| | | if (revertObj.Code == StateCode.SUCCESS) { |
| | | var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<TargetInfo>> (revertObj.Data.ToString ()); |
| | | Application.RunOnMainThread (() => { |
| | | InitDevcieRow (alexaDeviceLista, bodyView); |
| | | if (list != null && list.Count > 0) { |
| | | targetInfoList = list; |
| | | } else { |
| | | targetInfoList = new List<TargetInfo> (); |
| | | } |
| | | RefreshListView (); |
| | | }); |
| | | } |
| | | if (alexaSceneList.Count > 0) { |
| | | Application.RunOnMainThread (() => { |
| | | InitSceneRow (alexaSceneList, bodyView); |
| | | }); |
| | | } |
| | | } catch (Exception ex) { |
| | | Utlis.WriteLine (ex.Message); |
| | | } else { |
| | | //提示错误 |
| | | IMessageCommon.Current.ShowErrorInfoAlter (revertObj.Code); |
| | | } |
| | | } catch { |
| | | |
| | | } finally { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | ItemButton.MouseUpEventHandler += (sender, e) => { |
| | | Action action = () => { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start ("Please wait..."); |
| | | }); |
| | | System.Threading.Tasks.Task.Run (() => { |
| | | try { |
| | | alexaDeviceLista = ReadDeviceList (); |
| | | alexaSceneList = ReadSceneList (); |
| | | Application.RunOnMainThread (() => { |
| | | InitDevcieRow (alexaDeviceLista, bodyView); |
| | | }); |
| | | } catch (Exception ex) { |
| | | Utlis.WriteLine (ex.Message); |
| | | } finally { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | Action<List<string>, List<string>> saveAction = (roomSceneFilePathList, roomDeviceFilePathList) => { |
| | | System.Threading.Tasks.Task.Factory.StartNew (() => { |
| | | try { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start ("Please wait..."); |
| | | }); |
| | | foreach (var newDevicePath in roomDeviceFilePathList) { |
| | | var common = Newtonsoft.Json.JsonConvert.DeserializeObject<Common> (CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (newDevicePath))); |
| | | //newDeviceList.Add (new UpdateDeviceObj () { |
| | | // DeviceName = common.Name, DeviceID = common.DeviceID, Id = 1, DeviceType = common.Type.ToString (), LoopID = common.LoopID, |
| | | // MAC = UserConfig.Instance.GatewayMAC, RegionID = UserConfig.Instance.CurrentRegion.RegionID, SubnetID = common.SubnetID |
| | | //}); |
| | | |
| | | |
| | | if (common != null) { |
| | | var commonType = common.Type.ToString (); |
| | | if (commonType == "CurtainModel") { |
| | | commonType = "CurtainModule"; |
| | | } else if (commonType == "LightEnergySwitch" || commonType == "LightSwitchSocket" || commonType == "LightEnergySocket") { |
| | | commonType = "LightSwitch"; |
| | | } else if (commonType == "ACInfrared") { |
| | | commonType = "HVAC"; |
| | | } |
| | | var oldDevice = alexaDeviceLista.Find ((obj) => obj.SubnetID == common.SubnetID && obj.DeviceID == common.DeviceID && obj.LoopID == common.LoopID && obj.DeviceType == commonType); |
| | | if (oldDevice == null) { |
| | | var isSuccess = AddDevice (common); |
| | | if (!isSuccess) { |
| | | //跳出循环 |
| | | break; |
| | | } |
| | | } else { |
| | | //2020-07-21 如果已经存在 匹配设备备注是否需要更新 |
| | | if (oldDevice.DeviceName != common.Name) { |
| | | //Utlis.WriteLine ("名字不匹配,提交更新:" + common.Name); |
| | | var oldName = oldDevice.DeviceName; |
| | | oldDevice.DeviceName = common.Name; |
| | | var isSuccess = UpdateDevice (oldDevice); |
| | | if (!isSuccess) { |
| | | //还原 |
| | | oldDevice.DeviceName = oldName; |
| | | //Utlis.WriteLine ("更新失败!!!!"); |
| | | } else { |
| | | //Utlis.WriteLine ("更新成功!"); |
| | | } |
| | | } else { |
| | | //Utlis.WriteLine ("名字一样不用更新:"+ common.Name); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | var roomDeviceFilePathListNew = new List<string> (); |
| | | foreach (var path in roomDeviceFilePathList) { |
| | | var deviceFilePath = path; |
| | | if (deviceFilePath.Contains ("LightEnergySocket")) { |
| | | deviceFilePath = deviceFilePath.Replace ("LightEnergySocket", "LightSwitch"); |
| | | } else if (deviceFilePath.Contains ("LightEnergySwitch")) { |
| | | deviceFilePath = deviceFilePath.Replace ("LightEnergySwitch", "LightSwitch"); |
| | | } else if (deviceFilePath.Contains ("LightSwitchSocket")) { |
| | | deviceFilePath = deviceFilePath.Replace ("LightSwitchSocket", "LightSwitch"); |
| | | } else if (deviceFilePath.Contains ("ACInfrared")) { |
| | | deviceFilePath = deviceFilePath.Replace ("ACInfrared", "HVAC"); |
| | | } else if (deviceFilePath.Contains ("CurtainModel")) { |
| | | deviceFilePath = deviceFilePath.Replace ("CurtainModel", "CurtainModule"); |
| | | } |
| | | roomDeviceFilePathListNew.Add (deviceFilePath); |
| | | } |
| | | |
| | | foreach (var oldDevice in alexaDeviceLista) { |
| | | var oldDevicePath = "Equipment_" + oldDevice.DeviceType + "_" + oldDevice.SubnetID + "_" + oldDevice.DeviceID + "_" + (oldDevice.LoopID.ToString ().Length < 2 ? "0" + oldDevice.LoopID.ToString () : oldDevice.LoopID.ToString ()); |
| | | if (!roomDeviceFilePathListNew.Contains (oldDevicePath)) { |
| | | DelDevice (oldDevice.Id); |
| | | Utlis.WriteLine ("delDevice " + oldDevice.DeviceName); |
| | | } |
| | | } |
| | | |
| | | foreach (var newScenePath in roomSceneFilePathList) { |
| | | var tempScene = Scene.GetSceneByFilePath (newScenePath); |
| | | if (tempScene != null) { |
| | | var oldScene = alexaSceneList.Find ((obj) => obj.SceneName == tempScene.Name); |
| | | if (oldScene == null) { |
| | | int sceneDeviceCount = tempScene.DeviceFilePathList.Count; |
| | | var uploadScene = new SceneAndDeviceList () { MAC = UserConfig.Instance.GatewayMAC, RegionID = UserConfig.Instance.CurrentRegion.Id, SceneName = tempScene.Name }; |
| | | |
| | | byte [] replyBytes = null; |
| | | if (!tempScene.busScene) { |
| | | foreach (var deviceFilePath in tempScene.DeviceFilePathList) { |
| | | var common = Newtonsoft.Json.JsonConvert.DeserializeObject<Common> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (common.Type == DeviceType.FanModule) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<FanModule> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "FanModule", LoopId = device.LoopID, |
| | | DataString = device.WindSpeed.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.LightDimming) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LightDimming> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "LightDimming", LoopId = device.LoopID, |
| | | DataString = device.CurrentBrightness.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.LightDALI) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LightDALI> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "LightDimming", LoopId = device.LoopID, |
| | | DataString = device.CurrentBrightness.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.LightRGB) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LightLogic> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetLogicLoopColor, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "LightRGB", LoopId = device.LoopID, |
| | | DataString = device.CurrentBrightness + "," + device.RStatus + "," + device.GStatus + "," + device.BStatus |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.LightSwitch || common.Type == DeviceType.LightSwitchSocket) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LightSwitch> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "LightSwitch", LoopId = device.LoopID, |
| | | DataString = device.CurrentBrightness.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.LightEnergySocket) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LightSwitch> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "LightSwitch", LoopId = device.LoopID, |
| | | DataString = device.CurrentBrightness.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.LightEnergySwitch) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LightSwitch> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "LightSwitch", LoopId = device.LoopID, |
| | | DataString = device.CurrentBrightness.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.CurtainModel) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<CurtainModel> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.UpdataCurtainModelStutas, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "CurtainModule", LoopId = device.LoopID, |
| | | DataString = ((byte)device.Status).ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.CurtainRoller) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<CurtainRoller> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.UpdataCurtainModelStutas, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "CurtainRoller", LoopId = device.LoopID, |
| | | DataString = ((byte)device.CurtainProress + 3).ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.CurtainTrietex) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<CurtainTrietex> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.UpdataCurtainModelStutas, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "CurtainRoller", LoopId = device.LoopID, |
| | | DataString = ((byte)device.CurtainProress + 3).ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.HVAC || common.Type == DeviceType.ACInfrared) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<HVAC> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetACMode, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "HVAC", LoopId = device.LoopID, |
| | | DataString = device.Power + "," + device.TemperatureMode + "," + device.SetMode + "," + device.SetFanSpeed + "," + device.SetTemperature |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.FoolHeat) { |
| | | //var device = Newtonsoft.Json.JsonConvert.DeserializeObject<FoolHeat> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | //if (device == null) { |
| | | // continue; |
| | | //} |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetFoolHeat, device.SubnetID, device.DeviceID, |
| | | //new byte [] { device.LoopID, (byte)(device.Status + device.WorkingMode * 16), 0,device.WorkingMode,device.NormalTemperature, device.DayTemperature, |
| | | //device.NightTemperature, device.AwayTemperature , 0, 0 }); |
| | | |
| | | } else if (common.Type == DeviceType.FanModule) { |
| | | //var device = Newtonsoft.Json.JsonConvert.DeserializeObject<FanModule> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | //if (device == null) { |
| | | // continue; |
| | | //} |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { 1, (byte)device.WindSpeed }); |
| | | } else if (common.Type == DeviceType.LogicModule) { |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicModule> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetScene, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "SceneControl", LoopId = device.AreaID, |
| | | DataString = device.AreaSceneID.ToString () |
| | | }); |
| | | } |
| | | } else if (common.Type == DeviceType.UniversalDevice) {//2020-09-02 新增通用开关 |
| | | var device = Newtonsoft.Json.JsonConvert.DeserializeObject<UniversalDevice> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); |
| | | if (device != null) { |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetCommonSwitch, SubnetId = device.SubnetID, DeviceId = device.DeviceID, |
| | | DeviceName = device.Name, DeviceType = "UniversalDevice", LoopId = device.LoopID, |
| | | DataString = device.SendBytes[1].ToString(), |
| | | }); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } else { |
| | | foreach (var common in tempScene.GlobalSceneDeviceList) { |
| | | switch (common.obj1) { |
| | | case 0://0 无效 Invalid |
| | | break; |
| | | case 85://0x55 场景 Scene ||0x0002 |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetScene, SubnetId = common.SubnetID, DeviceId = common.DeviceID, |
| | | DeviceName = common.Name, DeviceType = "SceneControl", LoopId = common.obj2, |
| | | DataString = common.obj3.ToString () |
| | | }); |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetScene, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 86://0x56 序列 Sequence ||0x001A |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetSeries, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 88://0x58 通用开关 Universal Switch ||0xe01c |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetCommonSwitch, SubnetId = common.SubnetID, DeviceId = common.DeviceID, |
| | | DeviceName = common.Name, DeviceType = "UVSwitch", LoopId = common.obj2, |
| | | DataString = common.obj3.ToString () |
| | | }); |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetCommonSwitch, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 89: //0x59 单路调节 Single Channel Lighting Control 0031 |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = common.SubnetID, DeviceId = common.DeviceID, |
| | | DeviceName = common.Name, DeviceType = "LightDimming", LoopId = common.obj2, |
| | | DataString = common.obj3.ToString () |
| | | }); |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 92://0x5c 窗帘开关 Curtain Switch e3e0 |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.UpdataCurtainModelStutas, SubnetId = common.SubnetID, DeviceId = common.DeviceID, |
| | | DeviceName = common.Name, DeviceType = "CurtainModel", LoopId = common.obj2, |
| | | DataString = common.obj3.ToString () |
| | | }); |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 94://0x5e GPRS控制 GPRS Control E3D4 |
| | | replyBytes = Control.ControlBytesSendHasReturn (Command.GPRSControl, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 95://0x5f 面板控制 Panel Control e3d8 |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.InstructionPanelKey, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 100://0x64 广播场景 Broadcast Scene ||0x0002 |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetScene, SubnetId = common.SubnetID, DeviceId = common.DeviceID, |
| | | DeviceName = common.Name, DeviceType = "SceneControl", LoopId = common.obj2, |
| | | DataString = common.obj3.ToString () |
| | | }); |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetScene, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | case 101://0x65 广播回路 Broadcast Channel 0031 |
| | | uploadScene.DeviceListObject.Add (new AddCloudSceneDeviceData () { |
| | | Command = (int)Command.SetSingleLight, SubnetId = common.SubnetID, DeviceId = common.DeviceID, |
| | | DeviceName = common.Name, DeviceType = "LightDimming", LoopId = common.obj2, |
| | | DataString = common.obj3.ToString () |
| | | }); |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | break; |
| | | //case 102://0x66 消防模块 Security Module 011E |
| | | // replyBytes = Control.ControlBytesSendHasReturn (Command.SecurityModule, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | // break; |
| | | //case 103://0x67 音乐播放 Music Control 0218 |
| | | //replyBytes = Control.ControlBytesSendHasReturn (Command.MusicControl, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | //break; |
| | | //104 通用控制 Universal Control |
| | | //105 连接页 Link Page |
| | | //107 RGB调节 RGB Control |
| | | //108 红外控制 Infrared Control |
| | | //case 109://109 逻辑灯调节 Logic Light Adjust || 0xE45E |
| | | // replyBytes = Control.ControlBytesSendHasReturn (Command.LogicLightAdjust, common.SubnetID, common.DeviceID, new byte [] { common.obj2, common.obj3, common.obj4, common.obj5 }); |
| | | // break; |
| | | //} |
| | | //110 逻辑场景 Logic Scene |
| | | //112 LCD & LED休眠 LCD & LED Sleep |
| | | //113 服务器控制 Server control |
| | | } |
| | | } |
| | | } |
| | | |
| | | var isSuccess = AddScene (uploadScene); |
| | | if (!isSuccess) { |
| | | //跳出循环 |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | alexaDeviceLista = ReadDeviceList (); |
| | | Application.RunOnMainThread (() => { |
| | | InitDevcieRow (alexaDeviceLista, bodyView); |
| | | }); |
| | | alexaSceneList = ReadSceneList (); |
| | | Application.RunOnMainThread (() => { |
| | | InitSceneRow (alexaSceneList, bodyView); |
| | | }); |
| | | |
| | | } catch (Exception ex) { |
| | | Utlis.WriteLine (ex.Message); |
| | | } finally { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | System.Threading.Tasks.Task.Factory.StartNew (() => { |
| | | try { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start ("Please wait..."); |
| | | }); |
| | | var tempRoom = new Room (); |
| | | foreach (var device in alexaDeviceLista) {//特殊处理服务器与本地设备类型不一样的设备 |
| | | var deviceTypeSaveString = device.DeviceType; |
| | | if (deviceTypeSaveString == "CurtainModel") { |
| | | deviceTypeSaveString = "CurtainModule"; |
| | | } else if (deviceTypeSaveString == "LightEnergySwitch") { |
| | | deviceTypeSaveString = "LightSwitch"; |
| | | } else if (deviceTypeSaveString == "LightEnergySocket") { |
| | | deviceTypeSaveString = "LightSwitch"; |
| | | } else if (deviceTypeSaveString == "LightSwitchSocket") { |
| | | deviceTypeSaveString = "LightSwitch"; |
| | | } else if (deviceTypeSaveString == "LightLogic") { |
| | | deviceTypeSaveString = "LightRGB"; |
| | | }else if (deviceTypeSaveString == "ACInfrared") { |
| | | deviceTypeSaveString = "HVAC"; |
| | | } |
| | | |
| | | var devicePath = "Equipment_" + deviceTypeSaveString + "_" + device.SubnetID + "_" + device.DeviceID + "_" + (device.LoopID.ToString ().Length < 2 ? "0" + device.LoopID.ToString () : device.LoopID.ToString ()); |
| | | tempRoom.DeviceFilePathList.Add (devicePath); |
| | | } |
| | | foreach (var scene in alexaSceneList) { |
| | | tempRoom.SceneFilePathList.Add (scene.SceneName); |
| | | } |
| | | Application.RunOnMainThread (() => { |
| | | var userDeviceListPage = new AlexaSettingPage (tempRoom); |
| | | userDeviceListPage.Show (); |
| | | userDeviceListPage.ShowPage (action, saveAction); |
| | | }); |
| | | } catch (Exception ex) { |
| | | Utlis.WriteLine (ex.Message); |
| | | } finally { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | }; |
| | | } |
| | | |
| | | #region 关于设备的方法 |
| | | /// <summary> |
| | | /// 读取Alexa设备列表 |
| | | /// </summary> |
| | | public List<UpdateDeviceObj> ReadDeviceList () |
| | | { |
| | | var deviceList = new List<UpdateDeviceObj> (); |
| | | var requestObj = new GetDeviceListObj () { RegionID = UserConfig.Instance.CurrentRegion.Id }; |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj); |
| | | var revertObj = MainPage.RequestHttps (API.GetDeviceList, requestJson); |
| | | if (revertObj.StateCode.ToUpper () == StateCode.SUCCESS) { |
| | | deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UpdateDeviceObj>> (revertObj.ResponseData.ToString ()); |
| | | } else { |
| | | //2020-06-29 弹窗提示错误 |
| | | ShowErrorInfo (revertObj.StateCode); |
| | | |
| | | } |
| | | return deviceList; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 添加设备 |
| | | /// 添加或者更新设备和场景设备列表 |
| | | /// </summary> |
| | | public bool AddDevice (Common device) |
| | | bool UpdateSpeakerDeviceList (List<TargetInfo> mList) |
| | | { |
| | | var uploadDevice = new AlexaDeviceObj () { |
| | | RegionID = UserConfig.Instance.CurrentRegion.Id, MAC = UserConfig.Instance.GatewayMAC.Replace (".", ""), |
| | | DeviceName = device.Name, DeviceID = device.DeviceID, SubnetID = device.SubnetID, LoopID = device.LoopID, DeviceType = device.Type.ToString () |
| | | var updateSpeakerDeviceListObj = new UpdateSpeakerDeviceListObj () { |
| | | homeId = mAlexa.homeId, |
| | | tokenId = mAlexa.tokenId, |
| | | targetInfos = mList |
| | | }; |
| | | if (device.Type.ToString () == "CurtainModel") { |
| | | uploadDevice.DeviceType = "CurtainModule"; |
| | | } else if (device.Type.ToString () == "LightEnergySwitch" || device.Type.ToString () == "LightSwitchSocket" || device.Type.ToString () =="LightEnergySocket") { |
| | | uploadDevice.DeviceType = "LightSwitch"; |
| | | } else if (device.Type.ToString () == "ACInfrared") { |
| | | uploadDevice.DeviceType = "HVAC"; |
| | | } |
| | | //var requestObj = new UploadDevicesObj () { Device = uploadDevice }; |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (uploadDevice); |
| | | var revertObj = MainPage.RequestHttps (API.UploadDevices, requestJson); |
| | | if (revertObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | return true; |
| | | }else if (revertObj.StateCode == "Exist") { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.AddTip (ErrorCode.AddFailed + " " + ErrorCode.NameExist + " ( " + device.Name + " )"); |
| | | }); |
| | | var revertObj = HttpServerRequest.Current.UpdateSpeakerDeviceList (updateSpeakerDeviceListObj); |
| | | if (revertObj.Code == StateCode.SUCCESS) { |
| | | return true; |
| | | } else { |
| | | //2020-06-29 弹出提示错误 |
| | | ShowUploadDevicesInfo (revertObj.StateCode); |
| | | //登录失败 |
| | | IMessageCommon.Current.ShowErrorInfoAlter (revertObj.Code); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 上传设备 错误提示 |
| | | /// </summary> |
| | | /// <param name="stateCodeStr"></param> |
| | | void ShowUploadDevicesInfo (string stateCodeStr,bool bUpload = true) |
| | | { |
| | | string mes = ""; |
| | | if (stateCodeStr == "NoRecord") { |
| | | //住宅未绑定网关! |
| | | mes = ErrorCode.HomeNoRecord; |
| | | } else if (stateCodeStr == "NoExist") { |
| | | //住宅不存在! |
| | | mes = ErrorCode.HomeNoExist; |
| | | } else if (stateCodeStr == "Exist") { |
| | | //设备名称已存在 |
| | | mes = ErrorCode.NameExist; |
| | | } else if (stateCodeStr == ErrorCode.NetworkError) { |
| | | mes = ErrorCode.NetworkError; |
| | | } else { |
| | | mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr; |
| | | |
| | | } |
| | | if (!string.IsNullOrEmpty (mes)) { |
| | | Application.RunOnMainThread (() => { |
| | | if (bUpload) { |
| | | MainPage.AddTip (ErrorCode.AddFailed + " " + mes); |
| | | } else { |
| | | MainPage.AddTip ("Update failed! " + mes); |
| | | } |
| | | |
| | | //new Alert ("", ErrorCode.AddFailed + " " + mes, Language.StringByID (R.MyInternationalizationString.Close)).Show (); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 错误提醒 |
| | | /// </summary> |
| | | /// <param name="stateCodeStr"></param> |
| | | void ShowErrorInfo (string stateCodeStr) |
| | | { |
| | | string mes = ""; |
| | | if (stateCodeStr == ErrorCode.NetworkError) { |
| | | mes = ErrorCode.NetworkError; |
| | | } else { |
| | | mes = ErrorCode.OperationFailed + ErrorCode.Reason + stateCodeStr; |
| | | |
| | | } |
| | | if (!string.IsNullOrEmpty (mes)) { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.AddTip (ErrorCode.OperationFailed + " " + mes); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 刷新设备名字 |
| | | /// </summary> |
| | | public bool UpdateDevice (UpdateDeviceObj mUpdateDeviceObj) |
| | | { |
| | | var mUpdateAlexaDeviceObj = new UpdateAlexaDeviceObj () { |
| | | Id = mUpdateDeviceObj.Id, |
| | | DeviceType = mUpdateDeviceObj.DeviceType, |
| | | SubnetID = mUpdateDeviceObj.SubnetID, |
| | | DeviceID = mUpdateDeviceObj.DeviceID, |
| | | LoopID = mUpdateDeviceObj.LoopID, |
| | | DeviceName = mUpdateDeviceObj.DeviceName, |
| | | MAC = mUpdateDeviceObj.MAC, |
| | | RegionID = UserConfig.Instance.CurrentRegion.Id, |
| | | }; |
| | | |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (mUpdateAlexaDeviceObj); |
| | | var revertObj = MainPage.RequestHttps (API.UpdateDevice, requestJson); |
| | | if (revertObj.StateCode.ToUpper () == StateCode.SUCCESS) { |
| | | return true; |
| | | } else if (revertObj.StateCode == "Exist") { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.AddTip ("Update failed!" + " " + ErrorCode.NameExist + " ( " + mUpdateDeviceObj.DeviceName + " )"); |
| | | }); |
| | | return true; |
| | | } else { |
| | | //2020-06-29 弹出提示错误 |
| | | ShowUploadDevicesInfo (revertObj.StateCode, false); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除设备 |
| | | /// </summary> |
| | | public bool DelDevice(string commonId) |
| | | { |
| | | var requestObj = new DelDeviceObj () { Id = commonId }; |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj); |
| | | var revertObj = MainPage.RequestHttps (API.DeleteDevice, requestJson); |
| | | if (revertObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | return true; |
| | | } else { |
| | | //2020-06-29 弹窗提示错误 |
| | | ShowErrorInfo (revertObj.StateCode); |
| | | } |
| | | return false; |
| | | } |
| | | #endregion |
| | | |
| | | #region 关于场景的方法 |
| | | |
| | | #region 加载View |
| | | /// <summary> |
| | | /// 读取Alexa场景列表 |
| | | /// 刷新列表View |
| | | /// </summary> |
| | | public List<SceneByRegion> ReadSceneList () |
| | | void RefreshListView () |
| | | { |
| | | var sceneList = new List<SceneByRegion> (); |
| | | var requestObj = new SceneByRegionListObj () { RegionID = UserConfig.Instance.CurrentRegion.Id }; |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj); |
| | | var revertObj = MainPage.RequestHttps (API.GetSceneList, requestJson); |
| | | if (revertObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SceneByRegion>> (revertObj.ResponseData.ToString ()); |
| | | //当前选择的是设备 |
| | | if (IsDeviceList) { |
| | | InitDevcieRow (bodyView); |
| | | } else { |
| | | //2020-06-29 弹窗提示错误 |
| | | ShowErrorInfo (revertObj.StateCode); |
| | | } |
| | | return sceneList; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 添加场景 |
| | | /// </summary> |
| | | public bool AddScene (SceneAndDeviceList sceneMark) |
| | | { |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (sceneMark); |
| | | var revertObj = MainPage.RequestHttps (API.AddSceneAndDeviceList, requestJson); |
| | | if (revertObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | //var requestAddDeviceObj = new BindDeviceToSceneItemObj () { SceneId = sceneId, Command = command, DeviceID = 0, DataString = dataString }; |
| | | //var requestAddDeviceJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestAddDeviceObj); |
| | | //var revertAddDeviceObj = MainPage.RequestHttps ("BindDeviceToSceneItem", requestAddDeviceJson); |
| | | //if (revertAddDeviceObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | return true; |
| | | //} |
| | | } else if (revertObj.StateCode == "Exist") { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.AddTip (ErrorCode.AddFailed + " " + ErrorCode.NameExist + " ( " + sceneMark.SceneName + " )"); |
| | | }); |
| | | return true; |
| | | } else { |
| | | //2020-06-29 弹出提示错误 |
| | | ShowUploadDevicesInfo (revertObj.StateCode); |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 上传场景设备控制数据 |
| | | /// </summary> |
| | | //public bool AddDeviceDateToScene (int sceneId,string command,string dataString) |
| | | //{ |
| | | // var requestAddDeviceObj = new BindDeviceToSceneItemObj () { SceneId = sceneId, Command = command, DeviceID = 0, DataString = dataString }; |
| | | // var requestAddDeviceJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestAddDeviceObj); |
| | | // var revertAddDeviceObj = MainPage.RequestHttps ("BindDeviceToSceneItem", requestAddDeviceJson); |
| | | // if (revertAddDeviceObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | // return true; |
| | | // } |
| | | // return false; |
| | | //} |
| | | |
| | | /// <summary> |
| | | /// 删除场景 |
| | | /// </summary> |
| | | public bool DelScene (string sceneId) |
| | | { |
| | | var requestObj = new DeleteSceneObj () { Id = sceneId }; |
| | | var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj); |
| | | var revertObj = MainPage.RequestHttps (API.DeleteScene, requestJson); |
| | | if (revertObj.StateCode.ToUpper() == StateCode.SUCCESS) { |
| | | return true; |
| | | } else { |
| | | //2020-06-29 弹窗提示错误 |
| | | ShowErrorInfo (revertObj.StateCode); |
| | | } |
| | | return false; |
| | | } |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="bodyView"></param> |
| | | /// <param name="isScene"></param> |
| | | void AddTopTitleView (VerticalScrolViewLayout bodyView, bool isScene = false) { |
| | | var chooseTypeView = new RowLayout () { |
| | | Height = Application.GetRealHeight (80), |
| | | BackgroundColor = SkinStyle.Current.TitileView, |
| | | }; |
| | | bodyView.AddChidren (chooseTypeView); |
| | | Button btnEquipmentIcon = new Button () { |
| | | Width = Application.GetRealHeight (65), |
| | | Height = Application.GetRealHeight (65), |
| | | UnSelectedImagePath = "Item/LogicModule.png", |
| | | X = Application.GetRealWidth (30), |
| | | Gravity = Gravity.CenterVertical, |
| | | }; |
| | | chooseTypeView.AddChidren (btnEquipmentIcon); |
| | | |
| | | Button btnEquipmentType = new Button () { |
| | | Width = Application.GetRealHeight (460), |
| | | X = btnEquipmentIcon.Right, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | Text = Language.StringByID (R.MyInternationalizationString.Device), |
| | | TextColor = SkinStyle.Current.TextColor1, |
| | | SelectedTextColor = SkinStyle.Current.DialogTextColor |
| | | }; |
| | | chooseTypeView.AddChidren (btnEquipmentType); |
| | | |
| | | if (isScene) { |
| | | btnEquipmentIcon.UnSelectedImagePath = "Scene/Scene.png"; |
| | | btnEquipmentType.Text = Language.StringByID (R.MyInternationalizationString.Scenes); |
| | | InitSceneRow (bodyView); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 添加设备界面 |
| | | /// 添加设备RowView |
| | | /// </summary> |
| | | public void InitDevcieRow (List<UpdateDeviceObj> list, VerticalScrolViewLayout bodyView) |
| | | public void InitDevcieRow (VerticalScrolViewLayout bodyView) |
| | | { |
| | | bodyView.RemoveAll (); |
| | | |
| | | if (list.Count > 0) { |
| | | //添加标题 |
| | | AddTopTitleView (bodyView); |
| | | } |
| | | if (targetInfoList == null) return; |
| | | |
| | | foreach (var device in list) { |
| | | var rowView = new RowLayout () { |
| | | Height = Application.GetRealHeight (110), |
| | | }; |
| | | bodyView.AddChidren (rowView); |
| | | var btn = new Button () { |
| | | X = Application.GetRealWidth(60), |
| | | Width = Application.GetRealWidth (640 - 60), |
| | | Text = device.DeviceName, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = SkinStyle.Current.TextColor1, |
| | | }; |
| | | rowView.AddChidren (btn); |
| | | foreach (var device in targetInfoList) { |
| | | //过滤场景数据 |
| | | if (device.isDevice == false) continue; |
| | | |
| | | var btnDel = new Button () { |
| | | Text = "Delete", |
| | | BackgroundColor = SkinStyle.Current.DelColor, |
| | | }; |
| | | rowView.AddRightView (btnDel); |
| | | |
| | | btnDel.MouseUpEventHandler += (sender, e) => { |
| | | var alert = new Alert ("", "Do you want to delete device?", "No", "Yes"); |
| | | alert.Show (); |
| | | alert.ResultEventHandler += (s, dd) => { |
| | | if (dd) { |
| | | //if (DelDevice (device.Id)) { |
| | | // rowView.RemoveFromParent (); |
| | | // list.Remove (device); |
| | | //} |
| | | |
| | | System.Threading.Tasks.Task.Run (() => { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start (Language.StringByID (R.MyInternationalizationString.load)); |
| | | }); |
| | | try { |
| | | var result = DelDevice (device.Id); |
| | | Application.RunOnMainThread (() => { |
| | | if (result) { |
| | | rowView.RemoveFromParent (); |
| | | list.Remove (device); |
| | | } |
| | | }); |
| | | |
| | | } catch { } finally { |
| | | |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | }; |
| | | }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 添加场景界面 |
| | | /// </summary> |
| | | public void InitSceneRow (List<SceneByRegion> list, VerticalScrolViewLayout bodyView) |
| | | { |
| | | if (list.Count > 0) { |
| | | //添加标题 |
| | | AddTopTitleView (bodyView, true); |
| | | } |
| | | |
| | | foreach (var scene in list) { |
| | | var rowView = new RowLayout () { |
| | | Height = Application.GetRealHeight (110), |
| | | }; |
| | |
| | | var btn = new Button () { |
| | | X = Application.GetRealWidth (60), |
| | | Width = Application.GetRealWidth (640 - 60), |
| | | Text = scene.SceneName, |
| | | Text = device.targetName, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = SkinStyle.Current.TextColor1, |
| | | }; |
| | | rowView.AddChidren (btn); |
| | | btn.MouseUpEventHandler += (dd,ff) => { |
| | | //var alexaSceneSettingPage = new AlecaSceneEditPage (); |
| | | //UserMiddle.SettingPageView.AddChidren (alexaSceneSettingPage); |
| | | //alexaSceneSettingPage.ShowScene (scene); |
| | | //UserMiddle.SettingPageView.PageIndex = 2; |
| | | }; |
| | | |
| | | var btnDel = new Button () { |
| | | Text = "Delete", |
| | | TextID = R.MyInternationalizationString.Delete, |
| | | BackgroundColor = SkinStyle.Current.DelColor, |
| | | }; |
| | | rowView.AddRightView (btnDel); |
| | | |
| | | btnDel.MouseUpEventHandler += (sender, e) => { |
| | | var alert = new Alert ("", "Do you want to delete scene?", "No", "Yes"); |
| | | Alert alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.TipDeleteEquipmentMessage), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim)); |
| | | alert.Show (); |
| | | alert.ResultEventHandler += (s, dd) => { |
| | | if (dd) { |
| | | //if (DelScene (scene.SceneId)) { |
| | | // rowView.RemoveFromParent (); |
| | | // list.Remove (scene); |
| | | //} |
| | | |
| | | System.Threading.Tasks.Task.Run (() => { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start (Language.StringByID (R.MyInternationalizationString.load)); |
| | | }); |
| | | try { |
| | | var result = DelScene (scene.SceneId); |
| | | var newList = new List<TargetInfo> (targetInfoList); |
| | | newList.Remove (device); |
| | | |
| | | bool result = UpdateSpeakerDeviceList (newList); |
| | | |
| | | Application.RunOnMainThread (() => { |
| | | if (result) { |
| | | rowView.RemoveFromParent (); |
| | | list.Remove (scene); |
| | | targetInfoList.Remove (device); |
| | | } else { |
| | | new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.DeleteFailed), |
| | | Language.StringByID (R.MyInternationalizationString.Close)).Show (); |
| | | |
| | | } |
| | | |
| | | }); |
| | | |
| | | } catch { } finally { |
| | |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | }; |
| | | }; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 添加场景界面 |
| | | /// </summary> |
| | | public void InitSceneRow (VerticalScrolViewLayout bodyView) |
| | | { |
| | | bodyView.RemoveAll (); |
| | | |
| | | if (targetInfoList == null) return; |
| | | |
| | | foreach (var scene in targetInfoList) { |
| | | |
| | | if (scene.isDevice) continue; |
| | | |
| | | var rowView = new RowLayout () { |
| | | Height = Application.GetRealHeight (110), |
| | | }; |
| | | bodyView.AddChidren (rowView); |
| | | var btn = new Button () { |
| | | X = Application.GetRealWidth (60), |
| | | Width = Application.GetRealWidth (640 - 60), |
| | | Text = scene.targetName, |
| | | TextAlignment = TextAlignment.CenterLeft, |
| | | TextColor = SkinStyle.Current.TextColor1, |
| | | }; |
| | | rowView.AddChidren (btn); |
| | | btn.MouseUpEventHandler += (dd, ff) => { |
| | | //var alexaSceneSettingPage = new AlecaSceneEditPage (); |
| | | //UserMiddle.SettingPageView.AddChidren (alexaSceneSettingPage); |
| | | //alexaSceneSettingPage.ShowScene (scene); |
| | | //UserMiddle.SettingPageView.PageIndex = 2; |
| | | }; |
| | | |
| | | var btnDel = new Button () { |
| | | //Text = "Delete", |
| | | TextID = R.MyInternationalizationString.Delete, |
| | | BackgroundColor = SkinStyle.Current.DelColor, |
| | | }; |
| | | rowView.AddRightView (btnDel); |
| | | |
| | | btnDel.MouseUpEventHandler += (sender, e) => { |
| | | Alert alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.SureDelete), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim)); |
| | | alert.Show (); |
| | | alert.ResultEventHandler += (s, dd) => { |
| | | if (dd) { |
| | | System.Threading.Tasks.Task.Run (() => { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start (Language.StringByID (R.MyInternationalizationString.load)); |
| | | }); |
| | | try { |
| | | var newList = new List<TargetInfo> (targetInfoList); |
| | | newList.Remove (scene); |
| | | bool result = UpdateSpeakerDeviceList (newList); |
| | | //var result = true; |
| | | Application.RunOnMainThread (() => { |
| | | if (result) { |
| | | rowView.RemoveFromParent (); |
| | | targetInfoList.Remove (scene); |
| | | } else { |
| | | new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.DeleteFailed), |
| | | Language.StringByID (R.MyInternationalizationString.Close)).Show (); |
| | | |
| | | } |
| | | |
| | | }); |
| | | |
| | | } catch { } finally { |
| | | |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | }; |
| | | }; |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | #region 添加设备和场景处理方法 |
| | | |
| | | ///// <summary> |
| | | ///// 生成设备目标数据 |
| | | ///// </summary> |
| | | ///// <param name="device"></param> |
| | | ///// <param name="path"></param> |
| | | ///// <returns></returns> |
| | | //AlexaDeviceListItem GetAlexaDeviceListItem (Common device, string path) |
| | | //{ |
| | | // var mAlexaDeviceTyp = HDLCommon.Current.GetAlexaDeviceType (device.Type); |
| | | // var deviceControl = new Obj_Buspro_DeviceControl () { |
| | | // SubnetID = device.SubnetID, |
| | | // DeviceID = device.DeviceID, |
| | | // LoopID = device.LoopID, |
| | | // GatewayID = UserConfig.Instance.MacMark, |
| | | // DevicePath = device.SavePath, |
| | | // }; |
| | | // var mAlexaDeviceItem = new AlexaDeviceListItem () { |
| | | // DeviceName = device.Name, |
| | | // NicksName = device.Name, |
| | | // DeviceType = (int)mAlexaDeviceTyp, |
| | | // ControlObj = deviceControl, |
| | | // }; |
| | | // return mAlexaDeviceItem; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 添加或者编辑 设备和场景列表 |
| | | ///// 同时刷新列表 |
| | | ///// </summary> |
| | | //void AddAlexaDeviceAndSceneWithRefresh (List<AlexaDeviceListItem> mDeviceList, List<SceneListItem> mSceneList) |
| | | //{ |
| | | // if (AddAlexaDeviceAndSceneWithOneRoom (mDeviceList, mSceneList)) { |
| | | // //编辑成功,重新刷新获取 |
| | | // GetDeviceAndSceneList (); |
| | | // } |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 添加或者编辑 设备和场景列表 |
| | | ///// </summary> |
| | | ///// <param name="mDeviceList"></param> |
| | | ///// <param name="mSceneList"></param> |
| | | ///// <returns></returns> |
| | | //bool AddAlexaDeviceAndSceneWithOneRoom (List<TargetInfo> mList) |
| | | //{ |
| | | // //提交更新设备数据 |
| | | // var mAlexaRooms = new AlexaRoomsItem () { |
| | | // RoomName = UserConfig.Instance.CurrentRegion.homeName, |
| | | // LayerName = UserConfig.Instance.CurrentRegion.homeName, |
| | | // DeviceList = mDeviceList, |
| | | // SceneList = mSceneList |
| | | // }; |
| | | // var AlexaRoomsList = new List<AlexaRoomsItem> (); |
| | | // AlexaRoomsList.Add (mAlexaRooms); |
| | | // return AddDevicesScene (AlexaRoomsList); |
| | | //} |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="lsit"></param> |
| | | void AddDevicesSceneList (List<TargetInfo> lsit) |
| | | { |
| | | System.Threading.Tasks.Task.Run (() => { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start (Language.StringByID (R.MyInternationalizationString.load)); |
| | | }); |
| | | try { |
| | | |
| | | bool result = UpdateSpeakerDeviceList (lsit); |
| | | //var result = true; |
| | | Application.RunOnMainThread (() => { |
| | | if (result) { |
| | | GetDeviceAndSceneList (); |
| | | } |
| | | }); |
| | | |
| | | } catch { } finally { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 打开场景或者设备添加页面 |
| | | /// </summary> |
| | | void OpenAlexaSettingPage () |
| | | { |
| | | Action<List<TargetInfo>> saveAction = (lsit) => { |
| | | AddDevicesSceneList (lsit); |
| | | }; |
| | | |
| | | System.Threading.Tasks.Task.Factory.StartNew (() => { |
| | | try { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Start (Language.StringByID (R.MyInternationalizationString.load)); |
| | | }); |
| | | var tempRoom = new Room (); |
| | | //if (IsDeviceList) { |
| | | // foreach (var device in alexaDeviceList) { |
| | | // tempRoom.DeviceFilePathList.Add (device.ControlObj.DevicePath); |
| | | // } |
| | | //} else { |
| | | // foreach (var scene in alexaSceneList) { |
| | | // tempRoom.SceneFilePathList.Add (scene.SceneName); |
| | | // } |
| | | //} |
| | | Application.RunOnMainThread (() => { |
| | | if (IsDeviceList) { |
| | | var userDeviceListPage = new AlexaSettingPage (tempRoom); |
| | | userDeviceListPage.Show (); |
| | | userDeviceListPage.ShowPage (null,null); |
| | | } else { |
| | | var mAlexaSettingScenePage = new AlexaSettingScenePage (targetInfoList); |
| | | mAlexaSettingScenePage.Show (); |
| | | mAlexaSettingScenePage.ShowPage (saveAction); |
| | | |
| | | } |
| | | |
| | | |
| | | }); |
| | | } catch (Exception ex) { |
| | | Shared.Utlis.WriteLine (ex.Message); |
| | | } finally { |
| | | Application.RunOnMainThread (() => { |
| | | MainPage.Loading.Hide (); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | } |