using System; using Shared; using System.Collections.Generic; using HDL_ON.Entity; namespace HDL_ON.UI.UI2.Intelligence.Automation { public class InpOrOutLogicMethod { /// /// 输入条件处理方法 /// /// 当前界面 /// 上下滑动控件 public static void InputCondition(FrameLayout thisView, VerticalScrolViewLayout viewLayout) { for (int i = 0; i < Logic.currlogic.input.Count; i++) { Input inputCondition = Logic.currlogic.input[i]; ///各种条件的View LogicView.AddOutputInputView inputView = new LogicView.AddOutputInputView(); inputView.FLayoutView(viewLayout); //添加没有延时,隐藏延时按钮; inputView.btnDelay.Visible = false; ///记录条件类型 inputView.btnClick.Name = inputCondition.condition_type; ///记录条件索引 inputView.btnClick.Tag = inputCondition; ///条件状态数组 List> dicList = inputCondition.condition; //显示条件各种类型状态 switch (inputCondition.condition_type) { case "1": { inputView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png"; foreach (var dic in dicList) { string keyValue = dic["key"]; string value = dic["value"]; if (keyValue == "timepoint") { inputView.btnText.Text = Language.StringByID(StringId.hour) + ": " + value; } else { string strtext = ""; string statetext = ""; switch (keyValue) { case "before_sunrise": { strtext = Language.StringByID(StringId.sunrise); statetext = Language.StringByID(StringId.advanced); } break; case "before_sunset": { strtext = Language.StringByID(StringId.sunset); statetext = Language.StringByID(StringId.advanced); } break; case "before_noon": { strtext = Language.StringByID(StringId.at); statetext = Language.StringByID(StringId.advanced); } break; case "after_sunrise": { strtext = Language.StringByID(StringId.sunrise); statetext = Language.StringByID(StringId.delayLogic); } break; case "after_sunset": { strtext = Language.StringByID(StringId.sunset); statetext = Language.StringByID(StringId.delayLogic); } break; case "after_noon": { strtext = Language.StringByID(StringId.at); statetext = Language.StringByID(StringId.delayLogic); } break; } if (value != "0") { if (value == "30") { statetext += value + Language.StringByID(StringId.s); } else { statetext += value + Language.StringByID(StringId.minute); } } else { statetext = ""; } inputView.btnText.Text = strtext; inputView.btnState.Text = statetext; } } } break; case "2": { inputView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png"; foreach (var dic in dicList) { string value = dic["value"]; inputView.btnText.Text = Language.StringByID(StringId.timeHorizon) + ": " + value; } } break; case "3": { //用sid找到设备; var device = LogicMethod.CurrLogicMethod.GetDevice(inputCondition.sid); //用设备的functionType类型找到对应图标; inputView.btnIcon.UnSelectedImagePath = LogicMethod.CurrLogicMethod.GetIconPath(device.spk); //显示设备名称 inputView.btnText.Text = device.name; //改变设备名称显示控件宽度 inputView.btnText.Width = Application.GetRealWidth(80); //区别不同设备,显示不同设备状态 switch (device.spk) { //开关灯光 case SPK.AirSwitch: case SPK.LightDimming: case SPK.LightRGB: case SPK.LightRGBW: case SPK.LightCCT: case SPK.LightSwitch: //窗帘 case SPK.CurtainSwitch: case SPK.CurtainRoller: case SPK.CurtainTrietex: //空调 case SPK.AcStandard: case SPK.HvacAC: //地热 case SPK.HvacFloorHeat: case SPK.FloorHeatStandard: //新风 case SPK.AirFreshStandard: case SPK.HvacAirFresh: //插座 case SPK.PanelSocket: case SPK.ElectricSocket: {//开关灯 foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { inputView.btnState.Text = Language.StringByID(StringId.onLogic); } else { inputView.btnState.Text = Language.StringByID(StringId.offLogic); } } } break; //传感器 case SPK.SensorSmoke: case SPK.SensorGas: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "alarm") { inputView.btnState.Text = Language.StringByID(StringId.xieluo); } else { inputView.btnState.Text = Language.StringByID(StringId.wuxieluo); } } } break; case SPK.SensorWater: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "alarm") { inputView.btnState.Text = Language.StringByID(StringId.luoshui); } else { inputView.btnState.Text = Language.StringByID(StringId.wuluoshui); } } } break; case SPK.SensorDryContact: case SPK.SensorDryContact2: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { inputView.btnState.Text = Language.StringByID(StringId.onLogic); } else { inputView.btnState.Text = Language.StringByID(StringId.offLogic); } } } break; case SPK.SensorShanLan: case SPK.SensorDuiShe: case SPK.SensorPir: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "true") { inputView.btnState.Text = Language.StringByID(StringId.youren); } else { inputView.btnState.Text = Language.StringByID(StringId.wuren); } } } break; case SPK.SensorDoorWindow: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "open") { inputView.btnState.Text = Language.StringByID(StringId.kaiqi); } else { inputView.btnState.Text = Language.StringByID(StringId.bihe); } } } break; case SPK.SensorUtrasonic: { string str = ""; foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "status": case "people_status": { if (value == "true") { str += Language.StringByID(StringId.youren) + ";"; } else { str += Language.StringByID(StringId.wuren) + ";"; } } break; case "dismantle": { if (value == "true") { str += Language.StringByID(StringId.zaixian); } else { str += Language.StringByID(StringId.buzaixian); } } break; } } inputView.btnState.Text = str; } break; case SPK.SenesorMegahealth: case SPK.SenesorMegahealth2: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "fall") { inputView.btnState.Text = Language.StringByID(StringId.diedao); } else { inputView.btnState.Text = Language.StringByID(StringId.wuren); } } } break; case SPK.SensorEnvironment: case SPK.SensorEnvironment2: case SPK.SensorEnvironment3: { string strtext = ""; foreach (var dic in dicList) { string key = dic["key"]; string value = dic["value"]; string comparator = dic["comparator"]; switch (key) { case "temperature": { if (comparator == ">") { strtext = ">" + value + "℃"; } else if (comparator == "<") { strtext = "<" + value + "℃"; } } break; case "humidity": { if (comparator == ">") { strtext = ">" + value + "%"; } else if (comparator == "<") { strtext = "<" + value + "%"; } } break; case "co2": { strtext = Language.StringByID(StringId.co2) + new PublicInterface { }.GetString("co2", value); } break; case "pm25": { strtext = Language.StringByID(StringId.pm25) + new PublicInterface { }.GetString("pm25", value); } break; case "tvoc": { strtext = Language.StringByID(StringId.tvoc) + new PublicInterface { }.GetString("tvoc", value); } break; } inputView.btnState.Text = strtext; } } break; case SPK.SensorTemperature: { string str = new InpOrOutLogicMethod { }.GetText(dicList, "temperature"); inputView.btnState.Text = str; } break; case SPK.SensorHumidity: { string str = new InpOrOutLogicMethod { }.GetText(dicList, "humidity"); inputView.btnState.Text = str; } break; case SPK.SensorCO2: { string str = new InpOrOutLogicMethod { }.GetText(dicList, "co2"); inputView.btnState.Text = str; } break; case SPK.SensorPm25: { string str = new InpOrOutLogicMethod { }.GetText(dicList, "pm25"); inputView.btnState.Text = str; } break; case SPK.SensorTVOC: { string str = new InpOrOutLogicMethod { }.GetText(dicList, "tvoc"); inputView.btnState.Text = str; } break; case SPK.SensorHcho: { string str = new InpOrOutLogicMethod { }.GetText(dicList, "hcho"); inputView.btnState.Text = str; } break; } } break; case "6": { //inputView.btnIcon.UnSelectedImagePath = "LogicIcon/changesinoutdoor.png"; inputView.btnIcon.UnSelectedImagePath = "LogicIcon/changesinoutdoor.png"; string strtext = ""; string strvalue = ""; foreach (var dic in dicList) { string key = dic["key"]; string comparator = dic["comparator"]; string value = dic["value"]; switch (key) { case "temperature": { //云端天气条件 城市温度触发 strvalue = value + "℃"; if (comparator == ">") { strtext = Language.StringByID(StringId.wendugaoyu); } else if (comparator == "<") { strtext = Language.StringByID(StringId.wendudiyu); } } break; case "humidity": { //云端天气条件 城市湿度触发 strvalue = value + "%"; if (comparator == ">") { strtext = Language.StringByID(StringId.shidugaoyu); } else if (comparator == "<") { strtext = Language.StringByID(StringId.shidudiyu); } } break; case "pm25": { //云端天气条件 城市pm2.5触发 strtext = Language.StringByID(StringId.PM25); strvalue = new PublicInterface { }.GetString("pm25", value); } break; case "weather": { //云端天气条件 城市天气触发 strtext = Language.StringByID(StringId.tianqibianhua); switch (value) { case "Sunny": { strtext = Language.StringByID(StringId.clearday); } break; case "Cloudy": { strtext = Language.StringByID(StringId.cloudy); } break; case "Rain": { strtext = Language.StringByID(StringId.rain); } break; } } break; case "airquality": { //云端天气条件 城市空气质量 strtext = Language.StringByID(StringId.kongqizhiliang); switch (value) { case "Excellent": { strtext = Language.StringByID(StringId.kongqiyou); } break; case "Good": { strtext = Language.StringByID(StringId.kongqiliang); } break; case "Poor": { strtext = Language.StringByID(StringId.kongqicha); } break; } } break; } } inputView.btnText.Text = strtext; inputView.btnState.Text = strvalue; } break; case "8": { inputView.btnIcon.UnSelectedImagePath = "LogicIcon/inputlocation.png"; foreach (var dic in dicList) { string strtext = ""; string value = dic["value"]; switch (value) { case "arrive": { strtext = Language.StringByID(StringId.daoda); } break; case "leave": { strtext = Language.StringByID(StringId.likai); } break; } inputView.btnText.TextID = StringId.likiadaoda; inputView.btnState.Text = strtext; } } break; case "10": { //用sid找到场景; var scene = LogicMethod.CurrLogicMethod.GetSecne(inputCondition.sid); inputView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png"; inputView.btnNextIcon.Visible = false; inputView.btnClick.Visible = false; //显示场景名称 inputView.btnText.Text = scene.name; } break; } //再次编辑条件状态点击事件 inputView.btnClick.MouseUpEventHandler += (sen, e) => { Button button = (Button)sen; //当前编辑的条件 Input ckcliInput = inputView.btnClick.Tag as Input; //找到当前编辑的索引 int indexVulae = 0; for (int index = 0; index < Logic.currlogic.input.Count; index++) { Input input = Logic.currlogic.input[index]; if (input.sid == ckcliInput.sid) { if (button.Name == "3") { //有些设备比较特殊(例如:海林传感器还是要判断属性值,温湿度属性还要判断比较关系,才能确认是否已经存在该条件,其他设备条件直接用sid判断即可) //加一级判断是为兼容特殊设备 if (new ConditionDeviceFunList { }.IsContainsAll(ckcliInput.condition, input.condition)) { //用户可能删除数据,使列表索引发生改变; //通过唯一sid重新查找到索引且更新索引值 indexVulae = index; break; } } else { //用户可能删除数据,使列表索引发生改变; //通过唯一sid重新查找到索引且更新索引值 indexVulae = index; break; } } } //标记编辑状态 bool edit = true; switch (button.Name) { case "1": { bool is_bool = false; Input _input = Logic.currlogic.input[indexVulae]; if (_input.condition_type == "1") { var dicLists = _input.condition; foreach (var dic in dicLists) { string keyValue = dic["key"]; if (keyValue != "timepoint") { //通过键值查找键值是否是 //(日出/日落/正午) is_bool = true; break; } } } if (is_bool) { //跳转到(日出/日落/正午)界面 SpeciaTime speciaTime = new SpeciaTime(); MainPage.BasePageView.AddChidren(speciaTime); speciaTime.Show(edit, indexVulae); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } else { //跳转到(时间点)界面 FrameLayout fLayout = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence, }; thisView.AddChidren(fLayout); TimeTpye timeTpye = new TimeTpye(); timeTpye.TimePoint(fLayout, edit, indexVulae); } } break; case "2": { FrameLayout fLayout = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence, }; thisView.AddChidren(fLayout); TimeTpye timeTpye = new TimeTpye(); timeTpye.TimeHorizon(fLayout, edit, indexVulae); } break; case "3": { //用sid找到设备; var device = LogicMethod.CurrLogicMethod.GetDevice(inputCondition.sid); if (device.spk == SPK.SensorEnvironment || device.spk == SPK.SensorEnvironment2 || device.spk == SPK.SensorEnvironment3 ) { //这个设备比较特殊 ConditionDeviceFunList conditionDeviceFunList = new ConditionDeviceFunList(); ///当前的索引值数据对象 Input inputedit = Logic.currlogic.input[indexVulae]; ///状态值 string stateValue = ""; foreach (var dic in inputedit.condition) { string key = dic["key"]; string comparator = dic["comparator"]; stateValue = dic["value"]; switch (key) { case "temperature": { int titleInt = 0; if (comparator == ">") { titleInt = StringId.wendugaoyu; } else if (comparator == "<") { titleInt = StringId.wendudiyu; } conditionDeviceFunList.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "humidity": { int titleInt = 0; if (comparator == ">") { titleInt = StringId.shidugaoyu; } else if (comparator == "<") { titleInt = StringId.shidudiyu; } conditionDeviceFunList.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "co2": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "co2", StringId.co2, indexVulae, true, stateValue); } break; case "pm25": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "pm25", StringId.pm25, indexVulae, true, stateValue); } break; case "tvoc": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "tvoc", StringId.tvoc, indexVulae, true, stateValue); } break; case "hcho": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "hcho", StringId.Formaldehyde, indexVulae, true, stateValue); } break; } } } else if (device.spk == SPK.SensorTemperature) { new InpOrOutLogicMethod().SensorView(thisView, device, "temperature", indexVulae); } else if (device.spk == SPK.SensorHumidity) { new InpOrOutLogicMethod().SensorView(thisView, device, "humidity", indexVulae); } else if (device.spk == SPK.SensorCO2) { new InpOrOutLogicMethod().SensorView(thisView, device, "co2", indexVulae); } else if (device.spk == SPK.SensorPm25) { new InpOrOutLogicMethod().SensorView(thisView, device, "pm25", indexVulae); } else if (device.spk == SPK.SensorTVOC) { new InpOrOutLogicMethod().SensorView(thisView, device, "tvoc", indexVulae); } else if (device.spk == SPK.SensorHcho) { new InpOrOutLogicMethod().SensorView(thisView, device, "hcho", indexVulae); } else { ConditionDeviceFunList deviceFunList = new ConditionDeviceFunList(); MainPage.BasePageView.AddChidren(deviceFunList); deviceFunList.Show(device, indexVulae, edit); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } } break; case "6": { ///当前的索引值数据对象 Input inputedit = Logic.currlogic.input[indexVulae]; ///状态值 string stateValue = ""; ///状态值文本 int intValue = -1; foreach (var dic in inputedit.condition) { string key = dic["key"]; string comparator = dic["comparator"]; stateValue = dic["value"]; switch (key) { case "temperature": { if (comparator == ">") { intValue = StringId.wendugaoyu; } else if (comparator == "<") { intValue = StringId.wendudiyu; } } break; case "humidity": { if (comparator == ">") { intValue = StringId.shidugaoyu; } else if (comparator == "<") { intValue = StringId.shidudiyu; } } break; case "pm25": { intValue = StringId.PM25; } break; case "weather": { intValue = StringId.tianqibianhua; } break; case "airquality": { intValue = StringId.kongqizhiliang; } break; } } OutdoorEnvironment outdoorEnvironment = new OutdoorEnvironment(); if (intValue == StringId.tianqibianhua) { //城市天气(晴天,下雨) WeatherCondition weatherCondition = new WeatherCondition(); MainPage.BasePageView.AddChidren(weatherCondition); weatherCondition.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } else if (intValue == StringId.PM25) { //城市天气(pm2.5) outdoorEnvironment.PmAction(thisView, stateValue); } else if (intValue == StringId.kongqizhiliang) { //城市天气(空气质量) AirQuality airQuality = new AirQuality(); MainPage.BasePageView.AddChidren(airQuality); airQuality.Show(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } else { //城市天气(温湿度) outdoorEnvironment.InputBoxAction(intValue, stateValue); } } break; case "8": { AddInputType addInputType = new AddInputType(); addInputType.LocationView(thisView, true); } break; } }; ///删除控件 inputView.btnDel.MouseUpEventHandler += (sender, e) => { Logic.currlogic.input.Remove(inputCondition); inputView.frameLayout.RemoveFromParent(); }; } } /// /// 输出条件处理方法 /// /// 当前界面 /// 上下滑动控件 public static void OutputTarget(FrameLayout thisView, VerticalScrolViewLayout viewLayout) { for (int i = 0; i < Logic.currlogic.output.Count; i++) { Output outputTarget = Logic.currlogic.output[i]; ///各种条件的View LogicView.AddOutputInputView targetView = new LogicView.AddOutputInputView(); targetView.FLayoutView(viewLayout); ///记录条件类型 targetView.btnClick.Name = outputTarget.target_type; ///记录条件索引 targetView.btnClick.Tag = outputTarget.sid; ///条件状态数组 List> dicList = outputTarget.status; //显示状态值 string stateStr = ""; //显示输出条件各种类型状态 switch (outputTarget.target_type) { case "1": { //用sid找到设备; var device = LogicMethod.CurrLogicMethod.GetDevice(outputTarget.sid); //用设备的functionType类型找到对应图标; targetView.btnIcon.UnSelectedImagePath = LogicMethod.CurrLogicMethod.GetIconPath(device.spk); //显示设备名称 targetView.btnText.Text = device.name; //改变设备名称显示控件宽度 targetView.btnText.Width = Application.GetRealWidth(80); //区别不同设备,显示不同设备状态 switch (device.spk) { case SPK.AirSwitch: case SPK.LightSwitch: //插座 case SPK.PanelSocket: case SPK.ElectricSocket: {//开关 foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { stateStr = Language.StringByID(StringId.onLogic); } else { stateStr = Language.StringByID(StringId.offLogic); } } } break; case SPK.LightRGB: case SPK.LightRGBW: case SPK.LightCCT: case SPK.LightDimming: { string on_off = GetKeyValue("on_off", dicList); string brightness = GetKeyValue("brightness", dicList); if (on_off == "on" && brightness != "") { stateStr = Language.StringByID(StringId.onLogic) + brightness + "%"; } else if (on_off == "on") { stateStr = Language.StringByID(StringId.onLogic); } else if (on_off == "off") { stateStr = Language.StringByID(StringId.offLogic); } else if (brightness != "") { stateStr = brightness + "%"; } } break; case SPK.CurtainSwitch: case SPK.CurtainTrietex: case SPK.CurtainRoller: { foreach (var dic in dicList) { string value = dic["value"]; switch (value) { case "on": { stateStr = Language.StringByID(StringId.onLogic); } break; case "off": { stateStr = Language.StringByID(StringId.offLogic); } break; case "stop": { stateStr = Language.StringByID(StringId.stop); } break; } } } break; case SPK.AcStandard: case SPK.HvacAC: { string on_off = GetKeyValue("on_off", dicList); string set_temp = GetKeyValue("set_temp", dicList); string mode = GetKeyValue("mode", dicList); string fan = GetKeyValue("fan", dicList); if (on_off != "") { switch (on_off) { case "on": { stateStr = Language.StringByID(StringId.onLogic) + ","; } break; case "off": { stateStr = Language.StringByID(StringId.offLogic) + ","; } break; } } if (set_temp != "") { stateStr += set_temp + "℃,"; } if (mode != "") { switch (mode) { case "cool": { stateStr += Language.StringByID(StringId.coolLogic) + ","; } break; case "heat": { stateStr += Language.StringByID(StringId.heatingLogic) + ","; } break; case "auto": { stateStr += Language.StringByID(StringId.autoLogic) + ","; } break; case "dry": { stateStr += Language.StringByID(StringId.dehumidifyLogic) + ","; } break; } } if (fan != "") { switch (fan) { case "high": { stateStr += Language.StringByID(StringId.HighWindSpeed) + ","; } break; case "medium": { stateStr += Language.StringByID(StringId.MiddleWindSpeed) + ","; } break; case "low": { stateStr += Language.StringByID(StringId.LowWindSpeed) + ","; } break; case "auto": { stateStr += Language.StringByID(StringId.Auto) + ","; } break; } } if (on_off != "" && on_off == "off") { stateStr = Language.StringByID(StringId.offLogic); } else { stateStr = stateStr.TrimEnd(','); } } break; case SPK.FloorHeatStandard: case SPK.HvacFloorHeat: { string on_off = GetKeyValue("on_off", dicList); string set_temp = GetKeyValue("set_temp", dicList); string mode = GetKeyValue("mode", dicList); if (on_off != "") { switch (on_off) { case "on": { stateStr = Language.StringByID(StringId.onLogic) + ","; } break; case "off": { stateStr = Language.StringByID(StringId.offLogic) + ","; } break; } } if (set_temp != "") { stateStr += set_temp + "℃,"; } if (mode != "") { switch (mode) { case "day": { stateStr += Language.StringByID(StringId.dayMode) + ","; } break; case "night": { stateStr += Language.StringByID(StringId.nightMode) + ","; } break; case "away": { stateStr += Language.StringByID(StringId.leaveMode) + ","; } break; case "normal": { stateStr += Language.StringByID(StringId.ordinaryMode) + ","; } break; case "timer": { stateStr += Language.StringByID(StringId.timeMode) + ","; } break; } } if (on_off != "" && on_off == "off") { stateStr = Language.StringByID(StringId.offLogic); } else { stateStr = stateStr.TrimEnd(','); } } break; case SPK.AirFreshStandard: case SPK.HvacAirFresh: { string on_off = GetKeyValue("on_off", dicList); string fan = GetKeyValue("fan", dicList); if (on_off != "") { switch (on_off) { case "on": { stateStr = Language.StringByID(StringId.onLogic) + ","; } break; case "off": { stateStr = Language.StringByID(StringId.offLogic) + ","; } break; } } if (fan != "") { switch (fan) { case "high": { stateStr += Language.StringByID(StringId.HighWindSpeed) + ","; } break; case "medium": { stateStr += Language.StringByID(StringId.MiddleWindSpeed) + ","; } break; case "low": { stateStr += Language.StringByID(StringId.LowWindSpeed) + ","; } break; case "auto": { stateStr += Language.StringByID(StringId.Auto) + ","; } break; } } if (on_off != "" && on_off == "off") { stateStr = Language.StringByID(StringId.offLogic); } else { stateStr = stateStr.TrimEnd(','); } } break; } } break; case "2": { //用sid找到场景; var scene = LogicMethod.CurrLogicMethod.GetSecne(outputTarget.sid); targetView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png"; targetView.btnNextIcon.Visible = false; //显示场景名称 stateStr = scene.name; } break; case "3": { //用sid找到安防; var security = LogicMethod.CurrLogicMethod.GetSecurity(outputTarget.sid); targetView.btnIcon.UnSelectedImagePath = "LogicIcon/security.png"; targetView.btnDelay.Visible = false; //显示安防名称 targetView.btnText.Text = security.name; string value = GetKeyValue("security", dicList); if (value == "enable") { stateStr = Language.StringByID(StringId.bufang); } else { stateStr = Language.StringByID(StringId.chefang); } } break; case "4": { targetView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png"; foreach (var dic in dicList) { string value = dic["value"]; stateStr = value; } } break; } if (outputTarget.target_type == "1" || outputTarget.target_type == "3") { targetView.btnState.Text = new InpOrOutLogicMethod { }.GetTimeText(outputTarget.delay) + stateStr; } else { targetView.btnText.Text = new InpOrOutLogicMethod { }.GetTimeText(outputTarget.delay) + stateStr; } //再次编辑条件状态点击事件 targetView.btnClick.MouseUpEventHandler += (sen, e) => { Button button = (Button)sen; //找到当前编辑的索引 int indexVulae = 0; for (int index = 0; index < Logic.currlogic.output.Count; index++) { Output target = Logic.currlogic.output[index]; if (target.sid == targetView.btnClick.Tag.ToString()) { //用户可能删除数据,使列表索引发生改变; //通过唯一sid重新查找到索引且更新索引值 indexVulae = index; break; } } //标记编辑状态 bool edit = true; switch (button.Name) { case "1": { //用sid找到设备; var device = LogicMethod.CurrLogicMethod.GetDevice(outputTarget.sid); TargetDeviceFunList deviceFunList = new TargetDeviceFunList(); MainPage.BasePageView.AddChidren(deviceFunList); deviceFunList.Show(device, indexVulae, edit); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; } break; case "3": { Security security = new Security(); security.SecurityMethod(thisView, "", edit, indexVulae); } break; case "4": { FrameLayout fLayout = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence, }; thisView.AddChidren(fLayout); AddTarget addTarget = new AddTarget(); addTarget.Delayed(fLayout, edit, indexVulae); } break; } }; //延时点击事件 targetView.btnDelay.MouseUpEventHandler += (sen, e) => { InpOrOutLogicMethod inpOrOutLogicMethod = new InpOrOutLogicMethod(); inpOrOutLogicMethod.Delayed(thisView, outputTarget, (value) => { outputTarget.delay = value.ToString(); if (outputTarget.target_type == "1") { targetView.btnState.Text = new InpOrOutLogicMethod { }.GetTimeText(outputTarget.delay) + stateStr; } else { targetView.btnText.Text = new InpOrOutLogicMethod { }.GetTimeText(outputTarget.delay) + stateStr; } }); }; ///删除控件 targetView.btnDel.MouseUpEventHandler += (sender, e) => { Logic.currlogic.output.Remove(outputTarget); targetView.frameLayout.RemoveFromParent(); }; } } /// /// 显示编辑之前的设备状态 /// /// 编辑设备 /// 显示Btn /// 显示Btn /// 显示Btn /// 显示Btn public static void EditState(Entity.Function device, List> dicList, Button button1, Button button2, Button button3, Button button4) { switch (device.spk) { //插座 case SPK.PanelSocket: case SPK.ElectricSocket: //开关灯光 case SPK.AirSwitch: case SPK.LightSwitch: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { button1.Text = Language.StringByID(StringId.onLogic); } else { button1.Text = Language.StringByID(StringId.offLogic); } } } break; case SPK.LightDimming: case SPK.LightRGB: case SPK.LightRGBW: case SPK.LightCCT: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "on_off": { if (value == "on") { button1.Text = Language.StringByID(StringId.onLogic); } else { button1.Text = Language.StringByID(StringId.offLogic); } } break; case "brightness": { if (button2 == null) { //怕调试软件乱上东西导致抛异常 break; } button2.Text = value + "%"; } break; } } } break; case SPK.CurtainSwitch: case SPK.CurtainTrietex: case SPK.CurtainRoller: { foreach (var dic in dicList) { string value = dic["value"]; switch (value) { case "on": { button1.Text = Language.StringByID(StringId.onLogic); } break; case "off": { button1.Text = Language.StringByID(StringId.offLogic); } break; case "stop": { button1.Text = Language.StringByID(StringId.stop); } break; } } } break; case SPK.AcStandard: case SPK.HvacAC: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "on_off": { switch (value) { case "on": { button1.Text = Language.StringByID(StringId.onLogic); } break; case "off": { button1.Text = Language.StringByID(StringId.offLogic); } break; } } break; case "set_temp": { if (button2 == null) { //怕调试软件乱上东西导致抛异常 break; } button2.Text = value + "℃"; } break; case "mode": { if (button3 == null) { //怕调试软件乱上东西导致抛异常 break; } switch (value) { case "cool": { button3.Text = Language.StringByID(StringId.coolLogic); } break; case "heat": { button3.Text = Language.StringByID(StringId.heatingLogic); } break; case "auto": { button3.Text = Language.StringByID(StringId.autoLogic); } break; case "dry": { button3.Text = Language.StringByID(StringId.dehumidifyLogic); } break; } } break; case "fan": { if (button4 == null) { //怕调试软件乱上东西导致抛异常 break; } switch (value) { case "high": { button4.Text = Language.StringByID(StringId.HighWindSpeed); } break; case "medium": { button4.Text = Language.StringByID(StringId.MiddleWindSpeed); } break; case "low": { button4.Text = Language.StringByID(StringId.LowWindSpeed); } break; case "auto": { button4.Text = Language.StringByID(StringId.Auto); } break; } } break; } } } break; case SPK.FloorHeatStandard: case SPK.HvacFloorHeat: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "on_off": { switch (value) { case "on": { button1.Text = Language.StringByID(StringId.onLogic); } break; case "off": { button1.Text = Language.StringByID(StringId.offLogic); } break; } } break; case "set_temp": { if (button2 == null) { //怕调试软件乱上东西导致抛异常 break; } button2.Text = value + "℃"; } break; case "mode": { if (button3 == null) { //怕调试软件乱上东西导致抛异常 break; } switch (value) { case "day": { button3.Text = Language.StringByID(StringId.dayMode); } break; case "night": { button3.Text = Language.StringByID(StringId.nightMode); } break; case "away": { button3.Text = Language.StringByID(StringId.leaveMode); } break; case "normal": { button3.Text = Language.StringByID(StringId.ordinaryMode); } break; case "timer": { button3.Text = Language.StringByID(StringId.timeMode); } break; } } break; } } } break; case SPK.AirFreshStandard: case SPK.HvacAirFresh: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "on_off": { switch (value) { case "on": { button1.Text = Language.StringByID(StringId.onLogic); } break; case "off": { button1.Text = Language.StringByID(StringId.offLogic); } break; } } break; case "fan": { if (button2 == null) { //怕调试软件乱上东西导致抛异常 break; } switch (value) { case "high": { button2.Text = Language.StringByID(StringId.HighWindSpeed); } break; case "medium": { button2.Text = Language.StringByID(StringId.MiddleWindSpeed); } break; case "low": { button2.Text = Language.StringByID(StringId.LowWindSpeed); } break; case "auto": { button2.Text = Language.StringByID(StringId.Auto); } break; } } break; } } } break; case SPK.SensorGas: case SPK.SensorSmoke: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "alarm") { button1.Text = Language.StringByID(StringId.xieluo); } else { button1.Text = Language.StringByID(StringId.wuxieluo); } } } break; case SPK.SensorWater: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "alarm") { button1.Text = Language.StringByID(StringId.luoshui); } else { button1.Text = Language.StringByID(StringId.wuluoshui); } } } break; case SPK.SensorDryContact: case SPK.SensorDryContact2: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { button1.Text = Language.StringByID(StringId.onLogic); } else { button1.Text = Language.StringByID(StringId.offLogic); } } } break; case SPK.SensorShanLan: case SPK.SensorDuiShe: case SPK.SensorPir: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "true") { button1.Text = Language.StringByID(StringId.youren); } else { button1.Text = Language.StringByID(StringId.wuren); } } } break; case SPK.SensorDoorWindow: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "open") { button1.Text = Language.StringByID(StringId.kaiqi); } else { button1.Text = Language.StringByID(StringId.bihe); } } } break; case SPK.SensorUtrasonic: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "status": case "people_status": { if (value == "true") { button1.Text = Language.StringByID(StringId.youren); } else { button1.Text = Language.StringByID(StringId.wuren); } } break; case "dismantle": { if (value == "true") { button1.Text = Language.StringByID(StringId.zaixian); } else { button1.Text = Language.StringByID(StringId.buzaixian); } } break; } } } break; case SPK.SenesorMegahealth: case SPK.SenesorMegahealth2: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "fall") { button1.Text = Language.StringByID(StringId.diedao); } else { button1.Text = Language.StringByID(StringId.wuren); } } } break; } } /// /// 获取value键值 /// /// /// /// public static string GetKeyValue(string keyValue, List> dicList) { string valueStr = ""; foreach (var dic in dicList) { if (dic["key"] == keyValue) { valueStr = dic["value"]; break; } } return valueStr; } /// ///获取自动化名称 /// /// 新建自动化命名规则 public static string GetLogicName(Logic logic) { string name = ""; try { //默认取第一个条件 Input inputCondition = logic.input[0]; //显示条件各种类型状态 switch (inputCondition.condition_type) { case "1": { name = Language.StringByID(StringId.hour) + "-"; } break; case "2": { name = Language.StringByID(StringId.timeHorizon) + "-"; } break; case "3": { //用sid找到设备; var device = LogicMethod.CurrLogicMethod.GetDevice(inputCondition.sid); name = device.name + "-"; } break; case "10": { //用sid找到场景; var scene = LogicMethod.CurrLogicMethod.GetSecne(inputCondition.sid); name = scene.name + "-"; } break; } //默认取第一个目标 Output outputTarget = logic.output[0]; List> dicList = outputTarget.status as List>; //显示输出条件各种类型状态 switch (outputTarget.target_type) { case "1": { //用sid找到设备; var device = LogicMethod.CurrLogicMethod.GetDevice(outputTarget.sid); //显示设备名称 name += device.name; string stateStr = ""; //区别不同设备,显示不同设备状态 switch (device.spk) { case SPK.AirSwitch: case SPK.LightSwitch: {//开关灯 foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { stateStr = Language.StringByID(StringId.onLogic); } else { stateStr = Language.StringByID(StringId.offLogic); } } } break; case SPK.LightRGB: case SPK.LightRGBW: case SPK.LightCCT: case SPK.LightDimming: { string on_off = InpOrOutLogicMethod.GetKeyValue("on_off", dicList); string brightness = InpOrOutLogicMethod.GetKeyValue("brightness", dicList); if (on_off == "on" && brightness != "") { stateStr = Language.StringByID(StringId.onLogic) + brightness + "%"; } else if (on_off == "on") { stateStr = Language.StringByID(StringId.onLogic); } else if (on_off == "off") { stateStr = Language.StringByID(StringId.offLogic); } else if (brightness != "") { stateStr = brightness + "%"; } } break; case SPK.CurtainSwitch: case SPK.CurtainTrietex: case SPK.CurtainRoller: { foreach (var dic in dicList) { string value = dic["value"]; switch (value) { case "on": { stateStr = Language.StringByID(StringId.onLogic); } break; case "off": { stateStr = Language.StringByID(StringId.offLogic); } break; case "stop": { stateStr = Language.StringByID(StringId.stop); } break; } } } break; case SPK.AcStandard: case SPK.HvacAC: case SPK.FloorHeatStandard: case SPK.HvacFloorHeat: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "on") { stateStr = Language.StringByID(StringId.onLogic); } else if (value == "off") { stateStr = Language.StringByID(StringId.offLogic); } } } break; } name += stateStr; } break; case "2": { //用sid找到场景; var scene = LogicMethod.CurrLogicMethod.GetSecne(outputTarget.sid); name += scene.name; } break; case "3": { //用sid找到安防; var security = LogicMethod.CurrLogicMethod.GetSecurity(outputTarget.sid); name += security.name; } break; } if (!MainView.IsGatewayType) { name += Language.StringByID(StringId.push); } } catch { } return name; } /// /// 延时时间方法 /// /// 在哪个界面显示 /// (true=编辑;false=新建) /// 编辑条件的索引 private void Delayed(FrameLayout thisFLayout, Output output, Action action) { FrameLayout fLayout = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence, }; thisFLayout.AddChidren(fLayout); LogicView.TimeView timePointView = new LogicView.TimeView(); timePointView.FLayoutView(fLayout); EventHandler RemovefLayout = (sender, e1) => { //移除fLayout界面 fLayout.RemoveFromParent(); }; //取消点击事件 timePointView.btnCancel.MouseUpEventHandler += RemovefLayout; //加载数据界面的设置方法(列表互不联动) timePointView.mUIPickerView.setNPicker(timePointView.GetmStringList(), timePointView.GetsStringList(), null); //默认初始选中状态 timePointView.mUIPickerView.setCurrentItems(0, 5, 0); //定义一个局部变量记录选中时间 int timepoint = 5; if (output.delay != "0") { int intValue = int.Parse(output.delay); var m = intValue / 60; var s = intValue % 60; string timeValue = m.ToString() + ":" + s.ToString(); int mIndex = timePointView.GetValueIndex(timeValue, 0, 1, timePointView.GetmIntList()); int sIndex = timePointView.GetValueIndex(timeValue, 1, 0, timePointView.GetmIntList()); //更新初始状态 timePointView.mUIPickerView.setCurrentItems(mIndex, sIndex, 0); timepoint = intValue; } //选中时间回调方法,时间变化一次回调一次 timePointView.mUIPickerView.OnSelectChangeEvent += (index1, index2, index3) => { string minuet = timePointView.GethStringList0()[index1].Split(' ')[0]; string second = timePointView.GetmStringList()[index2].Split(' ')[0]; int minuetIntValue = int.Parse(minuet); int secondIntValue = int.Parse(second); timepoint = minuetIntValue * 60 + secondIntValue; }; //确定点击事件 timePointView.btnConfirm.MouseUpEventHandler += (sender, e3) => { if (timepoint == 0) { //提示 return; } fLayout.RemoveFromParent(); action(timepoint); }; } /// /// 获取时间文本描述 /// /// 时间值(单位s秒) /// private string GetTimeText(string strTimeValue) { var timeValue = int.Parse(strTimeValue); string state = ""; var minutes = timeValue / 60; var seconds = timeValue % 60; if (minutes != 0) { if (seconds == 0) { state = minutes.ToString() + Language.StringByID(StringId.minute); } else { state = minutes.ToString() + Language.StringByID(StringId.minute) + seconds.ToString() + Language.StringByID(StringId.s); } } else { if (seconds != 0) { state = seconds.ToString() + Language.StringByID(StringId.s); } } if (!string.IsNullOrEmpty(state)) { state = Language.StringByID(StringId.delayLogic) + state; } return state; } /// /// 获取显示面熟文本 /// /// 状态数据列表 /// private string GetText(List> dicList, string key) { string strtext = ""; foreach (var dic in dicList) { string value = dic["value"]; string comparator = dic["comparator"]; switch (key) { case "temperature": { if (comparator == ">") { strtext = ">" + value + "℃"; } else if (comparator == "<") { strtext = "<" + value + "℃"; } } break; case "humidity": { if (comparator == ">") { strtext = ">" + value + "%"; } else if (comparator == "<") { strtext = "<" + value + "%"; } } break; case "co2": { strtext = Language.StringByID(StringId.co2) + new PublicInterface { }.GetString("co2", value); } break; case "pm25": { strtext = Language.StringByID(StringId.pm25) + new PublicInterface { }.GetString("pm25", value); } break; case "tvoc": { strtext = Language.StringByID(StringId.tvoc) + new PublicInterface { }.GetString("tvoc", value); } break; case "hcho": { strtext = Language.StringByID(StringId.Formaldehyde) + new PublicInterface { }.GetString("hcho", value); } break; } } return strtext; } private void SensorView(FrameLayout thisView, Function device, string key, int indexVulae) { //这个设备比较特殊 ConditionDeviceFunList conditionDeviceFunList = new ConditionDeviceFunList(); ///当前的索引值数据对象 Input inputedit = Logic.currlogic.input[indexVulae]; ///状态值 string stateValue = ""; foreach (var dic in inputedit.condition) { string comparator = dic["comparator"]; stateValue = dic["value"]; switch (key) { case "temperature": { int titleInt = 0; if (comparator == ">") { titleInt = StringId.wendugaoyu; } else if (comparator == "<") { titleInt = StringId.wendudiyu; } conditionDeviceFunList.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "humidity": { int titleInt = 0; if (comparator == ">") { titleInt = StringId.shidugaoyu; } else if (comparator == "<") { titleInt = StringId.shidudiyu; } conditionDeviceFunList.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "co2": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "co2", StringId.co2, indexVulae, true, stateValue); } break; case "pm25": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "pm25", StringId.pm25, indexVulae, true, stateValue); } break; case "tvoc": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "tvoc", StringId.tvoc, indexVulae, true, stateValue); } break; case "hcho": { conditionDeviceFunList.PmCo2TvocAction(thisView, device, "hcho", StringId.Formaldehyde, indexVulae, true, stateValue); } break; } } } } }