coreobject.cpp 65 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246
  1. #include "coreobject.h"
  2. #include <unistd.h>
  3. //公司这边生产环境的内网和外网ip
  4. #define iServerIP "172.19.198.166"
  5. #define oServerIP "47.103.74.123"
  6. //伍继158对应的内网和外网ip
  7. //#define iServerIP "192.168.0.31"
  8. //#define oServerIP "124.70.160.158"
  9. //伍继91对应的内网和外网ip
  10. //#define iServerIP "192.168.0.149"
  11. //#define oServerIP "124.71.175.91"
  12. #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
  13. extern BOOL CALLBACK RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser);
  14. extern BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG *pNewLinkCBMsg, void *pUserData);
  15. extern void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData);
  16. extern BOOL InputStreamData(QString deviceid, BYTE byDataType, char* pBuffer, int iDataLen);
  17. extern BOOL CALLBACK AlarmMSGCallBack (LONG lHaldle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData);
  18. extern QDateTime getFullTime(FullTime fTime);
  19. extern void setFullTime(FullTime *fTime, QDateTime qTime);
  20. extern QString getNewId();
  21. uint start_time;
  22. bool had_reg;
  23. int nopic_count;
  24. MyEHomeShm *ytShm;
  25. MyEHomeMQShm *ytMqShm;
  26. CoreObject::CoreObject(QObject *parent) :
  27. QObject(parent)
  28. {
  29. infomqttIdx=1;
  30. alarmmqttIdx=1;
  31. statusIdx=1;
  32. statusStr="";
  33. hour = 255;
  34. nopic_count = 0;
  35. processList.clear();
  36. sqlList.clear();
  37. reportList.clear();
  38. companyphoneList.clear();
  39. isWorking = false;
  40. alarmListenHandle = -1;
  41. start_time = QDateTime::currentDateTime().toTime_t();
  42. had_reg = false;
  43. netAccessManager = new QNetworkAccessManager(this);
  44. connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
  45. timer = new QTimer();
  46. //公司187生产环境对应的数据库配置
  47. db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  48. db.setDatabaseName("jdxf");
  49. db.setHostName("47.98.201.187");
  50. db.setUserName("root");
  51. db.setPassword("Yt2018IoT");
  52. //伍继158环境对应的数据库配置
  53. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  54. // db.setDatabaseName("smart_electricity");
  55. // db.setHostName("124.70.160.158");
  56. // db.setUserName("root");
  57. // db.setPassword("Y48hD&Eg");
  58. //伍继91环境对应的数据库配置
  59. // db = QSqlDatabase::addDatabase("QMYSQL","conf_db");
  60. // db.setDatabaseName("smart_electricity");
  61. // db.setHostName("192.168.0.206");
  62. // db.setUserName("electric");
  63. // db.setPassword("Y48hD&Eg");
  64. QString ip="",port="",name="",passwd="";
  65. db.open();
  66. QSqlQuery mqttqry = db.exec("select ip, port, username, passwd from yt_dataprocessservice_mqtt where type = 'YtCam';");
  67. while(mqttqry.next()){
  68. ip = mqttqry.value(0).toString();
  69. port = mqttqry.value(1).toString();
  70. name = mqttqry.value(2).toString();
  71. passwd = mqttqry.value(3).toString();
  72. }
  73. db.close();
  74. m_client = new QMQTT::Client(QHostAddress(ip),static_cast<quint16>(port.toInt()),this);
  75. m_client->setUsername(name);
  76. m_client->setPassword(passwd.toLatin1());
  77. connect(m_client,&QMQTT::Client::connected,this,&CoreObject::mqconnected);
  78. m_client->connectToHost();
  79. NET_ESTREAM_Init();
  80. NET_EALARM_Init();
  81. NET_ECMS_Init();
  82. if(shm_load()){
  83. QDateTime zeroTime = QDateTime::fromTime_t(0);
  84. for(int i=0;i<DEVICES_COUNT;i++){
  85. alarmTime[i]=0;
  86. ytShm->eHomeDevice[i].LoginId = -1;
  87. ytShm->eHomeDevice[i].SessionId = -1;
  88. ytShm->eHomeDevice[i].listen_preview_handle = -1;
  89. ytShm->eHomeDevice[i].listen_alarm_handle = -1;
  90. ytShm->eHomeDevice[i].lLinkHandle = -1;
  91. ytShm->eHomeDevice[i].previewId = -1;
  92. ytShm->eHomeDevice[i].Connected = 0x00;
  93. ytShm->eHomeDevice[i].Inited = 0x00;
  94. ytShm->eHomeDevice[i].onLined = 0x00;
  95. ytShm->eHomeDevice[i].savetmp = 0x00;
  96. ytShm->eHomeDevice[i].transed = 0x00;
  97. for(int j=0;j<7;j++)
  98. ytShm->eHomeDevice[i].io[j] = 0x00;
  99. ytShm->eHomeDevice[i].time[0]=0;
  100. ytShm->eHomeDevice[i].time[1]=0;
  101. ytShm->eHomeDevice[i].tmpfile = NULL;
  102. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  103. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  104. QProcess *process = new QProcess(this);
  105. connect(process,SIGNAL(finished(int)),this,SLOT(process_stop()));
  106. connect(process,SIGNAL(destroyed()),this,SLOT(process_stop()));
  107. connect(process,SIGNAL(aboutToClose()),this,SLOT(process_stop()));
  108. processList.append(process);
  109. }
  110. for(quint16 i=0;i<8;i++){
  111. wxThreads[i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/GeneralPush/voice");
  112. wssThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55125);
  113. spThread[i] = new ttsThreads(this,i,"47.98.201.187","/report",55335);
  114. // connect(wxThreads[i],&WechartThreads::wxchart,this,&CoreObject::chartlog);
  115. // connect(wssThread[i],&ttsThreads::ttslog,this,&CoreObject::chartlog);
  116. // connect(spThread[i],&ttsThreads::ttslog,this,&CoreObject::chartlog);
  117. wxThreads[i]->start();
  118. wssThread[i]->start();
  119. spThread[i]->start();
  120. }
  121. repcur = 0;
  122. wxcur = 0;
  123. }
  124. logThread = new LogThread(this);
  125. logThread->start();
  126. chkPhoneList();
  127. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  128. time_out();
  129. }
  130. CoreObject::~CoreObject()
  131. {
  132. for(int i=0;i<processList.length();i++){
  133. if(processList.at(i)->pid()>0)
  134. processList.at(i)->close();
  135. if(ytShm->eHomeDevice[i].listen_preview_handle>=-1){
  136. NET_ESTREAM_StopListenPreview(ytShm->eHomeDevice[i].listen_preview_handle);
  137. }
  138. }
  139. if(alarmListenHandle>-1)
  140. NET_EALARM_StopListen(alarmListenHandle);
  141. NET_ECMS_Fini();
  142. NET_ESTREAM_Fini();
  143. NET_EALARM_Fini();
  144. netAccessManager->deleteLater();
  145. }
  146. void CoreObject::mqconnected()
  147. {
  148. printf("mqtt connected\n");
  149. }
  150. void CoreObject::chkPhoneList()
  151. {
  152. if(db.open()){
  153. QList<Company_Phone> tmpList;
  154. QSqlQuery qry = db.exec("select owner_code, phone from sp_owner_phone where phone<>''");
  155. while (qry.next()) {
  156. tmpList.append(Company_Phone(qry.value(0).toString(),qry.value(1).toString()));
  157. }
  158. db.close();
  159. companyphoneList.clear();
  160. if(tmpList.length()>0)
  161. companyphoneList.append(tmpList);
  162. synchour = QTime::currentTime().hour();
  163. }
  164. }
  165. void CoreObject::chartlog(quint16 idx, QDateTime t, QString data, bool dirflag){
  166. if((idx<DEVICES_COUNT)&&(QString(ytShm->eHomeDevice[idx].deviceID).length()>0))
  167. {
  168. QString log;
  169. if(dirflag)
  170. log = QString("[ %1 (%2) >>> ] %3").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[idx].deviceID).arg(data);
  171. else
  172. log = QString("[ %1 (%2) >>> ] %3").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[idx].deviceID).arg(data);
  173. logThread->appendData(log);
  174. }
  175. }
  176. bool CoreObject::shm_load()
  177. {
  178. int shmid;
  179. key_t key;
  180. if((key = ftok(SHM_PATH,(int)SHM_PORT))==-1)
  181. return false;
  182. if((shmid = shmget(key,sizeof(MyEHomeShm),IPC_CREAT|0666))==-1)
  183. return false;
  184. ytShm = (MyEHomeShm *)shmat(shmid,NULL,0);
  185. if((key = ftok(SHM_PATH,(int)(SHM_PORT+10)))==-1)
  186. return false;
  187. if((shmid = shmget(key,sizeof(MyEHomeMQShm),IPC_CREAT|0666))==-1)
  188. return false;
  189. ytMqShm = (MyEHomeMQShm *)shmat(shmid,NULL,0);
  190. return true;
  191. }
  192. QString getNewId()
  193. {
  194. return QUuid::createUuid().toString().replace("{","").replace("}","");
  195. }
  196. BOOL RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser)
  197. {
  198. int i,idx=0;
  199. bool found = false;
  200. had_reg = true;
  201. CoreObject *obj = (CoreObject *)pUser;
  202. QDateTime zeroTime = QDateTime::fromTime_t(0);
  203. QDateTime t_now = QDateTime::currentDateTime();
  204. ytShm->workingTime[0] = t_now.toTime_t();
  205. if (ENUM_DEV_ON == dwDataType)
  206. {
  207. NET_EHOME_DEV_REG_INFO *pDevInfo = (NET_EHOME_DEV_REG_INFO *)pOutBuffer;
  208. // qDebug()<<"RegisterCallBack: "<<(char*)(pDevInfo->byDeviceID);
  209. if(pDevInfo!=NULL)
  210. {
  211. for(i=0;i<DEVICES_COUNT;i++){
  212. if(strcmp(ytShm->eHomeDevice[i].deviceID,QString((char*)(pDevInfo->byDeviceID)).replace(" ","_").toUtf8().data())==0){
  213. found = true;
  214. memcpy(ytShm->eHomeDevice[i].devIp,(char *)(pDevInfo->struDevAdd.szIP),sizeof(ytShm->eHomeDevice[i].devIp));
  215. // obj->appendLog(QString("[ %1 (%2) online ]").arg(t_now.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[i].deviceID));
  216. ytShm->eHomeDevice[i].LoginId = lUserID;
  217. ytShm->eHomeDevice[i].Connected = 0x00;
  218. ytShm->eHomeDevice[i].Inited = 0x01;
  219. ytShm->eHomeDevice[i].onLined = 0x00;
  220. ytShm->eHomeDevice[i].savetmp = 0x00;
  221. // if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  222. // fclose(ytShm->eHomeDevice[i].tmpfile);
  223. ytShm->eHomeDevice[i].tmpfile = NULL;
  224. ytShm->eHomeDevice[i].transed = 0x00;
  225. ytShm->eHomeDevice[i].io[15]=0x00;
  226. ytShm->eHomeDevice[i].io[14]=0x03;
  227. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  228. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  229. idx=i;
  230. break;
  231. }
  232. }
  233. if(!found){
  234. return FALSE;
  235. }
  236. //输入参数
  237. NET_EHOME_SERVER_INFO *pServerInfo = (NET_EHOME_SERVER_INFO *)pInBuffer;
  238. pServerInfo->dwTimeOutCount = 6; //心跳超时次数
  239. pServerInfo->dwKeepAliveSec = 15; //心跳间隔
  240. memcpy(pServerInfo->struUDPAlarmSever.szIP, oServerIP, sizeof(oServerIP));
  241. memcpy(pServerInfo->struTCPAlarmSever.szIP, oServerIP, sizeof(oServerIP)); //报警服务器IP地址(TCP协议)
  242. pServerInfo->struUDPAlarmSever.wPort = 7669; //报警服务器端口(UDP协议),需要和报警服务器启动监听的端口一致
  243. pServerInfo->struTCPAlarmSever.wPort = 7668;
  244. pServerInfo->dwAlarmServerType = 1; //报警服务器类型:0- 只支持UDP协议上报,1- 支持UDP、TCP两种协议上报
  245. }
  246. }else if (ENUM_DEV_OFF == dwDataType){
  247. for(int i=0;i<DEVICES_COUNT;i++){
  248. if(ytShm->eHomeDevice[i].LoginId==lUserID){
  249. ytShm->eHomeDevice[i].io[15]=0x00;
  250. ytShm->eHomeDevice[i].io[14]=0x02;
  251. ytShm->eHomeDevice[i].LoginId = -1;
  252. // obj->appendLog(QString("[ %1 (%2) offline ]").arg(t_now.toString("yyyy-MM-dd HH:mm:ss")).arg(ytShm->eHomeDevice[i].deviceID));
  253. if(ytShm->eHomeDevice[i].SessionId>=0){
  254. if(NET_ECMS_StopGetRealStream(lUserID,ytShm->eHomeDevice[i].SessionId)){
  255. ytShm->eHomeDevice[i].SessionId = -1;
  256. if(ytShm->eHomeDevice[i].previewId>=0){
  257. if(NET_ESTREAM_StopPreview(ytShm->eHomeDevice[i].previewId)){
  258. ytShm->eHomeDevice[i].previewId = -1;
  259. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  260. QFile(tmpfile).remove();
  261. ytShm->eHomeDevice[i].Connected = 0x00;
  262. // bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
  263. ytShm->eHomeDevice[i].Inited = 0x00;
  264. ytShm->eHomeDevice[i].onLined = 0x00;
  265. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  266. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  267. ytShm->eHomeDevice[i].savetmp = 0x00;
  268. // if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  269. // fclose(ytShm->eHomeDevice[i].tmpfile);
  270. ytShm->eHomeDevice[i].tmpfile = NULL;
  271. ytShm->eHomeDevice[i].transed = 0x00;
  272. if(ytShm->eHomeDevice[i].lLinkHandle>0){
  273. if(NET_ESTREAM_StopListenPreview(ytShm->eHomeDevice[i].lLinkHandle)){
  274. ytShm->eHomeDevice[i].lLinkHandle = -1;
  275. }
  276. }
  277. }
  278. }
  279. }
  280. }else{
  281. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  282. QFile(tmpfile).remove();
  283. ytShm->eHomeDevice[i].io[15]=0x00;
  284. ytShm->eHomeDevice[i].Connected = 0x00;
  285. // bzero(ytShm->eHomeDevice[i].deviceID,sizeof(ytShm->eHomeDevice[i].deviceID));
  286. ytShm->eHomeDevice[i].Inited = 0x00;
  287. ytShm->eHomeDevice[i].onLined = 0x00;
  288. ytShm->eHomeDevice[i].LoginId = -1;
  289. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),zeroTime);
  290. setFullTime(&(ytShm->eHomeDevice[i].transtime),zeroTime);
  291. ytShm->eHomeDevice[i].lLinkHandle = -1;
  292. ytShm->eHomeDevice[i].savetmp = 0x00;
  293. // if(ytShm->eHomeDevice[i].transed==0x01)
  294. // fclose(ytShm->eHomeDevice[i].tmpfile);
  295. ytShm->eHomeDevice[i].tmpfile = NULL;
  296. ytShm->eHomeDevice[i].transed = 0x00;
  297. }
  298. break;
  299. }
  300. }
  301. NET_ECMS_ForceLogout(lUserID);
  302. }
  303. return TRUE;
  304. }
  305. BOOL CALLBACK fnPREVIEW_NEWLINK_CB(LONG lPreviewHandle, NET_EHOME_NEWLINK_CB_MSG *pNewLinkCBMsg, void *pUserData)
  306. {
  307. ytShm->workingTime[0] = QDateTime::currentDateTime().toTime_t();
  308. for(int i=0;i<DEVICES_COUNT;i++){
  309. if((ytShm->eHomeDevice[i].LoginId>-1)&&(ytShm->eHomeDevice[i].listen_preview_handle>-1)){
  310. if(strcmp(ytShm->eHomeDevice[i].deviceID,QString((char *)pNewLinkCBMsg->szDeviceID).replace(" ","_").toUtf8().data())==0){
  311. // if(ytShm->eHomeDevice[i].SessionId == pNewLinkCBMsg->iSessionID){
  312. // printf("fnPREVIEW_NEWLINK_CB:%s\n",ytShm->eHomeDevice[i].deviceID);
  313. ytShm->eHomeDevice[i].lLinkHandle = lPreviewHandle;
  314. NET_EHOME_PREVIEW_DATA_CB_PARAM struDataCB = {0};
  315. struDataCB.pUserData = &(ytShm->eHomeDevice[i]);
  316. struDataCB.fnPreviewDataCB = fnPREVIEW_DATA_CB;
  317. struDataCB.byStreamFormat = 0;//封装格式:0- PS
  318. if (!NET_ESTREAM_SetPreviewDataCB(lPreviewHandle, &struDataCB))
  319. {
  320. ytShm->eHomeDevice[i].SessionId = -1;
  321. ytShm->eHomeDevice[i].Connected = 0x00;;
  322. // printf("NET_ESTREAM_SetPreviewDataCB set failed(%s)\n",ytShm->eHomeDevice[i].deviceID);
  323. return false;
  324. }
  325. // printf("NET_ESTREAM_SetPreviewDataCB set pass(%s)\n",ytShm->eHomeDevice[i].deviceID);
  326. return true;
  327. }
  328. }
  329. }
  330. return false;
  331. }
  332. bool CoreObject::checkAlarmDevTime(QString deviceid){
  333. // return true;
  334. uint t = QDateTime::currentDateTime().toTime_t();
  335. for(int i=0;i<DEVICES_COUNT;i++){
  336. QString devId = QString(ytShm->eHomeDevice[i].deviceID);
  337. if(QString::compare(devId,deviceid)==0){
  338. if((t-alarmTime[i])>180){
  339. alarmTime[i] = t;
  340. return true;
  341. }
  342. }
  343. }
  344. return false;
  345. }
  346. void CoreObject::finishedSlot(QNetworkReply *reply)
  347. {
  348. QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
  349. if(status_code == 200){
  350. if(reply->error() == QNetworkReply::NoError){
  351. QString message = QString::fromUtf8(reply->readAll());
  352. QByteArray data = message.toLatin1();
  353. QJsonParseError json_err;
  354. QJsonDocument jsondoc(QJsonDocument::fromJson(data,&json_err));
  355. //printf("json_err.error = %d\n ",json_err.error);
  356. if(json_err.error==QJsonParseError::NoError){
  357. QJsonObject root = jsondoc.object();
  358. QJsonObject obj = root.value("RESULT").toObject();
  359. QString num = "";
  360. int t = 0;
  361. QJsonValue list_value = obj.value("LIST");
  362. if(list_value.isArray()){
  363. QJsonArray list_array = list_value.toArray();
  364. for(int i=0;i<list_array.size();i++){
  365. QJsonObject obj1 = list_array.at(i).toObject();
  366. QString devid = obj1.value("DEVICE").toString();
  367. int linevalue = obj1.value("ALIVEVALUE").toInt();
  368. printf("[%d] devid: %s, linevalue: %d\n",i,devid.toUtf8().data(),linevalue);
  369. QString companyCode="",deviceType="",deviceName="",value="";
  370. for(int i=0;i<DEVICES_COUNT;i++){
  371. QString devicecode = QString(ytShm->eHomeDevice[i].deviceID);
  372. if(QString::compare(devid,devicecode)==0){
  373. companyCode = QString(ytShm->eHomeDevice[i].rtsppath);
  374. //deviceType.append(QString("%1").arg((ytShm->eHomeDevice[i].io[8]&0xff),2,16,QChar('0')));
  375. //deviceName = QString(ytMqShm->eHomeDeviceMq[i].deviceName);
  376. //value = QString(ytShm->eHomeDeviceFtp[i].filePath);
  377. if(linevalue == 3){
  378. if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  379. m_client->connectToHost();
  380. }
  381. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  382. statusStr.append(QString("{\"devId\":\"%1\",\"devicestatus\":0,\"type\":\"STATUS\",\"timestamp\":\"%2\"}").arg(devid).arg(QDateTime::currentDateTime().toTime_t()));
  383. QString topic1 = QString("/usky/ytCamCore/%1/%2/status").arg(companyCode).arg(devid);
  384. m_client->publish(QMQTT::Message(statusIdx++,topic1,statusStr.toUtf8()));
  385. statusStr.clear();
  386. if(statusIdx>9999)
  387. statusIdx = 1;
  388. }
  389. }else{
  390. if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  391. m_client->connectToHost();
  392. }
  393. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  394. statusStr.append(QString("{\"devId\":\"%1\",\"devicestatus\":75,\"type\":\"STATUS\",\"timestamp\":\"%2\"}").arg(devid).arg(QDateTime::currentDateTime().toTime_t()));
  395. QString topic1 = QString("/usky/ytCamCore/%1/%2/status").arg(companyCode).arg(devid);
  396. m_client->publish(QMQTT::Message(statusIdx++,topic1,statusStr.toUtf8()));
  397. statusStr.clear();
  398. if(statusIdx>9999)
  399. statusIdx = 1;
  400. }
  401. }
  402. break;
  403. }
  404. }
  405. }
  406. }
  407. }
  408. }else{
  409. }
  410. }else{
  411. }
  412. reply->abort();
  413. reply->close();
  414. reply->deleteLater();
  415. }
  416. void CALLBACK fnPREVIEW_DATA_CB(LONG lPreviewHandle, NET_EHOME_PREVIEW_CB_MSG *pPreviewCBMsg, void *pUserData)
  417. {
  418. ytShm->workingTime[0] = QDateTime::currentDateTime().toTime_t();
  419. if (NULL == pPreviewCBMsg)
  420. {
  421. return ;
  422. }
  423. EHomeDevice *dev= (EHomeDevice *)pUserData;
  424. dev->Connected = 0x01;
  425. dev->previewId = lPreviewHandle;
  426. InputStreamData(QString(dev->deviceID).replace(" ","_"), pPreviewCBMsg->byDataType, (char*)pPreviewCBMsg->pRecvdata, pPreviewCBMsg->dwDataLen);
  427. }
  428. void ProcessHttpAlarmInfo(void *pXml, unsigned long dwLen, void *pUrl, unsigned long dwUrllen,void *pUserData){
  429. if((pXml==NULL)&&(pUrl==NULL))
  430. return;
  431. UN_REFERENCED_PARAMETER(dwLen);
  432. UN_REFERENCED_PARAMETER(pUrl);
  433. UN_REFERENCED_PARAMETER(dwUrllen);
  434. char deviceID[32] = {0};
  435. char eventTime[20] = {0};
  436. char eventType[128] = {0};
  437. char eventState[20] = {0};
  438. char pic[2][256]={0};
  439. CoreObject *obj = (CoreObject *)pUserData;
  440. LPNET_EHOME_ALARM_ISAPI_INFO pISAPIAlarm = (NET_EHOME_ALARM_ISAPI_INFO *)(pXml);
  441. NET_EHOME_ALARM_ISAPI_INFO struISAPIAlarm = {0};
  442. memcpy(&struISAPIAlarm,pISAPIAlarm, sizeof(NET_EHOME_ALARM_ISAPI_INFO));
  443. obj->appendLog(QString("{ligangceshi5:%1}")
  444. .arg(struISAPIAlarm.pAlarmData));
  445. if(struISAPIAlarm.pAlarmData)
  446. {
  447. if(struISAPIAlarm.byDataType==2){
  448. QByteArray data = QByteArray((const char *)(struISAPIAlarm.pAlarmData));
  449. QXmlStreamReader reader;
  450. int cur = data.indexOf("--boundary");
  451. reader.addData(data.mid(0,cur));
  452. while(!reader.atEnd()){
  453. if(reader.isStartElement()){
  454. if(reader.name()=="eventType"){
  455. sprintf(eventType,"%s",reader.readElementText().toUtf8().data());
  456. }else if(reader.name()=="deviceID"){
  457. sprintf(deviceID,"%s",reader.readElementText().toUtf8().data());
  458. }else if(reader.name()=="dateTime"){
  459. sprintf(eventTime,"%s",reader.readElementText().replace("T"," ").mid(0,19).toUtf8().data());
  460. }else if(reader.name()=="eventState"){
  461. sprintf(eventState,"%s",reader.readElementText().toUtf8().data());
  462. }
  463. }
  464. reader.readNext();
  465. }
  466. obj->appendLog(QString("{ligangceshi3:%1}")
  467. .arg(deviceID));
  468. }else if(struISAPIAlarm.byDataType==1){
  469. QByteArray data = QByteArray((const char *)(struISAPIAlarm.pAlarmData));
  470. int cur = data.indexOf("--boundary");
  471. if(cur>0){
  472. QXmlStreamReader reader;
  473. reader.addData(data.mid(0,cur));
  474. while(!reader.atEnd()){
  475. if(reader.isStartElement()){
  476. if(reader.name()=="eventType"){
  477. sprintf(eventType,"%s",reader.readElementText().toUtf8().data());
  478. }else if(reader.name()=="deviceID"){
  479. sprintf(deviceID,"%s",reader.readElementText().toUtf8().data());
  480. }else if(reader.name()=="dateTime"){
  481. sprintf(eventTime,"%s",reader.readElementText().replace("T"," ").mid(0,19).toUtf8().data());
  482. }else if(reader.name()=="eventState"){
  483. sprintf(eventState,"%s",reader.readElementText().toUtf8().data());
  484. }
  485. }
  486. reader.readNext();
  487. }
  488. obj->appendLog(QString("{ligangceshi4:%1}")
  489. .arg(deviceID));
  490. }
  491. }
  492. if(obj->checkAlarmDevTime(deviceID)){
  493. if(struISAPIAlarm.byPicturesNumber>0){
  494. time_t t = QDateTime::currentDateTime().toTime_t();
  495. for(int i=0;i<struISAPIAlarm.byPicturesNumber;i++){
  496. char fname[128];
  497. sprintf(fname,"/usr/local/nginx/html/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
  498. if(i<2)
  499. sprintf(pic[i],"http://47.103.74.123/VideoAlarmPics/pic_%d_%s_%d.jpg",t,deviceID,i);
  500. FILE *f = fopen(fname,"w");
  501. fwrite(((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].pPicData,1,((NET_EHOME_ALARM_ISAPI_PICDATA *)struISAPIAlarm.pPicPackData)[i].dwPicLen,f);
  502. fclose(f);
  503. }
  504. }
  505. obj->reportList.append(Alarm_Report(deviceID,eventTime,QString::fromUtf8("200001"),
  506. 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,'','')")
  507. .arg(2).arg(deviceID).arg(eventTime).arg(1)
  508. .arg(2).arg(eventState).arg(pic[0]).arg(pic[1])));
  509. for(int k=0;k<DEVICES_COUNT;k++){
  510. QString devid = QString(ytShm->eHomeDevice[k].deviceID);
  511. if(QString::compare(deviceID,devid)==0){
  512. sprintf(ytShm->eHomeDeviceFtp[k].filePath,"%s",pic[0]);
  513. break;
  514. }
  515. }
  516. }
  517. }
  518. }
  519. BOOL CALLBACK AlarmMSGCallBack(LONG lHandle, NET_EHOME_ALARM_MSG *pAlarmMsg, void *pUserData)
  520. {
  521. int i,idx;
  522. QDateTime dt = QDateTime::currentDateTime();
  523. CoreObject *obj = (CoreObject *)pUserData;
  524. DWORD dwType = pAlarmMsg->dwAlarmType; //不同的报警类型(dwAlarmType),pAlarmInfo对应不同的报警信息类型
  525. ytShm->workingTime[0] = dt.toTime_t();
  526. if(pAlarmMsg->pHttpUrl!=NULL)
  527. dwType = EHOME_ISAPI_ALARM;
  528. switch(dwType)
  529. {
  530. case EHOME_ALARM_UNKNOWN://未知报警信息
  531. NET_EHOME_ALARM_INFO struAlarmInfo;
  532. obj->appendLog(QString("{ligangceshi1:%1,%2,%3}")
  533. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.szDeviceID));
  534. break;
  535. case EHOME_ALARM://基本报警信息:移动侦测、视频遮盖、视频丢失、PIR报警、人脸侦测、区域入侵等
  536. {
  537. NET_EHOME_ALARM_INFO struAlarmInfo;
  538. memcpy(&struAlarmInfo, pAlarmMsg->pAlarmInfo, sizeof(NET_EHOME_ALARM_INFO));
  539. if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_LEFT)||(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE))
  540. {
  541. QString devId = QString(struAlarmInfo.szDeviceID);
  542. if(obj->checkAlarmDevTime(devId)){
  543. obj->appendLog(QString("[ %1 alm(%2) ] Basic Alarm: Device ID[%3], szAlarmTime[%4], Alarm Type[%5], Action[%6], VideoChannel[%7]!")
  544. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(obj->alarmList.length())
  545. .arg(struAlarmInfo.szDeviceID).arg(struAlarmInfo.szAlarmTime).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.dwAlarmAction).arg(struAlarmInfo.dwVideoChannel));
  546. for(idx=0;idx<DEVICES_COUNT;idx++){
  547. if((strcmp(ytShm->eHomeDevice[idx].deviceID,(char*)(struAlarmInfo.szDeviceID))==0)
  548. &&((ytShm->eHomeDevice[idx].io[8]==0x02)||(ytShm->eHomeDevice[idx].io[8]==0x04)||(ytShm->eHomeDevice[idx].io[8]==0x08)||(ytShm->eHomeDevice[idx].io[8]==0x84))){
  549. for(i=0;i>obj->alarmList.length();i++){
  550. if(obj->alarmList.at(i).Device_Code.compare(devId)==0){
  551. if((struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)&&(struAlarmInfo.dwAlarmAction!=0))
  552. obj->alarmList.removeAt(i);
  553. else if(struAlarmInfo.dwAlarmType==ALARM_TYPE_TAKE)
  554. obj->alarmList.removeAt(i);
  555. break;
  556. }
  557. }
  558. QString time1 = QString(struAlarmInfo.szAlarmTime);
  559. QString time2 = time1.mid(0,10)+" "+time1.mid(11,8);
  560. if(struAlarmInfo.dwAlarmType==ALARM_TYPE_INTRUSION)
  561. obj->alarmList.append(AlarmEvent(devId,time2,(struAlarmInfo.dwAlarmAction==0?1:0),dt.toTime_t()));
  562. else
  563. obj->alarmList.append(AlarmEvent(devId,time2,1,dt.toTime_t()));
  564. ytShm->eHomeDevice[idx].io[6]=0x01;
  565. }
  566. }
  567. }
  568. }else{
  569. obj->appendLog(QString("{ligangceshi2:%1,%2,%3}")
  570. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(struAlarmInfo.dwAlarmType).arg(struAlarmInfo.szDeviceID));
  571. }
  572. }
  573. break;
  574. case EHOME_ISAPI_ALARM:
  575. ProcessHttpAlarmInfo(pAlarmMsg->pAlarmInfo,pAlarmMsg->dwAlarmInfoLen,pAlarmMsg->pHttpUrl,pAlarmMsg->dwHttpUrlLen,pUserData);
  576. break;
  577. default:
  578. NET_EHOME_ALARM_INFO struAlarmInfo1;
  579. obj->appendLog(QString("{ligangceshi:%1,%2,%3}")
  580. .arg(dt.toString("yyyy-MM-dd HH:mm:ss")).arg(struAlarmInfo1.dwAlarmType).arg(struAlarmInfo.szDeviceID));
  581. break;
  582. }
  583. return TRUE;
  584. }
  585. BOOL InputStreamData(QString deviceid, BYTE byDataType, char* pBuffer, int iDataLen)
  586. {
  587. int i;
  588. uint t = QDateTime::currentDateTime().toTime_t();
  589. ytShm->workingTime[0] = t;
  590. if(iDataLen>0){
  591. nopic_count = 0;
  592. for(i=0;i<DEVICES_COUNT;i++){
  593. if(QString(ytShm->eHomeDevice[i].deviceID).compare(deviceid)==0){
  594. if(ytShm->eHomeDevice[i].io[0]==0x01){
  595. ytShm->eHomeDevice[i].time[0] = t;
  596. if(ytShm->eHomeDevice[i].savetmp==0x00){
  597. if(ytShm->eHomeDevice[i].tmpfile!=NULL){
  598. fclose(ytShm->eHomeDevice[i].tmpfile);
  599. ytShm->eHomeDevice[i].tmpfile = NULL;
  600. }
  601. QString tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID).replace(" ","_");
  602. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  603. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),QDateTime::currentDateTime());
  604. ytShm->eHomeDevice[i].savetmp = 0x01;
  605. ytShm->eHomeDevice[i].tmpfile = fopen(tmpfile.toUtf8().data(),"wb");
  606. fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
  607. }else{
  608. if(ytShm->eHomeDevice[i].tmpfile!=NULL){
  609. fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
  610. }else{
  611. QString tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID).replace(" ","_");
  612. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  613. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),QDateTime::currentDateTime());
  614. // ytShm->eHomeDevice[i].savetmp = 0x01;
  615. ytShm->eHomeDevice[i].tmpfile = fopen(tmpfile.toUtf8().data(),"wb");
  616. fwrite(pBuffer,iDataLen,1,ytShm->eHomeDevice[i].tmpfile);
  617. }
  618. }
  619. }else{
  620. NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId);
  621. }
  622. return true;
  623. }
  624. }
  625. }
  626. return false;
  627. }
  628. void setFullTime(FullTime *fTime, QDateTime qTime){
  629. fTime->YEAR = qTime.date().year()&0xffff;
  630. fTime->MONTH = qTime.date().month()&0xff;
  631. fTime->DAY = qTime.date().day()&0xff;
  632. fTime->HOUR = qTime.time().hour()&0xff;
  633. fTime->MINUTE = qTime.time().minute()&0xff;
  634. fTime->SECOND = qTime.time().second()&0xff;
  635. fTime->TIMESTAMP = qTime.toTime_t();
  636. }
  637. QDateTime getFullTime(FullTime fTime){
  638. if((fTime.YEAR==0)||(fTime.MONTH==0)||(fTime.DAY==0))
  639. return QDateTime::fromTime_t(fTime.TIMESTAMP);
  640. else
  641. return QDateTime(QDate((int)fTime.YEAR,(int)fTime.MONTH,(int)fTime.DAY),QTime((int)fTime.HOUR,(int)fTime.MINUTE,(int)fTime.SECOND));
  642. }
  643. void CoreObject::appendLog(QString log)
  644. {
  645. logThread->appendData(log);
  646. }
  647. void CoreObject::start()
  648. {
  649. //预览监听参数
  650. timer->start(3000);
  651. NET_EHOME_LOCAL_GENERAL_CFG struGeneralCfg = {0};
  652. struGeneralCfg.byAlarmPictureSeparate = 1;
  653. if(!NET_EALARM_SetSDKLocalCfg(LOCAL_CFG_TYPE_GENERAL,&struGeneralCfg)){
  654. // printf("NET_EALARM_SetSDKLocalCfg falied\n");
  655. NET_ECMS_Fini();
  656. return;
  657. }
  658. // printf("NET_EALARM_SetSDKLocalCfg pass!\n");
  659. //报警监听参数
  660. NET_EHOME_ALARM_LISTEN_PARAM struTcpAlarmListenParam = {0};
  661. memcpy(struTcpAlarmListenParam.struAddress.szIP, iServerIP, sizeof(iServerIP));
  662. struTcpAlarmListenParam.byProtocolType = 0;
  663. struTcpAlarmListenParam.struAddress.wPort = 7668;
  664. struTcpAlarmListenParam.fnMsgCb = AlarmMSGCallBack;
  665. struTcpAlarmListenParam.pUserData = this;
  666. struTcpAlarmListenParam.byUseCmsPort = 0;
  667. struTcpAlarmListenParam.byUseThreadPool = 0;
  668. if((alarmListenHandle=NET_EALARM_StartListen(&struTcpAlarmListenParam))<-1){
  669. // printf("NET_EALARM_StartListen TCP failed, error code: %d\n", NET_EALARM_GetLastError());
  670. NET_ECMS_Fini();
  671. NET_ESTREAM_Fini();
  672. NET_EALARM_Fini();
  673. exit(1);
  674. }
  675. // printf("NET_EALARM_StartListen TCP!\n");
  676. //报警监听参数
  677. NET_EHOME_ALARM_LISTEN_PARAM struListen = {0};
  678. memcpy(struListen.struAddress.szIP, iServerIP, sizeof(iServerIP));
  679. struListen.struAddress.wPort = 7669; //报警服务器监听端口
  680. struListen.fnMsgCb = AlarmMSGCallBack; //报警回调函数
  681. struListen.pUserData = this;
  682. struListen.byUseCmsPort = 0;
  683. struListen.byUseThreadPool = 0;
  684. struListen.byProtocolType = 1; //0- TCP方式(保留,暂不支持),1- UDP方式
  685. //启动报警监听
  686. LONG lHandle = NET_EALARM_StartListen(&struListen);
  687. if(lHandle< -1)
  688. {
  689. // printf("NET_EALARM_StartListen failed, error code: %d\n", NET_EALARM_GetLastError());
  690. NET_ECMS_Fini();
  691. NET_ESTREAM_Fini();
  692. NET_EALARM_Fini();
  693. exit(1);
  694. }
  695. // printf("NET_EALARM_StartListen!\n");
  696. NET_ECMS_SetLogToFile(1,QString("/var/log/usky/").toUtf8().data(),true);
  697. for(int i=0;i<DEVICES_COUNT;i++){
  698. ytShm->eHomeDevice[i].previewport = 58000+i;
  699. ytShm->eHomeDevice[i].listen_alarm_handle = lHandle;
  700. NET_EHOME_LISTEN_PREVIEW_CFG struListen = {0};
  701. memcpy(struListen.struIPAdress.szIP,iServerIP, sizeof(iServerIP));
  702. struListen.struIPAdress.wPort = ytShm->eHomeDevice[i].previewport; //流媒体服务器监听端口
  703. struListen.fnNewLinkCB = fnPREVIEW_NEWLINK_CB; //预览连接请求回调函数
  704. struListen.pUser =&(ytShm->eHomeDevice[i]);
  705. struListen.byLinkMode = 0; //0- TCP方式,1- UDP方式
  706. lHandle = NET_ESTREAM_StartListenPreview(&struListen);
  707. if(lHandle<-1){
  708. }else{
  709. ytShm->eHomeDevice[i].listen_preview_handle = lHandle;
  710. }
  711. }
  712. NET_EHOME_CMS_LISTEN_PARAM struCMSListenPara = {0};
  713. memcpy(struCMSListenPara.struAddress.szIP, "0.0.0.0", sizeof("0.0.0.0"));
  714. struCMSListenPara.struAddress.wPort = 7660;
  715. struCMSListenPara.fnCB = RegisterCallBack;
  716. struCMSListenPara.pUserData = this;
  717. LONG lListen = NET_ECMS_StartListen(&struCMSListenPara);
  718. if(lListen < -1)
  719. {
  720. NET_ECMS_Fini();
  721. NET_ESTREAM_Fini();
  722. NET_EALARM_Fini();
  723. exit(1);
  724. }
  725. // qDebug()<<"start core";
  726. }
  727. void CoreObject::process_stop()
  728. {
  729. QProcess *p = (QProcess *)sender();
  730. for(int i=0;i<DEVICES_COUNT;i++){
  731. if(p==processList.at(i)){
  732. if(ytShm->eHomeDevice[i].Connected==0x01){
  733. ytShm->eHomeDevice[i].io[0]=0x00;
  734. }
  735. break;
  736. }
  737. }
  738. }
  739. void CoreObject::AlarmReport(QString addr, QString type, QString time, QString companyCode, quint64 insertid)
  740. {
  741. // if(type.toInt()==200104)
  742. // type="占道侦测报警";
  743. // else if(type.toInt()==200001)
  744. // type="火点侦测报警";
  745. // QString rep2 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
  746. // .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
  747. // printf("%s\n",rep2.toUtf8().data());
  748. // repcur++;
  749. // repcur &= 0x07;
  750. // wssThread[repcur]->appendData(rep2);
  751. }
  752. QString CoreObject::getCompanyCode(QString addr){
  753. for(int i=0;i<DEVICES_COUNT;i++){
  754. QString devid = QString(ytShm->eHomeDevice[i].deviceID);
  755. if(QString::compare(addr,devid)==0){
  756. return QString(ytShm->eHomeDevice[i].rtsppath);
  757. }
  758. }
  759. return "";
  760. }
  761. void CoreObject::clear_devalarm(AlarmEvent devAlarm,bool isFtp)
  762. {
  763. for(int i=0;i<DEVICES_COUNT;i++){
  764. if(devAlarm.Device_Code.compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
  765. if(processList.at(i)->pid()>0)
  766. processList.at(i)->close();
  767. ytShm->eHomeDevice[i].io[6]=0x00;
  768. ytShm->eHomeDevice[i].io[0]=0x00;
  769. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  770. if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  771. fclose(ytShm->eHomeDevice[i].tmpfile);
  772. ytShm->eHomeDevice[i].savetmp = 0x00;
  773. ytShm->eHomeDevice[i].tmpfile = NULL;
  774. QFile(tmpfile).remove();
  775. ytShm->eHomeDevice[i].transed = 0x00;
  776. sprintf(ytShm->eHomeDevice[i].filename,"");
  777. if(isFtp){
  778. if(ytShm->eHomeDevice[i].io[8]==0x08){
  779. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200104"),
  780. 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,'','')")
  781. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  782. .arg(104).arg(devAlarm.Event_Status).arg(ytShm->eHomeDeviceFtp[i].filePath).arg("")));
  783. }else if(ytShm->eHomeDevice[i].io[8]==0x84){
  784. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200105"),
  785. 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,'','')")
  786. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  787. .arg(106).arg(devAlarm.Event_Status).arg(ytShm->eHomeDeviceFtp[i].filePath).arg("")));
  788. }
  789. }else{
  790. if(ytShm->eHomeDevice[i].io[8]==0x02||ytShm->eHomeDevice[i].io[8]==0x08){
  791. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200104"),
  792. 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,'','')")
  793. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  794. .arg(104).arg(devAlarm.Event_Status).arg("").arg("")));
  795. }else if(ytShm->eHomeDevice[i].io[8]==0x04||ytShm->eHomeDevice[i].io[8]==0x84){
  796. reportList.append(Alarm_Report(devAlarm.Device_Code,devAlarm.Event_Time,QString::fromUtf8("200105"),
  797. 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,'','')")
  798. .arg(2).arg(devAlarm.Device_Code).arg(devAlarm.Event_Time).arg(1)
  799. .arg(106).arg(devAlarm.Event_Status).arg("").arg("")));
  800. }
  801. }
  802. break;
  803. }
  804. }
  805. for(int i=0;i<alarmList.length();i++){
  806. if(alarmList.at(i).Device_Code.compare(devAlarm.Device_Code)==0){
  807. alarmList.removeAt(i);
  808. // break;
  809. }
  810. }
  811. }
  812. void CoreObject::time_out()
  813. {
  814. uint ChkTime = 0;
  815. QDateTime t = QDateTime::currentDateTime();
  816. ytShm->workingTime[0] = t.toTime_t();
  817. if(!had_reg){
  818. if((ytShm->workingTime[0]-start_time)>30)
  819. exit(1);
  820. }
  821. if(isWorking)
  822. return;
  823. isWorking = true;
  824. if(synchour!=t.time().hour())
  825. chkPhoneList();
  826. if(hour != t.time().hour()){
  827. hour = t.time().hour();
  828. QByteArray post_data;
  829. post_data.append(QString("queryJson={\"CMD\":%1}").arg(1));
  830. QNetworkRequest *req = new QNetworkRequest();
  831. req->setUrl(QUrl("https://fire.usky.cn:8443/YtIoT/cgi-bin/demo2.cgi"));
  832. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
  833. req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
  834. QNetworkReply* reply = netAccessManager->post(*req,post_data);
  835. }
  836. t = QDateTime::currentDateTime();
  837. ytShm->workingTime[0] = t.toTime_t();
  838. for(int i=0;i<DEVICES_COUNT;i++){
  839. if(ytShm->eHomeDevice[i].Inited==0x01){
  840. t = QDateTime::currentDateTime();
  841. ytShm->workingTime[0] = t.toTime_t();
  842. if(ytShm->eHomeDevice[i].Connected==0x00){
  843. if(ytShm->eHomeDevice[i].io[8]==0x01)
  844. ytShm->eHomeDevice[i].io[0] = 0x01;
  845. else if(ytShm->eHomeDevice[i].io[7]==0x01){
  846. if((ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>300)){
  847. // printf("%s time over close\n",ytShm->eHomeDevice[i].deviceID);
  848. ytShm->eHomeDevice[i].io[0] = 0x00;
  849. ytShm->eHomeDevice[i].io[7] = 0x00;
  850. ytShm->eHomeDevice[i].time[1]=0;
  851. }else if(ytShm->eHomeDevice[i].io[0]==0x00){
  852. // printf("%s io7 on\n",ytShm->eHomeDevice[i].deviceID);
  853. // ytShm->eHomeDevice[i].io[7] = 0x00;
  854. ytShm->eHomeDevice[i].io[0] = 0x01;
  855. }else if(ytShm->eHomeDevice[i].io[0]==0x01){
  856. if(ytShm->eHomeDevice[i].io[15]>2){
  857. // printf("%s NET_ECMS_StopGetRealStream\n",ytShm->eHomeDevice[i].deviceID);
  858. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  859. // ytShm->eHomeDevice[i].io[0] = 0x00;
  860. // ytShm->eHomeDevice[i].io[7] = 0x00;
  861. }
  862. ytShm->eHomeDevice[i].time[1]=0;
  863. ytShm->eHomeDevice[i].SessionId=-1;
  864. }
  865. }
  866. }else if(ytShm->eHomeDevice[i].io[6]==0x01){
  867. // printf("%s io6 on\n",ytShm->eHomeDevice[i].deviceID);
  868. ytShm->eHomeDevice[i].io[0] = 0x01;
  869. if(ytShm->eHomeDevice[i].io[8]==0x08||ytShm->eHomeDevice[i].io[8]==0x84){
  870. ytShm->eHomeDevice[i].io[0] = 0x00;
  871. QDateTime zeroTime = QDateTime::fromTime_t(0);
  872. uint t1 = QDateTime::currentDateTime().toTime_t();
  873. QDateTime start = QDateTime::currentDateTime();
  874. QDateTime now;
  875. do{
  876. now=QDateTime::currentDateTime();
  877. }while(start.secsTo(now)<=5);
  878. QString filePath = QString("/var/ftp/pub/%1").arg(QString(ytShm->eHomeDevice[i].deviceID));
  879. QDir qd(filePath);
  880. QFileInfo subFileList = qd.entryInfoList(QDir::Files | QDir::CaseSensitive).last();
  881. QString filePath1 = QString("%1/%2").arg(filePath).arg(subFileList.fileName());
  882. QString filePath2 = QString("/usr/local/nginx/html/VideoAlarmPics/%1_%2.jpg").arg(QString(ytShm->eHomeDevice[i].deviceID)).arg(t1);
  883. QFile file2(filePath1);
  884. uint fileTime = subFileList.created().toTime_t();
  885. file2.copy(filePath2);
  886. QFile::remove(filePath1);
  887. QString picturePath = QString("http://47.103.74.123/VideoAlarmPics/%1_%2.jpg").arg(QString(ytShm->eHomeDevice[i].deviceID)).arg(t1);
  888. uint timeDiff = t1-fileTime;
  889. appendLog(QString("{filePath1:%1,%2,%3,%4}").arg(filePath1).arg(timeDiff).arg(t1).arg(fileTime));
  890. if(timeDiff>120){
  891. for(int j=0;j<alarmList.length();j++){
  892. if(alarmList.at(j).Device_Code.compare(ytShm->eHomeDevice[i].deviceID)==0){
  893. AlarmEvent ftpae = alarmList.at(j);
  894. clear_devalarm(ftpae,false);
  895. break;
  896. }
  897. }
  898. }else{
  899. ytShm->eHomeDevice[i].io[0] = 0x00;
  900. if(QString(ytShm->eHomeDeviceFtp[i].deviceID).compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
  901. sprintf(ytShm->eHomeDeviceFtp[i].fileName,"%s",subFileList.fileName().toUtf8().data());
  902. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",picturePath.toUtf8().data());
  903. setFullTime(&(ytShm->eHomeDeviceFtp[i].alarmTime),zeroTime);
  904. }else{
  905. sprintf(ytShm->eHomeDeviceFtp[i].deviceID,"%s",QString(ytShm->eHomeDevice[i].deviceID).toUtf8().data());
  906. sprintf(ytShm->eHomeDeviceFtp[i].fileName,"%s",subFileList.fileName().toUtf8().data());
  907. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",picturePath.toUtf8().data());
  908. setFullTime(&(ytShm->eHomeDeviceFtp[i].alarmTime),zeroTime);
  909. }
  910. for(int j=0;j<alarmList.length();j++){
  911. if(alarmList.at(j).Device_Code.compare(ytShm->eHomeDevice[i].deviceID)==0){
  912. AlarmEvent ftpae = alarmList.at(j);
  913. clear_devalarm(ftpae,true);
  914. break;
  915. }
  916. }
  917. }
  918. }
  919. }
  920. if(ytShm->eHomeDevice[i].io[0]==0x01){
  921. if(ytShm->eHomeDevice[i].SessionId>-1){
  922. NET_EHOME_PUSHSTREAM_IN struPushStreamIn = {0};
  923. struPushStreamIn.dwSize = sizeof(struPushStreamIn);
  924. struPushStreamIn.lSessionID = ytShm->eHomeDevice[i].SessionId; //SessionID,预览请求会话ID
  925. //预览请求推流输出参数
  926. NET_EHOME_PUSHSTREAM_OUT struPushStreamOut = {0};
  927. if(!NET_ECMS_StartPushRealStream(ytShm->eHomeDevice[i].LoginId, &struPushStreamIn, &struPushStreamOut)){
  928. // printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
  929. ytShm->eHomeDevice[i].io[15]++;
  930. }else{
  931. // printf("%s start push real stream\n",ytShm->eHomeDevice[i].deviceID);
  932. ytShm->eHomeDevice[i].io[15]=0x00;
  933. }
  934. }
  935. else
  936. {
  937. ytShm->eHomeDevice[i].previewport = 58000+i;
  938. // printf("actice %s at %d(loginId:%d)\n",ytShm->eHomeDevice[i].deviceID,ytShm->eHomeDevice[i].previewport,ytShm->eHomeDevice[i].LoginId);
  939. NET_EHOME_PREVIEWINFO_IN_V11 struPreviewIn = {0};
  940. struPreviewIn.iChannel = 1; //通道号
  941. struPreviewIn.dwLinkMode = 0; //0- TCP方式,1- UDP方式
  942. struPreviewIn.dwStreamType = 1; //码流类型:0- 主码流,1- 子码流, 2- 第三码流
  943. memcpy(struPreviewIn.struStreamSever.szIP, oServerIP, sizeof(oServerIP));//流媒体服务器IP地址
  944. struPreviewIn.struStreamSever.wPort = ytShm->eHomeDevice[i].previewport;
  945. //预览请求输出参数
  946. NET_EHOME_PREVIEWINFO_OUT struPreviewOut = {0};
  947. if(!NET_ECMS_StartGetRealStreamV11(ytShm->eHomeDevice[i].LoginId, &struPreviewIn, &struPreviewOut)){
  948. // printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
  949. }else{
  950. // printf("active %s lSessionID:%d\n",ytShm->eHomeDevice[i].deviceID,struPreviewOut.lSessionID);
  951. ytShm->eHomeDevice[i].SessionId = struPreviewOut.lSessionID;
  952. NET_EHOME_PUSHSTREAM_IN struPushStreamIn = {0};
  953. struPushStreamIn.dwSize = sizeof(struPushStreamIn);
  954. struPushStreamIn.lSessionID = struPreviewOut.lSessionID; //SessionID,预览请求会话ID
  955. //预览请求推流输出参数
  956. NET_EHOME_PUSHSTREAM_OUT struPushStreamOut = {0};
  957. if(!NET_ECMS_StartPushRealStream(ytShm->eHomeDevice[i].LoginId, &struPushStreamIn, &struPushStreamOut)){
  958. // printf("%s NET_ECMS_StartGetRealStreamV11 failed.\n",ytShm->eHomeDevice[i].deviceID);
  959. ytShm->eHomeDevice[i].io[15]++;
  960. }else{
  961. // printf("%s start push real stream\n",ytShm->eHomeDevice[i].deviceID);
  962. ytShm->eHomeDevice[i].io[15]=0x00;
  963. }
  964. }
  965. }
  966. }
  967. }else if((ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>300)){
  968. if((ytShm->eHomeDevice[i].io[7]==0x01)||(ytShm->eHomeDevice[i].io[8]==0x01)){
  969. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  970. ytShm->eHomeDevice[i].io[0] = 0x00;
  971. ytShm->eHomeDevice[i].io[7] = 0x00;
  972. ytShm->eHomeDevice[i].time[1]=0;
  973. ytShm->eHomeDevice[i].SessionId =-1;
  974. }
  975. }
  976. }else if((ytShm->eHomeDevice[i].Connected==0x01)&&(ytShm->eHomeDevice[i].io[0]==0x00)){
  977. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  978. ytShm->eHomeDevice[i].Connected=0x00;
  979. ytShm->eHomeDevice[i].SessionId=-1;
  980. ytShm->eHomeDevice[i].time[0]=0;
  981. ytShm->eHomeDevice[i].time[1]=0;
  982. if(processList.at(i)->pid()>0){
  983. processList.at(i)->close();
  984. }
  985. // qDebug()<<QString("%1 will close.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
  986. QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
  987. if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  988. fclose(ytShm->eHomeDevice[i].tmpfile);
  989. ytShm->eHomeDevice[i].savetmp = 0x00;
  990. ytShm->eHomeDevice[i].tmpfile = NULL;
  991. QFile(tmpfile).remove();
  992. if(ytShm->eHomeDevice[i].io[8]==0x01){
  993. tmpfile = QString("/tmp/%1.mp4").arg(ytShm->eHomeDevice[i].deviceID);
  994. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  995. ytShm->eHomeDevice[i].tmpfile = fopen(tmpfile.toUtf8().data(),"wb");
  996. setFullTime(&(ytShm->eHomeDevice[i].onLinetime),t);
  997. sprintf(ytShm->eHomeDevice[i].filename,"");
  998. }
  999. ytShm->eHomeDevice[i].transed = 0x00;
  1000. }
  1001. }else if((ytShm->eHomeDevice[i].savetmp==0x01)&&(ytShm->eHomeDevice[i].transed==0x00)&&(ytShm->eHomeDevice[i].onLinetime.TIMESTAMP>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].onLinetime.TIMESTAMP)>3)){
  1002. if(ytShm->eHomeDevice[i].io[6]==0x01){
  1003. ytShm->eHomeDevice[i].io[6]=0x00;
  1004. ytShm->eHomeDevice[i].io[0]=0x00;
  1005. for(int j=0;j<alarmList.length();j++){
  1006. if(alarmList.at(j).Device_Code.compare(QString(ytShm->eHomeDevice[i].deviceID))==0){
  1007. QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
  1008. QString pic1name = QString("http://47.103.74.123/VideoAlarmPics/pic_%1_%2_0.jpg").arg(QDateTime::fromString(alarmList.at(j).Event_Time,"yyyy-MM-dd HH:mm:ss").toTime_t()).arg(QString(alarmList.at(j).Device_Code).replace(" ","_"));
  1009. QString picname = QString("/usr/local/nginx/html/VideoAlarmPics/pic_%1_%2_0.jpg").arg(QDateTime::fromString(alarmList.at(j).Event_Time,"yyyy-MM-dd HH:mm:ss").toTime_t()).arg(QString(alarmList.at(j).Device_Code).replace(" ","_"));
  1010. QString cmd1 = QString("ffmpeg -ss 00:00:00 -i \"%1\" -f image2 -y \"%2\"").arg(tmpfile).arg(picname);
  1011. if(ytShm->eHomeDevice[i].io[8]==0x02){
  1012. reportList.append(Alarm_Report(alarmList.at(j).Device_Code,alarmList.at(j).Event_Time,QString::fromUtf8("200104"),
  1013. 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,'','')")
  1014. .arg(2).arg(alarmList.at(j).Device_Code).arg(alarmList.at(j).Event_Time).arg(1)
  1015. .arg(104).arg(alarmList.at(j).Event_Status).arg(pic1name).arg("")));
  1016. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",pic1name.toUtf8().data());
  1017. }else if(ytShm->eHomeDevice[i].io[8]==0x04){
  1018. reportList.append(Alarm_Report(alarmList.at(j).Device_Code,alarmList.at(j).Event_Time,QString::fromUtf8("200105"),
  1019. 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,'','')")
  1020. .arg(2).arg(alarmList.at(j).Device_Code).arg(alarmList.at(j).Event_Time).arg(1)
  1021. .arg(106).arg(alarmList.at(j).Event_Status).arg(pic1name).arg("")));
  1022. sprintf(ytShm->eHomeDeviceFtp[i].filePath,"%s",pic1name.toUtf8().data());
  1023. }
  1024. if(processList.at(i)->pid()>0)
  1025. processList.at(i)->close();
  1026. processList.at(i)->start(cmd1);
  1027. alarmList.removeAt(j);
  1028. break;
  1029. }
  1030. }
  1031. }else{
  1032. setFullTime(&(ytShm->eHomeDevice[i].transtime),t);
  1033. QString tmpfile = QString(ytShm->eHomeDevice[i].filename).replace(" ","_");
  1034. ytShm->eHomeDevice[i].transed = 0x01;
  1035. sprintf(ytShm->eHomeDevice[i].filename,"%s",tmpfile.toUtf8().data());
  1036. system(QString("rm -f /usr/local/nginx/html/hls/%1*").arg(ytShm->eHomeDevice[i].deviceID).toUtf8().data());
  1037. QString cmd1 = QString("ffmpeg -re -i \"%1\" -c:v libx264 -an -strict -2 -s 352x278 -g 15 -f flv -v quiet \"rtmp://%2/hls/%3\" -c:v libx264 -an -strict -2 -s 352x278 -g 15 -f flv -v quiet \"rtmp://%4/live/%5\" ").arg(tmpfile).arg(iServerIP).arg(ytShm->eHomeDevice[i].deviceID).arg(iServerIP).arg(ytShm->eHomeDevice[i].deviceID);
  1038. if(processList.at(i)->pid()>0)
  1039. processList.at(i)->close();
  1040. processList.at(i)->start(cmd1);
  1041. ytShm->eHomeDevice[i].time[1] = t.toTime_t();
  1042. }
  1043. }else if((ytShm->eHomeDevice[i].transed==0x01)&&(ytShm->eHomeDevice[i].time[1]>0)&&((t.toTime_t()-ytShm->eHomeDevice[i].time[1])>600)){
  1044. if(NET_ECMS_StopGetRealStream(ytShm->eHomeDevice[i].LoginId,ytShm->eHomeDevice[i].SessionId)){
  1045. ytShm->eHomeDevice[i].Connected=0x00;
  1046. ytShm->eHomeDevice[i].SessionId=-1;
  1047. ytShm->eHomeDevice[i].time[0]=0;
  1048. ytShm->eHomeDevice[i].time[1]=0;
  1049. // qDebug()<<QString("%1 will close.(%2)").arg(ytShm->eHomeDevice[i].deviceID).arg(i).toUtf8().data();
  1050. processList.at(i)->close();
  1051. QString tmpfile = QString(ytShm->eHomeDevice[i].filename);
  1052. if(ytShm->eHomeDevice[i].tmpfile!=NULL)
  1053. fclose(ytShm->eHomeDevice[i].tmpfile);
  1054. ytShm->eHomeDevice[i].savetmp = 0x00;
  1055. ytShm->eHomeDevice[i].tmpfile = NULL;
  1056. QFile(tmpfile).remove();
  1057. ytShm->eHomeDevice[i].transed = 0x00;
  1058. }
  1059. }
  1060. }
  1061. }
  1062. if(reportList.length()>0){
  1063. if(db.open()){
  1064. while (reportList.length()>0) {
  1065. t = QDateTime::currentDateTime();
  1066. ytShm->workingTime[0] = t.toTime_t();
  1067. QString phonelist = "";
  1068. Alarm_Report rep = reportList.first();
  1069. appendLog(QString("[ %1 sql(%2) ] %3").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(alarmList.length()).arg(rep.Sql));
  1070. QSqlQuery qry = db.exec(rep.Sql);
  1071. quint64 insertId = qry.lastInsertId().toULongLong();
  1072. QString type="",point="";
  1073. //QString companyCode = getCompanyCode(rep.Device_Code);
  1074. QString companyCode="",deviceType="",deviceName="",value="";
  1075. for(int i=0;i<DEVICES_COUNT;i++){
  1076. QString devid = QString(ytShm->eHomeDevice[i].deviceID);
  1077. if(QString::compare(rep.Device_Code,devid)==0){
  1078. companyCode = QString(ytShm->eHomeDevice[i].rtsppath);
  1079. deviceType.append(QString("%1").arg((ytShm->eHomeDevice[i].io[8]&0xff),2,16,QChar('0')));
  1080. deviceName = QString(ytMqShm->eHomeDeviceMq[i].deviceName);
  1081. value = QString(ytShm->eHomeDeviceFtp[i].filePath);
  1082. break;
  1083. }
  1084. }
  1085. if(rep.Event_Name.toInt()==200104){
  1086. type=QString::fromUtf8("占道侦测报警");
  1087. point.append("1602");
  1088. }else if(rep.Event_Name.toInt()==200001){
  1089. type=QString::fromUtf8("火点侦测报警");
  1090. point.append("1601");
  1091. }else if(rep.Event_Name.toInt()==200105){
  1092. type=QString::fromUtf8("电动车禁入/区域入侵告警");
  1093. point.append("1603");
  1094. }
  1095. // printf("device code:%s\nget company code:%s\n",rep.Device_Code.toUtf8().data(),companyCode.toUtf8().data());
  1096. if(companyCode.length()>0){
  1097. QString alarmTopic = QString("/usky/ytCamCore/%1/%2/alarm").arg(companyCode).arg(rep.Device_Code);
  1098. QString alarmStr = "";
  1099. alarmStr.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(rep.Device_Code).arg(deviceName).arg(type).arg(point).arg(value).arg(deviceName).arg((QDateTime::fromString(rep.Event_Time,"yyyy-MM-dd hh:mm:ss")).toTime_t()).arg(deviceType).arg(rep.Device_Code).arg((QDateTime::fromString(rep.Event_Time,"yyyy-MM-dd hh:mm:ss")).toTime_t()));
  1100. if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) ||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1101. m_client->connectToHost();
  1102. }
  1103. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1104. m_client->publish(QMQTT::Message(alarmmqttIdx++,alarmTopic,alarmStr.toUtf8()));
  1105. if(alarmmqttIdx>9999)
  1106. alarmmqttIdx=1;
  1107. }
  1108. QString rep1 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(rep.Device_Code).arg(insertId);
  1109. spThread[repcur]->appendData(rep1);
  1110. QString rep2 = QString("{\"SubType\":16,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
  1111. .arg(rep.Device_Code).arg(insertId).arg(companyCode).arg(type).arg(rep.Event_Time);
  1112. // printf("%s\n",rep2.toUtf8().data());
  1113. wssThread[repcur]->appendData(rep2);
  1114. for(int i=0;i<companyphoneList.length();i++){
  1115. if(QString::compare(companyphoneList.at(i).CompanyCode,companyCode)==0){
  1116. if(phonelist.length()==0)
  1117. phonelist = companyphoneList.at(i).Phone;
  1118. else
  1119. phonelist.append(","+companyphoneList.at(i).Phone);
  1120. }
  1121. }
  1122. repcur++;
  1123. repcur &= 0x07;
  1124. if(phonelist.length()>0){
  1125. QString data = QString("evt_name=%1&device_code=%2&phone=%3&insert_id=%4&time=%5&bz=%1").arg(type).arg(rep.Device_Code).arg(phonelist).arg(insertId).arg(rep.Event_Time)
  1126. .replace(",","%2C").replace(":","%3A").replace(" ","+");
  1127. wxThreads[wxcur]->appendData(data);
  1128. wxcur++;
  1129. wxcur &= 0x07;
  1130. }
  1131. }
  1132. reportList.removeFirst();
  1133. }
  1134. db.close();
  1135. }
  1136. }
  1137. if(sqlList.length()>0){
  1138. if(db.open()){
  1139. while(sqlList.length()>0){
  1140. db.exec(sqlList.first());
  1141. appendLog(QString("[ %1 sql ] %2").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(sqlList.first()));
  1142. sqlList.removeFirst();
  1143. }
  1144. db.close();
  1145. }
  1146. }
  1147. int a_count=0;
  1148. t = QDateTime::currentDateTime();
  1149. if((t.toTime_t()-ChkTime)>60)
  1150. {
  1151. ChkTime = t.toTime_t();
  1152. QListIterator<AlarmEvent> AlaList(alarmList);
  1153. while(AlaList.hasNext()){
  1154. AlarmEvent ae = AlaList.next();
  1155. if((t.toTime_t()-ae.t_stamp)>120){
  1156. nopic_count++;
  1157. a_count++;
  1158. appendLog(QString("[ %1 out(%2:%3) ] %4 %5").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(alarmList.length()).arg(a_count).arg(ae.Device_Code).arg(ae.Event_Time));
  1159. clear_devalarm(ae,false);
  1160. if(nopic_count>5)
  1161. exit(1);
  1162. }
  1163. }
  1164. }
  1165. isWorking = false;
  1166. }