using System; using Shared; using System.Collections.Generic; using HDL_ON.Entity; namespace HDL_ON.UI.UI2.Intelligence.Automation { public class InpOrOutLogicMethod { private static InpOrOutLogicMethod s_Current = null; public static InpOrOutLogicMethod Current { get { if (s_Current == null) { s_Current = new InpOrOutLogicMethod(); } return s_Current; } } /// /// 输入条件处理方法 /// /// 当前界面 /// 上下滑动控件 public 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"; string value= this.GetKeyValue("timesection", dicList); inputView.btnText.Text = Language.StringByID(StringId.timeHorizon) + ": " + value; } break; case "3": case "9"://可视对讲:9 { //用sid找到设备; var device = LogicMethod.Current.GetDevice(inputCondition.sid); //用设备的functionType类型找到对应图标; inputView.btnIcon.UnSelectedImagePath = LogicMethod.Current.GetDeviceIconPath(device); //显示设备名称 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: {//开关灯 string value = this.GetKeyValue("on_off", dicList); inputView.btnState.Text = Language.StringByID(StringId.offLogic); if (value == "on") { inputView.btnState.Text = Language.StringByID(StringId.onLogic); } } break; //传感器 case SPK.SensorHelp: { string value = this.GetKeyValue("alarm_status", dicList); inputView.btnState.Text = Language.StringByID(StringId.zhengchang); if (value == "alarm") { inputView.btnState.Text = Language.StringByID(StringId.qiujiu); } } break; case SPK.SensorSmoke: case SPK.SensorGas: { string value = this.GetKeyValue("alarm_status", dicList); inputView.btnState.Text = Language.StringByID(StringId.wuxieluo); if (value == "alarm") { inputView.btnState.Text = Language.StringByID(StringId.xieluo); } } break; case SPK.SensorWater: { string value = this.GetKeyValue("alarm_status", dicList); inputView.btnState.Text = Language.StringByID(StringId.wuluoshui); if (value == "alarm") { inputView.btnState.Text = Language.StringByID(StringId.luoshui); } } break; case SPK.SensorDryContact: case SPK.SensorDryContact2: { string value = this.GetKeyValue("on_off", dicList); inputView.btnState.Text = Language.StringByID(StringId.offLogic); if (value == "on") { inputView.btnState.Text = Language.StringByID(StringId.onLogic); } } break; case SPK.SensorShanLan: case SPK.SensorDuiShe: case SPK.SensorPir: { string value = this.GetKeyValue("people_status", dicList); inputView.btnState.Text = Language.StringByID(StringId.wuren); if (value == "true") { inputView.btnState.Text = Language.StringByID(StringId.youren); } } break; case SPK.SensorDoorWindow: { string value = this.GetKeyValue("contact_status", dicList); inputView.btnState.Text = Language.StringByID(StringId.bihe); if (value == "open") { inputView.btnState.Text = Language.StringByID(StringId.kaiqi); } } break; case SPK.SensorUtrasonic: { string key = this.GetKey(dicList); string value = this.GetValue(dicList); string str = ""; switch (key) { case "status": case "people_status": { str = Language.StringByID(StringId.wuren); if (value == "true") { str = Language.StringByID(StringId.youren); } } break; case "dismantle": { str = Language.StringByID(StringId.buzaixian); if (value == "true") { str = Language.StringByID(StringId.zaixian); } } break; } inputView.btnState.Text = str; } break; case SPK.SenesorMegahealth: case SPK.SensorMmvPose: { string key = this.GetKey(dicList); string value = this.GetValue(dicList); if (key == "people_status") { inputView.btnState.Text = Language.StringByID(StringId.wuren); if (value == "true") { inputView.btnState.Text = Language.StringByID(StringId.youren); } } else if (key == "target_status") { if (value == "4") { inputView.btnState.Text = Language.StringByID(StringId.shi); } } } break; case SPK.SenesorMegahealth2: { string value = this.GetValue(dicList); inputView.btnState.Text = Language.StringByID(StringId.wuren); if (value == "fall") { inputView.btnState.Text = Language.StringByID(StringId.diedao); } } 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 =this.GetText(dicList, "temperature"); inputView.btnState.Text = str; } break; case SPK.SensorHumidity: { string str = this.GetText(dicList, "humidity"); inputView.btnState.Text = str; } break; case SPK.SensorPm10: case SPK.SensorCO2: case SPK.SensorPm25: case SPK.SensorTVOC: case SPK.SensorHcho: { string value = this.GetValue(dicList); string str = new PublicInterface().GetSensorLevelText(device, value, true); inputView.btnState.Text = str; } break; case SPK.DoorLock: { string value = this.GetValue(dicList); if (value == "open") { inputView.btnState.Text = Language.StringByID(StringId.kaiqi); } } break; case SPK.doorgate: { if (inputCondition.identifier == "door_call_cloud_event") { inputView.btnState.Text = Language.StringByID(StringId.shipintonghuahujiao); } else { string userId = this.GetKeyValue("user_id",dicList); var FaceItem = this.GetFaceItem(userId, device.deviceId); inputView.btnState.Text = FaceItem.userName; } } break; case SPK.IpCam_Imou: { if (inputCondition.identifier == "door_caipcam_region_alram_eventll_cloud_event") { inputView.btnState.Text = Language.StringByID(StringId.quyuruqingaojing); } } 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/location.png"; string value = this.GetValue(dicList); if (value == "arrive") { value = Language.StringByID(StringId.daoda); } else if (value == "leave") { value = Language.StringByID(StringId.likai); } inputView.btnText.TextID = StringId.likiadaoda; inputView.btnState.Text = value; } break; case "10": { //用sid找到场景; var scene = LogicMethod.Current.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 clickInput = 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 == clickInput.sid) { if (button.Name == "3" || button.Name == "9") { //有些设备比较特殊(例如:海林传感器还是要判断属性值,温湿度属性还要判断比较关系,才能确认是否已经存在该条件,其他设备条件直接用sid判断即可) //加一级判断是为兼容特殊设备 if (new ConditionDeviceFunList { }.IsContainsAll(clickInput.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 "9": case "3": { //用sid找到设备; var device = LogicMethod.Current.GetDevice(inputCondition.sid); if (device.spk == SPK.SensorEnvironment || device.spk == SPK.SensorEnvironment2 || device.spk == SPK.SensorEnvironment3 ) { ///当前的索引值数据对象 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.Current.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "humidity": { int titleInt = 0; if (comparator == ">") { titleInt = StringId.shidugaoyu; } else if (comparator == "<") { titleInt = StringId.shidudiyu; } ConditionDeviceFunList.Current.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "co2": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "co2", StringId.co2, indexVulae, true, stateValue); } break; case "pm25": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "pm25", StringId.pm25, indexVulae, true, stateValue); } break; case "tvoc": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "tvoc", StringId.tvoc, indexVulae, true, stateValue); } break; case "hcho": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "hcho", StringId.Formaldehyde, indexVulae, true, stateValue); } break; } } } else if (device.spk == SPK.SensorTemperature) { this.SensorView(thisView, device, "temperature", indexVulae); } else if (device.spk == SPK.SensorHumidity) { this.SensorView(thisView, device, "humidity", indexVulae); } else if (device.spk == SPK.SensorCO2) { this.SensorView(thisView, device, "co2", indexVulae); } else if (device.spk == SPK.SensorPm25) { this.SensorView(thisView, device, "pm25", indexVulae); } else if (device.spk == SPK.SensorTVOC) { this.SensorView(thisView, device, "tvoc", indexVulae); } else if (device.spk == SPK.SensorHcho) { this.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 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.Current.GetDevice(outputTarget.sid); //用设备的functionType类型找到对应图标; targetView.btnIcon.UnSelectedImagePath = LogicMethod.Current.GetDeviceIconPath(device); //显示设备名称 targetView.btnText.Text = device.name; //改变设备名称显示控件宽度 targetView.btnText.Width = Application.GetRealWidth(80); targetView.btnDelay.Visible = false; //区别不同设备,显示不同设备状态 switch (device.spk) { //插座(有USB) case SPK.PanelSocket: { string on_off = GetKeyValue("on_off_master", dicList); if (on_off == "on") { stateStr = Language.StringByID(StringId.onLogic); } else { stateStr = stateStr = Language.StringByID(StringId.offLogic); } } break; case SPK.AirSwitch: case SPK.LightSwitch: //插座 case SPK.ElectricSocket: //机械手 case SPK.MechanicalArm: {//开关 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 + "%"; } if (device.spk == SPK.LightCCT) { //色温这个属性才有效 if (stateStr != Language.StringByID(StringId.offLogic) && GetKeyValue("cct", dicList) != "") { stateStr += "," +GetKeyValue("cct", dicList) + "k"; } } } break; case SPK.CurtainSwitch: { 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.CurtainTrietex: case SPK.CurtainRoller: { string on_off = GetKeyValue("on_off", dicList); string percent = GetKeyValue("percent", dicList); if (on_off == "on" && percent != "") { stateStr = Language.StringByID(StringId.onLogic) + percent + "%"; } else if (on_off == "on") { stateStr = Language.StringByID(StringId.onLogic); } else if (on_off == "off") { stateStr = Language.StringByID(StringId.offLogic); } else if (percent != "") { stateStr = percent + "%"; } } break; case SPK.CurtainDream: { string percent = GetKeyValue("percent", dicList); string angle = GetKeyValue("angle", dicList); if (percent != "" && angle != "") { stateStr += Language.StringByID(StringId.onLogic) + percent + "%;"; stateStr += Language.StringByID(StringId.Angle) + angle + "°"; } else if (percent != "") { stateStr = Language.StringByID(StringId.onLogic) + percent + "%"; } else if (angle != "") { stateStr = Language.StringByID(StringId.onLogic) + Language.StringByID(StringId.Angle) + angle + "°"; } } 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; case SPK.MusicStandard: case SPK.AvMusic: { string song_name = GetKeyValue("song_name", dicList); string volume = GetKeyValue("volume", dicList); stateStr = song_name + ";" +Language.StringByID(StringId.volumeMusic)+volume; if (stateStr.StartsWith(";")) { stateStr = stateStr.Substring(1, stateStr.Length - 1); }else if (stateStr.EndsWith(Language.StringByID(StringId.volumeMusic))) { stateStr = stateStr.Substring(0, stateStr.Length - 3); } } break; } } break; case "2": { //用sid找到场景; var scene = LogicMethod.Current.GetSecne(outputTarget.sid); targetView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png"; targetView.btnNextIcon.Visible = false; //显示场景名称 stateStr = scene.name; } break; case "3": { //用sid找到安防; var security = LogicMethod.Current.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 = this.GetTimeText(outputTarget.delay) + stateStr; } else { targetView.btnText.Text = this.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.Current.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) => { this.Delayed(thisView, outputTarget.delay, (value) => { outputTarget.delay = value.ToString(); if (outputTarget.target_type == "1") { targetView.btnState.Text = this.GetTimeText(outputTarget.delay) + stateStr; } else { targetView.btnText.Text = this.GetTimeText(outputTarget.delay) + stateStr; } }); }; ///删除控件 targetView.btnDel.MouseUpEventHandler += (sender, e) => { Logic.currlogic.output.Remove(outputTarget); targetView.frameLayout.RemoveFromParent(); }; } } /// /// 显示编辑之前的设备状态 /// /// 编辑设备 /// 显示Btn /// 显示Btn /// 显示Btn /// 显示Btn public void EditDeviceState(Entity.Function device, List> dicList, Button button1, Button button2, Button button3, Button button4) { switch (device.spk) { //插座(有USB) case SPK.PanelSocket: { 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.ElectricSocket: //开关灯光 case SPK.AirSwitch: case SPK.LightSwitch: //机械手 case SPK.MechanicalArm: { 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; case "cct": { if (button3 == null) { //怕调试软件乱上东西导致抛异常 break; } button3.Text = value + "k"; } break; } } } break; case SPK.CurtainSwitch: { 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.CurtainTrietex: case SPK.CurtainRoller: { 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; case "stop": { button1.Text = Language.StringByID(StringId.stop); } break; } } break; case "percent": { if (button2 == null) { //怕调试软件乱上东西导致抛异常 break; } button2.Text = value + "%"; } break; } } } break; case SPK.CurtainDream: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "percent": { if (button1 == null) { //怕调试软件乱上东西导致抛异常 break; } button1.Text = value + "%"; } break; case "angle": { if (button2 == null) { //怕调试软件乱上东西导致抛异常 break; } button2.Text = value + "°"; } 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.SensorHelp: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "alarm") { button1.Text = Language.StringByID(StringId.qiujiu); } else { button1.Text = Language.StringByID(StringId.zhengchang); } } } 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") { button2.Text = Language.StringByID(StringId.zaixian); } else { button2.Text = Language.StringByID(StringId.buzaixian); } } break; } } } break; case SPK.SenesorMegahealth: case SPK.SensorMmvPose: { foreach (var dic in dicList) { string value = dic["value"]; switch (dic["key"]) { case "target_status": { if (value == "4") { button1.Text = Language.StringByID(StringId.shi); } } break; case "people_status": { if (value == "true") { button2.Text = Language.StringByID(StringId.youren); } else { button2.Text = Language.StringByID(StringId.wuren); } } break; } } } break; 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; case SPK.DoorLock: { foreach (var dic in dicList) { string value = dic["value"]; if (value == "open") { button1.Text = Language.StringByID(StringId.shi); } } } break; case SPK.MusicStandard: case SPK.AvMusic: { foreach (var dic in dicList) { if (dic["key"] == "song_name") { button1.Text = dic["value"]?.ToString(); } else if (dic["key"] == "volume") { button2.Text = dic["value"]?.ToString(); } } } break; case SPK.doorgate: { string value = this.GetKeyValue("user_id", dicList); button2.Text = this.GetFaceItem(value, device.deviceId).userName; } break; } } /// /// 获取value键值 /// /// /// /// public string GetKeyValue(string keyValue, List> dicList) { string valueStr = ""; foreach (var dic in dicList) { if (dic["key"] == keyValue) { valueStr = dic["value"]; break; } } return valueStr; } /// /// 获取Key值 /// /// 注意:永远默认第一个元素 /// public string GetKey(List> dicList) { if (dicList.Count == 0) { return ""; } return dicList[0]["key"].ToString(); } /// /// 获取value值 /// /// 注意:永远默认第一个元素 /// public string GetValue(List> dicList) { if (dicList.Count == 0) { return ""; } return dicList[0]["value"].ToString(); } /// ///获取自动化名称 /// /// 新建自动化命名规则 public 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": case "9": { //用sid找到设备; var device = LogicMethod.Current.GetDevice(inputCondition.sid); name = device.name + "-"; } break; case "10": { //用sid找到场景; var scene = LogicMethod.Current.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.Current.GetDevice(outputTarget.sid); //显示设备名称 name += device.name; string stateStr = ""; //区别不同设备,显示不同设备状态 switch (device.spk) { case SPK.MechanicalArm: case SPK.AirSwitch: case SPK.LightSwitch: {//开关灯 string value = this.GetValue(dicList); stateStr = Language.StringByID(StringId.offLogic); if (value == "on") { stateStr = Language.StringByID(StringId.onLogic); } } break; case SPK.LightRGB: case SPK.LightRGBW: case SPK.LightCCT: case SPK.LightDimming: { string on_off = this.GetKeyValue("on_off", dicList); string brightness = this.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: { string value = this.GetValue(dicList); stateStr = Language.StringByID(StringId.offLogic); if (value == "on") { stateStr = Language.StringByID(StringId.onLogic); } } break; } name += stateStr; } break; case "2": { //用sid找到场景; var scene = LogicMethod.Current.GetSecne(outputTarget.sid); name += scene.name; } break; case "3": { //用sid找到安防; var security = LogicMethod.Current.GetSecurity(outputTarget.sid); name += security.name; } break; } if (!MainView.IsGatewayType) { name += Language.StringByID(StringId.push); } } catch { } return name; } /// /// 延时时间方法 /// /// 在哪个界面显示 /// 当前延时时间 /// 回调函数 public void Delayed(FrameLayout thisFLayout, string delay, 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 (delay != "0") { int intValue = int.Parse(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.GetmStringList()[index1].Split(' ')[0]; string second = timePointView.GetsStringList()[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) { //因为调试软件上传为空过; string intTimeValue = string.IsNullOrEmpty(strTimeValue) ? "0" : strTimeValue; var timeValue = int.Parse(intTimeValue); 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) { //这个设备比较特殊 ///当前的索引值数据对象 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.Current.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "humidity": { int titleInt = 0; if (comparator == ">") { titleInt = StringId.shidugaoyu; } else if (comparator == "<") { titleInt = StringId.shidudiyu; } ConditionDeviceFunList.Current.InputBoxAction(device, titleInt, indexVulae, true, stateValue); } break; case "co2": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "co2", StringId.co2, indexVulae, true, stateValue); } break; case "pm25": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "pm25", StringId.pm25, indexVulae, true, stateValue); } break; case "tvoc": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "tvoc", StringId.tvoc, indexVulae, true, stateValue); } break; case "hcho": { ConditionDeviceFunList.Current.PmCo2TvocAction(thisView, device, "hcho", StringId.Formaldehyde, indexVulae, true, stateValue); } break; } } } /// /// 查找指定userId /// /// /// public Face GetFaceItem(string userId, string deviceId) { if (Send.Current.faceList.Count == 0) { Send.Current.GetListHomeFace(deviceId, false); } var face = Send.Current.faceList.Find((o) => { return o.userId == userId; }); if (face == null) { face = new Face(); } return face; } } }