Selaa lähdekoodia

增加单摄像头告警间隔,120秒内同类型告警不重复上报

yaoqiang 4 vuotta sitten
vanhempi
commit
3e387fd7f9
3 muutettua tiedostoa jossa 61 lisäystä ja 39 poistoa
  1. 58 38
      CamCore/coreobject.cpp
  2. 2 0
      CamCore/coreobject.h
  3. 1 1
      YtCam.pro.user

+ 58 - 38
CamCore/coreobject.cpp

@@ -41,6 +41,7 @@ CoreObject::CoreObject(QObject *parent) :
     if(shm_load()){
         QDateTime zeroTime = QDateTime::fromTime_t(0);
         for(int i=0;i<DEVICES_COUNT;i++){
+            alarmTime[i]=0;
             ytShm->eHomeDevice[i].LoginId = -1;
             ytShm->eHomeDevice[i].SessionId = -1;
             ytShm->eHomeDevice[i].listen_preview_handle = -1;
@@ -304,6 +305,21 @@ BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG
     return false;
 }
 
+bool CoreObject::checkAlarmDevTime(QString deviceid){
+//    return true;
+    uint t = QDateTime::currentDateTime().toTime_t();
+    for(int i=0;i<DEVICES_COUNT;i++){
+        QString devId = QString(ytShm->eHomeDevice[i].deviceID);
+        if(QString::compare(devId,deviceid)==0){
+            if((t-alarmTime[i])>120){
+                alarmTime[i] = t;
+                return true;
+            }
+        }
+    }
+    return false;
+}
+
 void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData)
 {
     if (NULL == pPreviewCBMsg)
@@ -356,22 +372,24 @@ void ProcessHttpAlarmInfo(void *pXml, unsigned long dwLen, void *pUrl, unsigned
                 }
             }
         }
-        if(struISAPIAlarm.byPicturesNumber>0){
-            time_t t = QDateTime::currentDateTime().toTime_t();
-            for(int i=0;i<struISAPIAlarm.byPicturesNumber;i++){
-                char fname[128];
-                sprintf(fname,"/usr/local/nginx/html/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
-                if(i<2)
-                    sprintf(pic[i],"http://47.103.74.123/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
-                FILE *f = fopen(fname,"w");
-                fwrite(((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].pPicData,1,((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].dwPicLen,f);
-                fclose(f);
+         if(obj->checkAlarmDevTime(deviceID)){
+            if(struISAPIAlarm.byPicturesNumber>0){
+                time_t t = QDateTime::currentDateTime().toTime_t();
+                for(int i=0;i<struISAPIAlarm.byPicturesNumber;i++){
+                    char fname[128];
+                    sprintf(fname,"/usr/local/nginx/html/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
+                    if(i<2)
+                        sprintf(pic[i],"http://47.103.74.123/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
+                    FILE *f = fopen(fname,"w");
+                    fwrite(((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].pPicData,1,((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].dwPicLen,f);
+                    fclose(f);
+                }
             }
-        }
-        obj->reportList.append(Alarm_Report(deviceID,eventTime,QString::fromUtf8("200001"),
-                                            QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','%7','%8','火点/高温检测告警','','1970-01-01 08:00:00','','','','','',0,'','')")
-                            .arg(2).arg(deviceID).arg(eventTime).arg(1)
-                            .arg(2).arg(eventState).arg(pic[0]).arg(pic[1])));
+            obj->reportList.append(Alarm_Report(deviceID,eventTime,QString::fromUtf8("200001"),
+                                                QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','%7','%8','火点/高温检测告警','','1970-01-01 08:00:00','','','','','',0,'','')")
+                                .arg(2).arg(deviceID).arg(eventTime).arg(1)
+                                .arg(2).arg(eventState).arg(pic[0]).arg(pic[1])));
+         }
     }
 }
 
@@ -396,36 +414,38 @@ BOOL CALLBACK AlarmMSGCallBack(LONG lHandle, NET_EHOME_ALARM_MSG *pAlarmMsg, voi
     {
         NET_EHOME_ALARM_INFO struAlarmInfo;
         memcpy(&struAlarmInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_ALARM_INFO));
-        obj->appendLog(QString("Basic Alarm: Device ID[%1], szAlarmTime[%2], Alarm Type[%3], Action[%4], VideoChannel[%5]!")
-                       .arg(struAlarmInfo.szDeviceID).arg(struAlarmInfo.szAlarmTime).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction).arg(struAlarmInfo.dwVideoChannel));
 //        printf("Basic Alarm: Device ID[%s], szAlarmTime[%s], Alarm Type[%d], Action[%d], VideoChannel[%d]!\n", struAlarmInfo.szDeviceID, \
 //            struAlarmInfo.szAlarmTime, struAlarmInfo.dwAlarmType, struAlarmInfo.dwAlarmAction, struAlarmInfo.dwVideoChannel);
         if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_LEFT)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE))
         {
             QString devId = QString(struAlarmInfo.szDeviceID);
-            for(idx=0;idx<DEVICES_COUNT;idx++){
-                if((strcmp(ytShm->eHomeDevice[idx].deviceID,(char*)(struAlarmInfo.szDeviceID))==0)
-                        &&((ytShm->eHomeDevice[idx].io[8]==0x02)||(ytShm->eHomeDevice[idx].io[8]==0x04))){
-                    for(i=0;i>obj->alarmList.length();i++){
-                        if(obj->alarmList.at(i).Device_Code.compare(devId)==0){
-                            if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)&&(struAlarmInfo.dwAlarmAction!=0))
-                                obj->alarmList.removeAt(i);
-                            else if(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE)
-                                obj->alarmList.removeAt(i);
-                            break;
+            if(obj->checkAlarmDevTime(devId)){
+                obj->appendLog(QString("Basic Alarm: Device ID[%1], szAlarmTime[%2], Alarm Type[%3], Action[%4], VideoChannel[%5]!")
+                               .arg(struAlarmInfo.szDeviceID).arg(struAlarmInfo.szAlarmTime).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction).arg(struAlarmInfo.dwVideoChannel));
+                for(idx=0;idx<DEVICES_COUNT;idx++){
+                    if((strcmp(ytShm->eHomeDevice[idx].deviceID,(char*)(struAlarmInfo.szDeviceID))==0)
+                            &&((ytShm->eHomeDevice[idx].io[8]==0x02)||(ytShm->eHomeDevice[idx].io[8]==0x04))){
+                        for(i=0;i>obj->alarmList.length();i++){
+                            if(obj->alarmList.at(i).Device_Code.compare(devId)==0){
+                                if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)&&(struAlarmInfo.dwAlarmAction!=0))
+                                    obj->alarmList.removeAt(i);
+                                else if(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE)
+                                    obj->alarmList.removeAt(i);
+                                break;
+                            }
                         }
+                        QString time1 = QString(struAlarmInfo.szAlarmTime);
+                        QString time2 = time1.mid(0,10)+" "+time1.mid(11,8);
+            //            QString sql = QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','','','占道检测告警','','1970-01-01 08:00:00','','','','','',0,'','')")
+            //                .arg(1).arg(struAlarmInfo.szDeviceID).arg(time2).arg(struAlarmInfo.dwAlarmAction==0?1:0)
+            //                .arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction);
+            //            obj->sqlList.append(sql);
+                        if(struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)
+                            obj->alarmList.append(AlarmEvent(devId,time2,(struAlarmInfo.dwAlarmAction==0?1:0)));
+                        else
+                            obj->alarmList.append(AlarmEvent(devId,time2,1));
+                        ytShm->eHomeDevice[idx].io[6]=0x01;
                     }
-                    QString time1 = QString(struAlarmInfo.szAlarmTime);
-                    QString time2 = time1.mid(0,10)+" "+time1.mid(11,8);
-        //            QString sql = QString::fromUtf8("insert into sp_video2017 (id,port,device_code,time,status,address,ncmd,data1,data2,data3,data4,data5,clsj,clr,clnr,clwb,cllxr,cldh,clzt,cllx,video) values (NULL,'%1','%2','%3','%4','','%5','%6','','','占道检测告警','','1970-01-01 08:00:00','','','','','',0,'','')")
-        //                .arg(1).arg(struAlarmInfo.szDeviceID).arg(time2).arg(struAlarmInfo.dwAlarmAction==0?1:0)
-        //                .arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction);
-        //            obj->sqlList.append(sql);
-                    if(struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)
-                        obj->alarmList.append(AlarmEvent(devId,time2,(struAlarmInfo.dwAlarmAction==0?1:0)));
-                    else
-                        obj->alarmList.append(AlarmEvent(devId,time2,1));
-                    ytShm->eHomeDevice[idx].io[6]=0x01;
                 }
             }
 

+ 2 - 0
CamCore/coreobject.h

@@ -78,6 +78,7 @@ public:
     void chkPhoneList();
     void appendLog(QString log);
     QString getCompanyCode(QString addr);
+    bool checkAlarmDevTime(QString deviceid);
 
     QStringList sqlList;
     QList<AlarmEvent> alarmList;
@@ -101,6 +102,7 @@ private:
     LogThread *logThread;
     int repcur,wxcur;
     int synchour;
+    uint alarmTime[DEVICES_COUNT];
 };
 
 #endif // COREOBJECT_H

+ 1 - 1
YtCam.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.7.2, 2021-05-10T18:12:06. -->
+<!-- Written by QtCreator 4.7.2, 2021-05-11T17:47:33. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>