Example #1
0
        public virtual void OnObjectStatusEH(STATUS_INFO info)
        {
            ObjectStatusEH handler = OnObjectStatus;

            if (handler != null)
            {
                handler(info);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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;
            }
        }
Example #6
0
        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;
            }
        }
Example #7
0
        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;
            }
        }
Example #8
0
        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;
            }
        }