Bladeren bron

新增17系列功能模块 和 程序启动管控

James 3 jaren geleden
bovenliggende
commit
972999b9f8

+ 1 - 0
ytWG/WGDog/WGDog.pro

@@ -1,4 +1,5 @@
 QT -= gui
+QT += network
 
 CONFIG += c++11 console
 CONFIG -= app_bundle

+ 86 - 1
ytWG/WGDog/dogcore.cpp

@@ -3,17 +3,50 @@
 
 dogcore::dogcore(QObject *parent) : QObject(parent)
 {
+    isWorking = false;
+    hour = 255;
     timer = new QTimer(this);
     connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
 
+    netAccessManager = new QNetworkAccessManager(this);
+    connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
+}
 
+dogcore::~dogcore()
+{
+    netAccessManager->deleteLater();
 }
 
 void dogcore::time_out()
 {
+    if(hour != QTime::currentTime().hour()){
+        hour = QTime::currentTime().hour();
+
+        QByteArray post_data;
+        uint t = QDateTime::currentDateTime().toTime_t();
+
+        QString tmp="";
+            QString number= QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
+            QByteArray str;
+            str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
+            tmp.append(str.toHex());
+
+
+        post_data.append(QString("requestType=%1&").arg(3));
+        post_data.append(QString("publicKey=%1&").arg(tmp));
+        post_data.append(QString("timeStamp=%1").arg(t));
+
+        QNetworkRequest *req = new QNetworkRequest();
+        req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/wooGiApi"));
+        req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
+        req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
+        QNetworkReply* reply = netAccessManager->post(*req,post_data);
+    }
+
+
     uint chkTime = QDateTime::currentDateTime().toTime_t();
 
-    if((chkTime-dataProcessShm->t_time)>30){
+    if(((chkTime-dataProcessShm->t_time)>30) && (isWorking)){
         if(system("killall ytWGElectric")!=-1){
             if(system("/root/bin/ytWGElectric &")!=-1){
 
@@ -23,6 +56,58 @@ void dogcore::time_out()
 }
 
 
+void dogcore::finishedSlot(QNetworkReply *reply)
+{
+    //printf("enter finishedSlot ++++++++++++++\n");
+    QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
+    if(status_code == 200){
+        if(reply->error() == QNetworkReply::NoError){
+            QString message = QString::fromUtf8(reply->readAll());
+            QByteArray data = message.toLatin1();
+            QJsonParseError json_err;
+            QJsonDocument jsondoc(QJsonDocument::fromJson(data,&json_err));
+            //printf("json_err.error = %d\n ",json_err.error);
+            if(json_err.error==QJsonParseError::NoError){
+                QJsonObject root = jsondoc.object();
+                QJsonObject obj = root.value("data").toObject();
+                QString num = "";
+                int t = 0;
+                if((!obj.value("publicKey").isUndefined())&&(!obj.value("publicKey").isNull())){
+                    num = obj.value("publicKey").toString();
+                }
+                if((!obj.value("timeStamp").isUndefined())&&(!obj.value("timeStamp").isNull())){
+                    t = obj.value("timeStamp").toInt();
+                }
+
+                QString temp="";
+                QString number = QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
+                QByteArray str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
+                temp.append(str.toHex());
+                if(QString::compare(num,temp)!=0){
+                    isWorking = false;
+                }
+                else{
+                    isWorking = true;
+                }
+
+
+            }
+
+
+        }else{
+
+        }
+
+    }else{
+
+    }
+
+    reply->abort();
+    reply->close();
+    reply->deleteLater();
+}
+
+
 void dogcore::start()
 {
     time_out();

+ 11 - 0
ytWG/WGDog/dogcore.h

@@ -4,21 +4,32 @@
 #include <QObject>
 #include <QTimer>
 #include <QDateTime>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonParseError>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
 
 class dogcore : public QObject
 {
     Q_OBJECT
 public:
     explicit dogcore(QObject *parent = 0);
+    ~dogcore();
     void start();
 signals:
 
 public slots:
     void time_out();
+    void finishedSlot(QNetworkReply *reply);
 private:
     QTimer *timer;
     bool isWorking;
     uint ChkTime;
+    int hour;
+    QNetworkAccessManager *netAccessManager;
 };
 
 #endif // DOGCORE_H

+ 200 - 19
ytWG/ytWGElectric/databasethread.cpp

@@ -6,7 +6,13 @@
 //#define PassWord "Wjzn2021Db"
 //#define DatabaseName "smart_electricity"
 
-#define HostName "124.70.160.158"
+//#define HostName "124.70.160.158"
+//#define HostPort 3306
+//#define UserName "root"
+//#define PassWord "Y48hD&Eg"
+//#define DatabaseName "smart_electricity"
+
+#define HostName "192.168.0.206"
 #define HostPort 3306
 #define UserName "root"
 #define PassWord "Y48hD&Eg"
@@ -55,11 +61,53 @@ static QString digital[35] = {
     "ResDI4"
 };
 
+static QString digital171[16] = {
+    "commState",
+    "busLive",
+    "highVoltageAlarm",
+    "lowVoltageAlarm",
+    "busLackPhase",
+    "analog1Alarm",
+    "analog2Alarm",
+    "analog3Alarm",
+    "analog4Alarm",
+    "analog5Alarm",
+    "digitalReserved1",
+    "digitalReserved2",
+    "digitalReserved3",
+    "digitalReserved4",
+    "digitalReserved5",
+    "digitalReserved6"
+};
+
+static QString digital173[18] = {
+    "commState",
+    "LoadLive",
+    "Trip",
+    "OverI",
+    "PhaseLoss",
+    "UnderV",
+    "OverDemandP",
+    "OverIr",
+    "OverT1",
+    "OverT2",
+    "OverT3",
+    "DI1",
+    "DI2",
+    "DO1",
+    "DO2",
+    "ResDI1",
+    "ResDI2",
+    "ResDI3"
+};
+
 
 DatabaseThread::DatabaseThread(QObject *parent) :
     QThread(parent)
 {
     keep = false;
+    hour = 255;
+    minute = 255;
 
     sqlList.clear();
 
@@ -91,29 +139,69 @@ void DatabaseThread::deviceStatus()
                     db.exec(QString("insert into device_status(id, device_code, device_status, site_id, status_time) values (NULL,'%1',0,'%2','%3');").arg(wgdev->devs[i].deviceCode).arg(wgdev->devs[i].siteId).arg(t.toString("yyyy-MM-dd HH:mm:ss")));
                 }else{
                     //0 正常, 1 离线, 77 告警, 4 故障
-                    if((t.toTime_t() - wgdev->devs[i].LastCommtime) > 600){
+                    //printf("deviceCode: %s, t.toTime_t(): %d, wgdev->devs[i].LastCommtime: %d, datatime: %s",wgdev->devs[i].deviceCode,t.toTime_t(),wgdev->devs[i].LastCommtime,t.toString("yyyy-MM-dd HH:mm:ss").toUtf8().data());
+                    uint tm = abs(t.toTime_t() - wgdev->devs[i].LastCommtime);
+                    if(tm > 600){
                         db.exec(QString("update device_status set device_status = 1, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
                     }else{
                         int number = 0,devabvalue = 0;
-                        for(int j=0;j<35;j++){
-                            if((QString("PhaseLoss")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("OverV")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("UnderV")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("BusOutage")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("OverEvT")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("DevAbnormal")).compare(wgdev->devs[i].alarm[j].measname)==0){
+                        if(wgdev->devs[i].devicetype == 1){
+                            for(int j=0;j<35;j++){
+                                if((QString("PhaseLoss")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("OverV")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("UnderV")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("BusOutage")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("OverEvT")).compare(wgdev->devs[i].alarm[j].measname)==0 || (QString("DevAbnormal")).compare(wgdev->devs[i].alarm[j].measname)==0){
+
+                                    if(wgdev->devs[i].alarm[j].digitalvalue == 0){
+                                        number++;
+                                    }
+
+                                    if((QString("DevAbnormal")).compare(wgdev->devs[i].alarm[j].measname)==0 && wgdev->devs[i].alarm[j].digitalvalue == 1){
+                                        devabvalue = 1;
+                                    }
+                                }
+                            }
 
-                                if(wgdev->devs[i].alarm[j].digitalvalue == 0){
+                            if(number == 6){
+                                db.exec(QString("update device_status set device_status = 0, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }else if(devabvalue == 1){
+                                db.exec(QString("update device_status set device_status = 4, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }else{
+                                db.exec(QString("update device_status set device_status = 77, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }
+                        }else if(wgdev->devs[i].devicetype == 3){
+                            for(int j=0;j<16;j++){
+                                if((((QString("commState")).compare(wgdev->devs[i].alarm[j].measname)!=0)&&(wgdev->devs[i].alarm[j].digitalvalue == 0))||(((QString("commState")).compare(wgdev->devs[i].alarm[j].measname)==0)&&(wgdev->devs[i].alarm[j].digitalvalue == 1))){
                                     number++;
                                 }
 
-                                if((QString("DevAbnormal")).compare(wgdev->devs[i].alarm[j].measname)==0 && wgdev->devs[i].alarm[j].digitalvalue == 1){
+                                if(((QString("commState")).compare(wgdev->devs[i].alarm[j].measname)==0)&&(wgdev->devs[i].alarm[j].digitalvalue == 0)){ //commState(0为通讯中断,1为运行状态)
                                     devabvalue = 1;
                                 }
                             }
-                        }
 
-                        if(number == 6){
-                            db.exec(QString("update device_status set device_status = 0, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
-                        }else if(devabvalue == 1){
-                            db.exec(QString("update device_status set device_status = 4, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
-                        }else{
-                            db.exec(QString("update device_status set device_status = 77, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            if(number == 16){
+                                db.exec(QString("update device_status set device_status = 0, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }else if(devabvalue == 1){
+                                db.exec(QString("update device_status set device_status = 4, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }else{
+                                db.exec(QString("update device_status set device_status = 77, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }
+                        }else if(wgdev->devs[i].devicetype == 4){
+                            for(int j=0;j<18;j++){
+                                if((((QString("commState")).compare(wgdev->devs[i].alarm[j].measname)!=0)&&(wgdev->devs[i].alarm[j].digitalvalue == 0))||(((QString("commState")).compare(wgdev->devs[i].alarm[j].measname)==0)&&(wgdev->devs[i].alarm[j].digitalvalue == 1))){
+                                    number++;
+                                }
+
+                                if(((QString("commState")).compare(wgdev->devs[i].alarm[j].measname)==0)&&(wgdev->devs[i].alarm[j].digitalvalue == 0)){ //commState(0为通讯中断,1为运行状态)
+                                    devabvalue = 1;
+                                }
+                            }
+
+                            if(number == 18){
+                                db.exec(QString("update device_status set device_status = 0, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }else if(devabvalue == 1){
+                                db.exec(QString("update device_status set device_status = 4, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }else{
+                                db.exec(QString("update device_status set device_status = 77, status_time = '%1' where device_code = '%2';").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(wgdev->devs[i].deviceCode));
+                            }
                         }
 
                     }
@@ -140,7 +228,7 @@ void DatabaseThread::waveAlarm(devAlarm dev)
 
 void DatabaseThread::initDb()
 {
-    QString sql = QString("select site_id,device_code from device;");
+    QString sql = QString("select site_id,device_code,device_type from device where device_type = '1' and enable = 1;");
     QSqlQuery qry = db.exec(sql);
     QDateTime t = QDateTime::currentDateTime();
     int nrow= 0;
@@ -151,6 +239,7 @@ void DatabaseThread::initDb()
             break;
         wgdev->devs[nrow].siteId = qry.value(0).toUInt();
         sprintf(wgdev->devs[nrow].deviceCode,"%s",qry.value(1).toString().toUtf8().data());
+        wgdev->devs[nrow].devicetype = qry.value(2).toUInt();
         wgdev->devs[nrow].Enabled = 0x01;
         //wgdev->devs[nrow].LastCommtime = t.toTime_t();
         for(int i=0;i<35;i++)
@@ -182,6 +271,92 @@ void DatabaseThread::initDb()
     }
     qry.clear();
 
+    sql.clear();
+    sql = QString("select site_id,device_code,device_type from device where device_type = '3' and enable = 1;");
+    qry = db.exec(sql);
+
+    while(qry.next())
+    {
+        if(nrow >102399)
+            break;
+        wgdev->devs[nrow].siteId = qry.value(0).toUInt();
+        sprintf(wgdev->devs[nrow].deviceCode,"%s",qry.value(1).toString().toUtf8().data());
+        wgdev->devs[nrow].devicetype = qry.value(2).toUInt();
+        wgdev->devs[nrow].Enabled = 0x01;
+        //wgdev->devs[nrow].LastCommtime = t.toTime_t();
+        for(int i=0;i<16;i++)
+        {
+            sprintf(wgdev->devs[nrow].alarm[i].deviceCode,"%s",qry.value(1).toString().toUtf8().data());
+            sprintf(wgdev->devs[nrow].alarm[i].measname,"%s",digital171[i].toUtf8().data());
+            //wgdev->devs[nrow].alarm[i].soetime = t.toTime_t();
+        }
+
+        QString sql1 = QString("select count(*) from rt_switch_171_data where deviceName = '%1';").arg(qry.value(1).toString());
+        QSqlQuery qry1 = db.exec(sql1);
+        while(qry1.next()){
+            if(qry1.value(0).toInt()==0){
+                db.exec(QString("insert into rt_switch_171_data (id, deviceName, commState, busLive, highVoltageAlarm, lowVoltageAlarm, busLackPhase, analog1Alarm, analog2Alarm, analog3Alarm, analog4Alarm, analog5Alarm, digitalReserved1, digitalReserved2, digitalReserved3, digitalReserved4, digitalReserved5, digitalReserved6, dataTime) values(null,'%1','1','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','%2');").arg(qry.value(1).toString()).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+        qry1.clear();
+
+        QString sql2 = QString("select count(*) from rt_analog_171_data where deviceName = '%1'").arg(qry.value(1).toString());
+        QSqlQuery qry2 = db.exec(sql2);
+        while(qry2.next()){
+            if(qry2.value(0).toInt()==0){
+                db.exec(QString("insert into rt_analog_171_data (id, deviceName, voltageA, voltageB, voltageC, voltageAB, voltageBC, voltageCA, frequency, analog1, analog2, analog3, analog4, analog5, voltageATHD, voltageBTHD, voltageCTHD, voltageSagTimes, voltageSwellTimes, voltageInterruptionTimes, voltageUnbalanceFactor, analogReserved, freezingTime, dataTime) values(null,'%1','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0','0','0','0.00','0.00','%2','%3');").arg(qry.value(1).toString()).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd")).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+        qry2.clear();
+
+        nrow++;
+    }
+    qry.clear();
+
+    sql.clear();
+    sql = QString("select site_id,device_code,device_type from device where device_type = '4' and enable = 1;");
+    qry = db.exec(sql);
+
+    while(qry.next())
+    {
+        if(nrow >102399)
+            break;
+        wgdev->devs[nrow].siteId = qry.value(0).toUInt();
+        sprintf(wgdev->devs[nrow].deviceCode,"%s",qry.value(1).toString().toUtf8().data());
+        wgdev->devs[nrow].devicetype = qry.value(2).toUInt();
+        wgdev->devs[nrow].Enabled = 0x01;
+        //wgdev->devs[nrow].LastCommtime = t.toTime_t();
+        for(int i=0;i<18;i++)
+        {
+            sprintf(wgdev->devs[nrow].alarm[i].deviceCode,"%s",qry.value(1).toString().toUtf8().data());
+            sprintf(wgdev->devs[nrow].alarm[i].measname,"%s",digital173[i].toUtf8().data());
+            //wgdev->devs[nrow].alarm[i].soetime = t.toTime_t();
+        }
+
+        QString sql1 = QString("select count(*) from rt_switch_173_data where deviceName = '%1';").arg(qry.value(1).toString());
+        QSqlQuery qry1 = db.exec(sql1);
+        while(qry1.next()){
+            if(qry1.value(0).toInt()==0){
+                db.exec(QString("insert into rt_switch_173_data (id, deviceName, commState, LoadLive, Trip, OverI, PhaseLoss, UnderV, OverDemandP, OverIr, OverT1, OverT2, OverT3, DI1, DI2, DO1, DO2, ResDI1, ResDI2, ResDI3, dataTime) values(null,'%1','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','%2');").arg(qry.value(1).toString()).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+        qry1.clear();
+
+        QString sql2 = QString("select count(*) from rt_analog_173_data where deviceName = '%1'").arg(qry.value(1).toString());
+        QSqlQuery qry2 = db.exec(sql2);
+        while(qry2.next()){
+            if(qry2.value(0).toInt()==0){
+                db.exec(QString("insert into rt_analog_173_data (id, deviceName, COS, COSa, COSb, COSc, Demand, Epn, Epn1, Epn2, Epn3, Epn4, Epp, Epp1, Epp2, Epp3, Epp4, Eqn, Eqp, F, IHa, IHb, IHc, Ia, Ib, Ic, Ir, P, Pa, Pb, Pc, Q, Qa, Qb, Qc, T1, T2, T3, THDUa, THDUb, THDUc, Ua, Uab, Ub, Ubc, Uc, Uca, Udt, Ul, Upt, Ust, unbalanceCurrent, unbalanceVoltage, analogReserved1, analogReserved2, analogReserved3, analogReserved4, freezingTime, dataTime)values(null,'%1','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0.00','0','0.00','0','0','0.00','0.00','0.00','0.00','0.00','0.00','%2','%3');").arg(qry.value(1).toString()).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd")).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+        qry2.clear();
+
+        nrow++;
+    }
+    for(int i=nrow;i<102400;i++){
+        wgdev->devs[i].Enabled = 0x00;
+    }
+
 }
 
 void DatabaseThread::run()
@@ -196,7 +371,9 @@ void DatabaseThread::run()
        if(count >9)
            exit(1);
 
-       if((QDateTime::currentDateTime().time().minute())%5 ==0 && QDateTime::currentDateTime().time().second() == 5){
+       if(((QDateTime::currentDateTime().time().minute())%5 == 0)&&(QDateTime::currentDateTime().time().minute() != minute)){
+           minute = QDateTime::currentDateTime().time().minute();
+           printf("enter deviceStatus\n");
            if(!db.open())
            {
                db.open();
@@ -225,7 +402,7 @@ void DatabaseThread::run()
                }
                db.exec(QString("insert into wave_record_temp(id,device_code,alarm_type,alarm_occurrence_date,alarm_occurrence_time,cfg_path,record_path,create_time,creator) values(NULL,'%1','','%2','%3','%4','%5','%6','');").arg(dev.DeviceCode).arg(dev.AlarmDate).arg(dev.AlarmTime).arg(dev.CfgPath).arg(dev.DatPath).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
                devAlarmList.removeFirst();
-
+                usleep(10000);
            }
 
            db.close();
@@ -247,13 +424,17 @@ void DatabaseThread::run()
                count++;
                db.open();
            }else{
-               initDb();
+               if(QDateTime::currentDateTime().time().hour() != hour){
+                   printf("enter initDb\n");
+                   hour = QDateTime::currentDateTime().time().hour();
+                   initDb();
+               }
 
                count=0;
                while(sqlList.length()>0){
                    db.exec(sqlList.first());
                    sqlList.removeFirst();
-
+                    usleep(10000);
                }
 
                if(alarmRepList.length()>0){
@@ -275,7 +456,7 @@ void DatabaseThread::run()
        }else{
            db.close();
        }
-
+        usleep(10000);
    }
 
 }

+ 1 - 1
ytWG/ytWGElectric/databasethread.h

@@ -70,7 +70,7 @@ signals:
 public slots:
 
 private:
-    int hour;
+    int hour,minute;
     QStringList sqlList;
     QList<AlarmRep> alarmRepList;
 

+ 9 - 1
ytWG/ytWGElectric/elcommthread.cpp

@@ -49,7 +49,15 @@ void ELCommThread::onReceived(const QMQTT::Message& message)
     QString topic = message.topic();
     QByteArray data = message.payload();
 
-    printf("testtest111--------------\n");
+    QString commData;
+    for(int i=0;i<data.length();i++)
+    {
+        commData.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
+    }
+    printf("dev.topic = %s,  message.length = %s\n",topic.toUtf8().data(),commData.toUtf8().data());
+
+
+    //printf("testtest111--------------\n");
     emit SendDevData(topic,data);
 
 

+ 72 - 0
ytWG/ytWGElectric/elcommthread171.cpp

@@ -0,0 +1,72 @@
+#include "elcommthread171.h"
+
+ELCommThread171::ELCommThread171(QObject *parent) : QThread(parent)
+{
+    loginIdx = 1;
+
+    timer = new QTimer(this);
+    connect(timer,&QTimer::timeout,this,&ELCommThread171::time_out);
+    timer->start(1000);
+
+    m_client = new QMQTT::Client(QHostAddress("124.70.160.158"),1883,this);
+    m_client->setUsername("admin");
+    m_client->setPassword("public");
+    connect(m_client,&QMQTT::Client::connected,this,&ELCommThread171::onConnected);
+    connect(m_client,&QMQTT::Client::received,this,&ELCommThread171::onReceived);
+    m_client->connectToHost();
+
+}
+
+ELCommThread171::~ELCommThread171()
+{
+
+}
+
+void ELCommThread171::run()
+{
+
+}
+
+void ELCommThread171::time_out()
+{
+    if((m_client->connectionState()==QMQTT::STATE_INIT)||(m_client->connectionState()==QMQTT::STATE_DISCONNECTED)){
+        m_client->connectToHost();
+    }
+}
+
+void ELCommThread171::onConnected()
+{
+    m_client->subscribe("/ewoogi/data/a1TdT9qm7vu/+/property",0);
+    m_client->subscribe("/ewoogi/session/a1RFQGoAewM/+/combine/login",0);
+}
+
+void ELCommThread171::onReceived(const QMQTT::Message &message)
+{
+    QString topic = message.topic();
+    QByteArray data = message.payload();
+
+    QString commData = "";
+    for(int i=0;i<data.length();i++){
+        commData.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')));
+    }
+    printf("171 topic = %s, comData = %s\n",topic.toUtf8().data(),commData.toUtf8().data());
+
+    //subSOE login->login_reply->down_raw
+    QString login = topic.split("/").last();
+    if(login.compare("login")==0){
+        QString company = topic.split("/").at(3);
+        QString deviceCode = topic.split("/").at(4);
+        QString loginTopic = QString("/ewoogi/session/%1/%2/combine/login_reply").arg(company).arg(deviceCode);
+        QString data1 = QString("{\"code\":200}");
+        m_client->publish(QMQTT::Message(loginIdx++,loginTopic,data1.toUtf8()));
+        if(loginIdx>9999)
+            loginIdx=1;
+
+    }
+    emit sendDevData171(topic,data);
+
+}
+
+
+
+

+ 31 - 0
ytWG/ytWGElectric/elcommthread171.h

@@ -0,0 +1,31 @@
+#ifndef ELCOMMTHREAD171_H
+#define ELCOMMTHREAD171_H
+
+#include <QThread>
+#include <qmqtt.h>
+#include <QTimer>
+
+class ELCommThread171 : public QThread
+{
+    Q_OBJECT
+public:
+    explicit ELCommThread171(QObject *parent = nullptr);
+    ~ELCommThread171();
+    void run();
+
+signals:
+    void sendDevData171(QString topic,QByteArray data);
+
+public slots:
+    void time_out();
+    void onConnected();
+    void onReceived(const QMQTT::Message &message);
+
+private:
+    QTimer *timer;
+    QMQTT::Client *m_client;
+    quint16 loginIdx;
+
+};
+
+#endif // ELCOMMTHREAD171_H

+ 76 - 0
ytWG/ytWGElectric/elcommthread173.cpp

@@ -0,0 +1,76 @@
+#include "elcommthread173.h"
+
+ELCommThread173::ELCommThread173(QObject *parent) : QThread(parent)
+{
+    loginIdx = 1;
+    mqttIdx = 1;
+
+    timer = new QTimer(this);
+    connect(timer,&QTimer::timeout,this,&ELCommThread173::time_out);
+    timer->start(1000);
+
+    m_client = new QMQTT::Client(QHostAddress("124.70.160.158"),1883,this);
+    m_client->setUsername("admin");
+    m_client->setPassword("public");
+    connect(m_client,&QMQTT::Client::connected,this,&ELCommThread173::onConnected);
+    connect(m_client,&QMQTT::Client::received,this,&ELCommThread173::onReceived);
+
+    m_client->connectToHost();
+}
+
+ELCommThread173::~ELCommThread173()
+{
+
+}
+
+
+void ELCommThread173::run()
+{
+
+}
+
+
+void ELCommThread173::time_out()
+{
+    if(m_client->connectionState()==QMQTT::STATE_DISCONNECTED || m_client->connectionState()==QMQTT::STATE_INIT){
+        m_client->connectToHost();
+    }
+}
+
+
+void ELCommThread173::onConnected()
+{
+    m_client->subscribe("/ewoogi/data/a1I0ruPggeM/+/property",0);
+    m_client->subscribe("/ewoogi/session/a1RFQGoAewM/+/combine/login",0);
+}
+
+
+void ELCommThread173::onReceived(const QMQTT::Message& message)
+{
+    QString topic = message.topic();
+    QByteArray data = message.payload();
+    QString commData = "";
+    for(int i=0;i<data.length();i++){
+        commData.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')));
+    }
+    printf("173 topic = %s, commData = %s\n",topic.toUtf8().data(),commData.toUtf8().data());
+
+    //subSOE login->login_reply->down_raw
+    QString login = (topic.split("/")).last();
+    if(QString::compare(login,"login")==0){
+        QString company = (topic.split("/").at(3));
+        QString deviceCode = (topic.split("/").at(4));
+
+        QString loginTopic = QString("/ewoogi/session/%1/%2/combine/login_reply").arg(company).arg(deviceCode);
+        QString data1;
+        data1.append(QString("{\"code\":200}"));
+        m_client->publish(QMQTT::Message(loginIdx++,loginTopic,data1.toUtf8()));
+        if(loginIdx > 9999){
+            loginIdx = 1;
+        }
+
+    }
+
+    emit sendDevData173(topic,data);
+
+}

+ 31 - 0
ytWG/ytWGElectric/elcommthread173.h

@@ -0,0 +1,31 @@
+#ifndef ELCOMMTHREAD173_H
+#define ELCOMMTHREAD173_H
+
+#include <QThread>
+#include <qmqtt.h>
+#include <QTimer>
+
+class ELCommThread173 : public QThread
+{
+    Q_OBJECT
+public:
+    explicit ELCommThread173(QObject *parent = nullptr);
+    ~ELCommThread173();
+    void run();
+
+signals:
+    void sendDevData173(QString topic,QByteArray data);
+
+public slots:
+    void time_out();
+    void onConnected();
+    void onReceived(const QMQTT::Message& message);
+
+private:
+    QTimer *timer;
+    QMQTT::Client *m_client;
+
+    quint16 loginIdx,mqttIdx;
+
+};
+#endif // ELCOMMTHREAD173_H

+ 13 - 11
ytWG/ytWGElectric/electdata.cpp

@@ -207,7 +207,7 @@ void Electdata::arrayDataToJason(QString topic,QByteArray data)
         commData.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
     }
 
-    int startPos = 0;
+    int startPos = 0,Idx = 0;
     QByteArray Dat = data.mid(2,data.length()-4);
     printf("Dat.length = %d\n",Dat.length());
     QString commTemp,column,valueData,setvalue;
@@ -234,6 +234,16 @@ void Electdata::arrayDataToJason(QString topic,QByteArray data)
             {
                 devdata.insert("method","thing.event.property.post");
 
+                for(int i=0;i<102400;i++){
+                    if(wgdev->devs[i].Enabled == 0x01){
+                        if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
+                            wgdev->devs[i].LastCommtime=startTime.toTime_t();
+                            Idx = i;
+                            break;
+                        }
+                    }
+                }
+
                 quint16 start = static_cast<quint16>(((data.at(11)&0x00ff)<<8)|(data.at(10)&0x00ff));
                 quint16 count = static_cast<quint16>(((data.at(13)&0x00ff)<<8)|(data.at(12)&0x00ff));
 
@@ -243,6 +253,7 @@ void Electdata::arrayDataToJason(QString topic,QByteArray data)
                     column.append(digital[start+i]).append(",");
                     valueData.append(QString("%1").arg(static_cast<quint8>(data.at(startPos)&0xff))).append(",");
                     setvalue.append(digital[start+i]).append("=").append(QString("%1").arg(static_cast<quint8>(data.at(startPos)&0xff))).append(",");
+                    wgdev->devs[Idx].alarm[start+i].digitalvalue = static_cast<quint8>(data.at(startPos)&0xff);
                     startPos +=1;
                 }
 
@@ -257,15 +268,6 @@ void Electdata::arrayDataToJason(QString topic,QByteArray data)
                 sql.clear();
                 setvalue.clear();
 
-                for(int i=0;i<102400;i++){
-                    if(wgdev->devs[i].Enabled == 0x01){
-                        if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
-                            wgdev->devs[i].LastCommtime=startTime.toTime_t();
-                            break;
-                        }
-                    }
-                }
-
             }
                 break;
             case 0x10:   //遥测(冻结数据)
@@ -337,7 +339,7 @@ void Electdata::arrayDataToJason(QString topic,QByteArray data)
                 devdata.insert("method","thing.event.SOERecord.post");
                 printf("method: thing.event.SOERecord.post\n");
 
-                qint16 digitalNo = static_cast<qint16>(((data.at(7)&0xff)<<8)|(data.at(6)&0xff));
+                qint16 digitalNo = static_cast<qint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
                 paradata.insert("measName",digital[digitalNo]);
                 qint8 digitalValue = static_cast<qint8>(data.at(8)&0xff);
                 paradata.insert("digitalValue",QJsonValue(digitalValue));

+ 277 - 0
ytWG/ytWGElectric/electdata171.cpp

@@ -0,0 +1,277 @@
+#include "electdata171.h"
+
+#include "wgelectricshm.h"
+
+extern WGDevList *wgdev;
+
+static QString digital171[16] = {
+    "commState",
+    "busLive",
+    "highVoltageAlarm",
+    "lowVoltageAlarm",
+    "busLackPhase",
+    "analog1Alarm",
+    "analog2Alarm",
+    "analog3Alarm",
+    "analog4Alarm",
+    "analog5Alarm",
+    "digitalReserved1",
+    "digitalReserved2",
+    "digitalReserved3",
+    "digitalReserved4",
+    "digitalReserved5",
+    "digitalReserved6"
+};
+
+static QString analogInfoTable171[20] = {
+    "voltageA",
+    "voltageB",
+    "voltageC",
+    "voltageAB",
+    "voltageBC",
+    "voltageCA",
+    "frequency",
+    "analog1",
+    "analog2",
+    "analog3",
+    "analog4",
+    "analog5",
+    "voltageATHD",
+    "voltageBTHD",
+    "voltageCTHD",
+    "voltageSagTimes",
+    "voltageSwellTimes",
+    "voltageInterruptionTimes",
+    "voltageUnbalanceFactor",
+    "analogReserved"
+};
+
+static QString digitalDesc171[16] = {
+    "通信状态",
+    "母线带电",
+    "电压越上限",
+    "电压越下限",
+    "缺相",
+    "直流量告警1",
+    "直流量告警2",
+    "直流量告警3",
+    "直流量告警4",
+    "直流量告警5",
+    "预留1",
+    "预留2",
+    "预留3",
+    "预留4",
+    "预留5",
+    "预留6"
+};
+
+
+
+Electdata171::Electdata171(QObject *parent) : QThread(parent)
+{
+    keep = false;
+    DevMsgList.clear();
+}
+
+void Electdata171::run()
+{
+    keep = true;
+    while(keep){
+        if(DevMsgList.length()>0){
+            DevData171 dev = DevMsgList.first();
+            this->arraydataToJson(dev.topic,dev.message);
+            DevMsgList.removeFirst();
+        }
+        usleep(10000);
+    }
+}
+
+void Electdata171::stop()
+{
+    keep = false;
+}
+
+void Electdata171::DevMessage(DevData171 dev)
+{
+    DevMsgList.append(dev);
+}
+
+void Electdata171::arraydataToJson(QString topic,QByteArray data)
+{
+    QByteArray devBData;
+    QJsonDocument dev_doc;
+    QJsonObject devdata;
+    QJsonObject paradata;
+    QJsonObject objdata;
+    QString sql;
+    int startpos=0,Idx = 0;
+
+    QString deviceCode = (topic.split("/")).at(4);
+    printf("deviceCode = %s\n",deviceCode.toUtf8().data());
+
+    QString commData;
+    for(int i=0;i<data.length();i++){
+        commData.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
+    }
+
+    QByteArray dat = data.mid(2,data.length()-4);
+
+    QString column,valueData,setValue;
+    quint16 crc = chk_sum(dat,static_cast<quint16>(dat.length()));
+    if(((data.at(data.length()-1)&0xff)==((crc>>8)&0xff))&&((data.at(data.length()-2)&0xff)==(crc&0xff))){
+        printf("crc enter\n");
+        QDateTime starttime = QDateTime::currentDateTime();
+        qint64 datetime = starttime.toMSecsSinceEpoch();
+        devdata.insert("id",QString::number(datetime,10));
+        devdata.insert("version","1.0");
+
+        if((data.at(4)&0xff)==0x03){
+            switch (data.at(5)&0xff) {
+            case 0x01://遥信
+            {
+               devdata.insert("method","thing.event.property.post") ;
+
+               for(int i=0;i<102400;i++){
+                   if(wgdev->devs[i].Enabled == 0x01){
+                       if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
+                           Idx = i;
+                           wgdev->devs[i].LastCommtime=starttime.toTime_t();
+                           break;
+                       }
+                   }
+               }
+
+               quint16 start = static_cast<quint16>(((data.at(11)&0x00ff)<<8)|(data.at(10)&0x00ff));
+               quint16 num = static_cast<quint16>(((data.at(13)&0x00ff)<<8)|(data.at(12)&0x00ff));
+
+               startpos = 14;
+               for(int i=0;i<num;i++){
+                   paradata.insert(digital171[start+i],static_cast<quint8>(data.at(startpos)&0xff));
+                   column.append(digital171[start+i]).append(",");
+                   valueData.append(QString("%1").arg(static_cast<quint8>(data.at(startpos)&0xff))).append(",");
+                   setValue.append(digital171[start+i]).append("=").append(QString("%1").arg(static_cast<quint8>(data.at(startpos)&0xff))).append(",");
+                   wgdev->devs[Idx].alarm[start+i].digitalvalue = static_cast<quint8>(data.at(startpos)&0xff);
+                   startpos += 1;
+               }
+               sql.append(QString("insert into ht_switch_171_data(id,deviceName,%1dataTime)values(NULL,'%2',%3'%4');").arg(column).arg(deviceCode).arg(valueData).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
+               emit appendSql(sql);
+               sql.clear();
+               column.clear();
+               valueData.clear();
+
+               sql.append(QString("update rt_switch_171_data set %1dataTime='%2' where deviceName = '%3';").arg(setValue).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode));
+               emit appendSql(sql);
+               sql.clear();
+               setValue.clear();
+
+            }
+                break;
+            case 0x10://遥测
+            {
+                devdata.insert("method","thing.event.analog.post");
+                quint16 count = static_cast<quint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
+                quint16 start = static_cast<quint16>(((data.at(9)&0x00ff)<<8)|(data.at(8)&0x00ff));
+
+                qint64 timestamp = static_cast<qint64>(((static_cast<long int>(data.at(15)&0x00000000000000ff))<<40)|((static_cast<long int>(data.at(14)&0x00000000000000ff))<<32)|((static_cast<long int>(data.at(13)&0x00000000000000ff))<<24)|((static_cast<long int>(data.at(12)&0x00000000000000ff))<<16)|((static_cast<long int>(data.at(11)&0x00000000000000ff))<<8)|(static_cast<long int>(data.at(10)&0x00000000000000ff)));
+
+                devdata.insert("id",QString::number(timestamp,10));
+
+                startpos = 16;
+                for(int i=0;i<count;i++){
+                    //4位十六进制转浮点数 BEGIN
+                    QString str;
+                    str.append(QString("%1%2%3%4").arg(data.at(startpos+3)&0xff,2,16,QChar('0')).arg(data.at(startpos+2)&0xff,2,16,QChar('0')).arg(data.at(startpos+1)&0xff,2,16,QChar('0')).arg(data.at(startpos)&0xff,2,16,QChar('0')));
+                    int hex = str.toUInt(0,16);
+                    float value = *(float*)&hex;
+                    //4位十六进制转浮点数 END
+
+                    objdata.insert("value",QJsonValue(value));
+                    objdata.insert("time",QJsonValue(timestamp));
+
+                    paradata.insert(analogInfoTable171[start+i],objdata);
+                    column.append(analogInfoTable171[start+i]).append(",");
+                    valueData.append(QString("%1").arg(value)).append(",");
+                    setValue.append(analogInfoTable171[start+i]).append("=").append(QString("%1").arg(value)).append(",");
+
+                    startpos += 4;
+                }
+                paradata.insert("freezingTime",QString::number(timestamp,10));
+
+                QDateTime t = QDateTime::fromMSecsSinceEpoch(timestamp);
+                sql.append(QString("insert into ht_analog_171_data(id,deviceName,%1freezingTime,dataTime) values (NULL,'%2',%3'%4','%5');").arg(column).arg(deviceCode).arg(valueData).arg(t.toString("yyyy-MM-dd")).arg(t.toString("yyyy-MM-dd HH:mm:ss")));
+                emit appendSql(sql);
+                sql.clear();
+                column.clear();
+                valueData.clear();
+
+                sql.append(QString("update rt_analog_171_data set %1freezingTime='%2',dataTime='%3' where deviceName = '%4';").arg(setValue).arg(t.toString("yyyy-MM-dd")).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode));
+                emit appendSql(sql);
+                sql.clear();
+                setValue.clear();
+
+                for(int i=0;i<102400;i++){
+                    if(wgdev->devs[i].Enabled == 0x01){
+                        if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
+                            wgdev->devs[i].LastCommtime=starttime.toTime_t();
+                            break;
+                        }
+                    }
+                }
+            }
+                break;
+            case 0x11:
+            {
+                devdata.insert("method","thing.event.SOERecord.post");
+
+                qint16 digitalNo = static_cast<qint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
+                paradata.insert("measName",digital171[digitalNo]);
+                qint8 digitalValue = static_cast<qint8>(data.at(8)&0xff);
+                paradata.insert("digitalValue",QJsonValue(digitalValue));
+
+                QString mDesc;
+                qint64 timestamp = static_cast<qint64>((static_cast<long int>(data.at(14)&0x00000000000000ff)<<40)|(static_cast<long int>(data.at(13)&0x00000000000000ff)<<32)|(static_cast<long int>(data.at(12)&0x00000000000000ff)<<24)|(static_cast<long int>(data.at(11)&0x00000000000000ff)<<16)|(static_cast<long int>(data.at(10)&0x00000000000000ff)<<8)|static_cast<long int>(data.at(9)&0x00000000000000ff));
+
+                if(digitalValue == 1){
+                    mDesc.append(digitalDesc171[digitalNo]).append("动作");
+                    paradata.insert("measDesc",mDesc);
+                    sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',0);").arg(deviceCode).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital171[digitalNo]).arg(digitalValue).arg(mDesc).arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")));
+                    emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital171[digitalNo]);
+                    sql.clear();
+
+                }else{
+                    mDesc.append(digitalDesc171[digitalNo]).append("复归");
+                    paradata.insert("measDesc",mDesc);
+
+                    sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',2);").arg(deviceCode).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital171[digitalNo]).arg(digitalValue).arg(mDesc).arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")));
+                    emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital171[digitalNo]);
+                    sql.clear();
+
+                    sql.append(QString("update alarm_power set handling_time = '%1',handling_status = 3 where device_code = '%2' and meas_name = '%3' and digital_value = 1 and handling_status = 0;")
+                               .arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode).arg(digital171[digitalNo]));
+                    emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital171[digitalNo]);
+                    sql.clear();
+                }
+                paradata.insert("soeTime",QString::number(timestamp));
+
+            }
+                break;
+            default:
+                break;
+            }
+            devdata.insert("params",paradata);
+            dev_doc.setObject(devdata);
+            devBData=dev_doc.toJson(QJsonDocument::Compact);
+        }
+
+    }
+    emit sendLog(topic,commData,devBData);
+}
+
+quint16 Electdata171::chk_sum(QByteArray buff,quint16 len)
+{
+    quint16 crc = 0x0000;
+    for(int i=0;i<len;i++){
+        crc += static_cast<quint16>(buff.at(i)&0x00ff);
+    }
+    return crc;
+}

+ 45 - 0
ytWG/ytWGElectric/electdata171.h

@@ -0,0 +1,45 @@
+#ifndef ELECTDATA171_H
+#define ELECTDATA171_H
+
+#include <QThread>
+#include <QDateTime>
+#include <QJsonDocument>
+#include <QJsonArray>
+#include <QJsonObject>
+
+class DevData171
+{
+public:
+    explicit DevData171(QString t = "",QByteArray msg = ""){
+        topic = t;
+        message = msg;
+    }
+    QString topic;
+    QByteArray message;
+};
+
+class Electdata171 : public QThread
+{
+    Q_OBJECT
+public:
+    explicit Electdata171(QObject *parent = nullptr);
+    void run();
+    void stop();
+    void DevMessage(DevData171 dev);
+    void arraydataToJson(QString topic,QByteArray data);
+    quint16 chk_sum(QByteArray buff,quint16 len);
+
+    QList<DevData171>DevMsgList;
+
+signals:
+    void sendLog(QString topic,QString devdata,QByteArray devBData);
+    void appendSql(QString sql);
+    void appendAlarm(QString deviceCode,QString sql,QString soetime,QString mDesc,QString digitalValue,QString measName);
+
+public slots:
+
+private:
+    bool keep;
+};
+
+#endif // ELECTDATA171_H

+ 318 - 0
ytWG/ytWGElectric/electdata173.cpp

@@ -0,0 +1,318 @@
+#include "electdata173.h"
+
+#include "wgelectricshm.h"
+
+extern WGDevList *wgdev;
+
+static QString digital173[18] = {
+    "commState",
+    "LoadLive",
+    "Trip",
+    "OverI",
+    "PhaseLoss",
+    "UnderV",
+    "OverDemandP",
+    "OverIr",
+    "OverT1",
+    "OverT2",
+    "OverT3",
+    "DI1",
+    "DI2",
+    "DO1",
+    "DO2",
+    "ResDI1",
+    "ResDI2",
+    "ResDI3"
+};
+
+static QString analogInfoTable173[55] = {
+  "Ua",
+  "Ub",
+  "Uc",
+  "Ia",
+  "Ib",
+  "Ic",
+  "P",
+  "Q",
+  "COS",
+  "unbalanceCurrent",
+  "Ir",
+  "Demand",
+  "Epp",
+  "Epn",
+  "Eqp",
+  "Eqn",
+  "analogReserved1",
+  "unbalanceVoltage",
+  "THDUa",
+  "THDUb",
+  "THDUc",
+  "IHa",
+  "IHb",
+  "IHc",
+  "Udt",
+  "Upt",
+  "Ust",
+  "Uab",
+  "Ubc",
+  "Uca",
+  "F",
+  "Pa",
+  "Pb",
+  "Pc",
+  "Qa",
+  "Qb",
+  "Qc",
+  "COSa",
+  "COSb",
+  "COSc",
+  "T1",
+  "T2",
+  "T3",
+  "Ul",
+  "Epp1",
+  "Epn1",
+  "Epp2",
+  "Epn2",
+  "Epp3",
+  "Epn3",
+  "Epp4",
+  "Epn4",
+  "analogReserved2",
+  "analogReserved3",
+  "analogReserved4"
+};
+
+static QString digitalDesc173[18] = {
+    "通信状态",
+    "回路带电",
+    "回路跳闸",
+    "电流越限",
+    "电压缺相",
+    "母线欠压",
+    "需量超限",
+    "剩余电流超限",
+    "T1超温",
+    "T2超温",
+    "T3超温",
+    "通用遥信1",
+    "通用遥信2",
+    "继电器1状态",
+    "继电器2状态",
+    "备用遥信1",
+    "备用遥信2",
+    "备用遥信3"
+};
+
+
+
+Electdata173::Electdata173(QObject *parent) : QThread(parent)
+{
+    keep = false;
+    DevMsgList.clear();
+
+}
+
+void Electdata173::run()
+{
+    keep = true;
+    while (keep) {
+        if(DevMsgList.length()>0){
+            DevData173 dev = DevMsgList.first();
+            this->arraydataToJason(dev.topic,dev.message);
+            DevMsgList.removeFirst();
+        }
+        usleep(10000);
+    }
+}
+
+void Electdata173::stop()
+{
+    keep = false;
+}
+
+void Electdata173::DevMessage(DevData173 dev)
+{
+    DevMsgList.append(dev);
+}
+
+void Electdata173::arraydataToJason(QString topic,QByteArray data)
+{
+    QByteArray devBData;
+    QJsonDocument dev_doc;
+    QJsonObject devdata;
+    QJsonObject paradata;
+    QJsonObject objdata;
+    QString sql;
+    int startpos=0,Idx = 0;
+
+    QString deviceCode = (topic.split("/")).at(4);
+    printf("deviceCode = %s\n",deviceCode.toUtf8().data());
+
+    QString commData;
+    for(int i=0;i<data.length();i++){
+        commData.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
+    }
+
+    QByteArray dat = data.mid(2,data.length()-4);
+
+    QString column,valueData,setValue;
+    quint16 crc = chk_sum(dat,static_cast<quint16>(dat.length()));
+    if(((data.at(data.length()-1)&0xff)==((crc>>8)&0xff))&&((data.at(data.length()-2)&0xff)==(crc&0xff))){
+        printf("crc enter\n");
+        QDateTime starttime = QDateTime::currentDateTime();
+        qint64 datetime = starttime.toMSecsSinceEpoch();
+        devdata.insert("id",QString::number(datetime,10));
+        devdata.insert("version","1.0");
+
+        if((data.at(4)&0xff)==0x03){
+            switch (data.at(5)&0xff) {
+            case 0x01://遥信
+            {
+               devdata.insert("method","thing.event.property.post") ;
+
+               for(int i=0;i<102400;i++){
+                   if(wgdev->devs[i].Enabled == 0x01){
+                       if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
+                           Idx = i;
+                           wgdev->devs[i].LastCommtime=starttime.toTime_t();
+                           break;
+                       }
+                   }
+               }
+
+               quint16 start = static_cast<quint16>(((data.at(11)&0x00ff)<<8)|(data.at(10)&0x00ff));
+               quint16 num = static_cast<quint16>(((data.at(13)&0x00ff)<<8)|(data.at(12)&0x00ff));
+
+               startpos = 14;
+               for(int i=0;i<num;i++){
+                   paradata.insert(digital173[start+i],static_cast<quint8>(data.at(startpos)&0xff));
+                   column.append(digital173[start+i]).append(",");
+                   valueData.append(QString("%1").arg(static_cast<quint8>(data.at(startpos)&0xff))).append(",");
+                   setValue.append(digital173[start+i]).append("=").append(QString("%1").arg(static_cast<quint8>(data.at(startpos)&0xff))).append(",");
+                   wgdev->devs[Idx].alarm[start+i].digitalvalue = static_cast<quint8>(data.at(startpos)&0xff);
+                   startpos += 1;
+               }
+               sql.append(QString("insert into ht_switch_173_data(id,deviceName,%1dataTime)values(NULL,'%2',%3'%4');").arg(column).arg(deviceCode).arg(valueData).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")));
+               emit appendSql(sql);
+               sql.clear();
+               column.clear();
+               valueData.clear();
+
+               sql.append(QString("update rt_switch_173_data set %1dataTime='%2' where deviceName = '%3';").arg(setValue).arg((QDateTime::currentDateTime()).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode));
+               emit appendSql(sql);
+               sql.clear();
+               setValue.clear();
+
+            }
+                break;
+            case 0x10://遥测
+            {
+                devdata.insert("method","thing.event.analog.post");
+                quint16 count = static_cast<quint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
+                quint16 start = static_cast<quint16>(((data.at(9)&0x00ff)<<8)|(data.at(8)&0x00ff));
+
+                qint64 timestamp = static_cast<qint64>(((static_cast<long int>(data.at(15)&0x00000000000000ff))<<40)|((static_cast<long int>(data.at(14)&0x00000000000000ff))<<32)|((static_cast<long int>(data.at(13)&0x00000000000000ff))<<24)|((static_cast<long int>(data.at(12)&0x00000000000000ff))<<16)|((static_cast<long int>(data.at(11)&0x00000000000000ff))<<8)|(static_cast<long int>(data.at(10)&0x00000000000000ff)));
+
+                devdata.insert("id",QString::number(timestamp,10));
+
+                startpos = 16;
+                for(int i=0;i<count;i++){
+                    //4位十六进制转浮点数 BEGIN
+                    QString str;
+                    str.append(QString("%1%2%3%4").arg(data.at(startpos+3)&0xff,2,16,QChar('0')).arg(data.at(startpos+2)&0xff,2,16,QChar('0')).arg(data.at(startpos+1)&0xff,2,16,QChar('0')).arg(data.at(startpos)&0xff,2,16,QChar('0')));
+                    int hex = str.toUInt(0,16);
+                    float value = *(float*)&hex;
+                    //4位十六进制转浮点数 END
+
+                    objdata.insert("value",QJsonValue(value));
+                    objdata.insert("time",QJsonValue(timestamp));
+
+                    paradata.insert(analogInfoTable173[start+i],objdata);
+                    column.append(analogInfoTable173[start+i]).append(",");
+                    valueData.append(QString("%1").arg(value)).append(",");
+                    setValue.append(analogInfoTable173[start+i]).append("=").append(QString("%1").arg(value)).append(",");
+
+                    startpos += 4;
+                }
+                paradata.insert("freezingTime",QString::number(timestamp,10));
+
+                QDateTime t = QDateTime::fromMSecsSinceEpoch(timestamp);
+                sql.append(QString("insert into ht_analog_173_data(id,deviceName,%1freezingTime,dataTime) values (NULL,'%2',%3'%4','%5');").arg(column).arg(deviceCode).arg(valueData).arg(t.toString("yyyy-MM-dd")).arg(t.toString("yyyy-MM-dd HH:mm:ss")));
+                emit appendSql(sql);
+                sql.clear();
+                column.clear();
+                valueData.clear();
+
+                sql.append(QString("update rt_analog_173_data set %1freezingTime='%2',dataTime='%3' where deviceName = '%4';").arg(setValue).arg(t.toString("yyyy-MM-dd")).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode));
+                emit appendSql(sql);
+                sql.clear();
+                setValue.clear();
+
+                for(int i=0;i<102400;i++){
+                    if(wgdev->devs[i].Enabled == 0x01){
+                        if(deviceCode.compare(wgdev->devs[i].deviceCode)==0){
+                            wgdev->devs[i].LastCommtime=starttime.toTime_t();
+                            break;
+                        }
+                    }
+                }
+            }
+                break;
+            case 0x11:
+            {
+                devdata.insert("method","thing.event.SOERecord.post");
+
+                qint16 digitalNo = static_cast<qint16>(((data.at(7)&0x00ff)<<8)|(data.at(6)&0x00ff));
+                paradata.insert("measName",digital173[digitalNo]);
+                qint8 digitalValue = static_cast<qint8>(data.at(8)&0xff);
+                paradata.insert("digitalValue",QJsonValue(digitalValue));
+
+                QString mDesc;
+                qint64 timestamp = static_cast<qint64>((static_cast<long int>(data.at(14)&0x00000000000000ff)<<40)|(static_cast<long int>(data.at(13)&0x00000000000000ff)<<32)|(static_cast<long int>(data.at(12)&0x00000000000000ff)<<24)|(static_cast<long int>(data.at(11)&0x00000000000000ff)<<16)|(static_cast<long int>(data.at(10)&0x00000000000000ff)<<8)|static_cast<long int>(data.at(9)&0x00000000000000ff));
+
+                if(digitalValue == 1){
+                    mDesc.append(digitalDesc173[digitalNo]).append("动作");
+                    paradata.insert("measDesc",mDesc);
+                    sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',0);").arg(deviceCode).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital173[digitalNo]).arg(digitalValue).arg(mDesc).arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")));
+                    emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital173[digitalNo]);
+                    sql.clear();
+
+                }else{
+                    mDesc.append(digitalDesc173[digitalNo]).append("复归");
+                    paradata.insert("measDesc",mDesc);
+
+                    sql.append(QString("insert into alarm_power(id,device_code,alarm_name,sending_time,alarm_type,meas_name,digital_value,meas_desc,soe_time,handling_status) values (NULL,'%1','时间顺序记录','%2','alert','%3',%4,'%5','%6',2);").arg(deviceCode).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(digital173[digitalNo]).arg(digitalValue).arg(mDesc).arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")));
+                    emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital173[digitalNo]);
+                    sql.clear();
+
+                    sql.append(QString("update alarm_power set handling_time = '%1',handling_status = 3 where device_code = '%2' and meas_name = '%3' and digital_value = 1 and handling_status = 0;")
+                               .arg((QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceCode).arg(digital173[digitalNo]));
+                    emit appendAlarm(deviceCode,sql,(QDateTime::fromMSecsSinceEpoch(timestamp)).toString("yyyy-MM-dd HH:mm:ss"),mDesc,QString("%1").arg(digitalValue),digital173[digitalNo]);
+                    sql.clear();
+                }
+                paradata.insert("soeTime",QString::number(timestamp));
+
+            }
+                break;
+            default:
+                break;
+            }
+            devdata.insert("params",paradata);
+            dev_doc.setObject(devdata);
+            devBData=dev_doc.toJson(QJsonDocument::Compact);
+        }
+
+    }
+    emit sendLog(topic,commData,devBData);
+}
+
+quint16 Electdata173::chk_sum(QByteArray buff,quint16 len)
+{
+    quint16 crc = 0x0000;
+    for(int i=0;i<len;i++){
+        crc += static_cast<quint16>(buff.at(i)&0x00ff);
+    }
+    return crc;
+}
+

+ 44 - 0
ytWG/ytWGElectric/electdata173.h

@@ -0,0 +1,44 @@
+#ifndef ELECTDATA173_H
+#define ELECTDATA173_H
+
+#include <QThread>
+#include <QDateTime>
+#include <QJsonDocument>
+#include <QJsonArray>
+#include <QJsonObject>
+
+class DevData173{
+public:
+    explicit DevData173(QString t="",QByteArray msg=""){
+        topic = t;
+        message = msg;
+    }
+    QString topic;
+    QByteArray message;
+};
+
+class Electdata173 : public QThread
+{
+    Q_OBJECT
+public:
+    explicit Electdata173(QObject *parent = nullptr);
+    void run();
+    void stop();
+    void DevMessage(DevData173 dev);
+    void arraydataToJason(QString topic,QByteArray data);
+    quint16 chk_sum(QByteArray buff,quint16 len);
+
+    QList<DevData173>DevMsgList ;
+
+signals:
+    void sendLog(QString topic,QString devdata,QByteArray devBData);
+    void appendSql(QString sql);
+    void appendAlarm(QString deviceCode,QString sql,QString soetime,QString mDesc,QString digitalValue,QString measName);
+
+public slots:
+
+private:
+    bool keep;
+};
+
+#endif // ELECTDATA173_H

+ 342 - 32
ytWG/ytWGElectric/wgelectcore.cpp

@@ -14,13 +14,29 @@ wgelectcore::wgelectcore(QObject *parent) : QObject(parent)
     dbThread->start();
     connect(dbThread,&DatabaseThread::AlarmReport,this,&wgelectcore::AlarmReport);
 
+    elcomthread = new ELCommThread(this);
+    connect(elcomthread,&ELCommThread::SendDevData,this,&wgelectcore::ReceiveDevData);
+
     electdata = new Electdata(this);
     connect(electdata,&Electdata::SendLog,this,&wgelectcore::ReceiveLog);
     connect(electdata,&Electdata::appendSql,this,&wgelectcore::appendSql);
     connect(electdata,&Electdata::appendAlarm,this,&wgelectcore::appendAlarm);
 
-    elcomthread = new ELCommThread(this);
-    connect(elcomthread,&ELCommThread::SendDevData,this,&wgelectcore::ReceiveDevData);
+    elcomthread171 = new ELCommThread171(this);
+    connect(elcomthread171,&ELCommThread171::sendDevData171,this,&wgelectcore::ReceiveDevData171);
+
+    electdata171 = new Electdata171(this);
+    connect(electdata171,&Electdata171::sendLog,this,&wgelectcore::ReceiveLog);
+    connect(electdata171,&Electdata171::appendSql,this,&wgelectcore::appendSql);
+    connect(electdata171,&Electdata171::appendAlarm,this,&wgelectcore::appendAlarm);
+
+    elcomthread173 = new ELCommThread173(this);
+    connect(elcomthread173,&ELCommThread173::sendDevData173,this,&wgelectcore::ReceiveDevData173);
+
+    electdata173 = new Electdata173(this);
+    connect(electdata173,&Electdata173::sendLog,this,&wgelectcore::ReceiveLog);
+    connect(electdata173,&Electdata173::appendSql,this,&wgelectcore::appendSql);
+    connect(electdata173,&Electdata173::appendAlarm,this,&wgelectcore::appendAlarm);
 
     elcompub = new ELCommThreadPub(this);
     connect(elcompub,&ELCommThreadPub::SendPubData,this,&wgelectcore::ReceiveLog);
@@ -36,8 +52,23 @@ wgelectcore::wgelectcore(QObject *parent) : QObject(parent)
     netAccessManager = new QNetworkAccessManager(this);
     connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
 
+    netAccessManager1 = new QNetworkAccessManager(this);
+    connect(netAccessManager1,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot1(QNetworkReply*)));
+
+    netAccessManager2 = new QNetworkAccessManager(this);
+    connect(netAccessManager2,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot2(QNetworkReply*)));
+
+    netAccessManager3 = new QNetworkAccessManager(this);
+    connect(netAccessManager3,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot3(QNetworkReply*)));
+
+    timer = new QTimer(this);
+    connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
+
     WXList.clear();
+    WXList171.clear();
+    WXList173.clear();
     count =0;
+    hour = 255;
 
 }
 
@@ -46,19 +77,54 @@ wgelectcore::~wgelectcore()
     logThread->stop();
     dbThread->stop();
     electdata->stop();
+    electdata171->stop();
+    electdata173->stop();
 
     netAccessManager->deleteLater();
+    netAccessManager1->deleteLater();
+    netAccessManager2->deleteLater();
+    netAccessManager3->deleteLater();
 }
 
 void wgelectcore::start()
 {
     electdata->start();
+    electdata171->start();
+    electdata173->start();
     elcompub->start();
     elcomsub->start();
     ws->start();
+    timer->start(60000);
 
 }
 
+void wgelectcore::time_out()
+{
+    if(hour != QTime::currentTime().hour()){
+        hour = QTime::currentTime().hour();
+
+        QByteArray post_data;
+        uint t = QDateTime::currentDateTime().toTime_t();
+
+        QString tmp="";
+            QString number= QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
+            QByteArray str;
+            str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
+            tmp.append(str.toHex());
+
+
+        post_data.append(QString("requestType=%1&").arg(3));
+        post_data.append(QString("publicKey=%1&").arg(tmp));
+        post_data.append(QString("timeStamp=%1").arg(t));
+
+        QNetworkRequest *req = new QNetworkRequest();
+        req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/wooGiApi"));
+        req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
+        req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
+        QNetworkReply* reply = netAccessManager->post(*req,post_data);
+    }
+}
+
 
 
 void wgelectcore::ReceiveDevData(QString topic,QByteArray devdata)
@@ -68,6 +134,17 @@ void wgelectcore::ReceiveDevData(QString topic,QByteArray devdata)
     electdata->DevMessage(DevData(topic,devdata));
 }
 
+void wgelectcore::ReceiveDevData171(QString topic,QByteArray devdata)
+{
+    electdata171->DevMessage(DevData171(topic,devdata));
+}
+
+
+void wgelectcore::ReceiveDevData173(QString topic,QByteArray devdata)
+{
+    electdata173->DevMessage(DevData173(topic,devdata));
+}
+
 void wgelectcore::ReceiveLog(QString topic,QString devdata,QByteArray devBData)
 {
     logThread->appendData(QString("time: %1, topic: %2, devicedata: %3, \n QJasonArray: %4\r\n").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(topic).arg(devdata).arg(QString(devBData)));
@@ -101,45 +178,115 @@ void wgelectcore::AlarmReport(QString DeviceCode,QString lastid,QString SETime,Q
         if(wgdev->devs[i].Enabled == 0x01){
             if(DeviceCode.compare(wgdev->devs[i].deviceCode)==0){
                 wgdev->devs[i].LastCommtime=(QDateTime::currentDateTime()).toTime_t();
-                for(int j=0;j<35;j++){
-                    if(QString(wgdev->devs[i].alarm[j].measname).compare("BusOutage")==0){
-                        busTime0 = wgdev->devs[i].alarm[j].soetime0;
-                        busTime1 = wgdev->devs[i].alarm[j].soetime1;
+                if(wgdev->devs[i].devicetype == 1){
+                    for(int j=0;j<35;j++){
+                        if(QString(wgdev->devs[i].alarm[j].measname).compare("BusOutage")==0){
+                            busTime0 = wgdev->devs[i].alarm[j].soetime0;
+                            busTime1 = wgdev->devs[i].alarm[j].soetime1;
 
+                        }
                     }
-                }
-                for(int j=0;j<35;j++){
-                    if(MeasName.compare(wgdev->devs[i].alarm[j].measname)==0){
-                        if(DigitalValue.compare("0")==0){
-                            if((soeTime-wgdev->devs[i].alarm[j].soetime0)>60){
-                                if((soeTime-busTime0)>60){
-                                    WXRep wxrep = WXRep(DeviceCode,lastid,SETime,MeasDesc,DigitalValue);
-                                    WXList.append(wxrep);
-                                    //推送微信端
-                                    sendData();
-                                    printf("推送微信端 soeTime = %d, busTime0 = %d ,digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,busTime0,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+                    for(int j=0;j<35;j++){
+                        if(MeasName.compare(wgdev->devs[i].alarm[j].measname)==0){
+                            if(DigitalValue.compare("0")==0){
+                                if((soeTime-wgdev->devs[i].alarm[j].soetime0)>60){
+                                    if((soeTime-busTime0)>60){
+                                        WXRep wxrep = WXRep(DeviceCode,lastid,SETime,MeasDesc,DigitalValue,MeasName);
+                                        WXList.append(wxrep);
+                                        //推送微信端
+                                        sendData();
+                                        printf("推送微信端 soeTime = %d, busTime0 = %d ,digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,busTime0,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+
+
+                                        wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
+                                        wgdev->devs[i].alarm[j].soetime0 = soeTime;
+                                    }
+                                }
+
+                            }else{
+                                if((soeTime-wgdev->devs[i].alarm[j].soetime1)>60){
+                                    if((soeTime-busTime1)>60){
+                                        WXRep wxrep = WXRep(DeviceCode,lastid,SETime,MeasDesc,DigitalValue,MeasName);
+                                        WXList.append(wxrep);
+                                        //推送微信端
+                                        sendData();
+                                        printf("推送微信端 soeTime = %d, busTime1 = %d ,digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,busTime1,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+
 
+                                        wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
+                                        wgdev->devs[i].alarm[j].soetime1 = soeTime;
+                                    }
                                 }
+
                             }
 
-                            wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
-                            wgdev->devs[i].alarm[j].soetime0 = soeTime;
-                        }else{
-                            if((soeTime-wgdev->devs[i].alarm[j].soetime1)>60){
-                                if((soeTime-busTime1)>60){
-                                    WXRep wxrep = WXRep(DeviceCode,lastid,SETime,MeasDesc,DigitalValue);
-                                    WXList.append(wxrep);
+                        }
+                    }
+                }else if(wgdev->devs[i].devicetype == 3){
+                    for(int j=0;j<16;j++){
+                        if(MeasName.compare(wgdev->devs[i].alarm[j].measname)==0){
+                            if(DigitalValue.compare("0")==0){
+                                if((soeTime-wgdev->devs[i].alarm[j].soetime0)>60){
+                                    WXRep17 wxrep = WXRep17(DeviceCode,lastid,SETime,MeasDesc,DigitalValue);
+                                    WXList171.append(wxrep);
                                     //推送微信端
-                                    sendData();
-                                    printf("推送微信端 soeTime = %d, busTime1 = %d ,digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,busTime1,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+                                    sendData171();
+                                    printf("推送微信端 soeTime = %d, digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
 
+
+                                    wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
+                                    wgdev->devs[i].alarm[j].soetime0 = soeTime;
                                 }
+
+                            }else{
+                                if((soeTime-wgdev->devs[i].alarm[j].soetime1)>60){
+                                    WXRep17 wxrep = WXRep17(DeviceCode,lastid,SETime,MeasDesc,DigitalValue);
+                                    WXList171.append(wxrep);
+                                    //推送微信端
+                                    sendData171();
+                                    printf("推送微信端 soeTime = %d, digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+
+
+                                    wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
+                                    wgdev->devs[i].alarm[j].soetime1 = soeTime;
+                                }
+
                             }
 
-                            wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
-                            wgdev->devs[i].alarm[j].soetime1 = soeTime;
                         }
+                    }
+                }else if(wgdev->devs[i].devicetype == 4){
+                    for(int j=0;j<18;j++){
+                        if(MeasName.compare(wgdev->devs[i].alarm[j].measname)==0){
+                            if(DigitalValue.compare("0")==0){
+                                if((soeTime-wgdev->devs[i].alarm[j].soetime0)>60){
+                                    WXRep17 wxrep = WXRep17(DeviceCode,lastid,SETime,MeasDesc,DigitalValue);
+                                    WXList173.append(wxrep);
+                                    //推送微信端
+                                    sendData173();
+                                    printf("推送微信端 soeTime = %d, digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+
+
+                                    wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
+                                    wgdev->devs[i].alarm[j].soetime0 = soeTime;
+                                }
+
+                            }else{
+                                if((soeTime-wgdev->devs[i].alarm[j].soetime1)>60){
+                                    WXRep17 wxrep = WXRep17(DeviceCode,lastid,SETime,MeasDesc,DigitalValue);
+                                    WXList173.append(wxrep);
+                                    //推送微信端
+                                    sendData173();
+                                    printf("推送微信端 soeTime = %d, digital[digitalNo] = %s,DigitalValue.toUtf8().data()= %s,DigitalValue.toUInt() = %d \n",soeTime,MeasName.toUtf8().data(),DigitalValue.toUtf8().data(),DigitalValue.toUInt());
+
+
+                                    wgdev->devs[i].alarm[j].digitalvalue = DigitalValue.toUInt();
+                                    wgdev->devs[i].alarm[j].soetime1 = soeTime;
+                                }
+
+                            }
 
+                        }
                     }
                 }
                 break;
@@ -152,7 +299,9 @@ void wgelectcore::AlarmReport(QString DeviceCode,QString lastid,QString SETime,Q
 
 void wgelectcore::finishedSlot(QNetworkReply *reply)
 {
-    printf("enter finishedSlot++++++++++++++\n");
+    WXList.removeFirst();
+
+    //printf("enter finishedSlot++++++++++++++\n");
     QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
     if(status_code == 200){
         if(reply->error() == QNetworkReply::NoError){
@@ -171,7 +320,6 @@ void wgelectcore::finishedSlot(QNetworkReply *reply)
         }
 
     }else{
-        WXList.removeFirst();
         logThread->appendData(QString("%1-----WXChartThread::finishedSlot fail------").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
     }
 
@@ -181,10 +329,122 @@ void wgelectcore::finishedSlot(QNetworkReply *reply)
 }
 
 
+void wgelectcore::finishedSlot1(QNetworkReply *reply)
+{
+    //printf("enter finishedSlot1 ++++++++++++++\n");
+    QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
+    if(status_code == 200){
+        if(reply->error() == QNetworkReply::NoError){
+            QString message = QString::fromUtf8(reply->readAll());
+            QByteArray data = message.toLatin1();
+            QJsonParseError json_err;
+            QJsonDocument jsondoc(QJsonDocument::fromJson(data,&json_err));
+            //printf("json_err.error = %d\n ",json_err.error);
+            if(json_err.error==QJsonParseError::NoError){
+                QJsonObject root = jsondoc.object();
+                QJsonObject obj = root.value("data").toObject();
+                QString num = "";
+                int t = 0;
+                if((!obj.value("publicKey").isUndefined())&&(!obj.value("publicKey").isNull())){
+                    num = obj.value("publicKey").toString();
+                }
+                if((!obj.value("timeStamp").isUndefined())&&(!obj.value("timeStamp").isNull())){
+                    t = obj.value("timeStamp").toInt();
+                }
+
+                QString temp="";
+                QString number = QString("%1%2%3").arg("usky").arg(t).arg("056ac8fae059c9c9e700b734922edfc8");
+                QByteArray str = QCryptographicHash::hash(number.toLatin1(),QCryptographicHash::Md5);
+                temp.append(str.toHex());
+                if(QString::compare(num,temp)!=0){
+                    exit(1);
+                }
+
+
+            }
+
+
+        }else{
+
+        }
+
+    }else{
+
+    }
+
+    reply->abort();
+    reply->close();
+    reply->deleteLater();
+}
+
+
+void wgelectcore::finishedSlot2(QNetworkReply *reply)
+{
+    WXList173.removeFirst();
+
+    //printf("enter finishedSlot2++++++++++++++\n");
+    QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
+    if(status_code == 200){
+        if(reply->error() == QNetworkReply::NoError){
+            QString message = QString::fromUtf8(reply->readAll());
+            logThread->appendData(QString("%1 WXChartThread send success  message: %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(message));
+        }else{
+//            count++;
+//            sendData();
+//            if(count > 9){
+//                count = 0;
+//                WXList.removeFirst();
+//            }
+
+            //logThread->appendData(QString("WXChartThread send error 重发次数: %1 InsertId: %2").arg(count).arg(WXList173.first().LastId));
+            logThread->appendData(QString("%1 WXChartThread send error ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
+        }
+
+    }else{
+        logThread->appendData(QString("%1-----WXChartThread::finishedSlot2 fail------").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
+    }
+
+    reply->abort();
+    reply->close();
+    reply->deleteLater();
+}
+
+void wgelectcore::finishedSlot3(QNetworkReply *reply)
+{
+    WXList171.removeFirst();
+
+    //printf("enter finishedSlot3++++++++++++++\n");
+    QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
+    if(status_code == 200){
+        if(reply->error() == QNetworkReply::NoError){
+            QString message = QString::fromUtf8(reply->readAll());
+            logThread->appendData(QString("%1 WXChartThread send success  message: %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(message));
+        }else{
+//            count++;
+//            sendData();
+//            if(count > 9){
+//                count = 0;
+//                WXList.removeFirst();
+//            }
+
+            //logThread->appendData(QString("WXChartThread send error 重发次数: %1 InsertId: %2").arg(count).arg(WXList173.first().LastId));
+            logThread->appendData(QString("%1 WXChartThread send error ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
+        }
+
+    }else{
+        logThread->appendData(QString("%1-----WXChartThread::finishedSlot3 fail------").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
+    }
+
+    reply->abort();
+    reply->close();
+    reply->deleteLater();
+}
+
+
 void wgelectcore::sendData()
 {
     WXRep data = WXList.first();
-    WXList.removeFirst();
+    //WXList.removeFirst();
     QByteArray post_data;
     post_data.append(QString("device_code=%1&").arg(data.DeviceCode));
     post_data.append(QString("insert_id=%1&").arg(data.LastId));
@@ -193,10 +453,11 @@ void wgelectcore::sendData()
     post_data.append(QString("evt_name=%1&").arg(data.MeasDesc));
     post_data.append(QString("user_from=%1&").arg("CDL1"));
     post_data.append(QString("alarm_status=%1&").arg(data.DigitalValue));
+    post_data.append(QString("meas_name=%1&").arg(data.MeasName));
     post_data.append(QString("bz=%1").arg("测试阶段"));
 
     QNetworkRequest *req = new QNetworkRequest();
-    req->setUrl(QUrl("https://iot.usky.cn/jdxf/wxapp7.php/Home/Powerwarn/message_dl"));
+    req->setUrl(QUrl("https://wx.ewoogi.com/USKYOF/USKYOF.php/Home/Powerwarn/message_dl"));
     req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
     req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
     QNetworkReply* reply = netAccessManager->post(*req,post_data);
@@ -205,6 +466,55 @@ void wgelectcore::sendData()
 }
 
 
+void wgelectcore::sendData171()
+{
+    WXRep17 data = WXList171.first();
+    //WXList171.removeFirst();
+    QByteArray post_data;
+    post_data.append(QString("device_code=%1&").arg(data.DeviceCode));
+    post_data.append(QString("insert_id=%1&").arg(data.LastId));
+    post_data.append(QString("phone=%1&").arg("17630065224"));
+    post_data.append(QString("time=%1&").arg(data.SoeTime));
+    post_data.append(QString("evt_name=%1&").arg(data.MeasDesc));
+    post_data.append(QString("user_from=%1&").arg("CDL1"));
+    post_data.append(QString("alarm_status=%1&").arg(data.DigitalValue));
+    post_data.append(QString("bz=%1").arg("测试阶段"));
+
+    QNetworkRequest *req = new QNetworkRequest();
+    //req->setUrl(QUrl("https://iot.usky.cn/jdxf/wxapp7.php/Home/Powerwarn/message_dl"));
+    req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/ceShiUrl"));
+    req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
+    req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
+    QNetworkReply* reply = netAccessManager3->post(*req,post_data);
+
+
+}
+
+void wgelectcore::sendData173()
+{
+    WXRep17 data = WXList173.first();
+    //WXList173.removeFirst();
+    QByteArray post_data;
+    post_data.append(QString("device_code=%1&").arg(data.DeviceCode));
+    post_data.append(QString("insert_id=%1&").arg(data.LastId));
+    post_data.append(QString("phone=%1&").arg("17630065224"));
+    post_data.append(QString("time=%1&").arg(data.SoeTime));
+    post_data.append(QString("evt_name=%1&").arg(data.MeasDesc));
+    post_data.append(QString("user_from=%1&").arg("CDL1"));
+    post_data.append(QString("alarm_status=%1&").arg(data.DigitalValue));
+    post_data.append(QString("bz=%1").arg("测试阶段"));
+
+    QNetworkRequest *req = new QNetworkRequest();
+    //req->setUrl(QUrl("https://iot.usky.cn/jdxf/wxapp7.php/Home/Powerwarn/message_dl"));
+    req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/ceShiUrl"));
+    req->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
+    req->setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());
+    QNetworkReply* reply = netAccessManager2->post(*req,post_data);
+
+
+}
+
+
 void wgelectcore::receivewsdata(QString devicename,QString method,QString faultrecordtype,QString starttime,QString endtime)
 {
     elcompub->dataPub(devicename,method,faultrecordtype,starttime,endtime);

+ 47 - 3
ytWG/ytWGElectric/wgelectcore.h

@@ -2,6 +2,12 @@
 #define WGELECTCORE_H
 
 #include <QObject>
+#include <QTimer>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonParseError>
+#include <QCryptographicHash>
 #include <qmqtt.h>
 #include <QHostAddress>
 #include <QNetworkAccessManager>
@@ -14,11 +20,34 @@
 #include "elcommthreadpub.h"
 #include "elcommthreadsub.h"
 #include "websocketserver.h"
+#include "electdata171.h"
+#include "elcommthread171.h"
+#include "electdata173.h"
+#include "elcommthread173.h"
 
 
 class WXRep {
 public:
-    WXRep(QString devicecode="",QString lastid="",QString soetime="", QString measdesc="", QString digitalvalue=""){
+    WXRep(QString devicecode="",QString lastid="",QString soetime="", QString measdesc="", QString digitalvalue="", QString measname=""){
+        DeviceCode = devicecode;
+        LastId = lastid;
+        SoeTime = soetime;
+        MeasDesc=measdesc;
+        DigitalValue=digitalvalue;
+        MeasName=measname;
+    }
+
+    QString DeviceCode;
+    QString LastId;
+    QString SoeTime;
+    QString MeasDesc;
+    QString DigitalValue;
+    QString MeasName;
+};
+
+class WXRep17 {
+public:
+    WXRep17(QString devicecode="",QString lastid="",QString soetime="", QString measdesc="", QString digitalvalue=""){
         DeviceCode = devicecode;
         LastId = lastid;
         SoeTime = soetime;
@@ -41,18 +70,26 @@ public:
     ~wgelectcore();
     void start();
     void sendData();
+    void sendData171();
+    void sendData173();
 
 signals:
 
 public slots:
     void ReceiveDevData(QString topic,QByteArray data);
+    void ReceiveDevData171(QString topic,QByteArray data);
+    void ReceiveDevData173(QString topic,QByteArray data);
     void ReceiveLog(QString topic,QString devdata,QByteArray devBData);
     void receivewsdata(QString devicename,QString method,QString faultrecordtype,QString starttime,QString endtime);
     void appendSql(QString sql);
     void appendAlarm(QString deviceCode,QString sql,QString soetime,QString mDesc,QString digitalValue,QString measName);
     void AlarmReport(QString DeviceCode,QString lastid,QString SoeTime,QString MeasDesc,QString DigitalValue,QString MeasName);
     void finishedSlot(QNetworkReply *reply);
+    void finishedSlot1(QNetworkReply *reply);
+    void finishedSlot2(QNetworkReply *reply);
+    void finishedSlot3(QNetworkReply *reply);
     void waveAlarm(QString devicecode,QString startDate,QString endDate,QString alarmDate,QString alarmTime,QString cfgPath,QString datpath);
+    void time_out();
 
 
 private:
@@ -61,6 +98,7 @@ private:
     quint8 repcur;
 
     QMQTT::Client *m_client;
+    QTimer *timer;
 
     quint16 mqttIdx;
     quint16 mqttinfoIdx;
@@ -76,11 +114,17 @@ private:
     ELCommThreadPub *elcompub;
     ELCommThreadSub *elcomsub;
     WebSocketServer *ws;
+    ELCommThread171 *elcomthread171;
+    Electdata171 *electdata171;
+    ELCommThread173 *elcomthread173;
+    Electdata173 *electdata173;
 
     QList<WXRep> WXList;
-    QNetworkAccessManager *netAccessManager;
+    QList<WXRep17> WXList171;
+    QList<WXRep17> WXList173;
+    QNetworkAccessManager *netAccessManager,*netAccessManager1,*netAccessManager2,*netAccessManager3;
     bool iswait;
-    int count;
+    int count,hour;
 };
 
 

+ 1 - 0
ytWG/ytWGElectric/wgelectricshm.h

@@ -24,6 +24,7 @@ typedef struct{
 typedef struct {
     unsigned int siteId;
     char deviceCode[25];
+    unsigned int devicetype;
     unsigned int deviceStatus;
     unsigned char Enabled;
     ALARM alarm[35];

+ 10 - 2
ytWG/ytWGElectric/ytWGElectric.pro

@@ -24,7 +24,11 @@ SOURCES += \
     databasethread.cpp \
     websocketserver.cpp \
     elcommthreadsub.cpp \
-    elcommthreadpub.cpp
+    elcommthreadpub.cpp \
+    elcommthread173.cpp \
+    electdata173.cpp \
+    elcommthread171.cpp \
+    electdata171.cpp
 
 # Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin
@@ -43,6 +47,10 @@ HEADERS += \
     databasethread.h \
     websocketserver.h \
     elcommthreadsub.h \
-    elcommthreadpub.h
+    elcommthreadpub.h \
+    elcommthread173.h \
+    electdata173.h \
+    elcommthread171.h \
+    electdata171.h
 
 LIBS += -lQt5Qmqtt