#include "hotcameramodule.h" #include "mynetmanager.h" #include "defines.h" #include #include #include #include #include #include #include #define HOTCAMERA_URL "/ISAPI/Event/notification/alertStream" HotCameraModule::HotCameraModule(int id, QObject *parent) : QObject(parent) { this->id = id; module_enabled = false; moduleParaReadFromFile(¶); net = new MyNetManager(this); connect(net, &MyNetManager::sigCapPicture, this, &HotCameraModule::onSavePicture); //2023.8.15 //获取实时温度信号槽 connect(net, &MyNetManager::sigGetTemperature, this, &HotCameraModule::onSaveTemperature); connect(net, SIGNAL(sigTempAlarm(float)), this, SLOT(onTempAlarm(float))); connect(net, SIGNAL(sigKeepBrokeAlarm()), this, SLOT(onConnectBrokeAlarm())); net->SetIp(para.IP_Adress); net->SetTempraturePara(para.reflectivetemperature,para.emissivity, para.distant); net->SetAlarmPara(para.alert, para.alarm, para.alarm_time); appTimer = new QTimer(this); connect(appTimer, SIGNAL(timeout()), this, SLOT(appTimerProcess())); appTimer->start(1000); removeTempAlarmFile(); qDebug() << "HotCameraModule init ok " << endl; } HotCameraModule::~HotCameraModule() { } void HotCameraModule::onSavePicture(QByteArray &d) { qDebug()<<"onSavePicture\n"; QString save_path; if(id == 0){ save_path = "/home/data/IMAGE/"; }else if(id == 1){ save_path = "/home/data/IMAGE1/"; }else{ return; } QDir dir(QDir::currentPath()); if(!dir.exists(save_path)) { dir.mkdir(save_path); qDebug()<GetPicture(); //获取图片同时获取实时温度 net->GetRealTimeTemperature(); } void HotCameraModule::onConnectBrokeAlarm() { QString save_file; if(id == 0){ save_file = "/home/data/Pop_rxy1.txt"; }else if(id == 1){ save_file = "/home/data/Pop_rxy2.txt"; } QFile file(save_file); if (file.open(QFile::WriteOnly)) { QTextStream s(&file); qDebug()<< QString("onConnectBrokeAlarm => save %1.").arg(save_file); } file.close(); } void HotCameraModule::moduleParaReadFromFile(HotCameraPara *p) { QString para_file; if(id == 0){ para_file = "/home/data/camera.txt"; }else if(id == 1){ para_file = "/home/data/camera1.txt"; }else{ return; } QFile file(para_file); //文件路径 if (file.open(QFile::ReadOnly)) { QTextStream in(&file); p->IP_Adress = in.readLine(); qDebug()<IP_Adress); p->month = in.readLine().toInt(); qDebug()<month); p->week = in.readLine().toInt(); qDebug()<week); p->day = in.readLine().toInt(); qDebug()<day); QString temp = in.readLine(); qDebug()<start_hour = hours.toUInt(); p->start_minute = minutes.toUInt(); temp = in.readLine(); qDebug()<end_hour = hours.toUInt(); qDebug()<end_hour); p->end_minute = minutes.toUInt(); qDebug()<end_minute); p->reflectivetemperature = in.readLine().toInt(); p->emissivity = in.readLine().toFloat(); p->distant = in.readLine().toInt(); p->alert = in.readLine().toInt(); p->alarm = in.readLine().toInt(); p->alarm_time = in.readLine().toInt(); p->nominal_capacity = in.readLine().toInt(); p->calculated_capacity = in.readLine().toInt(); } file.close(); } void HotCameraModule::notifyCapPictureFinished(const QString &pic_name) { /***** 温度告警,存储抓图文件目录 *****/ if(TempAlarmFlag){ QString temp_file; if(id == 0){ temp_file = "/home/data/temperature.txt"; }else if(id == 1){ temp_file = "/home/data/temperature1.txt"; } QFile file(temp_file); if (file.open(QFile::WriteOnly)) { QTextStream set_wifi_connect(&file); set_wifi_connect << pic_name;//写入温度照片路径 qDebug()<< QString("notifyCapPictureFinished => TempAlarmFlag save %1 pic_name.").arg(temp_file); } file.close(); TempAlarmFlag = false; return; } /***** 手动抓图,存储抓图文件目录 *****/ //发送文件路径 QString save_path_file; if(id == 0){ save_path_file = "/home/data/rxy_1.txt"; }else if(id == 1){ save_path_file = "/home/data/rxy_2.txt"; } QFile file(save_path_file); if (file.open(QFile::WriteOnly)) { QTextStream set_wifi_connect(&file); set_wifi_connect << pic_name;//写入温度照片路径 qDebug()<< QString("notifyCapPictureFinished => save %1 pic_name.").arg(save_path_file); } file.close(); QString msg_file_name; if(id == 0){ msg_file_name = "/home/data/rxy_can_show1.txt"; }else if(id == 1){ msg_file_name = "/home/data/rxy_can_show2.txt"; } //发送可显示消息 QFile file1(msg_file_name);//文件路径 if(file1.open(QFile::WriteOnly)) { QTextStream set_wifi_connect(&file1); set_wifi_connect<< "1"; qDebug()<< QString("notifyCapPictureFinished => save %1 to show.").arg(msg_file_name); } file1.close(); } void HotCameraModule::appTimerProcess() { //qDebug() << QString("[%1]: appTimerProcess\n").arg(id); //时间更改检查 //qDebug() << QString("[%1]:eventTimeChangeCheck\n").arg(id); eventTimeChangeCheck(); //qDebug() << QString("[%1]:eventConnectTimeCheck\n").arg(id); //检测热像仪连接时间窗口,并连接 eventConnectTimeCheck(); //qDebug() << QString("[%1]:eventCapPictureCheck\n").arg(id); //检测抓图文件,并抓图 eventCapPictureCheck(); //2023.8.14 //检测获取温度文件,并获取实时温度 eventGetTemperatureCheck(); //qDebug() << QString("[%1]:eventParaChangedCheck\n").arg(id); //参数更改检查 eventParaChangedCheck(); //连接成功,删除长连接断线告警文件 eventConnectBrokeAlarmCheck(); //热像仪功能关闭/打开控制 eventConnectSwitch(); } bool HotCameraModule::eventParaChangedCheck() { QString change_set_file; if(id == 0){ change_set_file = "/home/data/change_set.txt"; }else if(id == 1){ change_set_file = "/home/data/change_set1.txt"; } QFileInfo file_set(change_set_file); if (file_set.exists() == true) { qDebug()<< QString("%1 changed!").arg(change_set_file); HotCameraPara temp; moduleParaReadFromFile(&temp); if(temp.IP_Adress != para.IP_Adress){ qDebug() << QString("<<<<< HotCameraModule[%1] IP_Adress changed net->KeepState() =%2\n").arg(id).arg(net->KeepState()); if(net->KeepState() == NET_CONNECTED){ qDebug() << QString("net%1->KeepReconnect...").arg(id); net->KeepReconnect(); } } if((temp.reflectivetemperature != para.reflectivetemperature) || (temp.emissivity != para.emissivity) || (temp.distant != para.distant) ) { qDebug() << QString("<<<<< HotCameraModule[%1] net->SetTempraturePara...\n").arg(id); net->SetTempraturePara(temp.reflectivetemperature,temp.emissivity, temp.distant); } if((temp.alert != para.alert) || (temp.alarm != para.alarm) || (temp.alarm_time != para.alarm_time) ) { qDebug() << QString("<<<<< HotCameraModule[%1] net->SetAlarmPara...").arg(id); net->SetAlarmPara(temp.alert, temp.alarm, temp.alarm_time); } memcpy(¶, &temp, sizeof(HotCameraPara)); QFile file(change_set_file); file.remove(); qDebug() << "change_set"; return true; } return false; } bool HotCameraModule::eventCapPictureCheck() { QString file_name; if(id == 0){ file_name = "/home/data/rxy_show1.txt"; }else if(id == 1){ file_name = "/home/data/rxy_show2.txt"; }else{ return false; } QFileInfo fileInfo(file_name); if(fileInfo.exists() == true) { qDebug()<< QString("%1 changed, start capture picture!").arg(file_name)<GetPicture(); //获取图片同时获取实时温度 net->GetRealTimeTemperature(); } else{ } QFile file1(file_name); file1.remove(); return true; } return false; } //2023.8.15 //获取实时温度事件 bool HotCameraModule::eventGetTemperatureCheck() { QString file_name; if(id == 0){ file_name = "/home/data/rxy_temperature_show1.txt"; }else if(id == 1){ file_name = "/home/data/rxy_temperature_show2.txt"; }else{ return false; } QFileInfo fileInfo(file_name); if(fileInfo.exists() == true) { qDebug()<< QString("%1 changed, start get Temp!").arg(file_name)<GetRealTimeTemperature(); } else{ } QFile file1(file_name); file1.remove(); return true; } return false; } bool HotCameraModule::eventTimeChangeCheck() { QString time_change_file; if(id == 0){ time_change_file = "/home/data/change_time.txt"; }else if(id == 1){ time_change_file = "/home/data/change_time1.txt"; }else{ return false; } QFileInfo file_time(time_change_file); if (file_time.exists() == true) { qDebug()<< QString("%1 changed!").arg(time_change_file); //更新参数文件,时间范围值会被更新 // HotCameraPara temp; // moduleParaReadFromFile(&temp); // memcpy(¶, & temp, sizeof(HotCameraPara)); QFile file_change_time(time_change_file); file_change_time.remove(); qDebug() << "eventTimeChangeCheck!\n" << endl; return true; } return false; } bool HotCameraModule::eventConnectTimeCheck() { if(module_enabled){ uint32_t start_minute, end_minute, now_minute; start_minute = para.start_hour * 60 + para.start_minute; end_minute = para.end_hour * 60 + para.end_minute; #if 0 QDateTime dateTime = QDateTime::currentDateTime(); now_minute = dateTime.time().hour() * 60 + dateTime.time().minute(); #else QDateTime dateTime = QDateTime::currentDateTimeUtc(); long nowtime = dateTime.toTime_t() + 28800; struct tm *timp; timp = gmtime(&nowtime); now_minute = timp->tm_hour * 60 + timp->tm_min; #endif //qDebug() << QString("<<<<< HotCameraModule[%1]:").arg(id) << dateTime; //qDebug("<<<<< HotCameraModule[%d] :start_minute[%u],end_minute[%u],now_minute[%u]\n", id, start_minute, end_minute, now_minute); if(now_minute >= start_minute && now_minute <= end_minute){ moduleConnect(); }else{ //qDebug("<<<<< HotCameraModule[%d] not in connect time range, disconnect!!!\n",id); modleDisConnect(); } }else { //qDebug("<<<<< HotCameraModule[%d] module_enabled false disconnect!!!\n",id); modleDisConnect(); } return true; } bool HotCameraModule::eventConnectBrokeAlarmCheck() { if(net->KeepState() != NET_CONNECTED){ return false; } if(removeTempAlarmFile()){ return true; } return false; } bool HotCameraModule::eventConnectSwitch() { QString time_change_file; if(id == 0){ time_change_file = "/home/data/connect_rxy1.txt"; }else if(id == 1){ time_change_file = "/home/data/connect_rxy2.txt"; }else{ return false; } QFile file(time_change_file); //文件路径 if (file.open(QFile::ReadOnly) == true) { QTextStream set_wifi_connect(&file); if(set_wifi_connect.readLine().toInt() == 1) { //打开热像仪 module_enabled = true; // qDebug()<<"eventConnectSwitch_Open hot!"; } else { //关闭热像仪 module_enabled = false; // qDebug()<<"eventConnectSwitch_Close hot!"; } } else{ ; } return false; } void HotCameraModule::moduleConnect() { if(net->KeepState() == NET_DISCONNECT){ qDebug()<< "KeepState is NET_DISCONNECT, to KeepConnect..."; net->KeepConnect(); } } void HotCameraModule::modleDisConnect() { if(net->KeepState() != NET_DISCONNECT){ net->KeepDisconnect(); } } bool HotCameraModule::removeTempAlarmFile() { QString remove_file; if(id == 0){ remove_file = "/home/data/Pop_rxy1.txt"; }else if(id == 1){ remove_file = "/home/data/Pop_rxy2.txt"; } QFileInfo file_time(remove_file); if (file_time.exists() == true) { qDebug()<< QString("eventConnectBrokeAlarmCheck remove %1 !\n").arg(remove_file); QFile file(remove_file); file.remove(); return true; } return false; }