using System; using System.Collections.Generic; namespace Shared.SimpleControl.Phone { public class ScenePhoneMethod { bool showTip = true; /// /// 添加或者修改房间场景 /// /// Room name. /// 代理方法,用来刷新界面 /// Scene.(为null是表示是增加场景) public void AddOrUpdataSceneBaseMassage (string roomFilePath, string sceneFilePath = null, Action action = null, Action actionRefreshRoom = null) { Room room = null; if (roomFilePath == Scene.GlobalSceneFilePath) { //GlobalScene } else { room = Room.GetRoomByFilePath (roomFilePath); if (room == null) return; } var scene = Scene.GetSceneByFilePath (sceneFilePath); if (null == scene) { scene = new Scene (); } #region Load Dialog dialog = new Dialog (); FrameLayout dialogBodyView = new FrameLayout () { BackgroundColor = SkinStyle.Current.DialogColor, Width = Application.GetRealWidth (520), Height = Application.GetRealHeight (740), Gravity = Gravity.Center, Radius = 5, BorderWidth = 0, BorderColor = SkinStyle.Current.Transparent }; dialog.AddChidren (dialogBodyView); Button btnDialgoTitle = new Button () { Width = Application.GetRealWidth (520), Height = Application.GetRealHeight (70), BackgroundColor = SkinStyle.Current.DialogTitle, TextID = R.MyInternationalizationString.AddNewRoom, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterHorizontal, }; dialogBodyView.AddChidren (btnDialgoTitle); Button lblSceneText = new Button () { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight (80), Width = Application.GetRealWidth (450), Height = Application.GetRealHeight (50), TextID = R.MyInternationalizationString.RoomName, TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor, }; dialogBodyView.AddChidren (lblSceneText); EditText sceneTextBox = new EditText () { Gravity = Gravity.CenterHorizontal, Y = lblSceneText.Bottom + Application.GetRealHeight (10), Width = Application.GetRealWidth (450), Height = Application.GetRealHeight (60), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor, Text = scene.Name, Radius = 2, BorderColor = SkinStyle.Current.DialogTitle, BorderWidth = 1, }; dialogBodyView.AddChidren (sceneTextBox); sceneTextBox.EditorEnterAction += (obj) => { Application.HideSoftInput (); }; Button lblIcon = new Button () { Gravity = Gravity.CenterHorizontal, Y = sceneTextBox.Bottom + Application.GetRealHeight (10), Width = Application.GetRealWidth (450), Height = btnDialgoTitle.Height, TextID = R.MyInternationalizationString.Backgroud, TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor, }; dialogBodyView.AddChidren (lblIcon); var verIconLayout = new VerticalScrolViewLayout () { Gravity = Gravity.CenterHorizontal, Y = lblIcon.Bottom, Width = sceneTextBox.Width, Height = Application.GetRealHeight (200), }; dialogBodyView.AddChidren (verIconLayout); var inVerFramelayout = new FrameLayout () { Width = lblIcon.Width, Height = Application.GetRealHeight (200), }; verIconLayout.AddChidren (inVerFramelayout); var systempictureLayout = new FrameLayout { Height = Application.GetRealHeight (160), Y = Application.GetRealHeight (480), }; dialogBodyView.AddChidren (systempictureLayout); var btnBG = new Button () { Width = Application.GetRealWidth (270), Height = LayoutParams.MatchParent, UnSelectedImagePath = scene.BackgroundImagePath, }; inVerFramelayout.AddChidren (btnBG); #if wallon btnBG.Gravity = Gravity.Center; #else var btnTakePictrue = new Button () { Width = inVerFramelayout.Width - btnBG.Width, Height = inVerFramelayout.Height / 2, TextID = R.MyInternationalizationString.TakePhoto, TextColor = SkinStyle.Current.TextColor1, BackgroundColor = SkinStyle.Current.ButtonColor, X = btnBG.Right, }; inVerFramelayout.AddChidren (btnTakePictrue); Guid guid = Guid.NewGuid (); btnTakePictrue.MouseUpEventHandler += (sender, e) => { guid = Guid.NewGuid (); Camera.TakePicture ((obj) => { if (obj != null) { btnBG.UnSelectedImagePath = guid.ToString(); } }, guid.ToString(),false); }; Button btnLineP = new Button () { Width = btnTakePictrue.Width, Height = 1, BackgroundColor = SkinStyle.Current.Black50Transparent, X = btnBG.Right, Y = btnTakePictrue.Bottom, }; inVerFramelayout.AddChidren (btnLineP); Button btnSelectPictrue = new Button () { Width = btnTakePictrue.Width, Height = btnTakePictrue.Height, TextColor = SkinStyle.Current.TextColor1, TextID = R.MyInternationalizationString.SelectPicture, BackgroundColor = SkinStyle.Current.ButtonColor, X = btnBG.Right, Y = btnLineP.Bottom, }; inVerFramelayout.AddChidren (btnSelectPictrue); btnSelectPictrue.MouseUpEventHandler += (sender, e) => { guid = Guid.NewGuid (); Camera.SelectPicture ((obj) => { if (obj != null) { btnBG.UnSelectedImagePath = guid.ToString (); } }, guid.ToString(), false); }; #endif var horizontalScrolViewLayout = new HorizontalScrolViewLayout () { Width = Application.GetRealWidth (450), Gravity = Gravity.CenterHorizontal, }; systempictureLayout.AddChidren (horizontalScrolViewLayout); for (int i = 0; i < 22; i++) { Button butscene = new Button () { Width = Application.GetRealWidth (200), Height = LayoutParams.MatchParent, }; butscene.MouseUpEventHandler += (sender, e) => { btnBG.UnSelectedImagePath = butscene.UnSelectedImagePath; }; butscene.UnSelectedImagePath = "Scene/s" + (i).ToString () + ".png"; horizontalScrolViewLayout.AddChidren (butscene); } FrameLayout BottomView = new FrameLayout () { Y = dialogBodyView.Height - Application.GetRealHeight (90), Height = Application.GetRealHeight (90), BackgroundColor = SkinStyle.Current.DialogTitle, }; dialogBodyView.AddChidren (BottomView); Button btnBack = new Button () { Width = Application.GetRealWidth (119), UnSelectedImagePath = "Item/PositioningDialogBack.png", SelectedImagePath = "Item/PositioningDialogBack.png", }; BottomView.AddChidren (btnBack); btnBack.MouseUpEventHandler += (sender1, e1) => { dialog.Close (); }; Button btnLineH = new Button () { Width = 1, Height = LayoutParams.MatchParent, BackgroundColor = SkinStyle.Current.White20Transparent, X = btnBack.Right, }; BottomView.AddChidren (btnLineH); Button btnSave = new Button () { Width = Application.GetRealWidth (400), X = btnLineH.Right, TextID = R.MyInternationalizationString.SAVE, TextAlignment = TextAlignment.Center, Radius = 1, }; BottomView.AddChidren (btnSave); #endregion btnDialgoTitle.TextID = R.MyInternationalizationString.AddNewScenes; lblSceneText.TextID = R.MyInternationalizationString.SceneName; if (roomFilePath == Scene.GlobalSceneFilePath) { var sceneFileList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (Scene.GlobalSceneFilePath))); if (!string.IsNullOrEmpty (sceneFilePath)) btnDialgoTitle.TextID = R.MyInternationalizationString.ChangeInformation; //增加或者修改场景 btnSave.MouseUpEventHandler += (sender, e) => { string newScenFilePath = "GlobalScene_" + sceneTextBox.Text.Trim (); if (string.IsNullOrEmpty (sceneTextBox.Text.Trim ())) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.PleaseEnterSceneName), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } //更改过场景图 if (btnBG.UnSelectedImagePath == "SecenPicture") {//将选择或拍摄的背景更改对应的名称保存下来 IO.FileUtils.ReNameFile (btnBG.UnSelectedImagePath, "Image_" + newScenFilePath); btnBG.UnSelectedImagePath = "Image_" + newScenFilePath; } scene.BackgroundImagePath = btnBG.UnSelectedImagePath; scene.Name = sceneTextBox.Text.Trim (); //新加场景 if (sceneFilePath == null) { if (IO.FileUtils.Exists (newScenFilePath)) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.HaveTheSame), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } sceneFileList.Add (newScenFilePath); } else { //更改的场景名称已经存在 if (!sceneFileList.Contains (newScenFilePath) && IO.FileUtils.Exists (newScenFilePath)) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.HaveTheSame), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } //场景名更改 if (sceneFilePath != newScenFilePath) { //如果是场景更改,那原文件名也需要更新 IO.FileUtils.ReNameFile (sceneFilePath, newScenFilePath); for (int i = 0; i < sceneFileList.Count; i++) { if (sceneFileList [i] == sceneFilePath) { sceneFileList [i] = newScenFilePath; } } } } // 更新修改后的数据 IO.FileUtils.WriteFileByBytes (newScenFilePath, CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (scene))); IO.FileUtils.WriteFileByBytes (Scene.GlobalSceneFilePath, CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (sceneFileList))); if (action != null) { action (newScenFilePath); } dialog.Close (); }; } else { if (!string.IsNullOrEmpty (sceneFilePath)) btnDialgoTitle.TextID = R.MyInternationalizationString.ChangeInformation; btnSave.Width = Application.GetRealWidth (400); //增加或者修改场景 btnSave.MouseUpEventHandler += (sender, e) => { string newScenFilePath = "RoomScene_" + room.Name + "_" + sceneTextBox.Text.Trim (); if (string.IsNullOrEmpty (sceneTextBox.Text.Trim ())) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.PleaseEnterSceneName), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } //更改过场景图 if (btnBG.UnSelectedImagePath == "SecenPicture") {//将选择或拍摄的背景更改对应的名称保存下来 IO.FileUtils.ReNameFile (btnBG.UnSelectedImagePath, "Image_" + newScenFilePath); btnBG.UnSelectedImagePath = "Image_" + newScenFilePath; IO.FileUtils.WriteFileByBytes (sceneFilePath, CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (scene))); } scene.BackgroundImagePath = btnBG.UnSelectedImagePath; scene.Name = sceneTextBox.Text.Trim (); //新加场景 if (sceneFilePath == null) { if (IO.FileUtils.Exists (newScenFilePath)) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.HaveTheSame), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } room.SceneFilePathList.Add (newScenFilePath); } else { //更改的场景名称已经存在 if (!room.SceneFilePathList.Contains (newScenFilePath) && IO.FileUtils.Exists (newScenFilePath)) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.HaveTheSame), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } //场景名更改 if (sceneFilePath != newScenFilePath) { //如果是场景更改,那原文件名也需要更新 IO.FileUtils.ReNameFile (sceneFilePath, newScenFilePath); for (int i = 0; i < room.SceneFilePathList.Count; i++) { if (room.SceneFilePathList [i] == sceneFilePath) { room.SceneFilePathList [i] = newScenFilePath; } } } } // 更新修改后的数据 IO.FileUtils.WriteFileByBytes (newScenFilePath, CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (scene))); room.Save (roomFilePath); Room.UpdateMemorry (roomFilePath); //刷新当前房间的数据 if (action != null) { action (newScenFilePath); } if (actionRefreshRoom != null) { actionRefreshRoom (); } dialog.Close (); }; } dialog.Show (); } public void ControlScene (string sceneFilePath) { var tempScene = Scene.GetSceneByFilePath (sceneFilePath); if (tempScene == null) return; showTip = true; new System.Threading.Thread (() => { int sceneDeviceCount = tempScene.DeviceFilePathList.Count; int controlDeviceIndex = 0; //if (!tempScene.busScene) { foreach (var deviceFilePath in tempScene.DeviceFilePathList) { controlDeviceIndex++; //ControlSceneDevice (deviceFilePath, controlDeviceIndex, sceneDeviceCount); //continue; byte [] replyBytes = null; var common = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if(common.Type == DeviceType.FanModule) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue;// } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.WindSpeed }); } else if (common.Type == DeviceType.LightDimming) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue;// } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); } else if (common.Type == DeviceType.LightDALI) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } Control.ControlBytesSend (Command.control_lamp_color_Temperature, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurTones_High, device.CurTones_Low }, SendCount.Zero); replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); } else if (common.Type == DeviceType.LightMixDimming) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.PhysicsLoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); } else if (common.Type == DeviceType.LightEnergySwitch) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); } else if (common.Type == DeviceType.LightRGB) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device != null) { replyBytes = Control.ControlBytesSendHasReturn (Command.SetLogicLoopColor, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, 254, device.DelayTimeHeigh,device.DelayTimeLow, 3,device.RStatus,device.GStatus,device.BStatus,0,0}); } } else if (common.Type == DeviceType.LightSwitch || common.Type == DeviceType.LightSwitchSocket) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); } else if (common.Type == DeviceType.LightMixSwitch) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.PhysicsLoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); } else if (common.Type == DeviceType.CurtainModel) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, (byte)device.Status }); } else if (common.Type == DeviceType.CurtainRoller) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, device.SubnetID, device.DeviceID, new byte [] { 1, (byte)device.Status }); } else if (common.Type == DeviceType.CurtainTrietex) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, device.SubnetID, device.DeviceID, new byte [] { 1, (byte)device.Status }); } else if (common.Type == DeviceType.HVAC || common.Type == DeviceType.ACInfrared) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetACMode, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.TemperatureMode, device.IndoorTemperature, device.CoolTemperature, device.HeatTemperature, device.AutoTemperature, device.ChuShiTemperature, device.RealModeAndFanSpeed, device.Power, device.SetMode, device.SetFanSpeed, device.SetTemperature, device.ShaoFanMode}); } else if (common.Type == DeviceType.ACPanel) { var ac = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (ac == null) { continue; } byte modeKey = 4; switch (ac.SetMode) { //cooling case 0: modeKey = 4; break; //Heating case 1: modeKey = 7; break; //Fan case 2: modeKey = 2; break; // Auto case 3: modeKey = 8; break; //Dry case 4: modeKey = 19; break; } Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { modeKey, ac.SetTemperature, ac.LoopID }); Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 6, ac.SetMode, ac.LoopID }); Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 5, ac.SetFanSpeed, ac.LoopID }); Control.ControlBytesSend (Command.InstructionPanelKey, ac.SubnetID, ac.DeviceID, new byte [] { 3, ac.Power, ac.LoopID }); } else if (common.Type == DeviceType.FoolHeat) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (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 (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, (byte)device.WindSpeed }); } else if (common.Type == DeviceType.LogicModule) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetScene, device.SubnetID, device.DeviceID, new byte [] { device.AreaID,device.AreaSceneID}); } else if (common.Type == DeviceType.UniversalDevice) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); if (device == null) { continue; } replyBytes = Control.ControlBytesSendHasReturn (Command.SetCommonSwitch, device.SubnetID, device.DeviceID, new byte [] { device.SendBytes [0], device.SendBytes [1] }); } else { continue; } try { if (showTip) { if (replyBytes == null) { Application.RunOnMainThread (() => { string tipString = Language.StringByID (R.MyInternationalizationString.ControlFailure); var btnTip = new Button () { Height = Application.GetRealHeight (140), Text = common.Name + tipString + "..." + controlDeviceIndex.ToString () + @"/" + sceneDeviceCount.ToString (), BackgroundColor = SkinStyle.Current.TitileView, }; MainPage.MainFrameLayout.AddChidren (btnTip); btnTip.MouseUpEventHandler += (sender, e) => { btnTip.RemoveFromParent (); }; new System.Threading.Thread (() => { System.Threading.Thread.Sleep (3000); Application.RunOnMainThread (() => { btnTip.RemoveFromParent (); showTip = false; }); }) { IsBackground = true }.Start (); }); } } } catch { } } //} else { if (tempScene.busScene) { foreach (var common in tempScene.GlobalSceneDeviceList) { //ControlBusSceneDevice (common); //continue; byte [] replyBytes = null; switch (common.obj1) { case 0://0 无效 Invalid break; case 85://0x55 场景 Scene ||0x0002 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 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 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 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 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 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 } } } }) { IsBackground = true}.Start(); } //public void ControlSceneDevice (string deviceFilePath, int controlDeviceIndex, int sceneDeviceCount) //{ // byte [] replyBytes = null; // var common = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (common.Type == DeviceType.LightDimming) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return;// // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); // } else if (common.Type == DeviceType.LightDALI) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); // } else if (common.Type == DeviceType.LightMixDimming) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.PhysicsLoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); // } else if (common.Type == DeviceType.LightEnergySwitch) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); // } else if (common.Type == DeviceType.LightRGB) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device != null) { // replyBytes = Control.ControlBytesSendHasReturn (Command.SetLogicLoopColor, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, 254, device.DelayTimeHeigh,device.DelayTimeLow, // 3,device.RStatus,device.GStatus,device.BStatus,0,0}); // } // } else if (common.Type == DeviceType.LightSwitch || common.Type == DeviceType.LightSwitchSocket) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); // } else if (common.Type == DeviceType.LightMixSwitch) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, device.SubnetID, device.DeviceID, new byte [] { device.PhysicsLoopID, device.CurrentBrightness, device.DelayTimeHeight, device.DelayTimeLow }); // } else if (common.Type == DeviceType.CurtainModel) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, device.SubnetID, device.DeviceID, new byte [] { device.LoopID, (byte)device.Status }); // } else if (common.Type == DeviceType.CurtainRoller) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, device.SubnetID, device.DeviceID, new byte [] { 1, (byte)device.Status }); // } else if (common.Type == DeviceType.CurtainTrietex) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.UpdataCurtainModelStutas, device.SubnetID, device.DeviceID, new byte [] { 1, (byte)device.Status }); // } else if (common.Type == DeviceType.HVAC || common.Type == DeviceType.ACInfrared) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetACMode, device.SubnetID, device.DeviceID, new byte [] { // device.LoopID, // device.TemperatureMode, // device.IndoorTemperature, // device.CoolTemperature, // device.HeatTemperature, // device.AutoTemperature, // device.ChuShiTemperature, // device.RealModeAndFanSpeed, // device.Power, // device.SetMode, // device.SetFanSpeed, // device.SetTemperature, // device.ShaoFanMode}); // } else if (common.Type == DeviceType.FoolHeat) { // var device = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // 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 (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // 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 (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath))); // if (device == null) { // return; // } // replyBytes = Control.ControlBytesSendHasReturn (Command.SetScene, device.SubnetID, device.DeviceID, new byte [] { // device.AreaID,device.AreaSceneID}); // } // Application.RunOnMainThread (() => { // try { // if (showTip) { // if (replyBytes == null) { // string tipString = Language.StringByID (R.MyInternationalizationString.ControlFailure); // var btnTip = new Button () { // Height = Application.GetRealHeight (140), // Text = common.Name + tipString + "..." + controlDeviceIndex.ToString () + @"/" + sceneDeviceCount.ToString (), // BackgroundColor = SkinStyle.Current.TitileView, // }; // MainPage.MainFrameLayout.AddChidren (btnTip); // btnTip.MouseUpEventHandler += (sender, e) => { // MainPage.MainFrameLayout.Remove (btnTip); // }; // System.Threading.Tasks.Task.Run (() => { // System.Threading.Thread.Sleep (3000); // Application.RunOnMainThread (() => { // MainPage.MainFrameLayout.Remove (btnTip); // showTip = false; // }); // }); // } // } // } catch { } // }); //} public void ControlBusSceneDevice (Common common) { byte [] replyBytes = null; switch (common.obj1) { case 0://0 无效 Invalid break; case 85://0x55 场景 Scene ||0x0002 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 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 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 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 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 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 } } /// /// 添加或者修改高级网关场景 /// /// Room name. /// 代理方法,用来刷新界面 /// Scene.(为null是表示是增加场景) public static void AddOrUpdataSuperGateWaySceneBaseMassage (SuperGateWay.GateWay superGateWay, SuperGateWay.Scene scene, Action refreshAction) { if (scene == null) { scene = new SuperGateWay.Scene { }; } #region Load var dialog = new Dialog () { BackgroundColor = 0xFFF5F6F7, Width = Application.GetRealWidth (520), Height = Application.GetRealHeight (740), }; var btnEquipmentTitle = new Button () { Width = Application.GetRealWidth (520), Height = Application.GetRealHeight (70), BackgroundColor = 0xFF484848, TextID = R.MyInternationalizationString.AddNewRoom, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterHorizontal, }; dialog.AddChidren (btnEquipmentTitle); var lblTitleName = new Button () { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight (80), Width = Application.GetRealWidth (450), Height = Application.GetRealHeight (50), TextID = R.MyInternationalizationString.RoomName, TextAlignment = TextAlignment.CenterLeft, TextColor = 0xf01A1A1A, }; dialog.AddChidren (lblTitleName); var sceneTextBox = new EditText () { Gravity = Gravity.CenterHorizontal, Y = lblTitleName.Bottom + Application.GetRealHeight (10), Width = Application.GetRealWidth (450), Height = Application.GetRealHeight (50), TextAlignment = TextAlignment.CenterLeft, UnSelectedImagePath = "Item/DialogTextBox.png", SelectedImagePath = "Item/DialogTextBox.png", TextColor = 0xf01A1A1A, Text = scene.name, BorderWidth = 1, BorderColor = 0xff505050, Radius = 1, }; dialog.AddChidren (sceneTextBox); var lblIcon = new Button () { Gravity = Gravity.CenterHorizontal, Y = sceneTextBox.Bottom + Application.GetRealHeight (10), Width = Application.GetRealWidth (450), Height = btnEquipmentTitle.Height, TextID = R.MyInternationalizationString.Backgroud, TextAlignment = TextAlignment.CenterLeft, TextColor = 0xf01A1A1A, }; dialog.AddChidren (lblIcon); var verIconLayout = new VerticalScrolViewLayout () { Gravity = Gravity.CenterHorizontal, Y = lblIcon.Y + lblIcon.Height + Application.GetRealHeight (5), Width = sceneTextBox.Width, Height = Application.GetRealHeight (200), BackgroundImagePath = "Item/RoomIconBackground.png", }; var inVerFramelayout = new FrameLayout () { X = 0, Width = lblIcon.Width, Height = Application.GetRealHeight (200), }; verIconLayout.AddChidren (inVerFramelayout); dialog.AddChidren (verIconLayout); var systempictureLayout = new FrameLayout { Height = Application.GetRealHeight (260), Y = Application.GetRealHeight (478), }; dialog.AddChidren (systempictureLayout); var btnBG = new Button () { Width = Application.GetRealWidth (270), Height = LayoutParams.MatchParent, UnSelectedImagePath = scene.BackgoundImagePath, }; inVerFramelayout.AddChidren (btnBG); var btnTakePictrue = new Button () { Width = inVerFramelayout.Width - btnBG.Width, Height = inVerFramelayout.Height / 3, TextID = R.MyInternationalizationString.TakePhoto, TextColor = 0xff000000, BackgroundColor = 0xF0D7D7D7, X = btnBG.Right, }; inVerFramelayout.AddChidren (btnTakePictrue); ///照相点击事件 Guid guid = Guid.NewGuid (); btnTakePictrue.MouseUpEventHandler += (sender, e) => { guid = Guid.NewGuid (); Camera.TakePicture ((obj) => { if (obj != null) { btnBG.UnSelectedImagePath = guid.ToString (); } }, guid.ToString (), false); }; var btnLineP = new Button () { Width = btnTakePictrue.Width, Height = 1, BackgroundColor = 0xF0FFFFFF, X = btnBG.Right, Y = btnTakePictrue.Bottom, }; inVerFramelayout.AddChidren (btnLineP); var btnSelectPictrue = new Button () { Width = btnTakePictrue.Width, Height = btnTakePictrue.Height, TextColor = 0xff000000, TextID = R.MyInternationalizationString.SelectPicture, BackgroundColor = 0xF0D7D7D7, X = btnBG.Right, Y = btnLineP.Bottom, }; inVerFramelayout.AddChidren (btnSelectPictrue); ///相册点击事件 btnSelectPictrue.MouseUpEventHandler += (sender, e) => { guid = Guid.NewGuid (); Camera.SelectPicture ((obj) => { if (obj != null) { btnBG.UnSelectedImagePath = guid.ToString(); } }, guid.ToString(), false); }; var btnLineS = new Button () { Width = btnTakePictrue.Width, Height = 1, BackgroundColor = 0xF0FFFFFF, X = btnBG.Right, Y = btnSelectPictrue.Bottom, }; inVerFramelayout.AddChidren (btnLineS); var btnSelectsystemPictrue = new Button () { Width = btnTakePictrue.Width, Height = btnTakePictrue.Height, TextID = R.MyInternationalizationString.SystemPicture, TextColor = 0xff000000, BackgroundColor = 0xF0D7D7D7, X = btnBG.Right, Y = btnLineS.Bottom, }; inVerFramelayout.AddChidren (btnSelectsystemPictrue); EventHandler handler = (sender1, e1) => { systempictureLayout.RemoveAll (); var horizontalScrolViewLayout = new HorizontalScrolViewLayout () { Width = Application.GetRealWidth (500), Height = Application.GetRealHeight (180), Y = Application.GetRealHeight (10), Gravity = Gravity.CenterHorizontal, }; systempictureLayout.AddChidren (horizontalScrolViewLayout); for (int i = 0; i < 22; i++) { var butscene = new Button () { Width = Application.GetRealWidth (200), Height = LayoutParams.MatchParent, }; butscene.UnSelectedImagePath = "Scene/s" + (i).ToString () + ".png"; horizontalScrolViewLayout.AddChidren (butscene); butscene.MouseUpEventHandler += (sender, e) => { btnBG.UnSelectedImagePath = butscene.UnSelectedImagePath; }; } }; btnSelectsystemPictrue.MouseUpEventHandler += handler; var BottomView = new FrameLayout () { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight (90), BackgroundColor = 0xF0121212, Y = dialog.Height - Application.GetRealHeight (90), }; dialog.AddChidren (BottomView); var btnBack = new Button () { Width = Application.GetRealWidth (119), Height = LayoutParams.MatchParent, UnSelectedImagePath = "Item/PositioningDialogBack.png", SelectedImagePath = "Item/PositioningDialogBack.png", }; BottomView.AddChidren (btnBack); btnBack.MouseUpEventHandler += (sender1, e1) => { dialog.Close (); }; var btnLineH = new Button () { Width = 1, Height = LayoutParams.MatchParent, BackgroundColor = 0xF0909090, X = btnBack.Right, }; BottomView.AddChidren (btnLineH); var btnSave = new Button () { Width = Application.GetRealWidth (400), Height = LayoutParams.MatchParent, X = btnLineH.Right, TextID = R.MyInternationalizationString.SAVE, TextAlignment = TextAlignment.Center, Radius = 1, }; BottomView.AddChidren (btnSave); #endregion btnEquipmentTitle.TextID = R.MyInternationalizationString.AddNewScenes; lblTitleName.TextID = R.MyInternationalizationString.SceneName; btnEquipmentTitle.TextID = R.MyInternationalizationString.ChangeInformation; ///增加或者修改场景 btnSave.MouseUpEventHandler += (sender, e) => { if (string.IsNullOrEmpty (sceneTextBox.Text.Trim ())) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.PleaseEnterSceneName), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } /// if (null != superGateWay.Scenes.Find ((obj) => obj != scene && obj.uid != scene.uid && obj.name == sceneTextBox.Text.Trim ())) { new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.HaveTheSame), Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } ///新场景名称 scene.name = sceneTextBox.Text.Trim (); Action a = (obj) => { Application.RunOnMainThread (() => { try { //已经更改过的图片 if (btnBG.UnSelectedImagePath == "ScenePicture") { Shared.IO.FileUtils.ReNameFile (btnBG.UnSelectedImagePath, $"SuperGateWay_BackgoundImage_{scene.sid}"); btnBG.UnSelectedImagePath = $"SuperGateWay_BackgoundImage_{scene.sid}"; } SuperGateWay.Scene.Add (scene.sid, btnBG.UnSelectedImagePath); if (obj == null) { return; } if (superGateWay.Scenes.Find ((o) => o.uid == obj.uid) == null) { superGateWay.Scenes.Add (obj); } } catch { } finally { Application.RunOnMainThread (() => { dialog.Close (); refreshAction (); }); } }); }; if (scene.sid == null) { scene.sid = SuperGateWay.Scene.NewSid; SuperGateWay.Control.AppendScene (scene, a); } else { SuperGateWay.Control.ModifyScene (scene, a); } superGateWay.save ("SceneListFilePath"); }; dialog.Show (); } } }