From b3c957519044d88d26f019f06285676b1e71edd3 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Thu, 3 Apr 2025 10:00:57 +0800 Subject: [PATCH 1/6] add wave record --- .settings/language.settings.xml | 4 +- scheduler/schedule.cpp | 4 +- scheduler/schedule.hpp | 4 +- uart/uart.cpp | 75 ++++++++++++++++++++------------- uart/uart_feature_parse.cpp | 5 +-- 5 files changed, 54 insertions(+), 38 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index a813cfe..9f396fc 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/scheduler/schedule.cpp b/scheduler/schedule.cpp index 6d8e538..4fa9ee5 100644 --- a/scheduler/schedule.cpp +++ b/scheduler/schedule.cpp @@ -394,7 +394,7 @@ SensorScheduler::SensorScheduler() { UpdateCfg::ReadCfg(update_); } -int SensorScheduler::WaveError(int short_addr) { +int SensorScheduler::WaveError(uint16_t short_addr) { auto iter = failure_map_.find(short_addr); if (iter == failure_map_.end()) { failure_map_[short_addr] = 3; // 重试次数 @@ -427,7 +427,7 @@ bool SensorScheduler::MissedWave(uint16_t short_addr) { return false; } -void SensorScheduler::WaveSuccess(int short_addr) { +void SensorScheduler::WaveSuccess(uint16_t short_addr) { success_set_.insert(short_addr); auto iter = failure_map_.find(short_addr); if (iter != failure_map_.end()) { diff --git a/scheduler/schedule.hpp b/scheduler/schedule.hpp index 3642d40..dae6c56 100644 --- a/scheduler/schedule.hpp +++ b/scheduler/schedule.hpp @@ -41,8 +41,8 @@ public: int StartSchedule(int short_addr, int &next_duration); int GetNextDuration(int short_addr); - int WaveError(int short_addr); - void WaveSuccess(int short_addr); + int WaveError(uint16_t short_addr); + void WaveSuccess(uint16_t short_addr); long GetBaseTimestamp(int id); long CalcNextTimestamp(int id, uint16_t short_addr); diff --git a/uart/uart.cpp b/uart/uart.cpp index 0dd6146..8ad9275 100644 --- a/uart/uart.cpp +++ b/uart/uart.cpp @@ -59,13 +59,12 @@ int Uart::UartRecv(int fd, char srcshow, char *buffer) { mssleep(10000); wave_trans_ = true; memset(mUartRecvTmpBuf, 0, BUF_LENGTH); - zlog_warn(zct, "wave end"); + zlog_warn(zct, "wave end,now_task = %d", now_task); } mssleep(10000); } else if (ret > 0) { maxSize += ret; timeoutflag = 0; - m_TimeStamp = 0; memcpy(mUartRecvTmpBuf + offSize, buff, ret); offSize = offSize + ret; if (offSize > BUF_LENGTH * 15) { @@ -99,7 +98,6 @@ int Uart::UartRecv(int fd, char srcshow, char *buffer) { Uart::Uart() : mUart(mIoSev), mStrand(mIoSev) { mRdLength = 0; - m_TimeStamp = 0; mlastSize = 0; fd = 0; waittime = 0; @@ -1021,7 +1019,9 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { memset(mUartRecvTmpBuf, 0x00, sizeof(mUartRecvTmpBuf)); } memcpy(UartRecvBuf + mlastSize, mUartRecvBuf, bytesRead); - + bool wave_error_x = false; + bool wave_error_y = false; + bool wave_error_z = false; bytesRead = bytesRead + mlastSize; for (int i = 0; i < bytesRead; i++) { if (UartRecvBuf[i] == head[0]) { @@ -1035,18 +1035,33 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { char buf[8] = {0x00}; sprintf(buf, "%02d", UartRecvBuf[i + 5]); int command = atoi(buf); - //zlog_info(zct, "command = %d ShortAddr :%s", command, strShortAddr.c_str()); - if ((mPackgeIndex == -1 || (unsigned int)UartRecvBuf[i + 6] == 0) && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z) ) { + if (wave_error_x && !wave_error_y && !wave_error_z && command == WAVE_X) + { + continue; + } + else if (wave_error_x && wave_error_y && !wave_error_z && command == WAVE_Y) + { + continue; + } + if ( wave_error_z && command == WAVE_Z) + { + m_waveCountX = 0; + m_waveCountY = 0; + m_waveCountZ = 0; + g_VecWaveDataX.clear(); + g_VecWaveDataY.clear(); + g_VecWaveDataZ.clear(); + break; + } + if ((mPackgeIndex == -1 || (unsigned int)UartRecvBuf[i + 6] == 0) && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z) && now_task == WAVE_CMD) { mPackgeIndex = UartRecvBuf[i + 6] & 0xFF; - } else if ((unsigned int)mPackgeIndex == (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && command != 2 && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z)) { + } else if ((unsigned int)mPackgeIndex == (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && command != 2 && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z) && now_task == WAVE_CMD) { zlog_warn(zct, "mPackgeIndex same index1:%d,index2:%02d ShortAddr :%s ", mPackgeIndex, UartRecvBuf[i + 6] & 0xff, strShortAddr.c_str()); continue; - } else if ((unsigned int)mPackgeIndex + 1 != (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && command != 2 && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z)) { - m_TimeStamp = 0; + } else if ((unsigned int)mPackgeIndex + 1 != (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && command != 2 && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z) && now_task == WAVE_CMD) { - zlog_warn(zct, "mPackgeIndex error index1:%d,index2:%02d ShortAddr :%s ", mPackgeIndex, UartRecvBuf[i + 6] & 0xff, strShortAddr.c_str()); - mPackgeIndex = -1; + zlog_warn(zct, "mPackgeIndex error index1:%d,index2:%02d ShortAddr :%s ,now_task = %d", mPackgeIndex, UartRecvBuf[i + 6] & 0xff, strShortAddr.c_str(),now_task); zlog_warn(zct, "mPackgeIndex error ShortAddr :%s", strShortAddr.c_str()); char tmp[10] = {0x00}; @@ -1056,7 +1071,6 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { strcat(tmp2, tmp); } zlog_warn(zct, "error str = %s", tmp2); - char insertSql[100] = {0x00}; char whereCon[50] = {0x00}; std::string error_msg = ""; @@ -1067,26 +1081,29 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { if (command == WAVE_X){ error_msg = "Index error,wave X"; strChannelID = strMeasurementID + "-X"; + wave_error_x = true; }else if (command == WAVE_Y){ error_msg = "Index error,wave Y"; strChannelID = strMeasurementID + "-Y"; + wave_error_y = true; }else if (command == WAVE_Z){ error_msg = "Index error,wave Z"; strChannelID = strMeasurementID + "-Z"; + wave_error_z = true; } - - sprintf(insertSql, "'%s','%s','%s',%d,'%d','%s' ", strChannelID.c_str(),strShortAddr.c_str(),localtimestamp,bytesRead,0,error_msg.c_str()); - sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); + if(scheduler::instance().WaveError(wave_shortAddr) < 0){ + zlog_error(zct, "WaveError error ShortAddr :%s", strShortAddr.c_str()); + sprintf(insertSql, "'%s','%s','%s',%d,'%d','%s' ", strChannelID.c_str(),strShortAddr.c_str(),localtimestamp,bytesRead,0,error_msg.c_str()); + sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); + } + JsonData jd; jd.JsonCmd_32(strMeasurementID,1,1,strChannelID,error_msg); - - break; + continue; } if (now_task == WAVE_CMD && (command == WAVE_X || command == WAVE_Y || command == WAVE_Z)) { if (!CheckCrc(&UartRecvBuf[i], 99)) { - m_TimeStamp = 0; - mPackgeIndex = -1; zlog_warn(zct, "CheckCrc error ShortAddr :%s command = %d", strShortAddr.c_str(), command); char tmp[10] = {0x00}; char tmp2[10] = {0x00}; @@ -1095,12 +1112,7 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { strcat(tmp2, tmp); } zlog_error(zct, "error str = %s", tmp2); - m_waveCountX = 0; - m_waveCountY = 0; - m_waveCountZ = 0; - g_VecWaveDataX.clear(); - g_VecWaveDataY.clear(); - g_VecWaveDataZ.clear(); + char insertSql[100] = {0x00}; char whereCon[50] = {0x00}; std::string error_msg = ""; @@ -1111,19 +1123,24 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { if (command == WAVE_X){ error_msg = "Crc error,wave X"; strChannelID = strMeasurementID + "-X"; + wave_error_x = true; }else if (command == WAVE_Y){ error_msg = "Crc error,wave Y"; strChannelID = strMeasurementID + "-Y"; + wave_error_y = true; }else if (command == WAVE_Z){ error_msg = "Crc error,wave Z"; strChannelID = strMeasurementID + "-Z"; + wave_error_z = true; + } + if(scheduler::instance().WaveError(wave_shortAddr) < 0){ + zlog_error(zct, "WaveError error ShortAddr :%s", strShortAddr.c_str()); + sprintf(insertSql, "'%s','%s','%s',%d,'%d','%s' ", strChannelID.c_str(),strShortAddr.c_str(),localtimestamp,bytesRead,0,error_msg.c_str()); + sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); } - sprintf(insertSql, "'%s','%s','%s',%d,'%d','%s' ", strChannelID.c_str(),strShortAddr.c_str(),localtimestamp,bytesRead,0,error_msg.c_str()); - sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); JsonData jd; jd.JsonCmd_32(strMeasurementID,1,1,strChannelID,error_msg); - - break; + continue; } mlastSize = 0; lastSize = bytesRead - i; diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index 2c1fd03..c15e8b0 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -11,6 +11,7 @@ #include "mqttclient/mqtt_client.h" #include "minilzo/minilzo.h" #include "jsonparse/communication_cmd.hpp" +#include "scheduler/schedule.hpp" extern zlog_category_t *zct; extern zlog_category_t *zbt; @@ -802,7 +803,7 @@ void Uart::DealWave() { sprintf(insertSql, "'%s-Z','%02x%02x','%s',0,'1','%s' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp,""); sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); } - + scheduler::instance().WaveSuccess(wave_shortAddr); } std::string ran = ""; @@ -847,8 +848,6 @@ void Uart::DealWave() { g_VecWaveDataZ.clear(); VecWaveDataZ.clear(); } - - wave_trans_ = false; } From 4fc55c74404803779d86c809f6a3324aac92e45e Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Thu, 3 Apr 2025 10:25:55 +0800 Subject: [PATCH 2/6] modify recive wave timeout --- uart/uart.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uart/uart.cpp b/uart/uart.cpp index 8ad9275..29607b5 100644 --- a/uart/uart.cpp +++ b/uart/uart.cpp @@ -46,7 +46,7 @@ int Uart::UartRecv(int fd, char srcshow, char *buffer) { ret = read_data(fd, buff, BUF_LENGTH, 10); if (ret <= 0) { timeoutflag++; - if (timeoutflag > 300) { + if (timeoutflag > 500) { DealReviveDuration(wave_shortAddr); zlog_warn(zct, "===============0x9999 timeout= %d offSize = %d===============shortAddr = %02x%02x", timeoutflag, offSize,UINT16_HIGH(wave_shortAddr),UINT16_LOW(wave_shortAddr)); zlog_warn(zct, "0x9999 timeout %d===============Size = %d", timeoutflag, offSize); From fb1ea46e74d0772873e7b99a8f901befdda3cc9d Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Thu, 3 Apr 2025 16:04:16 +0800 Subject: [PATCH 3/6] version 5.4 --- platform/platform_init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform_init.cpp b/platform/platform_init.cpp index 7279e23..2535a7a 100644 --- a/platform/platform_init.cpp +++ b/platform/platform_init.cpp @@ -14,7 +14,7 @@ int GlobalConfig::LinkStatus_G = 0; int GlobalConfig::LinkCount = 0; int GlobalConfig::net0Status = 1; -std::string GlobalConfig::Version = "5.3"; +std::string GlobalConfig::Version = "5.4"; std::string GlobalConfig::MacAddr_G = ""; std::string GlobalConfig::MacAddr_G2 = ""; std::string GlobalConfig::IpAddr_G = ""; From 539ca9463caf081a70523873b592084108226a46 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Mon, 7 Apr 2025 15:51:25 +0800 Subject: [PATCH 4/6] modify wave retransfer bugs --- uart/uart.cpp | 3 ++- uart/uart_feature_parse.cpp | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/uart/uart.cpp b/uart/uart.cpp index 29607b5..f318e30 100644 --- a/uart/uart.cpp +++ b/uart/uart.cpp @@ -1023,6 +1023,7 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { bool wave_error_y = false; bool wave_error_z = false; bytesRead = bytesRead + mlastSize; + for (int i = 0; i < bytesRead; i++) { if (UartRecvBuf[i] == head[0]) { char buf[12] = {0x00}; @@ -1039,7 +1040,7 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { { continue; } - else if (wave_error_x && wave_error_y && !wave_error_z && command == WAVE_Y) + else if ((wave_error_x || wave_error_y) && !wave_error_z && command == WAVE_Y) { continue; } diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index c15e8b0..e41619e 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -804,6 +804,10 @@ void Uart::DealWave() { sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); } scheduler::instance().WaveSuccess(wave_shortAddr); + }else{ + if(scheduler::instance().WaveError(wave_shortAddr) < 0){ + zlog_error(zct, "wave size is 0,shortAddr %02x%02x", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF); + } } std::string ran = ""; From 77ec7f687bd161a489c4ca5dc64f8cbf6090e86e Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Mon, 7 Apr 2025 16:41:16 +0800 Subject: [PATCH 5/6] modify feature save time --- common/global.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/global.hpp b/common/global.hpp index f8b3ec6..23116d6 100644 --- a/common/global.hpp +++ b/common/global.hpp @@ -57,8 +57,8 @@ public : }; -#define SAVE_COUNT 4800*4 -#define OneWeek 604800*7 +#define SAVE_COUNT 6048 +#define OneWeek 86400 * 7 //按8 取整 From 5254779cc78034390a9ef6936e80b0384d7af725 Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Tue, 8 Apr 2025 14:25:54 +0800 Subject: [PATCH 6/6] modify web code --- common/parameter_defination.hpp | 3 ++- jsonparse/web_cmd_parse3.cpp | 43 +++++++++++++++++++++++++-------- localserver/web_cmd.cpp | 1 + 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/common/parameter_defination.hpp b/common/parameter_defination.hpp index 19b28d1..7c2fcdf 100644 --- a/common/parameter_defination.hpp +++ b/common/parameter_defination.hpp @@ -338,12 +338,13 @@ struct Param_61 { Param_61() : mMode(0),MeasurementID(""),straxis(""),mPackageFlag(0){}; }; struct Param_62 { + int mMode; std::string MeasurementID; std::string straxis; std::string timeStart; std::string timeEnd; int mPackageFlag; - Param_62() : MeasurementID(""),straxis(""),timeStart(""),timeEnd(""),mPackageFlag(0){}; + Param_62() : mMode(0),MeasurementID(""),straxis(""),timeStart(""),timeEnd(""),mPackageFlag(0){}; }; struct Param_63 { diff --git a/jsonparse/web_cmd_parse3.cpp b/jsonparse/web_cmd_parse3.cpp index e2359d8..6c89b59 100644 --- a/jsonparse/web_cmd_parse3.cpp +++ b/jsonparse/web_cmd_parse3.cpp @@ -897,14 +897,29 @@ std::string JsonData::JsonCmd_Cgi_62(Param_62 ¶m){ vec_t vetRes = sqlite_db_ctrl::instance().GetDataMultiLineOfOneColumn(T_SENSOR_INFO(TNAME), T_SENSOR_INFO(DATANODENO), NULL); int nSize = vetRes.size(); if (nSize > 0) { - char szTableName[100] = {0x00}, whereCon[256] = {0x00}; - sprintf(szTableName, " receive_wave_status "); + char szTableName[100] = {0x00}, whereCon[256] = {0x00},selectCon[100] = {0x00}; + if (param.mMode == 1){ + sprintf(selectCon," dataNodeNo,channelID,timeStamp,sendMsg,nodeResend "); + sprintf(szTableName,"t_data_%s",param.MeasurementID.c_str()); + }else{ + sprintf(selectCon," * "); + sprintf(szTableName, " receive_wave_status "); + } - if(param.straxis == "") - sprintf(whereCon, " data_nodeno like '%%%s%%' and timeStamp < '%s' and timeStamp > '%s' ", param.MeasurementID.c_str(), param.timeEnd.c_str(), param.timeStart.c_str()); - else - sprintf(whereCon, " data_nodeno = '%s-%s' and timeStamp < '%s' and timeStamp > '%s' ", param.MeasurementID.c_str(),param.straxis.c_str(), param.timeEnd.c_str(), param.timeStart.c_str()); - + if(param.straxis == ""){ + if (param.mMode == 1){ + sprintf(whereCon, " channelID like '%%%s%%' and timeStamp < '%s' and timeStamp > '%s' ", param.MeasurementID.c_str(), param.timeEnd.c_str(), param.timeStart.c_str()); + }else{ + sprintf(whereCon, " data_nodeno like '%%%s%%' and timeStamp < '%s' and timeStamp > '%s' ", param.MeasurementID.c_str(), param.timeEnd.c_str(), param.timeStart.c_str()); + } + } + else{ + if (param.mMode == 1){ + sprintf(whereCon, " channelID = '%s-%s' and timeStamp < '%s' and timeStamp > '%s' ", param.MeasurementID.c_str(),param.straxis.c_str(), param.timeEnd.c_str(), param.timeStart.c_str()); + }else{ + sprintf(whereCon, " data_nodeno = '%s-%s' and timeStamp < '%s' and timeStamp > '%s' ", param.MeasurementID.c_str(),param.straxis.c_str(), param.timeEnd.c_str(), param.timeStart.c_str()); + } + } int rows = sqlite_db_ctrl::instance().GetTableRows(szTableName, whereCon); int packgeNo = param.mPackageFlag; @@ -935,13 +950,21 @@ std::string JsonData::JsonCmd_Cgi_62(Param_62 ¶m){ memset(whereCon, 0x00, sizeof(whereCon)); if(param.straxis == "") { - sprintf(whereCon, "data_nodeno like '%%%s%%' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.MeasurementID.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + if (param.mMode == 1){ + sprintf(whereCon, " channelID like '%%%s%%' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.MeasurementID.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + }else{ + sprintf(whereCon, " data_nodeno like '%%%s%%' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.MeasurementID.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + } }else{ - sprintf(whereCon, "data_nodeno = %s-%s' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.MeasurementID.c_str(),param.straxis.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + if (param.mMode == 1){ + sprintf(whereCon, " channelID = '%s-%s' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.MeasurementID.c_str(),param.straxis.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + }else{ + sprintf(whereCon, "data_nodeno = %s-%s' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.MeasurementID.c_str(),param.straxis.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + } } array_t vecRes; - vecRes = sqlite_db_ctrl::instance().GetDataMultiLine(szTableName, "*", whereCon); + vecRes = sqlite_db_ctrl::instance().GetDataMultiLine(szTableName, selectCon, whereCon); zlog_info(zct, "vecRes = %d", vecRes.size()); if (vecRes.size() > 0) { Json::Value jsStaticData; diff --git a/localserver/web_cmd.cpp b/localserver/web_cmd.cpp index 94b6867..96fc8f1 100644 --- a/localserver/web_cmd.cpp +++ b/localserver/web_cmd.cpp @@ -431,6 +431,7 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) { case kWaveReceive:{ JsonData jd; Param_62 param; + param.mMode = recvBody["type"].asInt(); param.mPackageFlag = recvBody["package"].asInt(); param.timeStart = recvBody["timeStart"].asString(); param.timeEnd = recvBody["timeEnd"].asString();