From f4a6f79f73b8a498bd9c972374bc836e65890c53 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Sat, 15 Mar 2025 12:00:13 +0800 Subject: [PATCH] dg101 transition --- uart/uart.cpp | 114 +-- uart/uart.hpp | 1 + uart/uart_feature_parse.cpp | 1419 +++++++++++++++++++++++++++++++++++ 3 files changed, 1485 insertions(+), 49 deletions(-) diff --git a/uart/uart.cpp b/uart/uart.cpp index 0dd6146..e4e0cb6 100644 --- a/uart/uart.cpp +++ b/uart/uart.cpp @@ -511,57 +511,73 @@ void Uart::DealRecvData(const char *pData) { uint8_t command = pData[5] & 0xFF; uint8_t recvcode = pData[7] & 0xFF; + char whereCon[100] = {0}; + sprintf(whereCon, "zigbeeShortAddr='%02x%02x'", UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd)); + zlog_info(zct, "whereCon = %s", whereCon); + array_t vecRes = sqlite_db_ctrl::instance().GetDataMultiLine(T_SENSOR_INFO(TNAME), " dataNodeNo, MeasurementID,hardVersion,softVersion", whereCon); + zlog_info(zct, "vecRes = %d", vecRes.size()); + std::string hardVersion = vecRes[0][2]; + std::string softVersion = vecRes[0][3]; zlog_info(zct, "shortAdd = %02x%02x,command = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command); - switch (command) { - case DEVICE_INF: - DealDataNodeInfo(pData); - break; - case DEVICE_INF2: - DealDataNodeName(pData); - break; - case ASK_TASK: - DealAskTask(ushortAdd); - break; - case DEVICE_EXCEPTION: - DealException(pData); - break; - case MEAS_EVAL: - DealDataNodeFeature(pData, 0); - DealReviveDuration(ushortAdd); - break; - case UPGRADE: - if (recvcode == 0){ - DealUpgrade(ushortAdd,2); - scheduler::instance().UpgradeResult(ushortAdd,0); - zlog_info(zbt, "[UPGRADE SUCCESS] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); - }else if (recvcode == 5) - { - DealUpgrade(ushortAdd,2); - scheduler::instance().UpgradeResult(ushortAdd,0); - zlog_warn(zbt, "[UPGRADE ALREADY] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); - }else - { - DealUpgrade(ushortAdd,3); - scheduler::instance().UpgradeResult(ushortAdd,recvcode); - zlog_warn(zbt, "[UPGRADE FAILED] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); - } - break; - case CONFIG: - if (recvcode == 0){ + if ((hardVersion == "3.0" && compareVersions(softVersion, "5.0") == -1) || (hardVersion == "4.0" && compareVersions(softVersion, "5.0") == -1)|| (hardVersion == "1.0" && compareVersions(softVersion,"1.2") == -1)) { + switch (command) { + case DEVICE_INF: + DealDataNodeFeature(pData,0); + break; + default: break; + } + }else{ + switch (command) { + case DEVICE_INF: + DealDataNodeInfo(pData); + break; + case DEVICE_INF2: + DealDataNodeName(pData); + break; + case ASK_TASK: + DealAskTask(ushortAdd); + break; + case DEVICE_EXCEPTION: + DealException(pData); + break; + case MEAS_EVAL: + DealDataNodeFeature(pData, 0); DealReviveDuration(ushortAdd); - DealConfig(ushortAdd); - }else{ - scheduler::instance().UpdateConfigResult(ushortAdd,recvcode); - zlog_warn(zbt, "[CONFIG] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); - } - break; - case WAVE_COMPRESS: - DealWaveCompress(pData,ushortAdd); - break; - case SIGNAL_STRENGTH: - DealSensorRSSI(pData,ushortAdd); - break; - default: break; + break; + case UPGRADE: + if (recvcode == 0){ + DealUpgrade(ushortAdd,2); + scheduler::instance().UpgradeResult(ushortAdd,0); + zlog_info(zbt, "[UPGRADE SUCCESS] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); + }else if (recvcode == 5) + { + DealUpgrade(ushortAdd,2); + scheduler::instance().UpgradeResult(ushortAdd,0); + zlog_warn(zbt, "[UPGRADE ALREADY] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); + }else + { + DealUpgrade(ushortAdd,3); + scheduler::instance().UpgradeResult(ushortAdd,recvcode); + zlog_warn(zbt, "[UPGRADE FAILED] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); + } + break; + case CONFIG: + if (recvcode == 0){ + DealReviveDuration(ushortAdd); + DealConfig(ushortAdd); + }else{ + scheduler::instance().UpdateConfigResult(ushortAdd,recvcode); + zlog_warn(zbt, "[CONFIG] shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode); + } + break; + case WAVE_COMPRESS: + DealWaveCompress(pData,ushortAdd); + break; + case SIGNAL_STRENGTH: + DealSensorRSSI(pData,ushortAdd); + break; + default: break; + } } } diff --git a/uart/uart.hpp b/uart/uart.hpp index 25ca150..421d299 100644 --- a/uart/uart.hpp +++ b/uart/uart.hpp @@ -177,6 +177,7 @@ public: // feature parse void DealDataNodeFeature(const char* pData, int flag); + void DealDataNodeFeatureTransition(const char* pData,int flag = 0); void RecordBattery(std::string& strLongAddr, DataRecvStatic& dataStatic, std::string& nowTimetamp); void DealDataNodeWave(const char* pData, int comand); void DealWaveThread(); diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index 2c1fd03..033d540 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -40,7 +40,1426 @@ void Uart::DataExtract(RecvData *p, int id, unsigned int &lowbit, float &n) { lowbit = temp & 0x3fff; n = ScaleConvert(highbit); } +void Uart::DealDataNodeFeatureTransition(const char *pData,int flag) +{ + RecvData * pRecvData = (RecvData *)pData; + char whereCon[1024] = {0}; + char updateSql[1024] = { 0 }; + char buf[20] = {0x00}; + int nodeResend = 0,timing = 0; + sprintf(buf, "%02x%02x", pRecvData->ShortAddr[0], pRecvData->ShortAddr[1]); + if (flag == 1) + { + zlog_info(zct,"DealDataNodeFeature %02x%02x, %d",pRecvData->ShortAddr[0], pRecvData->ShortAddr[1],flag); + } + + + if (bSendTimeStamp)//波形处理中 + return; + std::string strShortAddr = std::string(buf); + zlog_info(zct,"zigbeeShortAddr='%s'", strShortAddr.c_str()); + char getLongAddr_sql[32] = { 0 }; + //根据数据包中的传感器的短地址获取数据库中长地址(MAC),在下面判断该传感器是否存在,如果不存在则把数据包丢弃 + sprintf(getLongAddr_sql, "zigbeeShortAddr='%s'", strShortAddr.c_str()); + //std::string strLongAddr = sqlite_db_ctrl::instance().GetData(T_SENSOR_INFO(TNAME), T_SENSOR_INFO(ZIGBEELONGADDR), getLongAddr_sql); + vec_t vecResult = sqlite_db_ctrl::instance().GetDataSingleLine(T_SENSOR_INFO(TNAME)," softVersion,dataNodeNo,MeasurementID,ProductNo ",getLongAddr_sql); + if (vecResult.size() < 1) { + zlog_error(zct,"device info not found %02x%02x",pRecvData->ShortAddr[0], pRecvData->ShortAddr[1]); + return; + } + zlog_info(zct,"--------->the remote sensor short addr:%s strLongAddr=%s,softVersion = %s",buf,vecResult[1].c_str(),vecResult[0].c_str()); + + std::string strLongAddr = vecResult[1]; + std::string strMeasurementID = vecResult[2]; + std::string strProductNo = vecResult[3]; + if (1 == flag) { + + + }else{ + memset(whereCon,0x00,sizeof(whereCon)); + memset(updateSql,0x00,sizeof(updateSql)); + sprintf(whereCon, "zigbeeShortAddr='%s'", strShortAddr.c_str()); + sprintf(updateSql, " StaticTime = StaticTime + 1"); + sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon); + //string strData = sqlite_db_ctrl::instance().GetNodeConfigureInfor(whereCon); + //data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str()); + } + + if (vecResult[0] == "3.0" || vecResult[0] == "4.0"){ + return; + } + long staticIndex = BUILD_UINT32(pRecvData->Data[29], pRecvData->Data[28],pRecvData->Data[27], pRecvData->Data[26]); + + + + //LOG_INFO("staticIndex = %d\n",staticIndex); + + char localtimestamp[32] = { 0 }; + GetTimeNet(localtimestamp, 1); + std::string nowTimetamp = std::string(localtimestamp); + strTimetamp = nowTimetamp; + + int iTemp = 0; + unsigned char highbit = 0; + unsigned int lowbit = 0; + float n = 0; + + DataRecvStatic dataStatic; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[5], pRecvData->Data[4]); + iTemp = (int)strtol(buf, NULL, 16); + dataStatic.Dip = iTemp; + + int fTemp = 0; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[1], pRecvData->Data[0]); + + iTemp = (int)strtol(buf, NULL, 16); + if (iTemp < 0x8000) { + fTemp = iTemp ; + } else { + fTemp = (((~iTemp)&0xffff) + 1)* (-1); + } + dataStatic.TemBot = fTemp * 0.0625;//设备温度 + + fTemp = 0; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[3], pRecvData->Data[2]); + iTemp = (int)strtol(buf, NULL, 16); + if (iTemp < 0x8000) { + fTemp = iTemp ; + } else { + fTemp = (((~iTemp)&0xffff) + 1) * (-1); + } + dataStatic.TemTop = fTemp * 0.0625;//环境温度 + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[7], pRecvData->Data[6]); + iTemp = (int)strtol(buf, NULL, 16); + dataStatic.Voltage = iTemp; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[31], pRecvData->Data[30]); + + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataStatic.nodeWorkTime = lowbit * n; + + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[33], pRecvData->Data[32]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataStatic.nodeSendTime = lowbit * n; + + dataStatic.nodeWorkTime = dataStatic.nodeWorkTime - dataStatic.nodeSendTime; + + RecordBattery(strLongAddr,dataStatic,nowTimetamp); + + char szTableName[50]={0x00},szTableNameStatic[50]={0x00},szTableNameData[50]={0x00}; + sprintf(szTableName,"t_dataStatic_%s",strLongAddr.c_str()); + memcpy(szTableNameStatic,szTableName,sizeof(szTableNameStatic)); + memset(whereCon,0x00,sizeof(whereCon)); + + sprintf(whereCon,"StaticIndex = %d",staticIndex); + int count = sqlite_db_ctrl::instance().GetTableRows(szTableNameStatic, whereCon);//避免重复数据 + sprintf(szTableNameData,"t_data_%s",strLongAddr.c_str()); + + int count2 = sqlite_db_ctrl::instance().GetTableRows(szTableNameData, whereCon); + if(count > 0 || count2 > 0){ + char logInfo[20]={0x00}; + sprintf(logInfo,"ShortAddr = %s,staticIndex = %d,staticData = %d, data = %d",strShortAddr.c_str(),staticIndex,count,count2); + return; + } + memset(whereCon,0x00,sizeof(whereCon)); + ///////////////////////////////////////////////////////////// for V2.0.3 upgrade to V3.0 + std::string strTmp = ""; + char sztmp[100]={0x00}; + strTmp = "name = '" + std::string(szTableNameStatic)+ "' and sql LIKE '%nodeResend%' "; + + int row = sqlite_db_ctrl::instance().GetTableRows(" sqlite_master ",strTmp.c_str()); + if(row == 0){ + memset(sztmp,0x00,sizeof(sztmp)); + sprintf(sztmp,"ALTER TABLE %s ADD COLUMN 'nodeResend'",szTableNameStatic); + sqlite_db_ctrl::instance().CreateTable(sztmp); + } + + strTmp = "name = '" + std::string(szTableNameData)+ "' and sql LIKE '%nodeResend%' "; + row = sqlite_db_ctrl::instance().GetTableRows(" sqlite_master ",strTmp.c_str()); + if(row == 0){ + memset(sztmp,0x00,sizeof(sztmp)); + sprintf(sztmp,"ALTER TABLE %s ADD COLUMN 'nodeResend'",szTableNameData); + sqlite_db_ctrl::instance().CreateTable(sztmp); + } + + ////////////////////////////////////////////////////////////更换电池判断 + sprintf(whereCon," dataNodeNo = '%s' and StaticIndex > 0 order by StaticIndex desc LIMIT 0 , 1 ",strLongAddr.c_str()); + std::string strStaticIndex = sqlite_db_ctrl::instance().GetData(szTableNameStatic, "StaticIndex", whereCon); + if(atol(strStaticIndex.c_str()) - staticIndex > 100){ + sqlite_db_ctrl::instance().Deletetable(szTableNameStatic); + sqlite_db_ctrl::instance().Deletetable(szTableNameData); + //LOG_INFO("staticIndexNOW = %d,strStaticIndexLast = %s\n",staticIndex,strStaticIndex.c_str()); + } + if(staticIndex != atol(strStaticIndex.c_str() + 1) && + strStaticIndex != "" && + staticIndex < atol(strStaticIndex.c_str())) + { + sprintf(whereCon,"StaticIndex = %d order by StaticIndex desc LIMIT 0 , 1",atol(strStaticIndex.c_str())); + vec_t vecResult = sqlite_db_ctrl::instance().GetDataSingleLine(szTableNameStatic, "timeStamp,StaticIndex", whereCon); + if(vecResult.size() > 0){ + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon,"dataNodeNo = '%s'",strLongAddr.c_str()); + std::string staticInterval = sqlite_db_ctrl::instance().GetData(T_SENSOR_INFO(TNAME), "featureInterval", whereCon); + long nNowTimetamp = atol(vecResult[0].c_str()) - (atol(staticInterval.c_str()) * \ + (atol(vecResult[1].c_str()) - staticIndex)) * 60; + char tmp[10]={0x00}; + sprintf(tmp,"%ld",nNowTimetamp); + nowTimetamp = std::string(tmp); + nodeResend = 1; + } + } + + // save dataStatic of 7 days + char selectCon[128] = { 0 }; + sprintf(selectCon, "channelID='%s' ORDER BY timeStamp ASC LIMIT 0,1",(strMeasurementID + "-S").c_str()); + std::string strTime = sqlite_db_ctrl::instance().GetData(szTableName, "timeStamp", selectCon); + sprintf(whereCon,"channelID='%s' ",(strMeasurementID + "-S").c_str()); + int Count = sqlite_db_ctrl::instance().GetTableRows(szTableName, whereCon); + if(Count == -1){ + sqlite_db_ctrl::instance().CreatedataStatictable(szTableName); + } + + long lTime = atol(nowTimetamp.c_str())-atol(strTime.c_str()); + + + + sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %d, nodeResend = %d,zigbeeSignal = '',zigbeeSignalNode = '',statisticType = '%d',timing = '%d' ",\ + dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(),staticIndex,nodeResend,flag,timing); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-S").c_str()); + if ( /*0 == sqlite_db_ctrl::instance().GetTableRows(T_DATASTATIC_INFO(TNAME), whereCon)*/ (Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0 ) { + + char insertSql[1024] = { 0 }; + sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%d,'%s','1',%d,'','%d','%d'", + strLongAddr.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex,nowTimetamp.c_str(),nodeResend,flag,timing); + sqlite_db_ctrl::instance().InsertData(szTableName, insertSql); + + if(0 == sqlite_db_ctrl::instance().GetTableRows(T_DATASTATIC_INFO(TNAME), whereCon)){ // First Connect + char insertSql[1024] = { 0 }; + sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%d,'%s','1',%d", + strLongAddr.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex,nowTimetamp.c_str(),nodeResend); + sqlite_db_ctrl::instance().InsertData(T_DATASTATIC_INFO(TNAME), insertSql); + sqlite_db_ctrl::instance().CalculateBattery(); + } + else{ + memset(updateSql,0x00,sizeof(updateSql)); + sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %d ",\ + dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(),staticIndex); + sqlite_db_ctrl::instance().UpdateTableData(T_DATASTATIC_INFO(TNAME), updateSql, whereCon); + } + } else { + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-S").c_str(),strTime.c_str()); + sqlite_db_ctrl::instance().UpdateTableData(szTableName, updateSql, whereCon); + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-S").c_str()); + memset(updateSql,0x00,sizeof(updateSql)); + sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %d ",\ + dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(),staticIndex); + sqlite_db_ctrl::instance().UpdateTableData(T_DATASTATIC_INFO(TNAME), updateSql, whereCon); + } + memset(szTableName,0x00,sizeof(szTableName)); + sprintf(szTableName,"t_data_%s",strLongAddr.c_str()); + if(Count == -1){ + sqlite_db_ctrl::instance().Createtable(szTableName); + } + DataRecvDym dataDymX; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[9], pRecvData->Data[8]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.DiagnosisPk = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[11], pRecvData->Data[10]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.RmsValues = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[13], pRecvData->Data[12]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.IntegratPk = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[15], pRecvData->Data[14]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.IntegratRMS = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[17], pRecvData->Data[16]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.Amp1 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[19], pRecvData->Data[18]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.Amp2 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[21], pRecvData->Data[20]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.Amp3 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[23], pRecvData->Data[22]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.Amp4 = lowbit * n; + + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[25], pRecvData->Data[24]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymX.Amp5 = lowbit * n; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[27], pRecvData->Data[26]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } +// dataDymX.EnvelopEnergy = lowbit * n; + + dataDymX.EnvelopEnergy = 0; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[29], pRecvData->Data[28]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } +// dataDymX.Phase1 = lowbit * n; + + dataDymX.Phase1 = 0; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[31], pRecvData->Data[30]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymX.Phase2 = 0; + + memset(buf, 0, sizeof(buf)); + + memset(buf, 0, 8); +// sprintf(buf, "%02x%02x", pRecvData->Data[33], pRecvData->Data[32]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymX.Phase3 = 0; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[35], pRecvData->Data[34]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymX.Phase4 = 0; + + memset(whereCon, 0, 1024); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-X").c_str()); + memset(updateSql, 0, 1024); + sprintf(updateSql, "diagnosisPk='%f',integratPk='%f',integratRMS='%f',rmsValues='%f',envelopEnergy='%f',\ + Amp1='%f',Amp2='%f',Amp3='%f',Amp4='%f',Amp5='%f',Phase1='%f',Phase2='%f',Phase3='%f',Phase4='%f',timeStamp='%s',StaticIndex = %d,nodeResend = %d ",\ + dataDymX.DiagnosisPk, dataDymX.IntegratPk, dataDymX.IntegratRMS, dataDymX.RmsValues, dataDymX.EnvelopEnergy,\ + dataDymX.Amp1, dataDymX.Amp2, dataDymX.Amp3, dataDymX.Amp4, dataDymX.Amp5,dataDymX.Phase1, dataDymX.Phase2, dataDymX.Phase3, dataDymX.Phase4, nowTimetamp.c_str(),staticIndex,nodeResend); + if ( /*0 == sqlite_db_ctrl::instance().GetTableRows(T_DATA_INFO(TNAME), whereCon)*/(Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0) {//1 week + char insertSql[1024] = { 0 }; + memset(insertSql,0x00,sizeof(insertSql)); + sprintf(insertSql, "'%s','%s','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f',%d,'%s','1',%d", + strLongAddr.c_str(), (strMeasurementID + "-X").c_str(), dataDymX.DiagnosisPk, dataDymX.IntegratPk, dataDymX.IntegratRMS, dataDymX.RmsValues, dataDymX.EnvelopEnergy,\ + dataDymX.Amp1, dataDymX.Amp2, dataDymX.Amp3, dataDymX.Amp4, dataDymX.Amp5,dataDymX.Phase1, dataDymX.Phase2, dataDymX.Phase3, dataDymX.Phase4, staticIndex,nowTimetamp.c_str(),nodeResend); + sqlite_db_ctrl::instance().InsertData(szTableName, insertSql); + + if(0 == sqlite_db_ctrl::instance().GetTableRows(T_DATA_INFO(TNAME), whereCon)) + sqlite_db_ctrl::instance().InsertData(T_DATA_INFO(TNAME), insertSql); + else + sqlite_db_ctrl::instance().UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon); + } else { + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-X").c_str(),strTime.c_str()); +// sprintf(whereCon, "channelID='%s' and sendMsg = '1' ", (strLongAddr + "-X").c_str()); + sqlite_db_ctrl::instance().UpdateTableData(szTableName, updateSql, whereCon); + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-X").c_str()); + sqlite_db_ctrl::instance().UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon); + } + zlog_info(zct,"x:%s,%s,diagnosisPk=%f,integratPk=%f,integratRMS=%f,rmsValues=%f,envelopEnergy=%f,Amp1=%f,Amp2=%f,Amp3=%f,Amp4=%f,Amp5=%f,Phase1=%f,Phase2=%f,Phase3=%f,Phase4=%f,timeStamp=%s\n",\ + strLongAddr.c_str(), (strMeasurementID + "-X").c_str(), dataDymX.DiagnosisPk, dataDymX.IntegratPk, dataDymX.IntegratRMS, dataDymX.RmsValues, dataDymX.EnvelopEnergy,\ + dataDymX.Amp1, dataDymX.Amp2, dataDymX.Amp3, dataDymX.Amp4, dataDymX.Amp5,dataDymX.Phase1, dataDymX.Phase2, dataDymX.Phase3, dataDymX.Phase4, nowTimetamp.c_str()); + + Json::Value valNodeData; + Json::Value valNodeFeature; + valNodeFeature["dataNodeNo"] = strMeasurementID; + valNodeFeature["ChannelId"] = strMeasurementID + "-X"; + valNodeFeature["diagnosisPk"] = dataDymX.DiagnosisPk; + valNodeFeature["integratPk"] = dataDymX.IntegratPk; + valNodeFeature["integratRMS"] = dataDymX.IntegratRMS; + valNodeFeature["rmsValues"] = dataDymX.RmsValues; + valNodeFeature["envelopEnergy"] = dataDymX.EnvelopEnergy; + valNodeFeature["Amp1"] = dataDymX.Amp1; + valNodeFeature["Amp2"] = dataDymX.Amp2; + valNodeFeature["Amp3"] = dataDymX.Amp3; + valNodeFeature["Amp4"] = dataDymX.Amp4; + valNodeFeature["Amp5"] = dataDymX.Amp5; + valNodeFeature["Phase1"] = dataDymX.Phase1; + valNodeFeature["Phase2"] = dataDymX.Phase2; + valNodeFeature["Phase3"] = dataDymX.Phase3; + valNodeFeature["Phase4"] = dataDymX.Phase4; + valNodeFeature["timeStamp"] = nowTimetamp; + valNodeData.append(valNodeFeature); + DataRecvDym dataDymY; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[37], pRecvData->Data[36]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.DiagnosisPk = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[39], pRecvData->Data[38]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.RmsValues = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[41], pRecvData->Data[40]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.IntegratPk = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[43], pRecvData->Data[42]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.IntegratRMS = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[45], pRecvData->Data[44]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.Amp1 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[47], pRecvData->Data[46]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.Amp2 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[49], pRecvData->Data[48]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.Amp3 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[51], pRecvData->Data[50]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.Amp4 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[53], pRecvData->Data[52]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymY.Amp5 = lowbit * n; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[55], pRecvData->Data[54]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } +// dataDymY.EnvelopEnergy = lowbit * n; + + dataDymY.EnvelopEnergy = 0; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[57], pRecvData->Data[56]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymY.Phase1 = 0; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[59], pRecvData->Data[58]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymY.Phase2 = 0; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[61], pRecvData->Data[60]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymY.Phase3 = 0; + + memset(buf, 0, sizeof(buf)); +// sprintf(buf, "%02x%02x", pRecvData->Data[63], pRecvData->Data[62]); +// iTemp = (unsigned int)strtol(buf, NULL, 16); +// highbit = iTemp >> 14 & 0x3; +// lowbit = iTemp & 0x3fff; +// switch (highbit) +// { +// case 0: +// n = 0.0001; +// break; +// case 1: +// n = 0.01; +// break; +// case 2: +// n = 1; +// break; +// case 3: +// n = 100; +// break; +// } + dataDymY.Phase4 = 0; + + memset(whereCon, 0, 1024); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Y").c_str()); + memset(updateSql, 0, 1024); + sprintf(updateSql, "diagnosisPk='%f',integratPk='%f',integratRMS='%f',rmsValues='%f',envelopEnergy='%f',\ + Amp1='%f',Amp2='%f',Amp3='%f',Amp4='%f',Amp5='%f',Phase1='%f',Phase2='%f',Phase3='%f',Phase4='%f',timeStamp='%s',StaticIndex = %d,nodeResend = %d ",\ + dataDymY.DiagnosisPk, dataDymY.IntegratPk, dataDymY.IntegratRMS, dataDymY.RmsValues, dataDymY.EnvelopEnergy,\ + dataDymY.Amp1, dataDymY.Amp2, dataDymY.Amp3, dataDymY.Amp4, dataDymY.Amp5,dataDymY.Phase1, dataDymY.Phase2, dataDymY.Phase3, dataDymY.Phase4, nowTimetamp.c_str(),staticIndex,nodeResend); + if ( /*0 == sqlite_db_ctrl::instance().GetTableRows(T_DATA_INFO(TNAME), whereCon)*/ (Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0) { + char insertSql[1024] = { 0 }; + memset(insertSql,0x00,sizeof(insertSql)); + sprintf(insertSql, "'%s','%s','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f',%d,'%s','1',%d", + strLongAddr.c_str(), (strMeasurementID + "-Y").c_str(), dataDymY.DiagnosisPk, dataDymY.IntegratPk, dataDymY.IntegratRMS, dataDymY.RmsValues, dataDymY.EnvelopEnergy,\ + dataDymY.Amp1, dataDymY.Amp2, dataDymY.Amp3, dataDymY.Amp4, dataDymY.Amp5,dataDymY.Phase1, dataDymY.Phase2, dataDymY.Phase3, dataDymY.Phase4,staticIndex, nowTimetamp.c_str(),nodeResend); + sqlite_db_ctrl::instance().InsertData(szTableName, insertSql); + + if(0 == sqlite_db_ctrl::instance().GetTableRows(T_DATA_INFO(TNAME), whereCon)) + sqlite_db_ctrl::instance().InsertData(T_DATA_INFO(TNAME), insertSql); + else + sqlite_db_ctrl::instance().UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon); + } else { + + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-Y").c_str(),strTime.c_str()); +// sprintf(whereCon, "channelID='%s' and sendMsg = '1' ", (strLongAddr + "-Y").c_str()); + sqlite_db_ctrl::instance().UpdateTableData(szTableName, updateSql, whereCon); + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Y").c_str()); + sqlite_db_ctrl::instance().UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon); + } + zlog_info(zct,"y: %s,%s,diagnosisPk=%f,integratPk=%f,integratRMS=%f,rmsValues=%f,envelopEnergy=%f,Amp1=%f,Amp2=%f,Amp3=%f,Amp4=%f,Amp5=%f,Phase1=%f,Phase2=%f,Phase3=%f,Phase4=%f,timeStamp=%s\n",\ + strLongAddr.c_str(), (strMeasurementID + "-Y").c_str(), dataDymY.DiagnosisPk, dataDymY.IntegratPk, dataDymY.IntegratRMS, dataDymY.RmsValues, dataDymY.EnvelopEnergy,\ + dataDymY.Amp1, dataDymY.Amp2, dataDymY.Amp3, dataDymY.Amp4, dataDymY.Amp5,dataDymY.Phase1, dataDymY.Phase2, dataDymY.Phase3, dataDymY.Phase4, nowTimetamp.c_str()); + + + valNodeFeature["dataNodeNo"] = strMeasurementID; + valNodeFeature["ChannelId"] = strMeasurementID + "-Y"; + valNodeFeature["diagnosisPk"] = dataDymY.DiagnosisPk; + valNodeFeature["integratPk"] = dataDymY.IntegratPk; + valNodeFeature["integratRMS"] = dataDymY.IntegratRMS; + valNodeFeature["rmsValues"] = dataDymY.RmsValues; + valNodeFeature["envelopEnergy"] = dataDymY.EnvelopEnergy; + valNodeFeature["Amp1"] = dataDymY.Amp1; + valNodeFeature["Amp2"] = dataDymY.Amp2; + valNodeFeature["Amp3"] = dataDymY.Amp3; + valNodeFeature["Amp4"] = dataDymY.Amp4; + valNodeFeature["Amp5"] = dataDymY.Amp5; + valNodeFeature["Phase1"] = dataDymY.Phase1; + valNodeFeature["Phase2"] = dataDymY.Phase2; + valNodeFeature["Phase3"] = dataDymY.Phase3; + valNodeFeature["Phase4"] = dataDymY.Phase4; + valNodeFeature["timeStamp"] = nowTimetamp; + valNodeData.append(valNodeFeature); + + DataRecvDym dataDymZ; + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[65], pRecvData->Data[64]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.DiagnosisPk = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[67], pRecvData->Data[66]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.RmsValues = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[69], pRecvData->Data[68]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.IntegratPk = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[71], pRecvData->Data[70]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.IntegratRMS = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[73], pRecvData->Data[72]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Amp1 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[75], pRecvData->Data[74]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Amp2 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[77], pRecvData->Data[76]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Amp3 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[79], pRecvData->Data[78]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + + break; + } + dataDymZ.Amp4 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[81], pRecvData->Data[80]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Amp5 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[83], pRecvData->Data[82]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.EnvelopEnergy = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[85], pRecvData->Data[84]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Phase1 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[87], pRecvData->Data[86]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Phase2 = lowbit * n; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[89], pRecvData->Data[88]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Phase3 = lowbit * n; + + sprintf(buf, "%02x%02x", pRecvData->Data[91], pRecvData->Data[90]); + iTemp = (unsigned int)strtol(buf, NULL, 16); + highbit = iTemp >> 14 & 0x3; + lowbit = iTemp & 0x3fff; + switch (highbit) + { + case 0: + n = 0.0001; + break; + case 1: + n = 0.01; + break; + case 2: + n = 1; + break; + case 3: + n = 100; + break; + } + dataDymZ.Phase4 = lowbit * n; + + memset(whereCon, 0, 1024); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Z").c_str()); + memset(updateSql, 0, 1024); + + sprintf(updateSql, "diagnosisPk='%f',integratPk='%f',integratRMS='%f',rmsValues='%f',envelopEnergy='%f',\ + Amp1='%f',Amp2='%f',Amp3='%f',Amp4='%f',Amp5='%f',Phase1='%f',Phase2='%f',Phase3='%f',Phase4='%f',timeStamp='%s',StaticIndex = %d,nodeResend = %d ",\ + dataDymZ.DiagnosisPk, dataDymZ.IntegratPk, dataDymZ.IntegratRMS, dataDymZ.RmsValues, dataDymZ.EnvelopEnergy,\ + dataDymZ.Amp1, dataDymZ.Amp2, dataDymZ.Amp3, dataDymZ.Amp4, dataDymZ.Amp5,dataDymZ.Phase1, dataDymZ.Phase2, dataDymZ.Phase3, dataDymZ.Phase4, nowTimetamp.c_str(),staticIndex,nodeResend); + if ( /*0 == sqlite_db_ctrl::instance().GetTableRows(T_DATA_INFO(TNAME), whereCon)*/ Count *3 < SAVE_COUNT && (lTime < OneWeek || strTime.size() == 0)) { + char insertSql[1024] = { 0 }; + memset(insertSql,0x00,sizeof(insertSql)); + sprintf(insertSql, "'%s','%s','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f',%d,'%s','1',%d", + strLongAddr.c_str(), (strMeasurementID + "-Z").c_str(), dataDymZ.DiagnosisPk, dataDymZ.IntegratPk, dataDymZ.IntegratRMS, dataDymZ.RmsValues, dataDymZ.EnvelopEnergy,\ + dataDymZ.Amp1, dataDymZ.Amp2, dataDymZ.Amp3, dataDymZ.Amp4, dataDymZ.Amp5,dataDymZ.Phase1, dataDymZ.Phase2, dataDymZ.Phase3, dataDymZ.Phase4, staticIndex,nowTimetamp.c_str(),nodeResend); + sqlite_db_ctrl::instance().InsertData(szTableName, insertSql); + + if(0 == sqlite_db_ctrl::instance().GetTableRows(T_DATA_INFO(TNAME), whereCon)) + sqlite_db_ctrl::instance().InsertData(T_DATA_INFO(TNAME), insertSql); + else + sqlite_db_ctrl::instance().UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon); + } else { + + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-Z").c_str(),strTime.c_str()); +// sprintf(whereCon, "channelID='%s' and sendMsg = '1'", (strLongAddr + "-Z").c_str()); + sqlite_db_ctrl::instance().UpdateTableData(szTableName, updateSql, whereCon); + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Z").c_str()); + sqlite_db_ctrl::instance().UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon); + } + zlog_info(zct,"Z: %s,%s,diagnosisPk=%f,integratPk=%f,integratRMS=%f,rmsValues=%f,envelopEnergy=%f,Amp1=%f,Amp2=%f,Amp3=%f,Amp4=%f,Amp5=%f,Phase1=%f,Phase2=%f,Phase3=%f,Phase4=%f,timeStamp=%s\n",\ + strLongAddr.c_str(), (strMeasurementID + "-Z").c_str(), dataDymZ.DiagnosisPk, dataDymZ.IntegratPk, dataDymZ.IntegratRMS, dataDymZ.RmsValues, dataDymZ.EnvelopEnergy,\ + dataDymZ.Amp1, dataDymZ.Amp2, dataDymZ.Amp3, dataDymZ.Amp4, dataDymZ.Amp5,dataDymZ.Phase1, dataDymZ.Phase2, dataDymZ.Phase3, dataDymZ.Phase4, nowTimetamp.c_str()); + + memset(whereCon,0x00,sizeof(whereCon)); + sprintf(whereCon, "dataNodeNo='%s'", strLongAddr.c_str()); + sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_INFO(TNAME), "status='1'", whereCon); + //string strData = sqlite_db_ctrl::instance().GetNodeConfigureInfor(whereCon); + //data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str()); + //无线传感器Z信息 + valNodeFeature["dataNodeNo"] = strMeasurementID; + valNodeFeature["ChannelId"] = strMeasurementID + "-Z"; + valNodeFeature["diagnosisPk"] = dataDymZ.DiagnosisPk; + valNodeFeature["integratPk"] = dataDymZ.IntegratPk; + valNodeFeature["integratRMS"] = dataDymZ.IntegratRMS; + valNodeFeature["rmsValues"] = dataDymZ.RmsValues; + valNodeFeature["envelopEnergy"] = dataDymZ.EnvelopEnergy; + valNodeFeature["Amp1"] = dataDymZ.Amp1; + valNodeFeature["Amp2"] = dataDymZ.Amp2; + valNodeFeature["Amp3"] = dataDymZ.Amp3; + valNodeFeature["Amp4"] = dataDymZ.Amp4; + valNodeFeature["Amp5"] = dataDymZ.Amp5; + valNodeFeature["Phase1"] = dataDymZ.Phase1; + valNodeFeature["Phase2"] = dataDymZ.Phase2; + valNodeFeature["Phase3"] = dataDymZ.Phase3; + valNodeFeature["Phase4"] = dataDymZ.Phase4; + valNodeFeature["timeStamp"] = nowTimetamp; + valNodeData.append(valNodeFeature); + + memset(whereCon, 0, 1024); + sprintf(whereCon, "dataNodeNo='%s'", strLongAddr.c_str()); + + std::string strBattery = sqlite_db_ctrl::instance().GetData(T_SENSOR_INFO(TNAME),"batteryPower",whereCon); + std::vector vBattery; + vBattery.push_back("0"); + vBattery.push_back("0"); + if(strBattery.length() > 0){ + + boost::split( vBattery, strBattery, boost::is_any_of( "," ), boost::token_compress_on ); + } + + //无线传感器信息 + Json::Value root; + Json::Value valdatastatic; + valdatastatic["TemperatureTop"] = dataStatic.TemTop; + valdatastatic["TemperatureBot"] = dataStatic.TemBot; + valdatastatic["WorkTime"] = dataStatic.nodeWorkTime; + valdatastatic["SendTime"] = dataStatic.nodeSendTime; + valdatastatic["Dip"] = dataStatic.Dip; + valdatastatic["Voltage"] = dataStatic.Voltage; + valdatastatic["ChannelType"] = "STATUS"; + valdatastatic["ChannelId"] = strMeasurementID + "-S"; + valdatastatic["TimeStamp"] = nowTimetamp; + valdatastatic["bateryProportion"] = atof(vBattery[1].c_str())/atof(vBattery[0].c_str()); + valdatastatic["batteryRemainDay"] = atof(vBattery[1].c_str()); + valdatastatic["dataNodeNo"] = strMeasurementID; + valNodeData.append(valdatastatic); + + root["data"] = valNodeData; + root["TimeStamp"] = nowTimetamp; + root["dataNodeNo"] = strMeasurementID; + root["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G; + Json::FastWriter featureValue; + std::string strstatisticData = featureValue.write(root); + //传感器发来的数据包中的表示设备信息的数据转化为json格式后,通过调用data_publish将数据传给mqttclient : Topic:wireless/cmd/60294D203717 + int iRet = data_publish(strstatisticData.c_str(), GlobalConfig::Topic_G.mPubData.c_str()); + zlog_info(zct,"dataNodeNo = '%s' and TimeStamp = '%s',MQTT ret = %d\n",strLongAddr.c_str(),nowTimetamp.c_str(),iRet); + if(iRet != 0){ + char updateSql[1024] = { 0 }; + memset(whereCon, 0, 64); + sprintf(whereCon, "dataNodeNo = '%s' and TimeStamp = '%s'", strLongAddr.c_str(),nowTimetamp.c_str()); + memcpy(updateSql, "sendMsg='0'",sizeof(updateSql)); + sqlite_db_ctrl::instance().UpdateTableData(szTableNameStatic, updateSql, whereCon); + sqlite_db_ctrl::instance().UpdateTableData(szTableNameData, updateSql, whereCon); + } + //综上代码,把静态数据,x y z轴的特征值存放到sql数据库中(如果数据原来不存在,则插入新数据;如果存在,则更新数据) + + zlog_info(zct,"Dip : %d TemBot : %f TemBot : %f Voltage : %d\n", dataStatic.Dip, dataStatic.TemBot, dataStatic.TemTop, dataStatic.Voltage); + + memset(selectCon,0x00,sizeof(selectCon)); + sprintf(selectCon, "zigbeeSignal <> '' ORDER BY timeStamp desc LIMIT 0,1"); + strTime = sqlite_db_ctrl::instance().GetData(szTableNameStatic, "timeStamp", selectCon); + +} void Uart::DealDataNodeFeature(const char *pData, int flag) { RecvData *pRecvData = (RecvData *)pData; char whereCon[1024] = {0};