public virtual void OnObjectStatusEH(STATUS_INFO info) { ObjectStatusEH handler = OnObjectStatus; if (handler != null) { handler(info); } }
public static bool cbMessageCallBack(int lCommand, int lLoginID, IntPtr pBuf, uint dwBufLen, string pchDVRIP, int nDVRPort, IntPtr dwUser) { ProtocolDHAlarm instrument = listInstrument.Find(x => x.device.ip == pchDVRIP); if (instrument == null) { return(true); } switch (lCommand) { case 0x2175: //DH_ALARM_ALARM_EX2 break; case 0x3183: ALARM_INPUT_SOURCE_SIGNAL_INFO alarmInput = (ALARM_INPUT_SOURCE_SIGNAL_INFO)Marshal.PtrToStructure(pBuf, typeof(ALARM_INPUT_SOURCE_SIGNAL_INFO)); Sensor sensor = instrument.FindSensorBySID(1, alarmInput.nChannelID); if (sensor != null) { if (alarmInput.nAction == 0) { STATUS_INFO old = instrument.listAlarm.Find(x => x.id == sensor.id); if (old == null) { STATUS_INFO info = new STATUS_INFO(); info.no = (int)sensor.id; info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ALARM; info.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = MONITOR_TYPE.io; info.confidence = 100; instrument.OnObjectStatusEH(info); instrument.listAlarm.Add(info); } } else if (alarmInput.nAction == 1) { STATUS_INFO old = instrument.listAlarm.Find(x => x.id == sensor.id); if (old != null) { instrument.listAlarm.Remove(old); } } } break; /* * case 0x3195: * ALARM_MODULE_LOST_INFO lostInfo = (ALARM_MODULE_LOST_INFO)Marshal.PtrToStructure(pBuf, typeof(ALARM_MODULE_LOST_INFO)); * for (int i = 0; i < lostInfo.nAddr; i++) * { * Sensor sensorError = instrument.FindSensorBySID(1, lostInfo.anAddr[i]); * if (sensorError != null) * { * if (lostInfo.bOnline) * { * ERROR_INFO old = instrument.listError.Find(x => x.id == sensorError.id); * if (old != null) * { * ERROR_INFO info = new ERROR_INFO(); * info.id = sensorError.id; * info.name = sensorError.name; * info.status = STATUS_TYPE.NORMAL; * info.starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); * info.type = OBJECT_TYPE.sensor; * instrument.OnObjectErrorEH(info); * instrument.listError.Remove(old); * } * } * else * { * ERROR_INFO old = instrument.listError.Find(x => x.id == sensorError.id); * if (old == null) * { * ERROR_INFO info = new ERROR_INFO(); * info.id = sensorError.id; * info.name = sensorError.name; * info.status = STATUS_TYPE.ERROR; * info.starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); * info.type = OBJECT_TYPE.sensor; * instrument.OnObjectErrorEH(info); * instrument.listError.Add(info); * } * } * } * } * break; */ } return(true); }
private static void ThreadMethod(object o) { ProtocolMoxa moxa = (ProtocolMoxa)o; Device device = moxa.device; while (true) { Thread.Sleep(1000); if (!device.enable) { continue; } if (moxa.handle == -1) { continue; } lock (lc) { foreach (var group in device.listChannel) { if (group.number != 1) { continue; } foreach (var sensor in group.listSensor) { byte value = 100; byte channel = (byte)sensor.number; if (DI_Read(moxa.handle, 1, channel, ref value) == 0) { if (value == 0) { STATUS_INFO old = moxa.listAlarm.Find(x => x.id == sensor.id); if (old != null) { continue; } STATUS_INFO info = new STATUS_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ALARM; info.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = MONITOR_TYPE.io; info.confidence = 100; moxa.listAlarm.Add(info); moxa.OnObjectStatusEH(info); } else { STATUS_INFO old = moxa.listAlarm.Find(x => x.id == sensor.id); if (old != null) { moxa.listAlarm.Remove(old); } } } } } } } }
private static void cbNetMsgProc(int handle, int nType, IntPtr pointer) { if (GlobalMain.from == null) { return; } ProtocolDVS driver = GlobalMain.from._listDriver.Find(x => x.instance == handle) as ProtocolDVS; if (driver == null) { return; } switch ((CMD_CODE)nType) { case CMD_CODE.R_CONNECT: driver.OnConnectEH(driver.device, 0); break; case CMD_CODE.R_DISCONNECT: driver.OnConnectEH(driver.device, 1); break; case CMD_CODE.R_EVENT: { EVENT_PACK pack = (EVENT_PACK)Marshal.PtrToStructure(pointer, typeof(EVENT_PACK)); if (pack.alarmneed == 0) { break; } Sensor sensor = driver.FindSensorBySID(pack.channel, pack.id); if (sensor != null) { STATUS_INFO info = new STATUS_INFO(); info.no = pack.no; info.id = sensor.id; info.type = (MONITOR_TYPE)sensor.type; info.name = sensor.name; info.range1 = pack.range1.ToString(); info.range2 = pack.range2.ToString(); info.confidence = pack.confidence / 100; info.classification = (CLASSIFICATION)pack.classification; info.status = STATUS_TYPE.ALARM; DateTime vDateTime = new DateTime( pack.time.vYear, pack.time.vMonth, pack.time.vDay, // 月日年 pack.time.vHour, pack.time.vMinute, pack.time.vSecond, // 时分秒 pack.time.vMiliseconds); // 毫秒 info.time = vDateTime.ToString("yyyy-MM-dd HH:mm:ss"); driver.OnObjectStatusEH(info); } } break; case CMD_CODE.R_ERROR: { ERROR_PACK pack = (ERROR_PACK)Marshal.PtrToStructure(pointer, typeof(ERROR_PACK)); Sensor sensor = driver.FindSensorBySID(pack.channel, pack.id); if (sensor != null) { DateTime vDateTime = new DateTime( pack.time.vYear, pack.time.vMonth, pack.time.vDay, // 月日年 pack.time.vHour, pack.time.vMinute, pack.time.vSecond, // 时分秒 pack.time.vMiliseconds); // 毫秒 Channel channel = driver.device.listChannel.Find(x => x.number == pack.channel); if (channel != null) { List <Sensor> listSensorFront = channel.listSensor.FindAll(x => (x.number != sensor.number && x.status == STATUS_TYPE.ERROR)); foreach (var front in listSensorFront) { ERROR_INFO infoFront = new ERROR_INFO(); infoFront.id = front.id; infoFront.name = front.name; infoFront.status = STATUS_TYPE.NORMAL; infoFront.starttime = vDateTime.ToString("yyyy-MM-dd HH:mm:ss"); infoFront.type = OBJECT_TYPE.sensor; driver.OnObjectErrorEH(infoFront); } } ERROR_INFO info = new ERROR_INFO(); info.id = sensor.id; info.name = sensor.name; if (pack.error == 1) { info.status = STATUS_TYPE.ERROR; } else if (pack.error == 0) { info.status = STATUS_TYPE.NORMAL; } info.starttime = vDateTime.ToString("yyyy-MM-dd HH:mm:ss"); info.type = OBJECT_TYPE.sensor; driver.OnObjectErrorEH(info); } } break; } }
public static void cbNetMsgProc(int id, int nType, IntPtr pointer) { switch ((CMD_CODE)nType) { case CMD_CODE.R_CONNECT: g_protocalInanter.OnConnectEH(g_protocalInanter.device, 0); break; case CMD_CODE.R_DISCONNECT: g_protocalInanter.OnConnectEH(g_protocalInanter.device, 1); break; case CMD_CODE.R_EVENT: { EVENT_PACK pack = (EVENT_PACK)Marshal.PtrToStructure(pointer, typeof(EVENT_PACK)); Sensor sensor = g_protocalInanter.FindSensorBySID(pack.channel, pack.id); if (sensor != null) { STATUS_INFO info = new STATUS_INFO(); info.no = (int)sensor.id; info.id = sensor.id; info.type = (MONITOR_TYPE)sensor.type; info.name = sensor.name; info.range1 = pack.range1.ToString(); info.range2 = pack.range2.ToString(); info.confidence = pack.confidence; info.classification = (CLASSIFICATION)pack.classification; if (pack.alarmneed == 0) { info.status = STATUS_TYPE.WARNING; } else { info.status = STATUS_TYPE.ALARM; } DateTime vDateTime = new DateTime( pack.time.vYear, pack.time.vMonth, pack.time.vDay, // 月日年 pack.time.vHour, pack.time.vMinute, pack.time.vSecond, // 时分秒 pack.time.vMiliseconds); // 毫秒 info.time = vDateTime.ToString("yyyy-MM-dd HH:mm:ss"); g_protocalInanter.OnObjectStatusEH(info); } } break; case CMD_CODE.R_STATUS: { STATUS_PACK pack = (STATUS_PACK)Marshal.PtrToStructure(pointer, typeof(STATUS_PACK)); Sensor sensor = g_protocalInanter.FindSensorBySID(pack.channel, pack.id); if (sensor != null) { DateTime vDateTime = new DateTime( pack.time.vYear, pack.time.vMonth, pack.time.vDay, // 月日年 pack.time.vHour, pack.time.vMinute, pack.time.vSecond, // 时分秒 pack.time.vMiliseconds); // 毫秒 Channel channel = g_protocalInanter.device.listChannel.Find(x => x.number == pack.channel); if (channel != null) { List <Sensor> listSensorFront = channel.listSensor.FindAll(x => (x.number != sensor.number && x.status == STATUS_TYPE.ERROR)); foreach (var front in listSensorFront) { ERROR_INFO infoFront = new ERROR_INFO(); infoFront.id = front.id; infoFront.name = front.name; infoFront.status = STATUS_TYPE.NORMAL; infoFront.starttime = vDateTime.ToString("yyyy-MM-dd HH:mm:ss"); infoFront.type = OBJECT_TYPE.sensor; g_protocalInanter.OnObjectErrorEH(infoFront); } } ERROR_INFO info = new ERROR_INFO(); info.id = sensor.id; info.name = sensor.name; if (pack.status == 0) { info.status = STATUS_TYPE.NORMAL; } else if (pack.status == 1) { info.status = STATUS_TYPE.ERROR; } else if (pack.status == 2) { info.status = STATUS_TYPE.DISABLE; } else if (pack.status == 3) { info.status = STATUS_TYPE.OFFLINE; } else if (pack.status == 4) { info.status = STATUS_TYPE.UNCOVER; } info.starttime = vDateTime.ToString("yyyy-MM-dd HH:mm:ss"); info.type = OBJECT_TYPE.sensor; g_protocalInanter.OnObjectErrorEH(info); } } break; } }
public static void cbHK_ReadReport(string ID, string ActId, string SubId, string ZoneId, string UserId, string CID, int Port, string Ip, string Value) { ProtocolHK instrument = listInstrument.Find(x => x.device.ip == Ip); if (instrument == null) { return; } switch (CID) { case "E998": instrument.OnConnectEH(instrument.device, 0); break; case "E997": instrument.OnConnectEH(instrument.device, 1); break; case "E570": case "E806": { if (ZoneId == "") { return; } Sensor sensor = instrument.FindSensorBySID(1, int.Parse(ZoneId)); if (sensor != null) { ERROR_INFO old = instrument.listError.Find(x => x.id == sensor.id); if (old == null) { ERROR_INFO info = new ERROR_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ERROR; info.starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = OBJECT_TYPE.sensor; instrument.OnObjectErrorEH(info); instrument.listError.Add(info); } } } break; case "R570": case "R806": { if (ZoneId == "") { return; } Sensor sensor = instrument.FindSensorBySID(1, int.Parse(ZoneId)); if (sensor != null) { ERROR_INFO old = instrument.listError.Find(x => x.id == sensor.id); if (old != null) { ERROR_INFO info = new ERROR_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.NORMAL; info.starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = OBJECT_TYPE.sensor; instrument.OnObjectErrorEH(info); instrument.listError.Remove(old); } } } break; case "E134": case "E103": { if (ZoneId == "") { return; } Sensor sensor = instrument.FindSensorBySID(1, int.Parse(ZoneId)); if (sensor != null) { STATUS_INFO old = instrument.listAlarm.Find(x => x.id == sensor.id); if (old == null) { STATUS_INFO info = new STATUS_INFO(); info.no = (int)sensor.id; info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ALARM; info.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = MONITOR_TYPE.io; info.confidence = 100; instrument.OnObjectStatusEH(info); instrument.listAlarm.Add(info); } } } break; case "R134": case "R103": { if (ZoneId == "") { return; } Sensor sensor = instrument.FindSensorBySID(1, int.Parse(ZoneId)); if (sensor != null) { STATUS_INFO old = instrument.listAlarm.Find(x => x.id == sensor.id); if (old != null) { instrument.listAlarm.Remove(old); } } } break; } }
public static void cbNETMSGPROC_AI(int command, int id, int nType) { switch (command) { case 0x1102: //COMM_ALARM_RULE: //行为分析信息 { switch (nType) { case 2: //ENUM_VCA_EVENT_ENTER_AREA case 4: //ENUM_VCA_EVENT_INTRUSION { Sensor sensor = gProtocol.FindSensorBySID(1, id); if (sensor != null) { STATUS_INFO info = new STATUS_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ALARM; info.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = MONITOR_TYPE.camera; info.classification = CLASSIFICATION.human_recognition; info.confidence = 100; info.remark = "区域入侵"; gProtocol.OnObjectStatusEH(info); } } break; case 13: //ENUM_VCA_EVENT_LEFT { Sensor sensor = gProtocol.FindSensorBySID(1, id); if (sensor != null) { STATUS_INFO info = new STATUS_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ALARM; info.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = MONITOR_TYPE.camera; info.classification = CLASSIFICATION.goods_left; info.confidence = 100; info.remark = "物品遗留"; gProtocol.OnObjectStatusEH(info); } } break; } } break; case 0x4521: //COMM_VCA_ALARM: //智能检测通用报警 { //gProtocol.OnDebugEH(string.Format("智能检测通用报警, Json数据内容:{0}", msg)); } break; default: //gProtocol.OnDebugEH(string.Format("其他报警,报警信息类型:{0} {1}", command, msg)); break; } }
public void ParseSensorEvent(string objectName, string eventName) { string[] array = objectName.Split(new char[3] { 'D', 'C', 'S' }); int chan = 1, id = 1; if (!int.TryParse(array[2], out chan) || !int.TryParse(array[3], out id)) { return; } var sensor = FindSensorBySID(chan, id); if (sensor == null) { return; } switch (eventName) { case "signalBreak": { ERROR_INFO info = new ERROR_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ERROR; info.starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = OBJECT_TYPE.sensor; OnObjectErrorEH(info); } break; case "signalBreak.restore": { ERROR_INFO info = new ERROR_INFO(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.NORMAL; info.starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = OBJECT_TYPE.sensor; OnObjectErrorEH(info); } break; case "alarm": { STATUS_INFO info = new STATUS_INFO(); info.no = Function.GuidToInt64(); info.id = sensor.id; info.name = sensor.name; info.status = STATUS_TYPE.ALARM; info.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); info.type = MONITOR_TYPE.vibration; info.confidence = 100; info.classification = CLASSIFICATION.human_recognition; OnObjectStatusEH(info); } break; } }