Bladeren bron

日常维护优化 敏控和水表两个模块增加了redis缓存数据库存取数据

James 3 jaren geleden
bovenliggende
commit
006c8e7d5f
42 gewijzigde bestanden met toevoegingen van 2683 en 912 verwijderingen
  1. 8 8
      DataProcessService/ytElectricFire/databasethread.cpp
  2. 1 0
      DataProcessService/ytElectricFire/efcommthread2.cpp
  3. 62 12
      DataProcessService/ytElectricFire/efcommthread_yada.cpp
  4. 2 0
      DataProcessService/ytElectricFire/efcommthread_yada.h
  5. 2 2
      DataProcessService/ytElectricFire/elecfilecore.cpp
  6. 42 2
      DataProcessService/ytRTUProcess/porcesscore.cpp
  7. 7 7
      DataProcessService/ytRTUProcess/rtucommthread.cpp
  8. 1 1
      DataProcessService/ytTBSN101Process/tbcore.cpp
  9. 1 1
      DataProcessService/ytUserInfoProcess/databasethread.cpp
  10. 1 1
      DataProcessService/ytUserInfoProcess/userinfoprocesscore.cpp
  11. 214 19
      DataProcessService/ytWarterMkProcess/databasethread.cpp
  12. 8 0
      DataProcessService/ytWarterMkProcess/databasethread.h
  13. 7 7
      DataProcessService/ytWarterMkProcess/main.cpp
  14. 655 594
      DataProcessService/ytWarterMkProcess/mkcore.cpp
  15. 8 0
      DataProcessService/ytWarterMkProcess/mkcore.h
  16. 192 9
      DataProcessService/ytWarterMkProcess/nbsensorthread.cpp
  17. 8 0
      DataProcessService/ytWarterMkProcess/nbsensorthread.h
  18. 23 0
      DataProcessService/ytWarterMkProcess/redis.h
  19. 1 1
      DataProcessService/ytWarterMkProcess/waterMk01.h
  20. 3 1
      DataProcessService/ytWarterMkProcess/ytWarterMkProcess.pro
  21. 244 27
      DataProcessService/ytWaterProcess/databasethread.cpp
  22. 8 0
      DataProcessService/ytWaterProcess/databasethread.h
  23. 14 14
      DataProcessService/ytWaterProcess/main.cpp
  24. 24 0
      DataProcessService/ytWaterProcess/redis.h
  25. 203 19
      DataProcessService/ytWaterProcess/sensorthread3.cpp
  26. 12 3
      DataProcessService/ytWaterProcess/sensorthread3.h
  27. 230 46
      DataProcessService/ytWaterProcess/sersorthread.cpp
  28. 11 3
      DataProcessService/ytWaterProcess/sersorthread.h
  29. 2 2
      DataProcessService/ytWaterProcess/water.h
  30. 1 1
      DataProcessService/ytWaterProcess/waterServer4.cpp
  31. 251 79
      DataProcessService/ytWaterProcess/watercore.cpp
  32. 11 3
      DataProcessService/ytWaterProcess/watercore.h
  33. 6 6
      DataProcessService/ytWaterProcess/waterserver.cpp
  34. 6 6
      DataProcessService/ytWaterProcess/waterserver.h
  35. 6 6
      DataProcessService/ytWaterProcess/waterserver3.cpp
  36. 6 6
      DataProcessService/ytWaterProcess/waterserver3.h
  37. 2 2
      DataProcessService/ytWaterProcess/waterserver4.h
  38. 189 9
      DataProcessService/ytWaterProcess/wateruserver.cpp
  39. 9 2
      DataProcessService/ytWaterProcess/wateruserver.h
  40. 190 10
      DataProcessService/ytWaterProcess/wateruserver2.cpp
  41. 9 2
      DataProcessService/ytWaterProcess/wateruserver2.h
  42. 3 1
      DataProcessService/ytWaterProcess/ytWaterProcess.pro

+ 8 - 8
DataProcessService/ytElectricFire/databasethread.cpp

@@ -295,14 +295,14 @@ void DatabaseThread::check_devicelist()
                 }
             }
             qry2.clear();
-            sql = QString("select point_code, point_data from sp_owner_status where device_id='%1'")
-                    .arg(qry.value(0).toString());
-            qry2 = db.exec(sql);
-            while(qry2.next()){
-                int point = qry2.value(0).toInt();
-                if((point>0)&&(point<8))
-                    eFireList->devs[nrow].Point[point].Status = qry2.value(1).toUInt()&0xff;
-            }
+//            sql = QString("select point_code, point_data from sp_owner_status where device_id='%1'")
+//                    .arg(qry.value(0).toString());
+//            qry2 = db.exec(sql);
+//            while(qry2.next()){
+//                int point = qry2.value(0).toInt();
+//                if((point>0)&&(point<8))
+//                    eFireList->devs[nrow].Point[point].Status = qry2.value(1).toUInt()&0xff;
+//            }
         }
     }
     qry.clear();

+ 1 - 0
DataProcessService/ytElectricFire/efcommthread2.cpp

@@ -48,6 +48,7 @@ void EFCommThread2::run()
             close_self(so);
             return;
         }
+        usleep(200000);
     }
     so->abort();
 }

+ 62 - 12
DataProcessService/ytElectricFire/efcommthread_yada.cpp

@@ -9,6 +9,7 @@ union FC
 
 EFCommthread_Yada::EFCommthread_Yada(qintptr socketDescriptor,QObject *parent) : QThread(parent)
 {
+    find = false;
     keepcomm = false;
     err_count = 0;
     DeviceID = "";
@@ -64,6 +65,7 @@ void EFCommthread_Yada::run()
             close_self(so);
             return;
         }
+        usleep(200000);
     }
     so->abort();
 }
@@ -106,6 +108,40 @@ QByteArray EFCommthread_Yada::ydReqHeartRtn()
     return Rtn;
 }
 
+// 68AAAAAAAAAAAA140E0510000A02000000111111111E000916   上报周期设置为30分钟
+// 68AAAAAAAAAAAA140E0510000A02000000111111110500F016   上报周期设置为5分钟
+QByteArray EFCommthread_Yada::ydSetInfoTimeRtn()
+{
+    QByteArray Rtn = QByteArray(25,0x00);
+    Rtn[0] = static_cast<char>(0x68);
+    Rtn[1] = static_cast<char>(0xAA);
+    Rtn[2] = static_cast<char>(0xAA);
+    Rtn[3] = static_cast<char>(0xAA);
+    Rtn[4] = static_cast<char>(0xAA);
+    Rtn[5] = static_cast<char>(0xAA);
+    Rtn[6] = static_cast<char>(0xAA);
+    Rtn[7] = static_cast<char>(0x14);
+    Rtn[8] = static_cast<char>(0x0E);
+    Rtn[9] = static_cast<char>(0x05);
+    Rtn[10] = static_cast<char>(0x10);
+    Rtn[11] = static_cast<char>(0x00);
+    Rtn[12] = static_cast<char>(0x0A);
+    Rtn[13] = static_cast<char>(0x02);
+    Rtn[14] = static_cast<char>(0x00);
+    Rtn[15] = static_cast<char>(0x00);
+    Rtn[16] = static_cast<char>(0x00);
+    Rtn[17] = static_cast<char>(0x11);
+    Rtn[18] = static_cast<char>(0x11);
+    Rtn[19] = static_cast<char>(0x11);
+    Rtn[20] = static_cast<char>(0x11);
+    Rtn[21] = static_cast<char>(0x05);
+    Rtn[22] = static_cast<char>(0x00);
+    Rtn[23] = static_cast<char>(0xF0);
+    Rtn[24] = static_cast<char>(0x16);
+
+    return Rtn;
+}
+
 
 void EFCommthread_Yada::chk_regist(QByteArray info, QDateTime t)
 {
@@ -200,9 +236,9 @@ void EFCommthread_Yada::chk_data(QByteArray data, QDateTime t)
             int HCurrSta2 = alarmstr.mid(9,1).toInt();
             int LeakCur1 = alarmstr.mid(0,1).toInt();
             int LeakCur2 = alarmstr.mid(13,1).toInt();
-            int HTemp1 = alarmstr.mid(2,1).toInt();
-            int HTemp2 = alarmstr.mid(3,1).toInt();
-            int HTemp3 = alarmstr.mid(4,1).toInt();
+            int HTemp1 = alarmstr.mid(1,1).toInt();
+            int HTemp2 = alarmstr.mid(2,1).toInt();
+            int HTemp3 = alarmstr.mid(3,1).toInt();
 
             float volt1 = static_cast<float>((static_cast<qint16>(((dat.at(0)&0x00ff)<<8)|(dat.at(1)&0x00ff)))*0.1*pt);
             float volt2 = static_cast<float>((static_cast<qint16>(((dat.at(16)&0x00ff)<<8)|(dat.at(17)&0x00ff)))*0.1*pt);
@@ -211,9 +247,9 @@ void EFCommthread_Yada::chk_data(QByteArray data, QDateTime t)
             float curr2 = eFireList->devs[DevIdx].Ratio*static_cast<float>((static_cast<qint16>(((dat.at(20)&0x00ff)<<8)|(dat.at(21)&0x00ff)))*0.001*ct);
             float curr3 = eFireList->devs[DevIdx].Ratio*static_cast<float>((static_cast<qint16>(((dat.at(36)&0x00ff)<<8)|(dat.at(37)&0x00ff)))*0.001*ct);
             float leakc = static_cast<float>(static_cast<qint16>(((dat.at(82)&0x00ff)<<8)|(dat.at(83)&0x00ff)));
-            float temp1 = static_cast<float>((static_cast<qint16>(((dat.at(86)&0x00ff)<<8)|(dat.at(87)&0x00ff)))*0.1);
-            float temp2 = static_cast<float>((static_cast<qint16>(((dat.at(88)&0x00ff)<<8)|(dat.at(89)&0x00ff)))*0.1);
-            float temp3 = static_cast<float>((static_cast<qint16>(((dat.at(90)&0x00ff)<<8)|(dat.at(91)&0x00ff)))*0.1);
+            float temp1 = static_cast<float>((static_cast<qint16>(((dat.at(84)&0x00ff)<<8)|(dat.at(85)&0x00ff)))*0.1);
+            float temp2 = static_cast<float>((static_cast<qint16>(((dat.at(86)&0x00ff)<<8)|(dat.at(87)&0x00ff)))*0.1);
+            float temp3 = static_cast<float>((static_cast<qint16>(((dat.at(88)&0x00ff)<<8)|(dat.at(89)&0x00ff)))*0.1);
 
             QString commData = QString(" yada pt=%1,ct=%2, devicestatus=%3, alarmstr=%4,HVoltSta=%5,LVoltSta=%6,HCurrSta1=%7,HCurrSta2=%8,LeakCur1=%9,LeakCur2=%10,HTemp1=%11,HTemp2=%12,HTemp3=%13,volt1=%14,volt2=%15,volt3=%16,curr1=%17,curr2=%18,curr3=%19,leakc=%20,temp1=%21,temp2=%22,temp3=%23").arg(pt).arg(ct).arg(devicestatus).arg(alarmstr).arg(HVoltSta).arg(LVoltSta).arg(HCurrSta1).arg(HCurrSta2).arg(LeakCur1).arg(LeakCur2).arg(HTemp1).arg(HTemp2).arg(HTemp3).arg(volt1).arg(volt2).arg(volt3).arg(curr1).arg(curr2).arg(curr3).arg(leakc).arg(temp1).arg(temp2).arg(temp3);
             emit CommData(QString(eFireList->devs[DevIdx].Device_Code),2,commData);
@@ -384,6 +420,7 @@ void EFCommthread_Yada::readData(QTcpSocket *so)
             switch(data.at(7)&0xff){
             case 0x08:
             {
+                find = true;
                 chk_regist(data,t);
                 QByteArray Rtn = ydReqLoginRtn();
                 so->write(Rtn);
@@ -398,12 +435,25 @@ void EFCommthread_Yada::readData(QTcpSocket *so)
                 break;
             case 0x0A:
             {
-                QByteArray Rtn = ydReqHeartRtn();
-                so->write(Rtn);
-                commData.clear();
-                commData.append(QString("[%1] yada ydReqHeart ").arg(so->peerAddress().toString()));
-                for(int i=0;i<Rtn.length();i++){
-                    commData.append(QString(" %1").arg(Rtn.at(i)&0xff,2,16,QChar('0')));
+
+                if(find){
+                    find = false;
+                    QByteArray Rtn1 = ydSetInfoTimeRtn();
+                    so->write(Rtn1);
+                    commData.clear();
+                    commData.append(QString("[%1] yada ydReqHeart ").arg(so->peerAddress().toString()));
+                    for(int i=0;i<Rtn1.length();i++){
+                        commData.append(QString(" %1").arg(Rtn1.at(i)&0xff,2,16,QChar('0')));
+                    }
+                }else{
+                    QByteArray Rtn = ydReqHeartRtn();
+                    so->write(Rtn);
+                    commData.clear();
+                    commData.append(QString("[%1] yada ydReqHeart ").arg(so->peerAddress().toString()));
+                    for(int i=0;i<Rtn.length();i++){
+                        commData.append(QString(" %1").arg(Rtn.at(i)&0xff,2,16,QChar('0')));
+                    }
+
                 }
                 emit CommData(QString(eFireList->devs[DevIdx].Device_Code),2,commData);
             }

+ 2 - 0
DataProcessService/ytElectricFire/efcommthread_yada.h

@@ -20,6 +20,7 @@ public:
     quint16 chk_crcc(QByteArray buff);
     QByteArray ydReqLoginRtn();
     QByteArray ydReqHeartRtn();
+    QByteArray ydSetInfoTimeRtn();
     void chk_regist(QByteArray info, QDateTime t);
     void chk_data(QByteArray data, QDateTime t);
     void doAnalogValue(int pno, float v, QDateTime t);
@@ -40,6 +41,7 @@ private:
     int DevIdx;
     uint time;
     int ct,pt;
+    bool find;
 
 };
 

+ 2 - 2
DataProcessService/ytElectricFire/elecfilecore.cpp

@@ -189,10 +189,10 @@ void ElecFileCore::getOnLine(int deviceidx, bool flag, QDateTime t)
         if(eFireList->devs[deviceidx].Online_Flag!=0x01)
         {
             eFireList->devs[deviceidx].Online_Flag=0x01;
-            dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where deviceid='%2'")
+            dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where device_id='%2'")
                                 .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(eFireList->devs[deviceidx].Device_Code)));
         }else{
-            dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where deviceid='%2'")
+            dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where device_id='%2'")
                                 .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(eFireList->devs[deviceidx].Device_Code)));
         }
     }

+ 42 - 2
DataProcessService/ytRTUProcess/porcesscore.cpp

@@ -99,6 +99,20 @@ void PorcessCore::timeout()
                     dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, time, status, data2, data4) values (NULL, '%1', '%2', 44, '%3', '%4')")
                                         .arg(QString::fromUtf8(rtuList->rtus[i].Device_Code)).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
                                         .arg(QString::fromUtf8("离线")).arg(QString::fromUtf8(rtuList->rtus[i].Device_Name)));
+
+                    if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
+                            m_client->connectToHost();
+                    }
+                    if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
+                        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"离线\",\"serial\":\"\",\"value\":\"\",\"status\":\"0\",\"type\":\"44\"}],\"deviceName\":\"%3\",\"timeStamp\":\"%4\",\"deviceModel\":\"\",\"deviceType\":\"%5\",\"devId\":\"%6\"}],\"type\":\"ALARM\",\"timeStamp\":\"%7\"}")
+                                         .arg(rtuList->rtus[i].Device_Code).arg(QString(rtuList->rtus[i].Device_Name)).arg(QString(rtuList->rtus[i].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[i].Device_Type).arg(rtuList->rtus[i].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
+
+                        QString topic = QString("/usky/ytDP0006/%1/%2/alarm").arg(rtuList->rtus[i].Company_Code).arg(rtuList->rtus[i].Device_Code);
+                        m_client->publish(QMQTT::Message(mqttIdx++,topic,alarmData.toUtf8()));
+                        alarmData.clear();
+                        if(mqttIdx>9999)
+                            mqttIdx = 1;
+                    }
                 }
             }
         }
@@ -195,11 +209,24 @@ void PorcessCore::getAnalogReport(int devIdx, int port, QByteArray data, float v
                         .arg(QString::number(static_cast<double>(value),10,2)).arg(t.toString("yyyy-MM-dd HH:mm:ss"))
                         .arg(QString::fromUtf8("%1 %2").arg(alarmName).arg(portname)).arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(port));
 
+    QString point;
+    switch (port&0x0f) {
+    case 1:point="665";break;
+    case 2:point="666";break;
+    case 3:point="667";break;
+    case 4:point="668";break;
+    case 5:point="669";break;
+    case 6:point="670";break;
+    case 7:point="671";break;
+    case 8:point="672";break;
+    default:break;
+
+    }
     if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
             m_client->connectToHost();
     }
     if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
-        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(portname).arg(port&0x0f,2,10,QChar('0')).arg(QString::number(static_cast<double>(value),10,2)).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[devIdx].Device_Type).arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
+        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"01\",\"port\":\"E6\",\"stuname\":\"%6\"}],\"deviceName\":\"%7\",\"timeStamp\":\"%8\",\"deviceModel\":\"\",\"deviceType\":\"%9\",\"devId\":\"%10\"}],\"type\":\"ALARM\",\"timeStamp\":\"%11\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(portname).arg(point).arg(QString::number(static_cast<double>(value),10,2)).arg(alarmName).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[devIdx].Device_Type).arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
 
         QString topic = QString("/usky/ytDP0006/%1/%2/alarm").arg(rtuList->rtus[devIdx].Company_Code).arg(rtuList->rtus[devIdx].Device_Code);
         m_client->publish(QMQTT::Message(mqttIdx++,topic,alarmData.toUtf8()));
@@ -288,11 +315,24 @@ void PorcessCore::getIoReport(int devIdx, int port, QByteArray data, int value,
                             .arg(value==0?"00":"01").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString("%1 %2").arg(d4).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)))
                             .arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(port));
 
+        QString point;
+        switch (port&0x0f) {
+        case 1:point="665";break;
+        case 2:point="666";break;
+        case 3:point="667";break;
+        case 4:point="668";break;
+        case 5:point="669";break;
+        case 6:point="670";break;
+        case 7:point="671";break;
+        case 8:point="672";break;
+        default:break;
+
+        }
         if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
                 m_client->connectToHost();
         }
         if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
-            alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(portname).arg(port&0x0f,2,10,QChar('0')).arg(value==0?"00":"01").arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[devIdx].Device_Type).arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
+            alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"port\":\"E3\",\"stuname\":\"%7\"}],\"deviceName\":\"%8\",\"timeStamp\":\"%9\",\"deviceModel\":\"\",\"deviceType\":\"%10\",\"devId\":\"%11\"}],\"type\":\"ALARM\",\"timeStamp\":\"%12\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(portname).arg(point).arg(value==0?"00":"01").arg(value==0?"00":"01").arg(d4).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[devIdx].Device_Type).arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
 
             QString topic = QString("/usky/ytDP0006/%1/%2/alarm").arg(rtuList->rtus[devIdx].Company_Code).arg(rtuList->rtus[devIdx].Device_Code);
             m_client->publish(QMQTT::Message(mqttIdx++,topic,alarmData.toUtf8()));

+ 7 - 7
DataProcessService/ytRTUProcess/rtucommthread.cpp

@@ -143,10 +143,10 @@ void RtuCommThread::checkIOvalue(QByteArray data, QDateTime t)
                     if((i&0x01)==0x01)
                     {
                         emit getIOValue(DevIdx, i, E3d, ((E3d.at((i-1)/2)>>4)&0x01)==0x01?1:0, t);
-                        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\"},").arg(rtuList->rtus[DevIdx].Port[i].PortName).arg(QString("6%1").arg(i,2,10,QChar('0'))).arg(((E3d.at((i-1)/2)>>4)&0x01)==0x01?"01":"00"));
+                        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\",\"type\":\"%4\",\"port\":\"E3\",\"stuname\":\"%5\"},").arg(rtuList->rtus[DevIdx].Port[i].PortName).arg(QString("6%1").arg(i,2,10,QChar('0'))).arg(((E3d.at((i-1)/2)>>4)&0x01)==0x01?"01":"00").arg(((E3d.at((i-1)/2)>>4)&0x01)==0x01?"01":"00").arg(QString::fromUtf8(((E3d.at((i-1)/2)>>4)&0x01)==0x01?rtuList->rtus[DevIdx].Port[i].NameOfIOon:rtuList->rtus[DevIdx].Port[i].NameOfIOOff)));
                     }else{
                         emit getIOValue(DevIdx, i,E3d, (E3d.at((i-1)/2)&0x01)==0x01?1:0, t);
-                        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\"},").arg(rtuList->rtus[DevIdx].Port[i].PortName).arg(QString("6%1").arg(i,2,10,QChar('0'))).arg((E3d.at((i-1)/2)&0x01)==0x01?"01":"00"));
+                        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\",\"type\":\"%4\",\"port\":\"E3\",\"stuname\":\"%5\"},").arg(rtuList->rtus[DevIdx].Port[i].PortName).arg(QString("6%1").arg(i,2,10,QChar('0'))).arg((E3d.at((i-1)/2)&0x01)==0x01?"01":"00").arg((E3d.at((i-1)/2)&0x01)==0x01?"01":"00").arg(QString::fromUtf8((E3d.at((i-1)/2)&0x01)==0x01?rtuList->rtus[DevIdx].Port[i].NameOfIOon:rtuList->rtus[DevIdx].Port[i].NameOfIOOff)));
                     }
                 }
             }
@@ -156,7 +156,7 @@ void RtuCommThread::checkIOvalue(QByteArray data, QDateTime t)
                 if(rtuList->rtus[DevIdx].Port[i].Enabled==0x01)
                 {
                     emit getIOValue(DevIdx, i,E3d, (E3d.at(i-1)&0x01)==0x01?1:0, t);
-                    pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\"},").arg(rtuList->rtus[DevIdx].Port[i].PortName).arg(QString("6%1").arg(i,2,10,QChar('0'))).arg((E3d.at(i-1)&0x01)==0x01?"01":"00"));
+                    pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\",\"type\":\"%4\",\"port\":\"E3\",\"stuname\":\"%5\"},").arg(rtuList->rtus[DevIdx].Port[i].PortName).arg(QString("6%1").arg(i,2,10,QChar('0'))).arg((E3d.at(i-1)&0x01)==0x01?"01":"00").arg((E3d.at(i-1)&0x01)==0x01?"01":"00").arg(QString::fromUtf8((E3d.at(i-1)&0x01)==0x01?rtuList->rtus[DevIdx].Port[i].NameOfIOon:rtuList->rtus[DevIdx].Port[i].NameOfIOOff)));
                 }
             }
         }else if(len==4){
@@ -201,14 +201,14 @@ void RtuCommThread::calculateAnalogValue(int v, int port, QByteArray data, QDate
             emit getAnalogReport(DevIdx, port, data, static_cast<float>(ret), false, t);
         }else if(ret>static_cast<double>(rtuList->rtus[DevIdx].Port[port].PortMax)){
             emit getAnalogReport(DevIdx, port, data, static_cast<float>(ret), true, t);
-        }else
+        }else{
             emit getAnalogValue(DevIdx, port, data, static_cast<float>(ret), t);
-
-        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\"},").arg(rtuList->rtus[DevIdx].Port[port].PortName).arg(point).arg(QString::number(static_cast<double>(static_cast<float>(ret)),10,2)));
+            pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\",\"type\":\"00\",\"port\":\"E6\",\"stuname\":\"正常\"},").arg(rtuList->rtus[DevIdx].Port[port].PortName).arg(point).arg(QString::number(static_cast<double>(static_cast<float>(ret)),10,2)));
+        }
 
     }else{
         emit getAnalogValue(DevIdx, port, data, static_cast<float>(0.0), t);
-        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\"},").arg(rtuList->rtus[DevIdx].Port[port].PortName).arg(point).arg(QString::number(static_cast<double>(static_cast<float>(0.0)),10,2)));
+        pointStr.append(QString("{\"property\":\"%1\",\"serial\":\"%2\",\"value\":\"%3\",\"type\":\"00\",\"port\":\"E6\",\"stuname\":\"正常\"},").arg(rtuList->rtus[DevIdx].Port[port].PortName).arg(point).arg(QString::number(static_cast<double>(static_cast<float>(0.0)),10,2)));
     }
 }
 

+ 1 - 1
DataProcessService/ytTBSN101Process/tbcore.cpp

@@ -559,7 +559,7 @@ void TBCore::check_framedata(QString data, QString etime, QString ip)
                                     dbThread->appendAlarm(AlarmRep(device_id,sql,"4",stime.toString("yyyy-MM-dd HH:mm:ss"),"3"));
                                     alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"N\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(QString(smokerList->sensors[i].Device_Code)).arg(QString(smokerList->sensors[i].Device_Name)).arg(QString::fromUtf8("设备自检")).arg("316").arg(QString::fromUtf8("报警")).arg(QString(smokerList->sensors[i].Device_Name)).arg(stime.toTime_t()).arg(QString(smokerList->sensors[i].Device_Type)).arg(QString(smokerList->sensors[i].Device_Code)).arg(stime.toTime_t()));
                                 }
-                                else if(alarm==0x05){
+                                else if((alarm==0x05)&&(QString(smokerList->sensors[i].Company_Code).compare("10327")!=0)){
                                     sql = QString::fromUtf8("insert into `sp_hj2017`(`device_code`, `time`, `status`, `address`, `ncmd`, `data1`, `data2`, `data3`, `data4`, `data5`) values ('%1', '%2', '%3', '%4','%5','%6','%7','%8','%9','%10')")
                                             .arg(device_id).arg(stime.toString("yyyy-MM-dd HH:mm:ss")).arg("y09").arg(ip).arg("y09").arg("y09").arg(QString::fromUtf8("报警")).arg("").arg(QString::fromUtf8("低压故障")).arg("y09");
                                     dbThread->appendAlarm(AlarmRep(device_id,sql,"5",stime.toString("yyyy-MM-dd HH:mm:ss"),"3"));

+ 1 - 1
DataProcessService/ytUserInfoProcess/databasethread.cpp

@@ -431,7 +431,7 @@ void DataBaseThread::run(){
                 }
 
                 topic2 = QString("/usky/ytDP0001/%1/%2/alarm").arg(companyCode).arg(rep.DeviceId);
-                alarmStr.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(rep.DeviceId).arg(deviceName).arg(AlarmName).arg(point).arg(AlarmValue).arg(deviceName).arg((QDateTime::fromString(rep.AlarmTime,"yyyy-MM-dd hh:mm:ss")).toTime_t()).arg(deviceType).arg(rep.DeviceId).arg((QDateTime::fromString(rep.AlarmTime,"yyyy-MM-dd hh:mm:ss")).toTime_t()));
+                alarmStr.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"address\":\"%7\"}],\"deviceName\":\"%8\",\"timeStamp\":\"%9\",\"deviceModel\":\"\",\"deviceType\":\"%10\",\"devId\":\"%11\"}],\"type\":\"ALARM\",\"timeStamp\":\"%12\"}").arg(rep.DeviceId).arg(deviceName).arg(AlarmName).arg(point).arg(AlarmValue).arg(rep.AlarmType).arg(rep.AlarmAddress).arg(deviceName).arg((QDateTime::fromString(rep.AlarmTime,"yyyy-MM-dd hh:mm:ss")).toTime_t()).arg(deviceType).arg(rep.DeviceId).arg((QDateTime::fromString(rep.AlarmTime,"yyyy-MM-dd hh:mm:ss")).toTime_t()));
 
                 emit MqttInfo(infoStr,alarmStr,topic1,topic2);
 

+ 1 - 1
DataProcessService/ytUserInfoProcess/userinfoprocesscore.cpp

@@ -514,7 +514,7 @@ QString UserInfoProcessCore::getOwnerAddr(quint64 devid, quint8 sysAddr, quint32
     if(!db.isOpen())
         db.open();
     if(db.isOpen()){
-        if(devid==90004){
+        if((devid==90004)||(devid==90048)||(devid==90051)||(devid==90085)||(devid==90086)||(devid==90142)||(devid==90145)||(devid==90151)||(devid==90152)||(devid==90153)){
             sql = QString("select `area`, `type`, `info` from `sp_owner_point` where `device_code`=%1 and `Com_idx`=%2 and `loop`=%3 and `pno`=%4 and `host_num`=%5")
                     .arg(devid).arg(sysAddr).arg(areaid).arg(point).arg(hostNum);
         }else{

+ 214 - 19
DataProcessService/ytWarterMkProcess/databasethread.cpp

@@ -1,21 +1,22 @@
 #include "databasethread.h"
-#include "waterMk01.h"
+//#include "waterMk01.h"
 #include "AlarmReport.h"
 
 #define HostName  "47.98.201.187"
 #define HostPort 3306
-#define UserName "root"
-#define PassWord "Yt2018IoT"
+#define UserName "uskyIOT"
+#define PassWord "uskyIOT"
 #define DatabaseName "jdxf"
 
 
 #define sql_debug
 
-extern MksensorList *mkList;
+//extern MksensorList *mkList;
 
 DatabaseThread::DatabaseThread(QObject *parent) :
     QThread(parent)
 {
+    c = NULL;
     keep = false;
     hour = 255;
     sqlList.clear();
@@ -33,6 +34,7 @@ DatabaseThread::DatabaseThread(QObject *parent) :
     mcdb.setUserName(QString("root"));
     mcdb.setPassword(QString("Yt2021"));
     mcdb.setDatabaseName(QString("jx_cover"));
+    redisconnected=-1;
 //    mcdb.open();
 }
 
@@ -66,10 +68,19 @@ bool DatabaseThread::chktable(QString tbname)
 
 void DatabaseThread::check_devicelist()
 {
+    if(redisconnected==-1){
+        redisconnected=redis_init();
+        if(redisconnected==-1){
+            printf("redis init failed\n");
+        }
+        redis_save(AUTH);
+        redis_save(DBID);
+    }
+
     printf("database thread check_devicelist()\n");
     uint nowTime = QDateTime::currentDateTime().toTime_t();
     hour=QTime::currentTime().hour();
-    QString sql = QString("select owner_code, owner_name, unitinfo, owner_xh, company, dwtype from sp_owner where dwtype in (2,5,128) and owner_xh !=''");
+    QString sql = QString("select owner_code, owner_name, unitinfo, owner_xh, company, dwtype from sp_owner where dwtype in (2,4,128) and owner_xh !=''");
     QSqlQuery qry = db.exec(sql);
     int nrow= 0;
     while(qry.next()){
@@ -87,24 +98,38 @@ void DatabaseThread::check_devicelist()
                 .arg(qry.value(0).toString());
         QSqlQuery qry2 = db.exec(sql);
 
-        mkList->sensors[nrow].Enabled=0x01;
+        uint redistime = 0;
+
+        //mkList->sensors[nrow].Enabled=0x01;
         if(qry2.next()){
-            if(qry2.value(0).toUInt()==0)
-                mkList->sensors[nrow].LastCommtime = nowTime;
+            if(qry2.value(0).toUInt()==0){
+                //mkList->sensors[nrow].LastCommtime = nowTime;
+                redistime = nowTime;
+            }
+
         }
-        sprintf(mkList->sensors[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data());
-        sprintf(mkList->sensors[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data());
-        sprintf(mkList->sensors[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data());
-        sprintf(mkList->sensors[nrow].Device_Type,"%s",qry.value(5).toString().toUtf8().data());
-        sprintf(mkList->sensors[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data());
-        printf("Device_Code:%s\n",QString(mkList->sensors[nrow].Device_Code).toUtf8().data());
-        printf("Device_Code:%s\n",QString(mkList->sensors[nrow].Company_Code).toUtf8().data());
+        //sprintf(mkList->sensors[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data());
+        //sprintf(mkList->sensors[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data());
+        //sprintf(mkList->sensors[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data());
+        //sprintf(mkList->sensors[nrow].Device_Type,"%s",qry.value(5).toString().toUtf8().data());
+        //sprintf(mkList->sensors[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data());
+        //printf("Device_Code:%s\n",QString(mkList->sensors[nrow].Device_Code).toUtf8().data());
+        //printf("Device_Code:%s\n",QString(mkList->sensors[nrow].Company_Code).toUtf8().data());
+
+        QString data = QString("hmset %1 row %2 devicecode %3 devicename %4 deviceinfo %5 devicetype %6 companycode %7 enabled %8 onlineflag %9 lastcommtime %10").arg(QString("%1%2").arg("sp_owner8-").arg(qry.value(0).toString().toUtf8().data())).arg(nrow).arg(qry.value(0).toString().toUtf8().data()).arg(qry.value(1).toString().toUtf8().data()).arg(qry.value(2).toString().toUtf8().data()).arg(qry.value(5).toString().toUtf8().data()).arg(qry.value(4).toString().toUtf8().data()).arg(QString("0x01")).arg(QString("0x00")).arg(redistime);
+        redis_save(data.toUtf8());
+
         nrow++;
     }
-    for(int i=nrow;i<10240;i++){
-        mkList->sensors[i].Enabled=0x00;
-        mkList->sensors[i].LastCommtime = 0;
-    }
+
+    redis_save((QString("hmset tablelen sp_owner8 %1").arg(nrow)).toUtf8());
+    redis_free();
+    redisconnected = -1;
+
+//    for(int i=nrow;i<10240;i++){
+//        mkList->sensors[i].Enabled=0x00;
+//        mkList->sensors[i].LastCommtime = 0;
+//    }
 
 }
 
@@ -168,3 +193,173 @@ void DatabaseThread::run()
     if(db.isOpen())
         db.close();
 }
+
+int DatabaseThread::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void DatabaseThread::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int DatabaseThread::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString DatabaseThread::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int DatabaseThread::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}

+ 8 - 0
DataProcessService/ytWarterMkProcess/databasethread.h

@@ -10,6 +10,7 @@
 #include <QStringList>
 #include <QList>
 #include "AlarmReport.h"
+#include "redis.h"
 
 
 class DatabaseThread : public QThread
@@ -23,6 +24,11 @@ public:
     void check_devicelist();
     bool chktable(QString tbname);
     void stop();
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
     void AlarmReport(QString addr, quint64 insertid, QString type, QString time);
     void SqlLog(QString log);
@@ -35,6 +41,8 @@ private:
     QStringList sqlList,mcsqlList;
     QList<AlarmRep> alarmRepList,mcalarmRepList;
     bool keep;
+    int redisconnected;
+    redisContext *c;
 };
 
 #endif // DATABASETHREAD_H

+ 7 - 7
DataProcessService/ytWarterMkProcess/main.cpp

@@ -1,6 +1,6 @@
 #include <QCoreApplication>
 #include "mkcore.h"
-#include "waterMk01.h"
+//#include "waterMk01.h"
 //#include "../ytUserInfoProcess/UserinfoShm.h"
 #include "../ytUserInfoProcess/userinfo.h"
 #include "../DataPrecessDog/dataprecess.h"
@@ -8,7 +8,7 @@
 UserInfoShm *userinfoShm;
 SysConfShm *sysConfShm;
 DataProcessShm *dataProcessShm;
-MksensorList *mkList;
+//MksensorList *mkList;
 
 bool shm_load(){
     int shmid;
@@ -28,11 +28,11 @@ bool shm_load(){
     if((shmid = shmget(key,sizeof(SysConfShm),IPC_CREAT|0666))==-1)
         return false;
     sysConfShm = static_cast<SysConfShm *>(shmat(shmid,nullptr,0));
-    if((key=ftok(SSSHM_PATH,static_cast<int>(SSSHM_PORT)))==-1)
-        return false;
-    if((shmid=shmget(key,sizeof(MksensorList),IPC_CREAT|0666))==-1)
-        return false;
-    mkList = static_cast<MksensorList *>(shmat(shmid,nullptr,0));
+//    if((key=ftok(SSSHM_PATH,static_cast<int>(SSSHM_PORT)))==-1)
+//        return false;
+//    if((shmid=shmget(key,sizeof(MksensorList),IPC_CREAT|0666))==-1)
+//        return false;
+//    mkList = static_cast<MksensorList *>(shmat(shmid,nullptr,0));
     return true;
 }
 

File diff suppressed because it is too large
+ 655 - 594
DataProcessService/ytWarterMkProcess/mkcore.cpp


+ 8 - 0
DataProcessService/ytWarterMkProcess/mkcore.h

@@ -20,6 +20,7 @@
 #include "../ytUserInfoProcess/wechartthreads.h"
 #include "../ytRTUProcess/ttsthreads.h"
 #include <qmqtt.h>
+#include "redis.h"
 
 class MKData {
 public:
@@ -46,6 +47,11 @@ public:
     void check_cover_framedata(QJsonObject jPayload, QString deviceId, long etime, QString ip, int serviceId);
     void checkDevice(QString deviceid);
     quint8 hexstr_to_byte(QString dat);
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
     
 public slots:
@@ -80,6 +86,8 @@ private:
     ttsThreads *repThread[16];
     QMQTT::Client *m_client;
     quint16 mqttinfoIdx,mqttalarmIdx;
+    int redisconnected;
+    redisContext *c;
 };
 
 #endif // MKCORE_H

+ 192 - 9
DataProcessService/ytWarterMkProcess/nbsensorthread.cpp

@@ -1,11 +1,13 @@
 #include "nbsensorthread.h"
-#include "waterMk01.h"
+//#include "waterMk01.h"
 
 #define comm_debug
 #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
 
+
 MkSensorThread::MkSensorThread(qintptr socketDescriptor, QObject *parent) : QThread(parent)
 {
+    c = NULL;
     DeviceID3 = "";
     DevIdx3 = -1;
     keepcomm = false;
@@ -82,20 +84,18 @@ void MkSensorThread::checkDevice(QString deviceid)
 {
     if((DevIdx3>=0)&&(DevIdx3<10240))
     {
-        if(QString::compare(deviceid,QString(mkList->sensors[DevIdx3].Device_Code))!=0)
+        if(redis_int((QString("hexists sp_owner8-%1 devicecode").arg(deviceid)).toUtf8())==0)
         {
             DevIdx3 = -1;
             DeviceID3 = "";
         }
     }else{
-        for(int i=0;i<10240;i++)
+        if(redis_int((QString("hexists sp_owner8-%1 devicecode").arg(deviceid)).toUtf8())==1)
         {
-            if(QString::compare(deviceid,QString(mkList->sensors[i].Device_Code))==0)
-            {
-                DevIdx3 = i;
-                DeviceID3 = QString(mkList->sensors[i].Device_Code);
-                break;
-            }
+            QString row = redis_qstring((QString("hget sp_owner8-%1 row").arg(deviceid)).toUtf8());
+            DevIdx3 = row.toInt();
+            printf("-----------  row.toInt() = %d, deviceid = %s\n",DevIdx3,deviceid.toUtf8().data());
+            DeviceID3 = deviceid;
         }
     }
 }
@@ -423,6 +423,15 @@ void ProduceCRC(unsigned char* srcArray,int b)
 
 void MkSensorThread::readData(QTcpSocket *so)
 {
+    if(redisconnected==-1){
+            redisconnected=redis_init();
+            if(redisconnected==-1){
+                printf("redis init failed\n");
+            }
+            redis_save(AUTH);
+            redis_save(DBID);
+    }
+
     QByteArray data = so->readAll();
     QDateTime t = QDateTime::currentDateTime();
     quint16 bytesDataArray[] = { 0x48, 0x0A, 0x02, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x75};
@@ -478,4 +487,178 @@ void MkSensorThread::readData(QTcpSocket *so)
     bytesSend.append(bytesDataArray[9]);
 //    check_serverdata(data, so->peerAddress().toString());
     so->write(bytesSend);
+
+    redis_free();
+    redisconnected = -1;
+}
+
+
+int MkSensorThread::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void MkSensorThread::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int MkSensorThread::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString MkSensorThread::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int MkSensorThread::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
 }

+ 8 - 0
DataProcessService/ytWarterMkProcess/nbsensorthread.h

@@ -14,6 +14,7 @@
 #include <QJsonArray>
 #include <QJsonValue>
 #include <QVariant>
+#include "redis.h"
 
 class MkSensorThread : public QThread
 {
@@ -30,6 +31,11 @@ public:
     void check_smokedata(QString data, QString ip);
     void check_framedata(QString data, QString etime, QString ip);
     quint8 hexstr_to_byte(QString dat);
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
     void getOnLine(int deviceidx, bool flag, QDateTime t);
     void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
@@ -45,6 +51,8 @@ private:
     QString DeviceID3;
     int DevIdx3;
     bool firsttime;
+    int redisconnected;
+    redisContext *c;
 };
 
 #endif // SENSORTHREAD3_H

+ 23 - 0
DataProcessService/ytWarterMkProcess/redis.h

@@ -0,0 +1,23 @@
+#ifndef REDIS_H
+#define REDIS_H
+
+#include <stdio.h>
+#include <QString>
+#include <string.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <string.h>
+#include <assert.h>
+#include <hiredis/hiredis.h>
+
+//#define REDIS_HOST        "127.0.0.1"
+//#define REDIS_PORT        6379
+#define REDIS_HOST        "47.98.201.73"
+#define REDIS_PORT        6379
+#define AUTH              "auth usky2021"
+#define DBID              "select 3"
+
+
+
+
+#endif // REDIS_H

+ 1 - 1
DataProcessService/ytWarterMkProcess/waterMk01.h

@@ -3,6 +3,6 @@
 
 #include "MkShm.h"
 
-extern MksensorList *mkList;
+//extern MksensorList *mkList;
 
 #endif // SMOKER01_H

+ 3 - 1
DataProcessService/ytWarterMkProcess/ytWarterMkProcess.pro

@@ -36,7 +36,9 @@ HEADERS += \
     nbwaterserver.h \
     nbsensorthread.h \
     AlarmReport.h \
-    ../ytRTUProcess/ttsthreads.h
+    ../ytRTUProcess/ttsthreads.h \
+    redis.h
 
 LIBS += -ljson-c
 LIBS += -lQt5Qmqtt
+LIBS += "/usr/local/lib/libhiredis.a"

+ 244 - 27
DataProcessService/ytWaterProcess/databasethread.cpp

@@ -1,5 +1,5 @@
 #include "databasethread.h"
-#include "water.h"
+//#include "water.h"
 #include "AlarmReport.h"
 
 #define HostName  "47.98.201.187"
@@ -10,12 +10,13 @@
 #define mhDatabaseName "ytapi"
 
 
-
 #define sql_debug
 
 DatabaseThread::DatabaseThread(QObject *parent) :
     QThread(parent)
 {
+    c = NULL;
+    redisconnected = -1;
     keep = false;
     hour = 255;
     sqlList.clear();
@@ -35,6 +36,178 @@ DatabaseThread::DatabaseThread(QObject *parent) :
     db1.setDatabaseName(QString(mhDatabaseName));
 }
 
+
+int DatabaseThread::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void DatabaseThread::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int DatabaseThread::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString DatabaseThread::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int DatabaseThread::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+
 void DatabaseThread::appendSql(QString sql)
 {
     sqlList.append(sql);
@@ -58,6 +231,15 @@ bool DatabaseThread::chktable(QString tbname)
 
 void DatabaseThread::check_devicelist()
 {
+    if(redisconnected==-1){
+        redisconnected = redis_init();
+        if(redisconnected==-1){
+            printf("redis init failed\n");
+        }
+        redis_save(AUTH);
+        redis_save(DBID);
+    }
+
     uint nowTime = QDateTime::currentDateTime().toTime_t();
     hour=QTime::currentTime().hour();
     QString sql = QString("select owner_code, owner_name, unitinfo, owner_xh, company, dwtype from sp_owner where dwtype in (2,5)");
@@ -78,22 +260,37 @@ void DatabaseThread::check_devicelist()
         sql = QString("select true_status from sp_devices_status where deviceid='%1'")
                 .arg(qry.value(0).toString());
         QSqlQuery qry2 = db.exec(sql);
-        waterSensorList->sensors[nrow].Enabled=0x01;
+        //waterSensorList->sensors[nrow].Enabled=0x01;
+
+        unsigned int t = 0;
         if(qry2.next()){
-            if(qry2.value(0).toUInt()==0)
-                waterSensorList->sensors[nrow].LastCommtime = nowTime;
+            if(qry2.value(0).toUInt()==0){
+                //waterSensorList->sensors[nrow].LastCommtime = nowTime;
+                t = nowTime;
+            }
         }
-        sprintf(waterSensorList->sensors[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data());
-        sprintf(waterSensorList->sensors[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data());
-        sprintf(waterSensorList->sensors[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data());
-        sprintf(waterSensorList->sensors[nrow].Device_Type,"%s",qry.value(5).toString().toUtf8().data());
-        sprintf(waterSensorList->sensors[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data());
+//        sprintf(waterSensorList->sensors[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data());
+//        sprintf(waterSensorList->sensors[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data());
+//        sprintf(waterSensorList->sensors[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data());
+//        sprintf(waterSensorList->sensors[nrow].Device_Type,"%s",qry.value(5).toString().toUtf8().data());
+//        sprintf(waterSensorList->sensors[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data());
+
+        QString data = QString("hmset %1 row %2 devicecode %3 devicename %4 deviceinfo %5 devicetype %6 companycode %7 enabled %8 lastcommtime %9 onlineflag %10")
+                .arg(QString("sp_owner2-%1").arg(qry.value(0).toString().toUtf8().data())).arg(nrow).arg(qry.value(0).toString().toUtf8().data())
+                .arg(qry.value(1).toString().toUtf8().data()).arg(qry.value(2).toString().toUtf8().data()).arg(qry.value(5).toString().toUtf8().data())
+                .arg(qry.value(4).toString().toUtf8().data()).arg("0x01").arg(t).arg("0x00");
+        redis_save(data.toUtf8());
+
         nrow++;
     }
-    for(int i=nrow;i<10240;i++){
-        waterSensorList->sensors[i].Enabled=0x00;
-        waterSensorList->sensors[i].LastCommtime = 0;
-    }
+
+    redis_save((QString("hset tablelen sp_owner2 %1").arg(nrow)).toUtf8());
+    redis_free();
+    redisconnected = -1;
+//    for(int i=nrow;i<10240;i++){
+//        waterSensorList->sensors[i].Enabled=0x00;
+//        waterSensorList->sensors[i].LastCommtime = 0;
+//    }
 }
 
 void DatabaseThread::stop()
@@ -118,6 +315,14 @@ void DatabaseThread::run()
     mqttqry.clear();
     db.close();
 
+    if(redisconnected==-1){
+        redisconnected = redis_init();
+        if(redisconnected==-1){
+            printf("redis init failed\n");
+        }
+        redis_save(AUTH);
+        redis_save(DBID);
+    }
 
     db1.open();
     QString mhsql = QString("select company_code,company_name,company_address,device_code,device_name, mh_device_code,street,aj_type ,grid,push_status,longitude, latitude from yt_t_mhwater;");
@@ -127,27 +332,39 @@ void DatabaseThread::run()
         if(nrow1>1023)
             break;
 
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Company_Code,"%s",mhqry.value(0).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Company_Name,"%s",mhqry.value(1).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Company_Address,"%s",mhqry.value(2).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Device_Code,"%s",mhqry.value(3).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Device_Name,"%s",mhqry.value(4).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Mh_Device_Code,"%s",mhqry.value(5).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Street,"%s",mhqry.value(6).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Aj_Type,"%s",mhqry.value(7).toString().toUtf8().data());
-        sprintf(mhwaterSensorList->mhsensors[nrow1].Grid,"%s",mhqry.value(8).toString().toUtf8().data());
-        mhwaterSensorList->mhsensors[nrow1].Push_Status = mhqry.value(9).toInt();
-        mhwaterSensorList->mhsensors[nrow1].longitude = mhqry.value(10).toDouble();
-        mhwaterSensorList->mhsensors[nrow1].latitude = mhqry.value(11).toDouble();
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Company_Code,"%s",mhqry.value(0).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Company_Name,"%s",mhqry.value(1).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Company_Address,"%s",mhqry.value(2).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Device_Code,"%s",mhqry.value(3).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Device_Name,"%s",mhqry.value(4).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Mh_Device_Code,"%s",mhqry.value(5).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Street,"%s",mhqry.value(6).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Aj_Type,"%s",mhqry.value(7).toString().toUtf8().data());
+//        sprintf(mhwaterSensorList->mhsensors[nrow1].Grid,"%s",mhqry.value(8).toString().toUtf8().data());
+//        mhwaterSensorList->mhsensors[nrow1].Push_Status = mhqry.value(9).toInt();
+//        mhwaterSensorList->mhsensors[nrow1].longitude = mhqry.value(10).toDouble();
+//        mhwaterSensorList->mhsensors[nrow1].latitude = mhqry.value(11).toDouble();
+
+        QString data = QString("hmset %1 row %2 companycode %3 companyname %4 companyaddress %5 devicecode %6 devicename %7 mhdevicecode %8 street %9 ajtype %10 grid %11 pushstatus %12 longitude %13 latitude %14")
+                .arg(QString("yt_t_mhwater%1").arg(mhqry.value(3).toString().toUtf8().data())).arg(nrow1).arg(mhqry.value(0).toString().toUtf8().data())
+                .arg(mhqry.value(1).toString().toUtf8().data()).arg(mhqry.value(2).toString().toUtf8().data()).arg(mhqry.value(3).toString().toUtf8().data())
+                .arg(mhqry.value(4).toString().toUtf8().data()).arg(mhqry.value(5).toString().toUtf8().data()).arg(mhqry.value(6).toString().toUtf8().data())
+                .arg(mhqry.value(7).toString().toUtf8().data()).arg(mhqry.value(8).toString().toUtf8().data()).arg(mhqry.value(9).toString().toUtf8().data())
+                .arg(mhqry.value(10).toString().toUtf8().data()).arg(mhqry.value(11).toString().toUtf8().data());
+        redis_save(data.toUtf8());
+
         nrow1++;
     }
     db1.close();
 
-
+    redis_save((QString("hset tablelen yt_t_mhwater %1").arg(nrow1)).toUtf8());
+    redis_free();
+    redisconnected = -1;
 
     keep = true;
     printf("database thread start\n");
     while(keep){
+
         if(!db.isOpen()){
             db.open();
            printf("database thread open\n");

+ 8 - 0
DataProcessService/ytWaterProcess/databasethread.h

@@ -10,6 +10,7 @@
 #include <QStringList>
 #include <QList>
 #include "AlarmReport.h"
+#include "redis.h"
 
 class DatabaseThread : public QThread
 {
@@ -22,6 +23,11 @@ public:
     void check_devicelist();
     bool chktable(QString tbname);
     void stop();
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
     void AlarmReport(QString addr, quint64 insertid, QString type, QString time);
     void SqlLog(QString log);
@@ -35,6 +41,8 @@ private:
     QStringList sqlList;
     QList<AlarmRep> alarmRepList;
     bool keep;
+    int redisconnected;
+    redisContext *c;
 };
 
 #endif // DATABASETHREAD_H

+ 14 - 14
DataProcessService/ytWaterProcess/main.cpp

@@ -1,5 +1,5 @@
 #include <QCoreApplication>
-#include "water.h"
+//#include "water.h"
 #include "../ytUserInfoProcess/userinfo.h"
 #include "../DataPrecessDog/dataprecess.h"
 #include "watercore.h"
@@ -7,8 +7,8 @@
 UserInfoShm *userinfoShm;
 SysConfShm *sysConfShm;
 DataProcessShm *dataProcessShm;
-WaterSensorList *waterSensorList;
-MhWaterSensorList *mhwaterSensorList;
+//WaterSensorList *waterSensorList;
+//MhWaterSensorList *mhwaterSensorList;
 
 bool load_shm()
 {
@@ -29,18 +29,18 @@ bool load_shm()
     if((shmid = shmget(key,sizeof(SysConfShm),IPC_CREAT|0666))==-1)
         return false;
     sysConfShm = static_cast<SysConfShm *>(shmat(shmid,nullptr,0));
-    if((key = ftok(WATERSHM_PATH,static_cast<int>(WATERSHM_PORT)))==-1)
-        return false;
-    if((shmid = shmget(key,sizeof (WaterSensorList),IPC_CREAT|0666))==-1)
-        return false;
-    waterSensorList = static_cast<WaterSensorList *>(shmat(shmid,nullptr,0));
-    if((key = ftok(WATERSHM_PATH,static_cast<int>(MHWATERSHM_PORT)))==-1)
-        return false;
-    if((shmid = shmget(key,sizeof (MhWaterSensorList),IPC_CREAT|0666))==-1)
-        return false;
+//    if((key = ftok(WATERSHM_PATH,static_cast<int>(WATERSHM_PORT)))==-1)
+//        return false;
+//    if((shmid = shmget(key,sizeof (WaterSensorList),IPC_CREAT|0666))==-1)
+//        return false;
+//    waterSensorList = static_cast<WaterSensorList *>(shmat(shmid,nullptr,0));
+//    if((key = ftok(WATERSHM_PATH,static_cast<int>(MHWATERSHM_PORT)))==-1)
+//        return false;
+//    if((shmid = shmget(key,sizeof (MhWaterSensorList),IPC_CREAT|0666))==-1)
+//        return false;
 
-    printf("===============shmid = %d\n",shmid);
-    mhwaterSensorList = static_cast<MhWaterSensorList *>(shmat(shmid,nullptr,0));
+//    printf("===============shmid = %d\n",shmid);
+//    mhwaterSensorList = static_cast<MhWaterSensorList *>(shmat(shmid,nullptr,0));
     return true;
 }
 

+ 24 - 0
DataProcessService/ytWaterProcess/redis.h

@@ -0,0 +1,24 @@
+#ifndef REDIS_H
+#define REDIS_H
+
+#include <stdio.h>
+#include <QString>
+#include <string.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <string.h>
+#include <assert.h>
+#include <hiredis/hiredis.h>
+
+//#define REDIS_HOST        "127.0.0.1"
+//#define REDIS_PORT        6379
+#define REDIS_HOST        "47.98.201.73"
+#define REDIS_PORT        6379
+#define AUTH              "auth usky2021"
+#define DBID              "select 3"
+
+
+
+
+
+#endif // REDIS_H

+ 203 - 19
DataProcessService/ytWaterProcess/sensorthread3.cpp

@@ -1,10 +1,12 @@
 #include "sensorthread3.h"
-#include "water.h"
+//#include "water.h"
 
 #define comm3_debug
 
 SensorThread3::SensorThread3(qintptr socketDescriptor, QObject *parent) : QThread(parent)
 {
+    c = NULL;
+    redisconnected = -1;
     DeviceID3 = "";
     DevIdx3 = -1;
     keepcomm = false;
@@ -81,26 +83,32 @@ void SensorThread3::checkDevice(QString deviceid)
 {
     if((DevIdx3>=0)&&(DevIdx3<10240))
     {
-        if(QString::compare(deviceid,QString(waterSensorList->sensors[DevIdx3].Device_Code))!=0)
+        if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(deviceid)).toUtf8())==0)
         {
             DevIdx3 = -1;
             DeviceID3 = "";
         }
     }else{
-        for(int i=0;i<10240;i++)
+        if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(deviceid)).toUtf8())==1)
         {
-            if(QString::compare(deviceid,QString(waterSensorList->sensors[i].Device_Code))==0)
-            {
-                DevIdx3 = i;
-                DeviceID3 = QString(waterSensorList->sensors[i].Device_Code);
-                break;
-            }
+            QString row = QString("hget sp_owner2-%1 row ").arg(deviceid);
+            DevIdx3 = row.toInt();
+            DeviceID3 = deviceid;
         }
     }
 }
 
 void SensorThread3::readData(QTcpSocket *so)
 {
+    if(redisconnected==-1){
+        redisconnected=redis_init();
+        if(redisconnected==-1){
+            printf("redis init failed\n");
+        }
+        redis_save(AUTH);
+        redis_save(DBID);
+    }
+
     QByteArray data = so->readAll();
     QDateTime t = QDateTime::currentDateTime();
     if(((data.at(0)&0xff)==0xa0)
@@ -110,10 +118,12 @@ void SensorThread3::readData(QTcpSocket *so)
             DeviceCode1.append( QString("%1").arg(data[i]&0xff,2,16));
         }
         QString DeviceCode = DeviceCode1.replace("\r","").replace("\n","").replace(" ","");
+        printf("thread3  111  devicecode %s, DevIdx %d, DeviceID %s\n",DeviceCode.toUtf8().data(),DevIdx3,DeviceID3.toUtf8().data());
         checkDevice(DeviceCode);
+        printf("thread3  222  devicecode %s, DevIdx %d, DeviceID %s\n",DeviceCode.toUtf8().data(),DevIdx3,DeviceID3.toUtf8().data());
 #ifdef comm3_debug
         QString DStr = QString("[ %1 %2 %3 %4<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx3].Device_Code):"")
+                .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(DeviceID3):"")
                 .arg("5009")
                 .arg("ceshi");
         for(int i=0;i<data.length();i++)
@@ -126,7 +136,7 @@ void SensorThread3::readData(QTcpSocket *so)
                 case 0xad:
                 {
                     err_count = 0;
-                    emit getOnLine(DevIdx3,true,t);
+                    emit getOnLine(DevIdx3,DeviceID3,true,t);
                     QByteArray Ret = QByteArray(8,0x00);
                     Ret[0] = static_cast<char>(0x2b);
                     Ret[1] = static_cast<char>(0x54);
@@ -139,7 +149,7 @@ void SensorThread3::readData(QTcpSocket *so)
                     so->write(Ret);
 #ifdef comm3_debug
                     QString RStr = QString("[ %1 %2 %3>>> ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                            .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx3].Device_Code):"")
+                            .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(DeviceID3):"")
                             .arg("5009-ad");
                     for(int i=0;i<Ret.length();i++)
                         RStr.append(QString(" %1").arg(Ret.at(i)&0xff,2,16,QChar('0')));
@@ -151,11 +161,11 @@ void SensorThread3::readData(QTcpSocket *so)
                 {
                     err_count = 0;
                     QString DStr2 = QString("[ %1 %2 %3 %4<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                            .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx3].Device_Code):"")
+                            .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(DeviceID3):"")
                             .arg("5009")
                             .arg("ceshi12");
                         emit getCommData(DStr2);
-                    emit getOnLine(DevIdx3,true,t);
+                    emit getOnLine(DevIdx3,DeviceID3,true,t);
                         int Battery = data.at(16)&0xff;
                         int Signal = (data.at(17)&0xff)-0x20;
                         Battery = (Battery>99)?99:Battery;
@@ -180,19 +190,19 @@ void SensorThread3::readData(QTcpSocket *so)
                             case 0x00:
                                 if((flag&0x01)!=0x01){
                                     flag = 0x01;
-                                    emit getValue(DevIdx3,"WP0",Battery,Signal,pressure_value,"15122423833",t);
+                                    emit getValue(DevIdx3,DeviceID3,"WP0",Battery,Signal,pressure_value,"15122423833",t);
                                 }
                                 break;
                             case 0xa1:
                                 if((flag&0x02)!=0x02){
                                     flag = 0x02;
-                                    emit getAlarm(DevIdx3,"WP1",Battery,Signal,pressure_value,"15122423833",QString::fromUtf8("低压"),t);
+                                    emit getAlarm(DevIdx3,DeviceID3,"WP1",Battery,Signal,pressure_value,"15122423833",QString::fromUtf8("低压"),t);
                                 }
                                 break;
                             case 0xa2:
                                 if((flag&0x04)!=0x04){
                                     flag = 0x04;
-                                    emit getAlarm(DevIdx3,"WP2",Battery,Signal,pressure_value,"15122423833",QString::fromUtf8("高压"),t);
+                                    emit getAlarm(DevIdx3,DeviceID3,"WP2",Battery,Signal,pressure_value,"15122423833",QString::fromUtf8("高压"),t);
                                 }
                                 break;
                             default:
@@ -210,7 +220,7 @@ void SensorThread3::readData(QTcpSocket *so)
                     so->write(Ret);
 #ifdef comm3_debug
                     QString RStr = QString("[ %1 %2 %3>>> ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                            .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx3].Device_Code):"")
+                            .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(DeviceID3):"")
                             .arg("5009-ae");
                     for(int i=0;i<Ret.length();i++)
                         RStr.append(QString(" %1").arg(Ret.at(i)&0xff,2,16,QChar('0')));
@@ -227,10 +237,184 @@ void SensorThread3::readData(QTcpSocket *so)
             err_count = 0;
 #ifdef comm3_debug
         QString DStr = QString("[ %1 %2<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx3].Device_Code):"");
+                .arg(((DevIdx3>=0)&&(DevIdx3<10240))?QString("%1 ").arg(DeviceID3):"");
         for(int i=0;i<data.length();i++)
             DStr.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
         emit getCommData(DStr);
 #endif
     }
+
+    redis_free();
+    redisconnected = -1;
+}
+
+
+int SensorThread3::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void SensorThread3::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int SensorThread3::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString SensorThread3::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int SensorThread3::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
 }

+ 12 - 3
DataProcessService/ytWaterProcess/sensorthread3.h

@@ -6,6 +6,7 @@
 #include <QTcpSocket>
 #include <QString>
 #include <QDateTime>
+#include "redis.h"
 
 class SensorThread3 : public QThread
 {
@@ -18,10 +19,16 @@ public:
     void readData(QTcpSocket *so);
     QByteArray mkRtn();
     void checkDevice(QString deviceid);
+
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
-    void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 
 public slots:
@@ -33,6 +40,8 @@ private:
     QString DeviceID3;
     int DevIdx3;
     bool firsttime;
+    int redisconnected;
+    redisContext *c ;
 };
 
 #endif // SENSORTHREAD3_H

+ 230 - 46
DataProcessService/ytWaterProcess/sersorthread.cpp

@@ -1,11 +1,13 @@
 #include "sersorthread.h"
-#include "water.h"
+//#include "water.h"
 
 #define comm_debug
 
 SersorThread::SersorThread(qintptr socketDescriptor, QObject *parent)
     : QThread (parent)
 {
+    c = NULL;
+    redisconnected = -1;
     DeviceID = "";
     DevIdx = -1;
     keepcomm = false;
@@ -82,26 +84,32 @@ void SersorThread::checkDevice(QString deviceid)
 {
     if((DevIdx>=0)&&(DevIdx<10240))
     {
-        if(QString::compare(deviceid,QString(waterSensorList->sensors[DevIdx].Device_Code))!=0)
+        if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(deviceid)).toUtf8())==0)
         {
             DevIdx = -1;
             DeviceID = "";
         }
     }else{
-        for(int i=0;i<10240;i++)
+        if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(deviceid)).toUtf8())==1)
         {
-            if(QString::compare(deviceid,QString(waterSensorList->sensors[i].Device_Code))==0)
-            {
-                DevIdx = i;
-                DeviceID = QString(waterSensorList->sensors[i].Device_Code);
-                break;
-            }
+            QString row = redis_qstring((QString("hget sp_owner2-%1 row").arg(deviceid)).toUtf8());
+            DevIdx = row.toInt();
+            DeviceID = deviceid;
         }
     }
 }
 
 void SersorThread::readData(QTcpSocket *so)
 {
+    if(redisconnected==-1){
+        redisconnected=redis_init();
+        if(redisconnected==-1){
+            printf("redis init failed\n");
+        }
+        redis_save(AUTH);
+        redis_save(DBID);
+    }
+
     QByteArray data = so->readAll();
     QDateTime t = QDateTime::currentDateTime();
     if((data.length()>=40)&&((data.at(0)&0xff)==0x7e)
@@ -111,10 +119,12 @@ void SersorThread::readData(QTcpSocket *so)
         QString DeviceCode = QString(data.mid(4,15));
         QString Name = QString(data.mid(20,15));
         QString Sim = QString(data.mid(20,11));
+        printf("thread  111  devicecode %s, DevIdx %d, DeviceID %s\n",DeviceCode.toUtf8().data(),DevIdx,DeviceID.toUtf8().data());
         checkDevice(DeviceCode);
+        printf("thread  222  devicecode %s, DevIdx %d, DeviceID %s\n",DeviceCode.toUtf8().data(),DevIdx,DeviceID.toUtf8().data());
 #ifdef comm_debug
         QString DStr = QString("[ %1 %2<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx].Device_Code):"");
+                .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(DeviceID):"");
         for(int i=0;i<data.length();i++)
             DStr.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
         emit getCommData(DStr);
@@ -126,12 +136,12 @@ void SersorThread::readData(QTcpSocket *so)
                 case 0x01:
                 {
                     err_count = 0;
-                    emit getOnLine(DevIdx,true,t);
+                    emit getOnLine(DevIdx,DeviceID,true,t);
                     QByteArray Ret = mkRtn();
                     so->write(Ret);
 #ifdef comm_debug
                     QString RStr = QString("[ %1 %2>>> ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                            .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx].Device_Code):"");
+                            .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(DeviceID):"");
                     for(int i=0;i<Ret.length();i++)
                         RStr.append(QString(" %1").arg(Ret.at(i)&0xff,2,16,QChar('0')));
                     emit getCommData(RStr);
@@ -141,9 +151,9 @@ void SersorThread::readData(QTcpSocket *so)
                 case 0x09:
                 {
                     err_count = 0;
-                    QString DStrceshi = QString("[ %1 ceshishijian========== %2]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                    QString DStrceshi = QString("[ %1 ceshishijian========== %2]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                     emit getCommData(DStrceshi);
-                    emit getOnLine(DevIdx,true,t);
+                    emit getOnLine(DevIdx,DeviceID,true,t);
                     QByteArray Dat = data.mid(40,MsgLen);
                     if(MsgLen>10){
                         int year = 2000 + ((Dat.at(0)&0xf0)>>4)*10 + (Dat.at(0)&0x0f);
@@ -160,7 +170,7 @@ void SersorThread::readData(QTcpSocket *so)
                         Battery = (Battery>99)?99:Battery;
                         Signal = (Signal<1)?1:((Signal>5)?5:Signal);
                         quint8 flag = 0x10;
-                        QString DStrceshipTime = QString("[ %1 pTime========== %2]").arg(bTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                        QString DStrceshipTime = QString("[ %1 pTime========== %2]").arg(bTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                         emit getCommData(DStrceshipTime);
                         for(int i=0;i<(DataLen/4);i++){
                             QDateTime pTime = bTime.addSecs(step*i);
@@ -175,33 +185,33 @@ void SersorThread::readData(QTcpSocket *so)
                                 case 0x00:
                                     if((flag&0x01)!=0x01){
                                         flag = 0x01;
-                                        QString DStrceshipTime = QString("[ %1 WP0========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP0========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getValue(DevIdx,"WP0",Battery,Signal,v,Sim,pTime);
+                                        emit getValue(DevIdx,DeviceID,"WP0",Battery,Signal,v,Sim,pTime);
                                     }
                                     break;
                                 case 0x01:
                                     if((flag&0x02)!=0x02){
                                         flag = 0x02;
-                                        QString DStrceshipTime = QString("[ %1 WP1========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP1========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP1",Battery,Signal,v,Sim,QString::fromUtf8("低压"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP1",Battery,Signal,v,Sim,QString::fromUtf8("低压"),pTime);
                                     }
                                     break;
                                 case 0x02:
                                     if((flag&0x04)!=0x04){
                                         flag = 0x04;
-                                        QString DStrceshipTime = QString("[ %1 WP2========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP2========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP2",Battery,Signal,v,Sim,QString::fromUtf8("高压"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP2",Battery,Signal,v,Sim,QString::fromUtf8("高压"),pTime);
                                     }
                                     break;
                                 case 0x03:
                                     if((flag&0x08)!=0x08){
                                         flag = 0x08;
-                                        QString DStrceshipTime = QString("[ %1 WP3========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP3========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
                                     }
                                     break;
                                 default:
@@ -214,33 +224,33 @@ void SersorThread::readData(QTcpSocket *so)
                                 case 0x00:
                                     if((flag&0x01)!=0x01){
                                         flag = 0x01;
-                                        QString DStrceshipTime = QString("[ %1 WP0========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP0========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getValue(DevIdx,"WP0",Battery,Signal,v,Sim,pTime);
+                                        emit getValue(DevIdx,DeviceID,"WP0",Battery,Signal,v,Sim,pTime);
                                     }
                                     break;
                                 case 0x01:
                                     if((flag&0x02)!=0x02){
                                         flag = 0x02;
-                                        QString DStrceshipTime = QString("[ %1 WP1========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP1========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP1",Battery,Signal,v,Sim,QString::fromUtf8("低压"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP1",Battery,Signal,v,Sim,QString::fromUtf8("低压"),pTime);
                                     }
                                     break;
                                 case 0x02:
                                     if((flag&0x04)!=0x04){
                                         flag = 0x04;
-                                        QString DStrceshipTime = QString("[ %1 WP2========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP2========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP2",Battery,Signal,v,Sim,QString::fromUtf8("高压"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP2",Battery,Signal,v,Sim,QString::fromUtf8("高压"),pTime);
                                     }
                                     break;
                                 case 0x03:
                                     if((flag&0x08)!=0x08){
                                         flag = 0x08;
-                                        QString DStrceshipTime = QString("[ %1 WP3========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP3========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
                                     }
                                     break;
                                 default:
@@ -253,33 +263,33 @@ void SersorThread::readData(QTcpSocket *so)
                                 case 0x00:
                                     if((flag&0x01)!=0x01){
                                         flag = 0x01;
-                                        QString DStrceshipTime = QString("[ %1 WP0========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP0========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getValue(DevIdx,"WP0",Battery,Signal,v,Sim,pTime);
+                                        emit getValue(DevIdx,DeviceID,"WP0",Battery,Signal,v,Sim,pTime);
                                     }
                                     break;
                                 case 0x01:
                                     if((flag&0x02)!=0x02){
                                         flag = 0x02;
-                                        QString DStrceshipTime = QString("[ %1 WP1========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP1========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP1",Battery,Signal,v,Sim,QString::fromUtf8("低压"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP1",Battery,Signal,v,Sim,QString::fromUtf8("低压"),pTime);
                                     }
                                     break;
                                 case 0x02:
                                     if((flag&0x04)!=0x04){
                                         flag = 0x04;
-                                        QString DStrceshipTime = QString("[ %1 WP2========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP2========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP2",Battery,Signal,v,Sim,QString::fromUtf8("高压"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP2",Battery,Signal,v,Sim,QString::fromUtf8("高压"),pTime);
                                     }
                                     break;
                                 case 0x03:
                                     if((flag&0x08)!=0x08){
                                         flag = 0x08;
-                                        QString DStrceshipTime = QString("[ %1 WP3========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[DevIdx].Device_Code);
+                                        QString DStrceshipTime = QString("[ %1 WP3========== %2]").arg(pTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(DeviceID);
                                         emit getCommData(DStrceshipTime);
-                                        emit getAlarm(DevIdx,"WP3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"WP3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
                                     }
                                     break;
                                 default:
@@ -293,31 +303,31 @@ void SersorThread::readData(QTcpSocket *so)
                                 case 0x00:
                                     if((flag&0x01)!=0x01){
                                         flag = 0x01;
-                                        emit getValue(DevIdx,"LL0",Battery,Signal,v,Sim,pTime);
+                                        emit getValue(DevIdx,DeviceID,"LL0",Battery,Signal,v,Sim,pTime);
                                     }
                                     break;
                                 case 0x01:
                                     if((flag&0x02)!=0x02){
                                         flag = 0x02;
-                                        emit getAlarm(DevIdx,"LL1",Battery,Signal,v,Sim,QString::fromUtf8("低水位"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"LL1",Battery,Signal,v,Sim,QString::fromUtf8("低水位"),pTime);
                                     }
                                     break;
                                 case 0x02:
                                     if((flag&0x04)!=0x04){
                                         flag = 0x04;
-                                        emit getAlarm(DevIdx,"LL2",Battery,Signal,v,Sim,QString::fromUtf8("高水位"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"LL2",Battery,Signal,v,Sim,QString::fromUtf8("高水位"),pTime);
                                     }
                                     break;
                                 case 0x03:
                                     if((flag&0x08)!=0x08){
                                         flag = 0x08;
-                                        emit getAlarm(DevIdx,"LL3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"LL3",Battery,Signal,v,Sim,QString::fromUtf8("故障"),pTime);
                                     }
                                     break;
                                 case 0x04:
                                     if((flag&0x09)!=0x09){
                                         flag = 0x09;
-                                        emit getAlarm(DevIdx,"LL5",Battery,Signal,v,Sim,QString::fromUtf8("波动告警"),pTime);
+                                        emit getAlarm(DevIdx,DeviceID,"LL5",Battery,Signal,v,Sim,QString::fromUtf8("波动告警"),pTime);
                                     }
                                     break;
                                 default:
@@ -335,7 +345,7 @@ void SersorThread::readData(QTcpSocket *so)
                     so->write(Ret);
 #ifdef comm_debug
                     QString RStr = QString("[ %1 %2>>> ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                            .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx].Device_Code):"");
+                            .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(DeviceID):"");
                     for(int i=0;i<Ret.length();i++)
                         RStr.append(QString(" %1").arg(Ret.at(i)&0xff,2,16,QChar('0')));
                     emit getCommData(RStr);
@@ -362,10 +372,184 @@ void SersorThread::readData(QTcpSocket *so)
             err_count = 0;
 #ifdef comm_debug
         QString DStr = QString("[ %1 %2<<< ]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
-                .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(waterSensorList->sensors[DevIdx].Device_Code):"");
+                .arg(((DevIdx>=0)&&(DevIdx<10240))?QString("%1 ").arg(DeviceID):"");
         for(int i=0;i<data.length();i++)
             DStr.append(QString(" %1").arg(data.at(i)&0xff,2,16,QChar('0')));
         emit getCommData(DStr);
 #endif
     }
+
+    redis_free();
+    redisconnected = -1;
+}
+
+
+int SersorThread::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void SersorThread::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int SersorThread::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString SersorThread::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int SersorThread::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
 }

+ 11 - 3
DataProcessService/ytWaterProcess/sersorthread.h

@@ -6,6 +6,7 @@
 #include <QTcpSocket>
 #include <QString>
 #include <QDateTime>
+#include "redis.h"
 
 class SersorThread : public QThread
 {
@@ -18,10 +19,15 @@ public:
     void readData(QTcpSocket *so);
     QByteArray mkRtn();
     void checkDevice(QString deviceid);
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
-    void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
 
@@ -32,6 +38,8 @@ private:
     QString DeviceID;
     int DevIdx;
     bool firsttime;
+    int redisconnected;
+    redisContext *c ;
 };
 
 #endif // SERSORTHREAD_H

+ 2 - 2
DataProcessService/ytWaterProcess/water.h

@@ -3,7 +3,7 @@
 
 #include "watershm.h"
 
-extern WaterSensorList *waterSensorList;
-extern MhWaterSensorList *mhwaterSensorList;
+//extern WaterSensorList *waterSensorList;
+//extern MhWaterSensorList *mhwaterSensorList;
 
 #endif // WATER_H

+ 1 - 1
DataProcessService/ytWaterProcess/waterServer4.cpp

@@ -3,7 +3,7 @@
 
 #include "../ytUserInfoProcess/userinfo.h"
 #include "../DataPrecessDog/dataprecess.h"
-#include "water.h"
+//#include "water.h"
 
 #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
 

+ 251 - 79
DataProcessService/ytWaterProcess/watercore.cpp

@@ -1,5 +1,5 @@
 #include "watercore.h"
-#include "water.h"
+//#include "water.h"
 #include "../ytUserInfoProcess/userinfo.h"
 #include "../DataPrecessDog/dataprecess.h"
 
@@ -7,6 +7,18 @@
 
 WaterCore::WaterCore(QObject *parent) : QObject(parent)
 {
+    c = NULL;
+
+    redisconnected=-1;
+    if(redisconnected==-1){
+        redisconnected=redis_init();
+        if(redisconnected==-1){
+            printf("redis init failed\n");
+        }
+        redis_save(AUTH);
+        redis_save(DBID);
+    }
+
     mqttinfoIdx = 1;
     mqttalarmIdx = 1;
     mqttmhinfoIdx = 1;
@@ -74,6 +86,7 @@ WaterCore::~WaterCore()
 {
     logThread->stop();
     dbThread->stop();
+    redis_free();
 }
 
 void WaterCore::start()
@@ -118,37 +131,41 @@ void WaterCore::SqlLog(QString log)
     logThread->appendData(log);
 }
 
-void WaterCore::getOnLine(int deviceidx,bool flag, QDateTime t)
+void WaterCore::getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t)
 {
+
     t = QDateTime::currentDateTime();
-    if(waterSensorList->sensors[deviceidx].Enabled!=0x01)
+    if(QString("0x01").compare(redis_qstring((QString("hget sp_owner2-%1 enabled").arg(deviceid)).toUtf8()))!=0){
+        printf("redis_qstring((QString(hget sp_owner2-%1 enabled).arg(deviceid)).toUtf8()): %s\n",redis_qstring((QString("hget sp_owner2-%1 enabled").arg(deviceid)).toUtf8()).toUtf8().data());
         return;
+    }
     if(flag)
     {
-        waterSensorList->sensors[deviceidx].LastCommtime = t.toTime_t();
-        if(waterSensorList->sensors[deviceidx].Online_Flag!=0x01)
+        redis_save((QString("hset sp_owner2-%1 lastcommtime %2").arg(deviceid).arg(t.toTime_t())).toUtf8());
+        if(QString("0x01").compare(redis_qstring((QString("hget sp_owner2-%1 onlineflag").arg(deviceid)).toUtf8()))!=0)
         {
-            waterSensorList->sensors[deviceidx].Online_Flag = 0x01;
+            redis_save((QString("hset sp_owner2-%1 onlineflag %2").arg(deviceid).arg("0x01")).toUtf8());
         }
         dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where deviceid='%2'")
-                            .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
+                            .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
     }
+
 }
 
-void WaterCore::getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
+void WaterCore::getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
 {
     QString infoTopic = "";
     QString infoData = "";
     QString mhinfoTopic = QString("mh/water/info");
     QString mhinfoData = "";
-    infoTopic.append(QString("/usky/ytDP0002/%1/%2/info").arg(QString(waterSensorList->sensors[deviceidx].Company_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
+    infoTopic.append(QString("/usky/ytDP0002/%1/%2/info").arg(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8())).arg(deviceid));
     QString tmpStr = d1.left(1);
     if(tmpStr.compare("W")==0){
-        infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"201\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"202\",\"value\":\"%4\"},{\"property\":\"水压\",\"serial\":\"203\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"204\",\"value\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"INFO\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(d2).arg(d3).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
+        infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"201\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"202\",\"value\":\"%4\"},{\"property\":\"水压\",\"serial\":\"203\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"204\",\"value\":\"%6\"}],\"deviceName\":\"%7\",\"timeStamp\":\"%8\",\"deviceModel\":\"\",\"deviceType\":\"%9\",\"devId\":\"%10\"}],\"type\":\"INFO\",\"timeStamp\":\"%11\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(d2).arg(d3).arg(d4).arg(d1).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
 
     }else if(tmpStr.compare("L")==0){
 
-        infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"501\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"502\",\"value\":\"%4\"},{\"property\":\"水位\",\"serial\":\"503\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"504\",\"value\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"INFO\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(d2).arg(d3).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
+        infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"501\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"502\",\"value\":\"%4\"},{\"property\":\"水位\",\"serial\":\"503\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"504\",\"value\":\"%6\"}],\"deviceName\":\"%7\",\"timeStamp\":\"%8\",\"deviceModel\":\"\",\"deviceType\":\"%9\",\"devId\":\"%10\"}],\"type\":\"INFO\",\"timeStamp\":\"%11\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(d2).arg(d3).arg(d4).arg(d1).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
     }
 
     if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) || (m_client->connectionState()==QMQTT::STATE_INIT))
@@ -161,44 +178,38 @@ void WaterCore::getValue(int deviceidx, QString d1, int d2, int d3, double d4, Q
         if(mqttinfoIdx>9999)
             mqttinfoIdx = 1;
 
-        for(int i=0;i<1024;i++){
-            QString mhDevCode = QString(mhwaterSensorList->mhsensors[i].Device_Code);
-            if((mhDevCode.compare(QString(waterSensorList->sensors[deviceidx].Device_Code)) == 0)){
+        if(redis_int((QString("hexists yt_t_mhwater%1 devicecode").arg(deviceid)).toUtf8())==1){
 
-                mhinfoData.append(QString("{\"deviceCode\":\"%1\",\"signalLevel\":%2,\"volt\":%3,\"lon\":%4,\"lat\":%5,\"createTime\":%6,\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(QString(mhwaterSensorList->mhsensors[i].Mh_Device_Code)).arg(d3).arg(d2).arg(mhwaterSensorList->mhsensors[i].longitude,0,'r',6).arg(mhwaterSensorList->mhsensors[i].latitude,0,'r',6).arg(QDateTime::currentDateTime().toTime_t()));
+            mhinfoData.append(QString("{\"deviceCode\":\"%1\",\"signalLevel\":%2,\"volt\":%3,\"lon\":%4,\"lat\":%5,\"createTime\":%6,\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(redis_qstring((QString("hget yt_t_mhwater%1 mhdevicecode").arg(deviceid)).toUtf8())).arg(d3).arg(d2).arg(redis_qstring((QString("hget yt_t_mhwater%1 longitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(redis_qstring((QString("hget yt_t_mhwater%1 latitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(QDateTime::currentDateTime().toTime_t()));
 
-                m_client->publish(QMQTT::Message(mqttmhinfoIdx++,mhinfoTopic,mhinfoData.toUtf8()));
-                if(mqttmhinfoIdx>9999)
-                    mqttmhinfoIdx = 1;
-
-                break;
-            }
+            m_client->publish(QMQTT::Message(mqttmhinfoIdx++,mhinfoTopic,mhinfoData.toUtf8()));
+            if(mqttmhinfoIdx>9999)
+                mqttmhinfoIdx = 1;
 
         }
 
     }
 
-    QString log = QString("[ %1 getValue========== %2]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[deviceidx].Device_Code);
+    QString log = QString("[ %1 getValue========== %2]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(deviceid);
     logThread->appendData(log);
     dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, data1, data2, data3, data4, data5) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8')")
-                        .arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=0, data_time='%1', content='正常' where device_id='%2' and point_code=1").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
+                        .arg(deviceid).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=0, data_time='%1', content='正常' where device_id='%2' and point_code=1").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
 //    QString rep2 = QString("{\"mqttId\":\"a71c40bb-5b02-4741-881b-24449f699db5\",\"action\":\"transpush\",\"data\":{\"provider\":\"Usky\",\"deviceType\":\"XiaoFangShuiYa\",\"dataType\":\"deviceInfo\",\"softVersion\":\"1.00.00\",\"hardVersion\":\"0.1\",\"sensorList\":[{\"sensorId\":%1,\"status\":%2,\"pointValue\":%3,\"unit\":\"%4\",\"lowThreshold\":%5,\"highThreshold\":%6,\"sendTime\":%7,\"desc\":\"%8\"}]}}")
 //            .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
-    if(QString::compare(QString(waterSensorList->sensors[deviceidx].Company_Code),"10232")==0 || QString::compare(QString(waterSensorList->sensors[deviceidx].Company_Code),"10318")==0){
-        QString data = QString("device_code=%1&device_value=%2&user_from=longHuWater").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(d4)
+    if(QString::compare(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8()),"10232")==0 || QString::compare(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8()),"10318")==0){
+        QString data = QString("device_code=%1&device_value=%2&user_from=longHuWater").arg(deviceid).arg(d4)
                 .replace(",","%2C").replace(":","%3A").replace(" ","+");
         wxThreads[2][wxcur&0x0f]->appendData(data);//龙湖定时数据推送
         wxcur++;
         wxcur &= 0x0f;
     }
-
 }
 
-void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
+void WaterCore::getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
 {
     QString alarmTopic = "";
     QString alarmData = "";
@@ -206,7 +217,7 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
     QString mhalarmData = "";
     QString point = "";
     QString tmpStr1 = d1.left(1);
-    alarmTopic.append(QString("/usky/ytDP0002/%1/%2/alarm").arg(QString(waterSensorList->sensors[deviceidx].Company_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
+    alarmTopic.append(QString("/usky/ytDP0002/%1/%2/alarm").arg(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8())).arg(deviceid));
     if(tmpStr1.compare("W")==0){
         if(note.compare("低压")==0){
             point.append("221");
@@ -216,7 +227,7 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
             point.append("223");
         }
 
-        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(note).arg(point).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
+        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"battery\":\"%7\",\"signal\":\"%8\"}],\"deviceName\":\"%9\",\"timeStamp\":\"%10\",\"deviceModel\":\"\",\"deviceType\":\"%11\",\"devId\":\"%12\"}],\"type\":\"ALARM\",\"timeStamp\":\"%13\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(note).arg(point).arg(d4).arg(d1).arg(d2).arg(d3).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
 
     }else if(tmpStr1.compare("L")==0){
 
@@ -230,7 +241,7 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
             point.append("524");
         }
 
-        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(note).arg(point).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
+        alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"battery\":\"%7\",\"signal\":\"%8\"}],\"deviceName\":\"%9\",\"timeStamp\":\"%10\",\"deviceModel\":\"\",\"deviceType\":\"%11\",\"devId\":\"%12\"}],\"type\":\"ALARM\",\"timeStamp\":\"%13\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(note).arg(point).arg(d4).arg(d1).arg(d2).arg(d3).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
 
     }
     if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) || (m_client->connectionState()==QMQTT::STATE_INIT))
@@ -244,34 +255,31 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
             mqttalarmIdx = 1;
 
 
-        for(int i=0;i<1024;i++){
-            QString mhDevCode = QString(mhwaterSensorList->mhsensors[i].Device_Code);
-            if((mhDevCode.compare(QString(waterSensorList->sensors[deviceidx].Device_Code)) == 0) && (mhwaterSensorList->mhsensors[i].Push_Status == 1)){
-
-                mhalarmData.append(QString("{\"deviceCode\":\"%1\",\"lon\":%2,\"lat\":%3,\"createTime\":%4,\"addr\":\"上海市\",\"eventCode1\":\"02\",\"eventName1\":\"预警数据\",\"eventCode2\":\"02008\",\"eventName2\":\"水压报警\",\"description\":\"%5\",\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(QString(mhwaterSensorList->mhsensors[i].Mh_Device_Code)).arg(mhwaterSensorList->mhsensors[i].longitude,0,'r',6).arg(mhwaterSensorList->mhsensors[i].latitude,0,'r',6).arg(QDateTime::currentDateTime().toTime_t()).arg(""));
-                m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhalarmTopic,mhalarmData.toUtf8()));
-                if(mqttmhalertIdx>9999)
-                    mqttmhalertIdx = 1;
+        QString pushstatus = redis_qstring((QString("hget yt_t_mhwater%1 pushstatus").arg(deviceid)).toUtf8());
+        if((redis_int((QString("hexists yt_t_mhwater%1 devicecode").arg(deviceid)).toUtf8())==1) && (pushstatus.toInt() == 1)){
 
-                break;
-            }
+            mhalarmData.append(QString("{\"deviceCode\":\"%1\",\"lon\":%2,\"lat\":%3,\"createTime\":%4,\"addr\":\"上海市\",\"eventCode1\":\"02\",\"eventName1\":\"预警数据\",\"eventCode2\":\"02008\",\"eventName2\":\"水压报警\",\"description\":\"%5\",\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(redis_qstring((QString("hget yt_t_mhwater%1 mhdevicecode").arg(deviceid)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 longitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(redis_qstring((QString("hget yt_t_mhwater%1 latitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(QDateTime::currentDateTime().toTime_t()).arg(""));
+            m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhalarmTopic,mhalarmData.toUtf8()));
+            if(mqttmhalertIdx>9999)
+                mqttmhalertIdx = 1;
 
         }
 
     }
 
-    dbThread->appendAlarm(AlarmRep(QString(waterSensorList->sensors[deviceidx].Device_Code),
+    dbThread->appendAlarm(AlarmRep(deviceid,
                                    QString("insert into sp_sj2017 (id, device_code, port, time, data1, data2, data3, data4, data5) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8')")
-                                   .arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),
+                                   .arg(deviceid).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),
                                    QString("%1").arg(note),
                                    t.toString("yyyy-MM-dd HH:mm:ss")));
     dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, data1, data2, data3, data4, data5) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8')")
-                        .arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
+                        .arg(deviceid).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
     dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2', content='%3' where device_id='%4' and point_code=1")
-                        .arg(d1.at(2)).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(note).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
-    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
+                        .arg(d1.at(2)).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(note).arg(deviceid));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
+    dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
+
 }
 
 void WaterCore::AlarmReport(QString addr, quint64 insertid, QString type, QString time)
@@ -281,12 +289,9 @@ void WaterCore::AlarmReport(QString addr, quint64 insertid, QString type, QStrin
     QString phonelist = "";
     QString companyCode = "";
     QString deviceType= "";//设备类型
-    for(int i=0;i<10240;i++){
-        if(QString::compare(QString(waterSensorList->sensors[i].Device_Code),addr)==0){
-            companyCode = QString(waterSensorList->sensors[i].Company_Code);
-            deviceType = QString(waterSensorList->sensors[i].Device_Type);
-            break;
-        }
+    if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(addr)).toUtf8())==1){
+        companyCode = redis_qstring((QString("hget sp_owner2-%1 companycode").arg(addr)).toUtf8());
+        deviceType = redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(addr)).toUtf8());
     }
     QString rep = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(addr).arg(insertid);
     QString rep2 = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
@@ -328,34 +333,30 @@ void WaterCore::AlarmReport(QString addr, quint64 insertid, QString type, QStrin
         QString mhstaTopic = QString("mh/water/statistics");
         QString mhstaData0 = "",mhstaData1 = "";
 
-        for(int i=0;i<1024;i++){
-            QString mhDevCode = QString(mhwaterSensorList->mhsensors[i].Device_Code);
-            if((mhDevCode.compare(addr) == 0) && (mhwaterSensorList->mhsensors[i].Push_Status == 1)){
+        QString pushstatus = redis_qstring((QString("hget yt_t_mhwater%1 pushstatus").arg(addr)).toUtf8());
+        if((redis_int((QString("hexists yt_t_mhwater%1 devicecode").arg(addr)).toUtf8())==1) && (pushstatus.toInt() == 1)){
 
-                mhstaData0.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":0,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(mhwaterSensorList->mhsensors[i].Aj_Type).arg(mhwaterSensorList->mhsensors[i].Street).arg(QString("%1,%2").arg(mhwaterSensorList->mhsensors[i].Company_Address).arg(mhwaterSensorList->mhsensors[i].Device_Name)).arg(mhwaterSensorList->mhsensors[i].Grid).arg(type).arg(mhwaterSensorList->mhsensors[i].Company_Name).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
-                mhstaData1.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":1,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(mhwaterSensorList->mhsensors[i].Aj_Type).arg(mhwaterSensorList->mhsensors[i].Street).arg(QString("%1,%2").arg(mhwaterSensorList->mhsensors[i].Company_Address).arg(mhwaterSensorList->mhsensors[i].Device_Name)).arg(mhwaterSensorList->mhsensors[i].Grid).arg(type).arg(mhwaterSensorList->mhsensors[i].Company_Name).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
+        mhstaData0.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":0,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(redis_qstring((QString("hget yt_t_mhwater%1 ajtype").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 street").arg(addr)).toUtf8())).arg(QString("%1,%2").arg(redis_qstring((QString("hget yt_t_mhwater%1 companyaddress").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 devicename").arg(addr)).toUtf8()))).arg(redis_qstring((QString("hget yt_t_mhwater%1 grid").arg(addr)).toUtf8())).arg(type).arg(redis_qstring((QString("hget yt_t_mhwater%1 companyname").arg(addr)).toUtf8())).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
+        mhstaData1.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":1,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(redis_qstring((QString("hget yt_t_mhwater%1 ajtype").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 street").arg(addr)).toUtf8())).arg(QString("%1,%2").arg(redis_qstring((QString("hget yt_t_mhwater%1 companyaddress").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 devicename").arg(addr)).toUtf8()))).arg(redis_qstring((QString("hget yt_t_mhwater%1 grid").arg(addr)).toUtf8())).arg(type).arg(redis_qstring((QString("hget yt_t_mhwater%1 companyname").arg(addr)).toUtf8())).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
 
-                if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) || (m_client->connectionState()==QMQTT::STATE_INIT))
-                {
-                    m_client->connectToHost();
-                }
-                if(m_client->connectionState()==QMQTT::STATE_CONNECTED)
-                {
-                    m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhstaTopic,mhstaData0.toUtf8()));
-                    if(mqttmhsta0Idx>9999)
-                        mqttmhsta0Idx = 1;
-
-                    m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhstaTopic,mhstaData1.toUtf8()));
-                    if(mqttmhsta1Idx>9999)
-                        mqttmhsta1Idx = 1;
-                }
-
-                break;
-            }
+        if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) || (m_client->connectionState()==QMQTT::STATE_INIT))
+        {
+            m_client->connectToHost();
+        }
+        if(m_client->connectionState()==QMQTT::STATE_CONNECTED)
+        {
+            m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhstaTopic,mhstaData0.toUtf8()));
+            if(mqttmhsta0Idx>9999)
+                mqttmhsta0Idx = 1;
 
+            m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhstaTopic,mhstaData1.toUtf8()));
+            if(mqttmhsta1Idx>9999)
+                mqttmhsta1Idx = 1;
         }
 
     }
+
+    }
 }
 
 void WaterCore::repLog(quint16 idx, QDateTime t, QString data, bool dirflag)
@@ -376,3 +377,174 @@ void WaterCore::wxchart(quint16 idx, QDateTime t, QString data, bool dirflag)
                           .arg(dirflag?">>>":"<<<")
                           .arg(data.replace('\n',"\\n").replace('\r',"\\r")));
 }
+
+
+int WaterCore::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void WaterCore::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int WaterCore::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString WaterCore::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int WaterCore::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}

+ 11 - 3
DataProcessService/ytWaterProcess/watercore.h

@@ -15,6 +15,7 @@
 #include "logthread.h"
 #include "../ytUserInfoProcess/wechartthreads.h"
 #include "../ytRTUProcess/ttsthreads.h"
+#include "redis.h"
 
 class WaterCore : public QObject
 {
@@ -23,13 +24,18 @@ public:
     explicit WaterCore(QObject *parent = nullptr);
     ~WaterCore();
     void start();
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 signals:
 
 public slots:
     void timeout();
-    void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
     void AlarmReport(QString addr, quint64 insertid, QString type, QString time);
     void wxchart(quint16 idx, QDateTime t, QString data, bool dirflag);
@@ -54,6 +60,8 @@ private:
 
     QMQTT::Client *m_client;
     quint16 mqttinfoIdx,mqttalarmIdx,mqttmhinfoIdx,mqttmhalertIdx,mqttmhsta0Idx,mqttmhsta1Idx;
+    int redisconnected;
+    redisContext *c;
 };
 
 #endif // WATERCORE_H

+ 6 - 6
DataProcessService/ytWaterProcess/waterserver.cpp

@@ -25,9 +25,9 @@ void WaterServer::incomingConnection(qintptr socketDescriptor)
     thread->start();
 }
 
-void WaterServer::egetOnLine(int deviceidx, bool flag, QDateTime t)
+void WaterServer::egetOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t)
 {
-    emit getOnLine(deviceidx,flag,t);
+    emit getOnLine(deviceidx,deviceid,flag,t);
 }
 
 void WaterServer::egetCommData(QString data)
@@ -35,12 +35,12 @@ void WaterServer::egetCommData(QString data)
     emit getCommData(data);
 }
 
-void WaterServer::egetValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
+void WaterServer::egetValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
 {
-    emit getValue(deviceidx,d1,d2,d3,d4,d5,t);
+    emit getValue(deviceidx,deviceid,d1,d2,d3,d4,d5,t);
 }
 
-void WaterServer::egetAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
+void WaterServer::egetAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
 {
-    emit getAlarm(deviceidx,d1,d2,d3,d4,d5,note,t);
+    emit getAlarm(deviceidx,deviceid,d1,d2,d3,d4,d5,note,t);
 }

+ 6 - 6
DataProcessService/ytWaterProcess/waterserver.h

@@ -12,15 +12,15 @@ public:
     explicit WaterServer(QObject *parent = nullptr);
     void start();
 signals:
-    void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
     void incomingConnection(qintptr socketDescriptor) override;
-    void egetOnLine(int deviceidx, bool flag, QDateTime t);
-    void egetValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void egetAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void egetOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void egetValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void egetAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void egetCommData(QString data);
 };
 

+ 6 - 6
DataProcessService/ytWaterProcess/waterserver3.cpp

@@ -24,9 +24,9 @@ void waterserver3::incomingConnection(qintptr socketDescriptor)
     thread->start();
 }
 
-void waterserver3::egetOnLine(int deviceidx, bool flag, QDateTime t)
+void waterserver3::egetOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t)
 {
-    emit getOnLine(deviceidx,flag,t);
+    emit getOnLine(deviceidx,deviceid, flag,t);
 }
 
 void waterserver3::egetCommData(QString data)
@@ -34,12 +34,12 @@ void waterserver3::egetCommData(QString data)
     emit getCommData(data);
 }
 
-void waterserver3::egetValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
+void waterserver3::egetValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
 {
-    emit getValue(deviceidx,d1,d2,d3,d4,d5,t);
+    emit getValue(deviceidx,deviceid, d1,d2,d3,d4,d5,t);
 }
 
-void waterserver3::egetAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
+void waterserver3::egetAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
 {
-    emit getAlarm(deviceidx,d1,d2,d3,d4,d5,note,t);
+    emit getAlarm(deviceidx,deviceid, d1,d2,d3,d4,d5,note,t);
 }

+ 6 - 6
DataProcessService/ytWaterProcess/waterserver3.h

@@ -13,15 +13,15 @@ public:
     void start();
 
 signals:
-    void getOnLine(int deviceidx, bool flag, QDateTime t);
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
     void incomingConnection(qintptr socketDescriptor) override;
-    void egetOnLine(int deviceidx, bool flag, QDateTime t);
-    void egetValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void egetAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void egetOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t);
+    void egetValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void egetAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void egetCommData(QString data);
 };
 

+ 2 - 2
DataProcessService/ytWaterProcess/waterserver4.h

@@ -39,8 +39,8 @@ public:
     void check_framedata(QString data, QString etime, QString ip);
     quint8 hexstr_to_byte(QString dat);
 signals:
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
     void new_incomming();

+ 189 - 9
DataProcessService/ytWaterProcess/wateruserver.cpp

@@ -1,5 +1,5 @@
 #include "wateruserver.h"
-#include "water.h"
+//#include "water.h"
 
 wateruserver::wateruserver(QObject *parent) : QObject(parent)
 {
@@ -18,16 +18,26 @@ void wateruserver::start()
 
 int wateruserver::getDevIdx(QString DeviceCode)
 {
+    c = NULL;
     int idx = -1;
-    for(int i=0;i<10240;i++)
-    {
-        if(waterSensorList->sensors[i].Enabled==0x01){
-            if(QString::compare(DeviceCode,QString(waterSensorList->sensors[i].Device_Code))==0){
-                idx = i;
-                return idx;
+    int redisconnected = -1;
+    if(redisconnected==-1){
+            redisconnected=redis_init();
+            if(redisconnected==-1){
+                printf("redis init failed\n");
             }
+            redis_save(AUTH);
+            redis_save(DBID);
+        }
+
+    if(QString("0x01").compare(redis_qstring((QString("hget sp_owner2-%1 enabled").arg(DeviceCode)).toUtf8()))==0){
+        if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(DeviceCode)).toUtf8())==1){
+            idx = redis_qstring((QString("hget sp_owner2-%1 row").arg(DeviceCode)).toUtf8()).toInt();
+            return idx;
         }
     }
+
+    redis_free();
     return idx;
 }
 
@@ -96,10 +106,180 @@ void wateruserver::readdata()
             devidx = getDevIdx(DeviceCode);
             if(devidx>=0){
                 if(alarmstatus)
-                    emit getAlarm(devidx,d1,energy,Signal,pressure_value,"",note,t);
+                    emit getAlarm(devidx,DeviceCode,d1,energy,Signal,pressure_value,"",note,t);
                 else
-                    emit getValue(devidx,d1,energy,Signal,pressure_value,"",t);
+                    emit getValue(devidx,DeviceCode,d1,energy,Signal,pressure_value,"",t);
             }
         }
     }
 }
+
+int wateruserver::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void wateruserver::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int wateruserver::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString wateruserver::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int wateruserver::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}

+ 9 - 2
DataProcessService/ytWaterProcess/wateruserver.h

@@ -4,6 +4,7 @@
 #include <QObject>
 #include <QUdpSocket>
 #include <QDateTime>
+#include "redis.h"
 
 class wateruserver : public QObject
 {
@@ -12,15 +13,21 @@ public:
     explicit wateruserver(QObject *parent = nullptr);
     void start();
     int getDevIdx(QString DeviceCode);
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 
 signals:
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
     void readdata();
 private:
     QUdpSocket *so;
+    redisContext *c ;
 };
 
 #endif // WATERUSERVER_H

+ 190 - 10
DataProcessService/ytWaterProcess/wateruserver2.cpp

@@ -1,5 +1,5 @@
 #include "wateruserver2.h"
-#include "water.h"
+//#include "water.h"
 
 wateruserver2::wateruserver2(QObject *parent) : QObject(parent)
 {
@@ -18,17 +18,26 @@ void wateruserver2::start()
 
 int wateruserver2::getDevIdx(quint64 devcode)
 {
+    c = NULL;
     int idx = -1;
-    QString DeviceCode = QString("%1").arg(devcode);
-    for(int i=0;i<10240;i++)
-    {
-        if(waterSensorList->sensors[i].Enabled==0x01){
-            if(QString::compare(DeviceCode,QString(waterSensorList->sensors[i].Device_Code))==0){
-                idx = i;
-                return idx;
+    int redisconnected = -1;
+    if(redisconnected==-1){
+            redisconnected=redis_init();
+            if(redisconnected==-1){
+                printf("redis init failed\n");
             }
+            redis_save(AUTH);
+            redis_save(DBID);
+        }
+    QString DeviceCode = QString("%1").arg(devcode);
+    if(QString("0x01").compare(redis_qstring((QString("hget sp_owner2-%1 enabled").arg(DeviceCode)).toUtf8()))==0){
+        if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(DeviceCode)).toUtf8())==1){
+            idx = redis_qstring((QString("hget sp_owner2-%1 row").arg(DeviceCode)).toUtf8()).toInt();
+            return idx;
         }
     }
+
+    redis_free();
     return idx;
 }
 
@@ -135,12 +144,183 @@ void wateruserver2::readdata()
                 imei = (imei*100)+(((data.at(6+i)>>4)&0x0f)*10)+(data.at(6+i)&0x0f);
             }
             devidx = getDevIdx(imei);
+            QString DeviceCode = QString("%1").arg(imei);
             if(devidx>=0){
                 if(alarmstatus)
-                    emit getAlarm(devidx,d1,energy,s,fdat,"",note,t);
+                    emit getAlarm(devidx,DeviceCode,d1,energy,s,fdat,"",note,t);
                 else
-                    emit getValue(devidx,d1,energy,s,fdat,"",t);
+                    emit getValue(devidx,DeviceCode,d1,energy,s,fdat,"",t);
             }
         }
     }
 }
+
+int wateruserver2::redis_init()
+{
+    c = redisConnect(REDIS_HOST, REDIS_PORT);
+    if (NULL == c || c->err) {
+        if(c) {
+            printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
+            redisFree(c);
+        } else {
+            printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+void wateruserver2::redis_free()
+{
+    if (c) {
+        redisFree(c);
+    }
+    c = NULL;
+}
+
+int wateruserver2::redis_save(const char *cmd)
+{
+    int i = 0;
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s, c %p\n", cmd,c);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return 0;
+}
+
+QString wateruserver2::redis_qstring(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return "error";
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return "error";
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    QString data = r->str;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}
+
+int wateruserver2::redis_int(const char *cmd)
+{
+    redisReply *r = NULL;
+    if (NULL == cmd) {
+        return -1;
+    }
+
+    printf("%s\n", cmd);
+
+    r = (redisReply *)redisCommand(c, cmd);
+    if (NULL == r) {
+        printf("Error[%d:%s]", c->err, c->errstr);
+        return -1;
+    }
+
+    switch(r->type) {
+    case REDIS_REPLY_STATUS:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
+        break;
+    case REDIS_REPLY_ERROR:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
+        break;
+    case REDIS_REPLY_INTEGER:
+        printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
+        break;
+    case REDIS_REPLY_NIL:
+        printf("type:%s, no data\n", "REDIS_REPLY_NIL");
+        break;
+    case REDIS_REPLY_STRING:
+        printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
+        break;
+    case REDIS_REPLY_ARRAY:
+        printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
+        for (int i = 0; i < r->elements; i++) {
+            printf("%d: %s\n", i, r->element[i]->str);
+        }
+        break;
+    default:
+        printf("unkonwn type:%d\n", r->type);
+        break;
+    }
+
+    int data = r->integer;
+
+    /*release reply and context */
+    freeReplyObject(r);
+    return data;
+}

+ 9 - 2
DataProcessService/ytWaterProcess/wateruserver2.h

@@ -4,6 +4,7 @@
 #include <QObject>
 #include <QUdpSocket>
 #include <QDateTime>
+#include "redis.h"
 
 class wateruserver2 : public QObject
 {
@@ -12,15 +13,21 @@ public:
     explicit wateruserver2(QObject *parent = nullptr);
     void start();
     int getDevIdx(quint64 devcode);
+    int redis_init();
+    int redis_save(const char *cmd);
+    QString redis_qstring(const char *cmd);
+    int redis_int(const char *cmd);
+    void redis_free();
 
 signals:
-    void getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
-    void getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
+    void getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t);
+    void getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t);
     void getCommData(QString data);
 public slots:
     void readdata();
 private:
     QUdpSocket *so;
+    redisContext *c ;
 };
 
 #endif // WATERUSERVER2_H

+ 3 - 1
DataProcessService/ytWaterProcess/ytWaterProcess.pro

@@ -45,6 +45,8 @@ HEADERS += \
     waterserver4.h \
     wateruserver.h \
     wateruserver2.h \
-    ../ytRTUProcess/ttsthreads.h
+    ../ytRTUProcess/ttsthreads.h \
+    redis.h
 
 LIBS += -lQt5Qmqtt
+LIBS += "/usr/local/lib/libhiredis.a"

Some files were not shown because too many files changed in this diff