using System;
|
using Shared;
|
using System.Collections.Generic;
|
using HDL_ON.Entity;
|
using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock;
|
|
namespace HDL_ON.UI.UI2.Intelligence.Automation
|
{
|
public class ConditionDeviceFunList : FrameLayout
|
{
|
public ConditionDeviceFunList()
|
{
|
Tag = "Logic";
|
}
|
/// <summary>
|
/// 当前选中的功能
|
/// </summary>
|
private Entity.Function function = null;
|
/// <summary>
|
/// 定义一个记录选中设备状态列表;
|
/// </summary>
|
private List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
|
/// <summary>
|
/// 定义一个变量,记录选中状态
|
/// </summary>
|
private string selectedState = "unknown";
|
/// <summary>
|
/// 是不是再次编辑
|
/// </summary>
|
private bool mEdit;
|
/// <summary>
|
/// 输入条件列表索引值
|
/// </summary>
|
private int mIndex;
|
/// <summary>
|
/// 可视对讲专用
|
/// </summary>
|
private string identifier;
|
/// <summary>
|
/// 人体传感器持续时间专用
|
/// </summary>
|
private string hold_time=string.Empty;
|
|
|
|
private static ConditionDeviceFunList m_Current = null;
|
|
public static ConditionDeviceFunList Current
|
{
|
get
|
{
|
if (m_Current == null)
|
{
|
m_Current = new ConditionDeviceFunList();
|
}
|
return m_Current;
|
}
|
}
|
|
public void Show(Entity.Function device, int index, bool edit)
|
{
|
this.function = device;
|
this.mEdit = edit;
|
this.mIndex = index;
|
#region 界面布局
|
this.BackgroundColor = CSS.CSS_Color.viewMiddle;
|
LogicView.TopView topView = new LogicView.TopView();
|
this.AddChidren(topView.FLayoutView());
|
topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
|
{
|
RemoveFromParent();
|
};
|
topView.topNameBtn.Text = device.name;
|
|
FrameLayout fLayout = new FrameLayout
|
{
|
Y = Application.GetRealHeight(64),
|
Height = Application.GetRealHeight(667 - 64),
|
};
|
this.AddChidren(fLayout);
|
#endregion
|
switch (device.spk)
|
{
|
//开关灯光 light.Switch
|
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.AcIr:
|
//地热
|
case SPK.FloorHeatStandard:
|
case SPK.HvacFloorHeat:
|
//新风
|
case SPK.AirFreshStandard:
|
case SPK.HvacAirFresh:
|
//插座
|
case SPK.PanelSocket:
|
case SPK.ElectricSocket:
|
{
|
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.switchLogic;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.onLogic, StringId.offLogic);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//水浸传感器
|
case SPK.SensorWater:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.luoshuiandwuluoshui;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.luoshui, StringId.wuluoshui);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
|
}
|
break;
|
//烟雾传感器
|
case SPK.SensorSmoke:
|
//燃气传感器
|
case SPK.SensorGas:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.xieluoandwuxieluo;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.xieluo, StringId.wuxieluo);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//干接点
|
case SPK.SensorDryContact:
|
case SPK.SensorDryContact2:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.switchLogic;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.onLogic, StringId.offLogic);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
|
}
|
break;
|
//红外珊栏传感器
|
case SPK.SensorShanLan:
|
//红外对射传感器
|
case SPK.SensorDuiShe:
|
//红外移动传感器
|
case SPK.SensorPir:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.yourenandwuren;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.youren, StringId.wuren);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//人体存在传感器
|
case SPK.SensorPirHold:
|
{
|
|
|
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
|
view1.btnText.TextID = StringId.rentijiance;
|
view1.btnText.Name = Language.StringByID(StringId.rentijiance);
|
fLayout.AddChidren(view1.FLayoutView());
|
view1.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view1.btnState, StringId.youren, StringId.wuren);
|
|
};
|
|
LogicView.FunTypeView view2 = new LogicView.FunTypeView();
|
view2.frameLayout.Y = view1.frameLayout.Bottom;
|
view2.btnText.TextID = StringId.chixushijian;
|
fLayout.AddChidren(view2.FLayoutView());
|
view2.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
//主界面控件
|
FrameLayout fLayout = new FrameLayout
|
{
|
BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
|
};
|
this.AddChidren(fLayout);
|
TimeView(fLayout, device, view2.btnState);
|
|
};
|
|
|
if (edit)
|
{
|
try
|
{
|
Input inputs = Logic.currlogic.input[index];
|
if (!string.IsNullOrEmpty(inputs.hold_time) && int.Parse(inputs.hold_time) > 0)
|
{
|
int time = int.Parse(inputs.hold_time);
|
int h = time / (60 * 60);
|
int m = time % (60 * 60) / 60;
|
int s = (time % (60 * 60) % 60);
|
view2.btnState.Text = inputs.hold_time + "s";
|
view2.btnState.Name = h + ":" + m + ":" + s;
|
this.hold_time = inputs.hold_time;
|
}
|
}
|
catch { }
|
GetEditState(device, index, view1.btnState, view2.btnState, null, null);
|
}
|
}
|
break;
|
//门窗传感器
|
case SPK.SensorDoorWindow:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.kaiqiandbihe;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.kaiqi, StringId.bihe);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//超声波传感器
|
case SPK.SensorUtrasonic:
|
{
|
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.yourenandwuren;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.youren, StringId.wuren);
|
};
|
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
|
view1.frameLayout.Y = view.frameLayout.Bottom;
|
view1.btnText.TextID = StringId.fangchaigongneng;
|
fLayout.AddChidren(view1.FLayoutView());
|
|
|
int intValue = 0;
|
if (edit)
|
{
|
Input inputs = Logic.currlogic.input[index];
|
var dicList = inputs.condition;
|
foreach (var dic in dicList)
|
{
|
if (dic["key"] == "people_status")
|
{
|
//有人/无人
|
intValue = 1;
|
}
|
else
|
{
|
//防拆功能
|
intValue = 2;
|
}
|
break;
|
|
}
|
}
|
if (intValue == 1)
|
{
|
//有人/无人
|
view1.frameLayout.Visible = false;
|
|
}
|
else if (intValue == 2)
|
{
|
//防拆功能
|
view1.frameLayout.Y = Application.GetRealHeight(0);
|
}
|
view1.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view1.btnState, StringId.zaixian, StringId.buzaixian);
|
};
|
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, view1.btnState, null, null);
|
}
|
}
|
break;
|
//毫米波传感器(自研北邮)
|
case SPK.SenesorMegahealth:
|
case SPK.SensorMmvPose:
|
{
|
|
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
|
view1.btnText.TextID = StringId.diedaobaojing;
|
view1.btnState.Name = Language.StringByID(StringId.diedaobaojing);
|
fLayout.AddChidren(view1.FLayoutView());
|
view1.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view1.btnState, StringId.shi, StringId.offLogic, 1);
|
};
|
|
LogicView.FunTypeView view2 = new LogicView.FunTypeView();
|
view2.frameLayout.Y = view1.frameLayout.Bottom;
|
view2.btnText.TextID = StringId.yourenbaojing;
|
view2.btnState.Name = Language.StringByID(StringId.yourenbaojing);
|
fLayout.AddChidren(view2.FLayoutView());
|
int intValue = 0;
|
if (edit)
|
{
|
Input inputs = Logic.currlogic.input[index];
|
var dicList = inputs.condition;
|
foreach (var dic in dicList)
|
{
|
if (dic["key"] == "target_status")
|
{
|
//跌倒报警
|
intValue = 1;
|
}
|
else
|
{
|
//有人报警
|
intValue = 2;
|
}
|
break;
|
|
}
|
}
|
if (intValue == 1)
|
{
|
//跌倒报警
|
view2.frameLayout.Visible = false;
|
|
}
|
else if (intValue == 2)
|
{
|
//有人报警
|
view2.frameLayout.Y = Application.GetRealHeight(0);
|
}
|
|
view2.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view2.btnState, StringId.youren, StringId.wuren, 2);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view1.btnState, view2.btnState, null, null);
|
}
|
|
}
|
break;
|
//毫米波传感器(兆观专用云云对接)
|
case SPK.SenesorMegahealth2:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.mubiaozhuangtai;//目标状态
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.wuren, StringId.diedao);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//环境检测传感器
|
case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
|
case SPK.SensorEnvironment2:
|
case SPK.SensorEnvironment3:
|
{
|
#region 界面
|
///温度
|
LogicView.FunTypeView wenuView = new LogicView.FunTypeView();
|
wenuView.btnText.TextID = StringId.wendu;
|
fLayout.AddChidren(wenuView.FLayoutView());
|
///湿度
|
LogicView.FunTypeView shiduView = new LogicView.FunTypeView();
|
shiduView.frameLayout.Y = wenuView.frameLayout.Bottom;
|
shiduView.btnText.TextID = StringId.shidu;
|
fLayout.AddChidren(shiduView.FLayoutView());
|
///pm2.5
|
LogicView.FunTypeView pm25View = new LogicView.FunTypeView();
|
pm25View.frameLayout.Y = shiduView.frameLayout.Bottom;
|
pm25View.btnText.TextID = StringId.pm25;
|
fLayout.AddChidren(pm25View.FLayoutView());
|
///co2
|
LogicView.FunTypeView co2View = new LogicView.FunTypeView();
|
co2View.frameLayout.Y = pm25View.frameLayout.Bottom;
|
co2View.btnText.TextID = StringId.co2;
|
fLayout.AddChidren(co2View.FLayoutView());
|
///tvoc
|
LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
|
tvocView.frameLayout.Y = co2View.frameLayout.Bottom;
|
tvocView.btnText.TextID = StringId.tvoc;
|
if (SPK.SensorEnvironment3 != device.spk)
|
{
|
fLayout.AddChidren(tvocView.FLayoutView());
|
}
|
|
#endregion
|
#region 点击事件
|
///温度点击事件
|
wenuView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
new PublicInterface { }.ViewZuHe(this, StringId.wendugaoyu, StringId.wendudiyu, (intText, view) =>
|
{
|
InputBoxAction(device, intText, index, edit);
|
});
|
};
|
///湿度点击事件
|
shiduView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
new PublicInterface { }.ViewZuHe(this, StringId.shidugaoyu, StringId.shidudiyu, (intText, view) =>
|
{
|
InputBoxAction(device, intText, index, edit);
|
});
|
|
};
|
///pm2.5点击事件
|
pm25View.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "pm25", StringId.pm25, index, edit);
|
};
|
///co2点击事件
|
co2View.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "co2", StringId.co2, index, edit);
|
};
|
///tvoc点击事件
|
tvocView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "tvoc", StringId.tvoc, index, edit);
|
|
};
|
#endregion
|
}
|
break;
|
//温度传感器
|
case SPK.SensorTemperature:
|
{
|
///温度
|
LogicView.FunTypeView wenuView = new LogicView.FunTypeView();
|
wenuView.btnText.TextID = StringId.wendu;
|
fLayout.AddChidren(wenuView.FLayoutView());
|
|
///温度点击事件
|
wenuView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
new PublicInterface { }.ViewZuHe(this, StringId.wendugaoyu, StringId.wendudiyu, (intText, view) =>
|
{
|
InputBoxAction(device, intText, index, edit);
|
});
|
};
|
}
|
break;
|
//湿度传感器
|
case SPK.SensorHumidity:
|
{
|
///湿度
|
LogicView.FunTypeView shiduView = new LogicView.FunTypeView();
|
shiduView.btnText.TextID = StringId.shidu;
|
fLayout.AddChidren(shiduView.FLayoutView());
|
///湿度点击事件
|
shiduView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
new PublicInterface { }.ViewZuHe(this, StringId.shidugaoyu, StringId.shidudiyu, (intText, view) =>
|
{
|
InputBoxAction(device, intText, index, edit);
|
});
|
|
};
|
}
|
break;
|
//co2
|
case SPK.SensorCO2:
|
{
|
|
|
///co2
|
LogicView.FunTypeView co2View = new LogicView.FunTypeView();
|
co2View.btnText.TextID = StringId.co2;
|
fLayout.AddChidren(co2View.FLayoutView());
|
|
///co2点击事件
|
co2View.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "co2", StringId.co2, index, edit);
|
};
|
}
|
break;
|
//pm10
|
case SPK.SensorPm10:
|
{
|
///pm210
|
LogicView.FunTypeView pm10View = new LogicView.FunTypeView();
|
pm10View.btnText.TextID = StringId.pm10;
|
fLayout.AddChidren(pm10View.FLayoutView());
|
|
///pm10点击事件
|
pm10View.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "pm10", StringId.pm10, index, edit);
|
};
|
}
|
break;
|
//pm2.5
|
case SPK.SensorPm25:
|
{
|
///pm2.5
|
LogicView.FunTypeView pm25View = new LogicView.FunTypeView();
|
pm25View.btnText.TextID = StringId.pm25;
|
fLayout.AddChidren(pm25View.FLayoutView());
|
|
///pm2.5点击事件
|
pm25View.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "pm25", StringId.pm25, index, edit);
|
};
|
}
|
break;
|
//tvoc
|
case SPK.SensorTVOC:
|
{
|
|
///tvoc
|
LogicView.FunTypeView tvocView = new LogicView.FunTypeView();
|
tvocView.btnText.TextID = StringId.tvoc;
|
fLayout.AddChidren(tvocView.FLayoutView());
|
|
///tvoc点击事件
|
tvocView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "tvoc", StringId.tvoc, index, edit);
|
|
};
|
}
|
break;
|
//甲醛
|
case SPK.SensorHcho:
|
{
|
///hcho
|
LogicView.FunTypeView hchoView = new LogicView.FunTypeView();
|
hchoView.btnText.TextID = StringId.Formaldehyde;
|
fLayout.AddChidren(hchoView.FLayoutView());
|
///hcho点击事件
|
hchoView.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
PmCo2TvocAction(this, device, "hcho", StringId.Formaldehyde, index, edit);
|
|
};
|
}
|
break;
|
//门锁
|
case SPK.DoorLock:
|
{
|
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.shifoukaisuoshi;
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
DeviceView(device, view.btnState, StringId.shi, StringId.offLogic, 1);
|
};
|
if (edit)
|
{
|
GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//可视对讲
|
case SPK.doorgate:
|
{
|
|
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
|
view1.btnText.TextID = StringId.shipintonghuahujiao;
|
view1.btnText.Name = Language.StringByID(StringId.shipintonghuahujiao);
|
fLayout.AddChidren(view1.FLayoutView());
|
view1.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
this.identifier = "door_call_cloud_event";
|
this.DeviceView(device, view1.btnState, StringId.shi, StringId.offLogic, 1);
|
};
|
|
LogicView.FunTypeView view2 = new LogicView.FunTypeView();
|
view2.frameLayout.Y = view1.frameLayout.Bottom;
|
view2.btnText.TextID = StringId.renliankaimen;
|
fLayout.AddChidren(view2.FLayoutView());
|
view2.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
this.identifier = "door_pedestrian_records";
|
this.FaceAction(this, device, view2.btnState);
|
};
|
|
int intValue = 0;
|
if (edit)
|
{
|
Input inputs = Logic.currlogic.input[index];
|
if (inputs.identifier == "door_call_cloud_event")
|
{
|
intValue = 1;
|
}
|
else
|
{
|
intValue = 2;
|
}
|
}
|
if (intValue == 1)
|
{
|
|
view2.frameLayout.Visible = false;
|
|
}
|
else if (intValue == 2)
|
{
|
|
view2.frameLayout.Y = Application.GetRealHeight(0);
|
}
|
if (edit)
|
{
|
this.GetEditState(device, index, view1.btnState, view2.btnState, null, null);
|
}
|
}
|
break;
|
//大华摄像头
|
case SPK.IpCam_Imou:
|
{
|
LogicView.FunTypeView view = new LogicView.FunTypeView();
|
view.btnText.TextID = StringId.quyuruqingaojing;
|
view.btnText.Name = Language.StringByID(StringId.shipintonghuahujiao);
|
fLayout.AddChidren(view.FLayoutView());
|
view.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
this.identifier = "ipcam_region_alram_event";
|
this.DeviceView(device, view.btnState, StringId.shi, StringId.offLogic, 1);
|
};
|
|
if (edit)
|
{
|
this.GetEditState(device, index, view.btnState, null, null, null);
|
}
|
}
|
break;
|
//萤石视频门锁
|
case SPK.VideoDoorLock:
|
{
|
LogicView.FunTypeView view1 = new LogicView.FunTypeView();
|
view1.btnText.TextID=StringId.kaimenrenyuan;
|
view1.btnText.Name = Language.StringByID(StringId.shipinmensuo);
|
fLayout.AddChidren(view1.FLayoutView());
|
view1.btnClick.MouseUpEventHandler += (sender, e) =>
|
{
|
this.identifier = "open_door";//开锁事件
|
this.VideoDoorLockAction(this, device, view1.btnState);
|
};
|
if (edit)
|
{
|
this.GetEditState(device, index, view1.btnState,null, null, null);
|
}
|
}
|
break;
|
|
}
|
#region 保存
|
///保存View
|
LogicView.SaveView saveView = new LogicView.SaveView();
|
saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
|
saveView.btnSave.TextID = StringId.completeLogic;
|
this.AddChidren(saveView.FLayoutView());
|
saveView.btnClick.MouseUpEventHandler += (sen, e) =>
|
{
|
this.SaveInput(device,index, edit);
|
};
|
|
#endregion
|
|
}
|
/// <summary>
|
/// 保存输入条件
|
/// </summary>
|
/// <param name="index">索引值</param>
|
/// <param name="edit"></param>
|
private void SaveInput(Entity.Function device,int index, bool edit)
|
{
|
|
if (selectedState != "unknown")
|
{
|
Input inputDevice = new Input();
|
inputDevice.condition_type = "3";
|
inputDevice.sid = device.sid;
|
inputDevice.condition.AddRange(dicSateteList);
|
if (device.spk == SPK.doorgate)
|
{
|
//可视对讲
|
inputDevice.condition_type = "9";
|
inputDevice.identifier = this.identifier;
|
if (this.identifier == "door_call_cloud_event")
|
{
|
inputDevice.condition = new List<Dictionary<string, string>>();
|
}
|
}
|
else if (device.spk == SPK.IpCam_Imou)
|
{
|
//大华摄像头
|
inputDevice.condition_type = "9";
|
inputDevice.identifier = this.identifier;
|
if (this.identifier == "ipcam_region_alram_event")
|
{
|
//condition默认[]
|
inputDevice.condition = new List<Dictionary<string, string>>();
|
}
|
}
|
else if (device.spk == SPK.VideoDoorLock)
|
{
|
////萤石视频门锁
|
inputDevice.condition_type = "9";
|
inputDevice.identifier = this.identifier;
|
}
|
else if (device.spk == SPK.SensorPirHold)
|
{
|
//人体存在传感器
|
inputDevice.hold_time = this.hold_time;
|
}
|
|
|
if (edit)
|
{
|
//移除旧数据
|
Logic.currlogic.input.RemoveAt(index);
|
//新数据插入旧数据的位置;
|
Logic.currlogic.input.Insert(index, inputDevice);
|
}
|
else
|
{
|
//添加一个条件
|
AddCondition(inputDevice);
|
}
|
}
|
else
|
{
|
if (!edit)
|
{
|
//提示用户
|
return;
|
}
|
this.RemoveFromParent();
|
return;
|
}
|
LogicMethod.Current.RemoveAllView();
|
if (MainView.IsGatewayType)
|
{ //A网关
|
var addLogic = new AddLogic();
|
MainPage.BasePageView.AddChidren(addLogic);
|
addLogic.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
}
|
else
|
{
|
//一端口网关
|
var onePortAutomation = new OnePortAutomation();
|
MainPage.BasePageView.AddChidren(onePortAutomation);
|
onePortAutomation.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
}
|
|
}
|
|
/// <summary>
|
/// 设备选择条件界面
|
/// </summary>
|
/// <param name="device">设备</param>
|
/// <param name="button">选中状态显示文本Btn控件</param>
|
/// <param name="btnText1">属性状态值文本1</param>
|
/// <param name="btnText2">属性状态值文本2</param>
|
/// <param name="viewCount">view数量</param>
|
private void DeviceView(Entity.Function device, Button button, int btnText1, int btnText2,int viewCount=2)
|
{
|
FrameLayout frame = new FrameLayout { BackgroundColor = CSS.CSS_Color.viewTrans60lucence };
|
this.AddChidren(frame);
|
LogicView.SwitchView switchView = new LogicView.SwitchView();
|
switchView.FLayoutView(frame, btnText1, btnText2, button.Text, viewCount,(intValue) =>
|
{
|
//设备属性值,云雀上定义好的;
|
string keyVlaue = "on_off";
|
string value = "";
|
switch (device.spk)
|
{
|
//传感器
|
case SPK.SensorGas:
|
case SPK.SensorWater:
|
case SPK.SensorSmoke:
|
{
|
keyVlaue = "status";
|
if (!Is_SpkAttribute(keyVlaue)) {
|
keyVlaue = "alarm_status";
|
}
|
};
|
break;
|
case SPK.SensorDoorWindow:
|
case SPK.SensorDryContact:
|
case SPK.SensorDryContact2:
|
{
|
keyVlaue = "status";
|
if (!Is_SpkAttribute(keyVlaue))
|
{
|
keyVlaue = "contact_status";
|
}
|
}
|
break;
|
case SPK.SensorPirHold:
|
case SPK.SensorDuiShe:
|
case SPK.SensorShanLan:
|
case SPK.SensorPir:
|
case SPK.SensorUtrasonic:
|
{
|
keyVlaue = "status";
|
if (!Is_SpkAttribute(keyVlaue))
|
{
|
keyVlaue = "people_status";
|
}
|
|
}
|
break;
|
case SPK.SenesorMegahealth:
|
{
|
if (button != null)
|
{
|
|
if (button.Name == Language.StringByID(StringId.yourenbaojing))
|
{
|
keyVlaue = "people_status";
|
|
}
|
else
|
{
|
keyVlaue = "target_status";
|
}
|
}
|
|
}
|
break;
|
case SPK.SenesorMegahealth2:
|
{
|
keyVlaue = "action_state";
|
if (!Is_SpkAttribute(keyVlaue))
|
{
|
keyVlaue = "megahealth_state";
|
}
|
}
|
break;
|
case SPK.DoorLock:
|
{
|
keyVlaue = "door_status";
|
}
|
break;
|
|
}
|
switch (intValue)
|
{
|
case StringId.xieluo:
|
case StringId.luoshui:
|
{
|
value = "alarm";
|
}
|
break;
|
case StringId.wuxieluo:
|
case StringId.wuluoshui:
|
{
|
value = "normal";
|
}
|
break;
|
case StringId.onLogic:
|
{
|
value = "on";
|
}
|
break;
|
case StringId.offLogic:
|
{
|
value = "off";
|
}
|
break;
|
case StringId.youren:
|
{
|
value = "true";
|
}
|
break;
|
case StringId.wuren:
|
{
|
if (device.spk == SPK.SenesorMegahealth2)
|
{
|
value = "uninhabited";
|
}
|
else
|
{
|
value = "false";
|
}
|
}
|
break;
|
case StringId.shi:
|
{
|
value = "open";
|
if (button != null)
|
{
|
|
if (button.Name == Language.StringByID(StringId.yourenbaojing))
|
{
|
//状态(有人)
|
value = "true";
|
|
}
|
else if(button.Name == Language.StringByID(StringId.diedaobaojing))
|
{
|
//跌倒
|
value = "4";
|
}
|
}
|
}
|
break;
|
case StringId.kaiqi:
|
{
|
value = "open";
|
}
|
break;
|
case StringId.bihe:
|
{
|
value = "close";
|
}
|
break;
|
case StringId.zaixian:
|
{
|
keyVlaue = "dismantle";
|
value = "true";
|
}; break;
|
case StringId.buzaixian:
|
{
|
keyVlaue = "dismantle";
|
value = "false";
|
}; break;
|
case StringId.diedao:
|
{
|
value = "fall";
|
}; break;
|
|
|
}
|
//显示文本
|
button.TextID = intValue;
|
selectedState = device.spk + "_" + value;
|
AddDictionary(keyVlaue, value, "string");
|
if (button != null)
|
{
|
|
|
if (button.Name == Language.StringByID(StringId.yourenbaojing)
|
|| (button.Name == Language.StringByID(StringId.diedaobaojing)))
|
{
|
//只有毫米波传感器(自研)
|
SaveInput(device, mIndex, mEdit);
|
}
|
else if (button.Name == Language.StringByID(StringId.shipintonghuahujiao)) {
|
//只有毫米波传感器(自研)
|
SaveInput(device, mIndex, mEdit);
|
}
|
}
|
|
|
});
|
|
}
|
/// <summary>
|
/// 温度,湿度弹框设置值
|
/// </summary>
|
/// <param name="textInt">文本</param>
|
/// <param name="stateValue">编辑之前的状态值,默认为20</param>
|
public void InputBoxAction(Entity.Function device, int textInt, int index, bool edit, string stateValue = "20")
|
{
|
if (edit)
|
{
|
Input inputs = Logic.currlogic.input[index];
|
//清除之前旧数据
|
dicSateteList.Clear();
|
if (inputs.condition.Count != 0)
|
{
|
//有数据重新赋值
|
dicSateteList.AddRange(inputs.condition);
|
}
|
}
|
new LogicView.TipPopView { }.InputBox(textInt, stateValue, (value) =>
|
{
|
string keyValue = "20";
|
string data_type = "integer";
|
string comparator = "=";
|
switch (textInt)
|
{
|
case StringId.wendugaoyu:
|
{
|
keyValue = "temperature";
|
comparator = ">";
|
data_type = "float";
|
}
|
break;
|
case StringId.wendudiyu:
|
{
|
keyValue = "temperature";
|
comparator = "<";
|
data_type = "float";
|
}
|
break;
|
case StringId.shidugaoyu:
|
{
|
keyValue = "humidity";
|
comparator = ">";
|
}
|
break;
|
case StringId.shidudiyu:
|
{
|
keyValue = "humidity";
|
comparator = "<";
|
}
|
break;
|
}
|
selectedState = device.spk + "_" + value;
|
AddDictionary(keyValue, value, data_type, comparator);
|
SaveInput(device,index, edit);
|
});
|
}
|
/// PM2.5,Co2,Tvoc设置值
|
/// </summary>
|
/// <param name="frame">当前界面</param>
|
/// <param name="key">属性值,云雀上定义好的<</param>
|
/// <param name="title">标题文本</param>
|
/// <param name="index"></param>
|
/// <param name="edit"></param>
|
/// <param name="stateValue">编辑之前的状态值,默认为""</param>
|
public void PmCo2TvocAction(FrameLayout frame, Entity.Function device, string key, int title, int index, bool edit, string stateValue = "")
|
{
|
if (edit)
|
{
|
///
|
this.function = device;
|
Input inputs = Logic.currlogic.input[index];
|
//清除之前旧数据
|
dicSateteList.Clear();
|
if (inputs.condition.Count != 0)
|
{
|
//有数据重新赋值
|
dicSateteList.AddRange(inputs.condition);
|
}
|
}
|
PublicInterface view = new PublicInterface();
|
|
var listStr = view.GetSensorLevelList(device);//2022年05月25日10:01:33 产品经理君煌要求改成动态
|
//if (listStr.Count == 0)
|
//{
|
// //听说是为了兼用很老很老的项目
|
// listStr = view.GetViewList(key);
|
//}
|
view.SingleSelectionShow(frame, listStr, Language.StringByID(title), view.GetSensorLevelText(device, stateValue,true)
|
, (text) =>
|
{
|
|
//var value = view.GetValue(key, text);
|
var values = view.GetSensorLevelText(device,text,false);
|
selectedState = device.spk + "_" + key;
|
switch (device.spk)
|
{
|
case SPK.SensorTemperature:
|
case SPK.SensorHumidity:
|
case SPK.SensorCO2:
|
case SPK.SensorPm25:
|
case SPK.SensorTVOC:
|
case SPK.SensorHcho:
|
case SPK.SensorPm10:
|
{
|
if (!Is_SpkAttribute(key))
|
{
|
key = "value";
|
}
|
}
|
break;
|
}
|
AddDictionary(key, values, "integer", "in");
|
SaveInput(device, index, edit);
|
});
|
}
|
/// <summary>
|
/// 可视对讲专用
|
/// </summary>
|
/// <param name="frame">当前界面</param>
|
/// <param name="device">当前设备</param>
|
/// <param name="btnState">旧状态</param>
|
public void FaceAction(FrameLayout frame, Entity.Function device, Button btnState)
|
{
|
selectedState = device.spk + "_";
|
Loading loading = new Loading();
|
frame.AddChidren(loading);
|
loading.Start();
|
|
CommonMethod.Current.SunThread(() =>
|
{
|
try
|
{
|
var faceIdList = Send.Current.GetListHomeFace(device.deviceId, true);
|
|
CommonMethod.Current.MainThread(() =>
|
{
|
loading.Hide();
|
string stateValue = btnState.Tag == null ? "" : btnState.Tag.ToString();
|
PublicInterface publicInterface = new PublicInterface();
|
publicInterface.MultiSelectShow(this, faceIdList, device.name, stateValue, (indexeList) =>
|
{
|
if (indexeList.Count > 0)
|
{
|
dicSateteList.Clear();
|
string s = string.Empty;
|
string tag = string.Empty;
|
//数据封装
|
AddDictionary("open_type", "1", "integer");
|
for (int i = 0; i < indexeList.Count; i++)
|
{
|
|
if (i > faceIdList.Count)
|
{
|
continue;
|
}
|
var indexe = indexeList[i];
|
var face = faceIdList[indexe];
|
AddDictionary("user_id", face.userId, "string");
|
s += face.userName;
|
s += ",";
|
tag += face.userId;
|
tag += "_";
|
}
|
//界面显示选中值
|
btnState.Text = s;
|
btnState.Tag = tag;
|
}
|
|
});
|
});
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
loading.Hide();
|
});
|
}
|
|
});
|
|
}
|
|
/// <summary>
|
/// 萤石视频门锁专用
|
/// </summary>
|
/// <param name="frame">当前界面</param>
|
/// <param name="device">当前设备</param>
|
/// <param name="btnState">旧状态</param>
|
public void VideoDoorLockAction(FrameLayout frame, Entity.Function device, Button btnState)
|
{
|
selectedState = device.spk + "_";
|
Loading loading = new Loading();
|
frame.AddChidren(loading);
|
loading.Start();
|
CommonMethod.Current.SunThread(() =>
|
{
|
try
|
{
|
var faceIdList = Send.Current.GetVideoDoorLockUserListInfo(device);
|
CommonMethod.Current.MainThread(() =>
|
{
|
|
loading.Hide();
|
string stateValue = btnState.Text == null ? "" : btnState.Text.ToString();
|
PublicInterface publicInterface = new PublicInterface();
|
publicInterface.MultiSelectShow(this, faceIdList, device.name, stateValue, (indexeList) =>
|
{
|
if (indexeList.Count > 0)
|
{
|
dicSateteList.Clear();
|
string s = string.Empty;
|
string tag = string.Empty;
|
for (int i = 0; i < indexeList.Count; i++)
|
{
|
if (i > faceIdList.Count)
|
{
|
continue;
|
}
|
var indexe = indexeList[i];
|
var face = faceIdList[indexe];
|
//数据封装<高胜说萤石那边是推送用户名>
|
AddDictionary("open_user", face.userName, "string");
|
s += face.userName;
|
s += ",";
|
tag += face.userId;
|
tag += "_";
|
}
|
//界面显示选中值
|
btnState.Text = s;
|
btnState.Tag = tag;
|
}
|
|
});
|
|
});
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
loading.Hide();
|
});
|
}
|
|
});
|
|
}
|
|
/// <summary>
|
/// 时间方法
|
/// </summary>
|
/// <param name="fLayout">在哪个界面显示</param>
|
/// <param name="edit">(true=编辑;false=新建)</param>
|
/// <param name="index">编辑条件的索引</param>
|
private void TimeView(FrameLayout fLayout,Function device, Button button)
|
{
|
|
LogicView.TimeView timePointView = new LogicView.TimeView();
|
timePointView.FLayoutView(fLayout);
|
timePointView.Time(fLayout, button.Name, (timeValue) =>
|
{
|
try
|
{
|
if (timeValue.Contains(":"))
|
{
|
string[] ary = timeValue.Split(':');
|
|
int h = int.Parse(ary[0]) * 60 * 60;
|
int m = int.Parse(ary[1]) * 60;
|
int s = int.Parse(ary[2]);
|
this.hold_time = (h + m + s).ToString();
|
if (button != null)
|
{
|
button.Text = this.hold_time + "s";
|
button.Name = timeValue;
|
}
|
selectedState = device.spk + "_" + timeValue;
|
}
|
}
|
catch { }
|
|
});
|
|
}
|
|
/// <summary>
|
/// 显示编辑之前的设备状态
|
/// </summary>
|
/// <param name="device">编辑设备</param>
|
/// <param name="index">编辑数据的索引</param>
|
/// <param name="button1">显示Btn</param>
|
/// <param name="button2">显示Btn</param>
|
/// <param name="button3">显示Btn</param>
|
/// <param name="button4">显示Btn</param>
|
private void GetEditState(Entity.Function device, int index, Button button1, Button button2, Button button3, Button button4)
|
{
|
Input inputs = Logic.currlogic.input[index];
|
var dicList = inputs.condition;
|
//清除之前旧数据
|
dicSateteList.Clear();
|
if (dicList.Count != 0)
|
{
|
//有数据重新赋值
|
dicSateteList.AddRange(dicList);
|
}
|
InpOrOutLogicMethod.Current.EditDeviceState(device, dicList, button1, button2, button3, button4);
|
}
|
/// <summary>
|
/// 添加选中数据
|
/// </summary>
|
/// <param name="KeyValue">设备属性值,云雀上定义好的</param>
|
/// <param name="selectedValue">状态值</param>
|
/// <param name="data_type">类型</param>
|
/// <param name="comparator">比较关系</param>
|
private void AddDictionary(string KeyValue, string selectedValue, string data_type, string comparator = "=")
|
{
|
//数据封装
|
Dictionary<string, string> dic = new Dictionary<string, string>();
|
LogicMethod.Current.dictionary(dic, "key", KeyValue);
|
LogicMethod.Current.dictionary(dic, "comparator", comparator);
|
LogicMethod.Current.dictionary(dic, "data_type", data_type);
|
LogicMethod.Current.dictionary(dic, "value", selectedValue);
|
AddDictionaryList(dic);
|
}
|
/// <summary>
|
/// 更新数据列表
|
/// </summary>
|
/// <param name="keyValue">设备属性值,云雀上定义好的</param>
|
/// <param name="comparator">比较关系</param>
|
/// <param name="dictionary">添加选中数据</param>
|
/// <returns></returns>
|
private void AddDictionaryList(Dictionary<string, string> dictionary)
|
{
|
var indexValue = IsContainsAll(dictionary, dicSateteList);
|
if (indexValue != -1)
|
{
|
//存在移除
|
dicSateteList.RemoveAt(indexValue);
|
//重新添加
|
dicSateteList.Insert(indexValue, dictionary);
|
}
|
else
|
{
|
//新添加
|
dicSateteList.Add(dictionary);
|
}
|
|
}
|
/// <summary>
|
/// 添加条件
|
/// </summary>
|
/// <param name="input"></param>
|
private void AddCondition(Input input)
|
{
|
int indexValue = -1;
|
for (int i = 0; i < Logic.currlogic.input.Count; i++)
|
{
|
if (Logic.currlogic.input[i].sid == input.sid)
|
{
|
//有些设备比较特殊(例如:海林传感器还是要判断属性值,温湿度属性还要判断比较关系,才能确认是否已经存在该条件,其他设备条件直接用sid判断即可)
|
//加一级判断是为兼容特殊设备
|
if (IsContainsAll(input.condition, Logic.currlogic.input[i].condition))
|
{
|
indexValue = i;
|
break;
|
}
|
}
|
}
|
|
if (indexValue != -1)
|
{
|
Logic.currlogic.input.RemoveAt(indexValue);
|
Logic.currlogic.input.Insert(indexValue, input);
|
}
|
else
|
{
|
Logic.currlogic.input.Add(input);
|
}
|
|
}
|
/// <summary>
|
/// 判断dictionaryB列表是否完整包含另一个dictionaryA
|
/// </summary>
|
/// <param name="dictionaryA">对象</param>
|
/// <param name="dictionaryB">列表</param>
|
/// <returns>返回列表的索引值</returns>
|
public int IsContainsAll(Dictionary<string, string> dictionaryA, List<Dictionary<string, string>> dictionaryB)
|
{
|
int valueInt = -1;
|
for (int i = 0; i < dictionaryB.Count; i++)
|
{
|
var dic = dictionaryB[i];
|
string key = dic["key"];
|
string comparatorValue = dic["comparator"];
|
string value = dic["value"];
|
if (dictionaryA["key"] == key && dictionaryA["comparator"] == comparatorValue)
|
{
|
if (this.checkSpk())
|
{
|
//有些设备需要增加这个判断
|
if (dictionaryA["value"] == value)
|
{
|
//判断是否存在
|
valueInt = i;
|
break;
|
}
|
}
|
else
|
{
|
//判断是否存在
|
valueInt = i;
|
break;
|
}
|
}
|
}
|
return valueInt;
|
}
|
/// <summary>
|
/// 检查是否支持
|
/// </summary>
|
/// <returns></returns>
|
private bool checkSpk()
|
{
|
if (this.function.spk == SPK.VideoDoorLock ||
|
this.function.spk == SPK.doorgate
|
)
|
{
|
return true;
|
}
|
return false;
|
|
}
|
/// <summary>
|
/// 判断dictionaryB是否完整包含另一个dictionaryA
|
/// </summary>
|
/// <param name="dictionaryA"></param>
|
/// <param name="dictionaryB"></param>
|
/// <returns></returns>
|
public bool IsContainsAll(List<Dictionary<string, string>> dictionaryA, List<Dictionary<string, string>> dictionaryB)
|
{
|
|
for (int i = 0; i < dictionaryA.Count; i++)
|
{
|
var dic = dictionaryA[i];
|
string key = dic["key"];
|
string comparatorValue = dic["comparator"];
|
var list = dictionaryB.FindAll((dictionary) => dictionary["key"] == key && dictionary["comparator"] == comparatorValue);
|
if (list.Count> 0)
|
{
|
return true;
|
}
|
|
}
|
return false;
|
}
|
|
/// <summary>
|
/// 识别使用功能是否存在属性
|
/// </summary>
|
/// <param name="key">设备属性,云雀上定义好的</param>
|
/// <returns></returns>
|
private bool Is_SpkAttribute(string key) {
|
///修改新属性
|
///识别使用功能是否存在属性
|
if (this.function==null) {
|
return false;
|
}
|
var job = this.function.GetAttribute(key);
|
if (job != null)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
}
|
}
|