|
@@ -0,0 +1,265 @@
|
|
|
+#include "httpthread.h"
|
|
|
+#include "../AGBoxDog/boxshm.h"
|
|
|
+
|
|
|
+HttpThread::HttpThread(QObject *parent) : QObject(parent)
|
|
|
+{
|
|
|
+ minute = 255;
|
|
|
+ minute1 = 255;
|
|
|
+ hour = 25;
|
|
|
+ roomList.clear();
|
|
|
+ keep = false;
|
|
|
+ isWaiting = false;
|
|
|
+ networkManager = new QNetworkAccessManager(this);
|
|
|
+ connect(networkManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finishedSlot(QNetworkReply *)));
|
|
|
+ isWaiting1 = false;
|
|
|
+ networkManager1 = new QNetworkAccessManager(this);
|
|
|
+ connect(networkManager1,SIGNAL(finished(QNetworkReply *)),this,SLOT(finishedSlot1(QNetworkReply *)));
|
|
|
+
|
|
|
+ timer = new QTimer(this);
|
|
|
+ connect(timer,&QTimer::timeout,this,&HttpThread::time_out);
|
|
|
+ timer->start(5000);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void HttpThread::stop()
|
|
|
+{
|
|
|
+ keep = false;
|
|
|
+}
|
|
|
+
|
|
|
+void HttpThread::finishedSlot(QNetworkReply *reply)
|
|
|
+{
|
|
|
+ if(reply->error()==QNetworkReply::NoError){
|
|
|
+ QString data = QString::fromUtf8(reply->readAll());
|
|
|
+ QByteArray ba = data.toLocal8Bit();
|
|
|
+ ba = QString::fromLocal8Bit(ba).toUtf8();
|
|
|
+ QJsonParseError parseError;
|
|
|
+ QJsonDocument doc = QJsonDocument::fromJson(ba,&parseError);
|
|
|
+ printf("event parseError.error %d\n",parseError.error);
|
|
|
+ if(parseError.error == QJsonParseError::NoError){
|
|
|
+ QJsonArray list_array = doc.array();
|
|
|
+ QString device_code = "";
|
|
|
+ QString nodeInfo = "";
|
|
|
+ double wd=0.00,sd=0.00,pm2_5=0.00,co2=0.00;
|
|
|
+ int voc= 0;
|
|
|
+ int fan_status = 0;
|
|
|
+
|
|
|
+ int ts = QDateTime::currentDateTime().toTime_t();
|
|
|
+ for(int i=0;i<list_array.size();i++){
|
|
|
+ QJsonObject list_object = list_array.at(i).toObject();
|
|
|
+ device_code = list_object.value("roomNo").toString();
|
|
|
+ QString attribute_name = list_object.value("name").toString();
|
|
|
+
|
|
|
+ if(attribute_name.compare("新风系统-室内温度")==0){
|
|
|
+ wd = list_object.value("value").toDouble();
|
|
|
+ nodeInfo.append(QString("\"wd\":%1,").arg(wd));
|
|
|
+ }
|
|
|
+ if(attribute_name.compare("新风系统-室内湿度")==0){
|
|
|
+ sd = list_object.value("value").toDouble();
|
|
|
+ nodeInfo.append(QString("\"sd\":%1,").arg(sd));
|
|
|
+ }
|
|
|
+ if(attribute_name.compare("新风系统-室内PM2.5")==0){
|
|
|
+ pm2_5 = list_object.value("value").toDouble();
|
|
|
+ nodeInfo.append(QString("\"pm2_5\":%1,").arg(pm2_5));
|
|
|
+ }
|
|
|
+ if(attribute_name.compare("新风系统-室内CO2")==0){
|
|
|
+ co2 = list_object.value("value").toDouble();
|
|
|
+ nodeInfo.append(QString("\"co2\":%1,").arg(co2));
|
|
|
+ }
|
|
|
+ if(attribute_name.compare("新风系统-室内VOC等级")==0){
|
|
|
+ voc = list_object.value("value").toInt();
|
|
|
+ nodeInfo.append(QString("\"voc\":%1,").arg(voc));
|
|
|
+ }
|
|
|
+ if(attribute_name.contains("排气扇")){
|
|
|
+ fan_status = list_object.value("value").toInt();
|
|
|
+ nodeInfo.append(QString("\"fan_status\":%1,").arg(fan_status));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ nodeInfo = nodeInfo.left(nodeInfo.length()-1);
|
|
|
+
|
|
|
+ for(int i=0;i<1024;i++){
|
|
|
+ if(agBoxShm->device[i].Enabled == 0x01){
|
|
|
+ if(device_code.compare(QString(agBoxShm->device[i].device_code))==0){
|
|
|
+ emit mqttData(QString("{\"device_id\":\"%1\",\"device_code\":\"%2\",\"product_id\":\"%3\",\"timestamp\":%4,\"tags\":{\"conn_type\":\"\",\"type\":\"\"},\"metrics\":{%5},\"device_type\":\"%6-xf\"}")
|
|
|
+ .arg(QString(agBoxShm->device[i].device_id)).arg(device_code).arg(QString(agBoxShm->device[i].product_code)).arg(ts).arg(nodeInfo).arg(agBoxShm->device[i].device_type));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }else{
|
|
|
+ emit dataLog(QString("http room QJson Parse Error %1").arg(parseError.error));
|
|
|
+ }
|
|
|
+
|
|
|
+ emit dataLog(QString("[%1] http room QNetworkReply Status %2").arg(QDateTime::fromTime_t(QDateTime::currentDateTime().toTime_t()).toString("yyyy-MM-dd HH:mm:ss")).arg(data));
|
|
|
+ }else{
|
|
|
+ emit dataLog(QString("[%1] http room QNetworkReply Status Err %2").arg(QDateTime::fromTime_t(QDateTime::currentDateTime().toTime_t()).toString("yyyy-MM-dd HH:mm:ss")).arg(reply->error()));
|
|
|
+ }
|
|
|
+
|
|
|
+ isWaiting = false;
|
|
|
+ roomList.removeFirst();
|
|
|
+ reply->abort();
|
|
|
+ reply->deleteLater();
|
|
|
+}
|
|
|
+
|
|
|
+void HttpThread::reply_timeout()
|
|
|
+{
|
|
|
+ printf("[%s] room reply_timeout\n",QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
|
|
|
+ isWaiting = false;
|
|
|
+ roomList.removeFirst();
|
|
|
+}
|
|
|
+
|
|
|
+void HttpThread::finishedSlot1(QNetworkReply *reply)
|
|
|
+{
|
|
|
+ if(reply->error()==QNetworkReply::NoError){
|
|
|
+ QString data = QString::fromUtf8(reply->readAll());
|
|
|
+ QByteArray ba = data.toLocal8Bit();
|
|
|
+ ba = QString::fromLocal8Bit(ba).toUtf8();
|
|
|
+ QJsonParseError parseError;
|
|
|
+ QJsonDocument doc = QJsonDocument::fromJson(ba,&parseError);
|
|
|
+ printf("status parseError.error %d\n",parseError.error);
|
|
|
+ if(parseError.error == QJsonParseError::NoError){
|
|
|
+ QJsonObject obj_doc = doc.object();
|
|
|
+ QJsonValue data_value = obj_doc.value("showapi_res_body");
|
|
|
+
|
|
|
+ QJsonObject data_object = data_value.toObject();
|
|
|
+ QJsonValue list_value = data_object.value("now");
|
|
|
+ QJsonObject list_object = list_value.toObject();
|
|
|
+ double wd = list_object.value("temperature").toString().toDouble();
|
|
|
+ QString sdStr = list_object.value("sd").toString();
|
|
|
+ double sd = sdStr.left(sdStr.length()-1).toDouble();
|
|
|
+
|
|
|
+ QJsonValue aqi_detail = list_object.value("aqiDetail");
|
|
|
+ QJsonObject detail_object = aqi_detail.toObject();
|
|
|
+ double pm2_5 = detail_object.value("pm2_5").toString().toDouble();
|
|
|
+ QString qual = detail_object.value("quality").toString();
|
|
|
+
|
|
|
+ int quality = 0;
|
|
|
+ if(qual.compare("优质")==0){
|
|
|
+ quality = 1;
|
|
|
+ }else if(qual.compare("良好")==0){
|
|
|
+ quality = 2;
|
|
|
+ }else if(qual.compare("轻度污染")==0){
|
|
|
+ quality = 3;
|
|
|
+ }else if(qual.compare("中度污染")==0){
|
|
|
+ quality = 4;
|
|
|
+ }else if(qual.compare("重度污染")==0){
|
|
|
+ quality = 5;
|
|
|
+ }else if(qual.compare("严重污染")==0){
|
|
|
+ quality = 6;
|
|
|
+ }
|
|
|
+
|
|
|
+ emit mqttData(QString("{\"device_id\":\"%1\",\"device_code\":\"%2\",\"product_id\":\"%3\",\"timestamp\":%4,\"tags\":{\"conn_type\":\"\",\"type\":\"\"},\"metrics\":{\"wd\":%5,\"sd\":%6,\"pm2_5\":%7,\"quality\":%8},\"device_type\":\"%9-xf\"}")
|
|
|
+ .arg(QString("weather0001")).arg(QString("weather0001")).arg(QString("511_XFFJ")).arg(QDateTime::fromString(QDateTime::currentDateTime().toString("yyyy-MM-dd HH")+":00:00","yyyy-MM-dd HH:mm:ss").toTime_t()).arg(wd).arg(sd).arg(pm2_5).arg(quality).arg(511));
|
|
|
+
|
|
|
+
|
|
|
+ }else{
|
|
|
+ emit dataLog(QString("ali weather QJson Parse Error %1").arg(parseError.error));
|
|
|
+ }
|
|
|
+
|
|
|
+ emit dataLog(QString("[%1] ali weather QNetworkReply Status %2").arg(QDateTime::fromTime_t(QDateTime::currentDateTime().toTime_t()).toString("yyyy-MM-dd HH:mm:ss")).arg(data));
|
|
|
+ }else{
|
|
|
+ emit dataLog(QString("[%1] ali weather QNetworkReply Status Err %2").arg(QDateTime::fromTime_t(QDateTime::currentDateTime().toTime_t()).toString("yyyy-MM-dd HH:mm:ss")).arg(reply->error()));
|
|
|
+ }
|
|
|
+
|
|
|
+ isWaiting1 = false;
|
|
|
+ reply->abort();
|
|
|
+ reply->deleteLater();
|
|
|
+}
|
|
|
+
|
|
|
+void HttpThread::reply_timeout1()
|
|
|
+{
|
|
|
+ printf("[%s] ali weather reply_timeout\n",QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
|
|
|
+ isWaiting1 = false;
|
|
|
+}
|
|
|
+
|
|
|
+void HttpThread::time_out()
|
|
|
+{
|
|
|
+ agBoxShm->processStatus[11].t_time=QDateTime::currentDateTime().toTime_t();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if(hour != QDateTime::currentDateTime().time().hour()){
|
|
|
+ hour = QDateTime::currentDateTime().time().hour();
|
|
|
+
|
|
|
+
|
|
|
+ if(!isWaiting1){
|
|
|
+ isWaiting1 = true;
|
|
|
+ QNetworkRequest *req = new QNetworkRequest();
|
|
|
+ QString url = QString("https://weather01.market.alicloudapi.com/area-to-weather?area=历城区");
|
|
|
+ req->setUrl(QUrl(url));
|
|
|
+ req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
|
|
|
+ req->setRawHeader("Accept","*/*");
|
|
|
+ req->setRawHeader("Connection","keep-alive");
|
|
|
+ req->setRawHeader("Cache-Control"," no-cache");
|
|
|
+ req->setRawHeader("Authorization","APPCODE 0f2b7fce6e104ba8835358b7b59b4fb6");
|
|
|
+ QNetworkReply *reply = networkManager1->get(*req);
|
|
|
+ QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
|
|
|
+ connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout1()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(QDateTime::currentDateTime().time().minute()%10 == 0){
|
|
|
+ for(int i=0;i<1024;i++){
|
|
|
+ if(QString("http").compare(QString(agBoxShm->device[i].device_gateway))==0){
|
|
|
+ roomList.append(QString(agBoxShm->device[i].device_code));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!isWaiting && roomList.length() > 0){
|
|
|
+ isWaiting = true;
|
|
|
+ QString roomNo = roomList.first();
|
|
|
+ QNetworkRequest *req = new QNetworkRequest();
|
|
|
+ QString url = QString("http://www.limark.net:81/api/hotel/control/device/list.do?hotelCode=ff80808179c6599a0179c65caf9a0001&roomNo=%1").arg(roomNo);
|
|
|
+ req->setUrl(QUrl(url));
|
|
|
+ req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
|
|
|
+ req->setRawHeader("Accept","*/*");
|
|
|
+ req->setRawHeader("Connection","keep-alive");
|
|
|
+ req->setRawHeader("Cache-Control"," no-cache");
|
|
|
+ req->setRawHeader("api-key","ff1930560ed8405382d49c6991861e75");
|
|
|
+ QNetworkReply *reply = networkManager->get(*req);
|
|
|
+ QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
|
|
|
+ connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout()));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|