This commit is contained in:
zhangsheng 2024-11-08 09:17:35 +08:00
parent fb8ee6a00a
commit 972c23424f
11 changed files with 172 additions and 50 deletions

View File

@ -316,5 +316,11 @@ struct Param_59 {
std::string straxis;
Param_59() : mMode(0),DataNodeNo(""),straxis(""){};
};
struct Param_60 {
std::string fileName;
int product;
std::vector<std::string> dataNodeNo;
Param_60() : fileName(""),product(0){};
};
#endif // PARAMETER_DEFINATION_HPP_

View File

@ -37,7 +37,7 @@ void SqliteDB::SqliteInit(const char *pDbName) {
//创建传感器信息存储表
memset(sql_exec, 0, 2048);
sprintf(sql_exec, "create table if not exists %s(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);",
sprintf(sql_exec, "create table if not exists %s(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);",
T_SENSOR_INFO(TNAME),
T_SENSOR_INFO(DATANODENO),
T_SENSOR_INFO(DATANODENAME),
@ -82,7 +82,8 @@ void SqliteDB::SqliteInit(const char *pDbName) {
T_SENSOR_INFO(RSSI),
"UpdateFlag",
"LooseValue",
"batteryPower");
"batteryPower",
"upgradeStatus");
CreateTable(sql_exec);
int iRet = GetTableRows(" sqlite_master "," name = 't_sensor_info' and sql LIKE '%LooseValue%' ");
@ -102,6 +103,10 @@ void SqliteDB::SqliteInit(const char *pDbName) {
if(iRet == 0){
CreateTable("ALTER TABLE t_sensor_info ADD COLUMN 'NodeWaveSend'");
}
iRet = GetTableRows(" sqlite_master "," name = 't_sensor_info' and sql LIKE '%upgradeStatus%' ");
if(iRet == 0){
CreateTable("ALTER TABLE t_sensor_info ADD COLUMN 'upgradeStatus'");
}
memset(sql_exec, 0, 2048);
sprintf(sql_exec,"update t_sensor_info set MeasurementID = dataNodeNo where MeasurementID IS NULL ;");
@ -115,6 +120,11 @@ void SqliteDB::SqliteInit(const char *pDbName) {
memset(sql_exec, 0, 2048);
sprintf(sql_exec,"update t_sensor_info set NodeWaveSend = '0,0,0' where NodeWaveSend IS NULL ;");
UpdateTableData(sql_exec);
sprintf(sql_exec,"update t_sensor_info set upgradeStatus = '0' where upgradeStatus IS NULL ;");
UpdateTableData(sql_exec);
sprintf(sql_exec,"update t_sensor_info set upgradeStatus = '0' where upgradeStatus = '' ;");
UpdateTableData(sql_exec);
//创建传感器数据存储表
memset(sql_exec, 0, 2048);
@ -230,6 +240,9 @@ void SqliteDB::SqliteInit(const char *pDbName) {
T_BATTERY_INFO(BATTERYREMAIN),
T_BATTERY_INFO(TIMESTAMP));
CreateTable(sql_exec);
execute_sql_file("/opt/configenv/firmware_upgrade.sql");
}
void SqliteDB::Createtable(const char *ptableName) {
@ -688,7 +701,51 @@ int SqliteDB::UpdateTableDataOneColumn(const char *tablename, const char *column
}
return iRet;
}
int callback(void *data, int argc, char **argv, char **azColName) {
// 如果需要处理查询结果,可以在此回调函数中进行操作
for (int i = 0; i < argc; i++) {
zlog_error(zct,"%s = %s", azColName[i], argv[i] ? argv[i] : "NULL");
}
return 0;
}
int SqliteDB::execute_sql_file(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
zlog_error(zct,"无法打开 SQL 文件");
return 1;
}
// 获取文件大小
fseek(file, 0, SEEK_END);
long file_size = ftell(file);
fseek(file, 0, SEEK_SET);
// 为文件内容分配内存
char *sql = (char *)malloc(file_size + 1);
if (sql == NULL) {
zlog_error(zct,"内存分配失败");
fclose(file);
return 2;
}
// 读取文件内容到内存
fread(sql, 1, file_size, file);
sql[file_size] = '\0'; // 确保字符串结尾
fclose(file);
// 执行 SQL 文件中的语句
char *err_msg = NULL;
if (sqlite3_exec(GetDbHandle(), sql, callback, 0, &err_msg) != SQLITE_OK) {
zlog_error(zct, "执行 SQL 错误: %s", err_msg);
sqlite3_free(err_msg);
free(sql);
return 3;
}
free(sql);
return 0;
}
int SqliteDB::InsertData(const char *tablename, const char *insertValues, int replace, bool expandable) {
char *msg;
int iRet = 0;

View File

@ -59,6 +59,7 @@ public:
int UpdateTableData(const char *tablename, const char *updateColumn, const char *whereCond);
int UpdateNodeNameData(const char *tablename, const char *updateColumn, const char *whereCond);
int UpdateTableDataOneColumn(const char *tablename, const char *columnName, const char *columnValue, const char *whereColName = NULL, const char *whereColValue = NULL);
int execute_sql_file(const char *filename);
int UpdateTableData(const char *directSql);
int InsertData(const char *tablename, const char *insertValues, int replace = 0, bool expandalbe = false);
int InsertData(const char *insertSql);

View File

@ -65,6 +65,7 @@ public:
std::string JsonCmd_Cgi_57(Param_57 &param);
std::string JsonCmd_Cgi_58(Param_58 &param);
std::string JsonCmd_Cgi_59(Param_59 &param);
std::string JsonCmd_Cgi_60(Param_60 &param);
std::string JsonCmd_Cgi_default();
private:

View File

@ -109,6 +109,7 @@ std::string JsonData::JsonCmd_Cgi_26(Param_26 &param) {
jsSensorData["MeasurementID"] = arrRes[j][44];
jsSensorData["battery"] = arrRes[j][43];
jsSensorData["nodeWaveSend"] = arrRes[j][45];
jsSensorData["upgradeStatus"] = arrRes[j][46];
jsArray.append(jsSensorData);
}
} else {

View File

@ -513,9 +513,10 @@ std::string JsonData::JsonCmd_Cgi_58(Param_58 &param) {
jsonVal["success"] = true;
jsonVal["message"] = "";
int ret = 0;
std::string error_msg = "";
if (param.mMode == 1)
{
ret = scheduler::instance().Config(param.featureInterVal,param.waveInterVal,param.featureInterTime,param.waveInterTime,param.maxSensorNum);
ret = scheduler::instance().Config(param.featureInterVal,param.waveInterVal,param.featureInterTime,param.waveInterTime,param.maxSensorNum,error_msg);
}else if (param.mMode == 0)
{
ret = scheduler::instance().GetScheduleConfig(param.featureInterVal,param.waveInterVal,param.featureInterTime,param.waveInterTime,param.maxSensorNum);
@ -529,8 +530,9 @@ std::string JsonData::JsonCmd_Cgi_58(Param_58 &param) {
jsBody["maxSensorNum"] = param.maxSensorNum;
}else{
jsonVal["success"] = false;
jsonVal["message"] = "保存失败!";
jsonVal["message"] = error_msg;
}
jsonVal["content"] = jsBody;
return show_value_.write(jsonVal);
}
std::string JsonData::JsonCmd_Cgi_59(Param_59 &param) {
@ -546,7 +548,7 @@ std::string JsonData::JsonCmd_Cgi_59(Param_59 &param) {
if (param.mMode == 1)
{
sprintf(table_name,"t_dataStatic_%s",param.DataNodeNo.c_str());
interval = 400;
interval = 10;
snprintf(sql, sizeof(sql),
"WITH CTE AS ("
@ -564,7 +566,7 @@ std::string JsonData::JsonCmd_Cgi_59(Param_59 &param) {
}else if (param.mMode == 2)
{
sprintf(table_name,"t_data_waveSend");
interval = 7300;
interval = 20;
snprintf(sql, sizeof(sql),
"WITH CTE AS ("
" SELECT timestamp, "
@ -607,3 +609,53 @@ std::string JsonData::JsonCmd_Cgi_59(Param_59 &param) {
return show_value_.write(jsonVal);
}
std::string JsonData::JsonCmd_Cgi_60(Param_60 &param){
Json::Value jsonVal;
jsonVal.clear();
Json::Value jsBody;
jsonVal[JSON_FIELD_CMD] = "60";
jsonVal["success"] = true;
jsonVal["message"] = "";
char file_path[64]={0};
char cmd[64]={0};
sprintf(cmd,"mv /opt/%s /opt/DataNode/",param.fileName.c_str());
system(cmd);
sprintf(file_path,"/opt/DataNodeNo/%s",file_path);
FILE * pFile=NULL;
size_t thisSize = 0;
char *buffer=NULL;
pFile = fopen (file_path,"rb");
if (pFile==NULL) zlog_error(zct,"Error opening file");
else
{
while (fgetc(pFile) != EOF) {
++thisSize;
}
rewind(pFile);
buffer = (char*)malloc(thisSize);
fread (buffer, sizeof (char), thisSize, pFile);
fclose (pFile);
}
char head[9]={0};
int packgeSize = 0;
memcpy(head,buffer,8);
packgeSize = BUILD_UINT32(buffer[8],buffer[9],buffer[10],buffer[11]);
zlog_info(zct,"head = %s\n",head);
zlog_info(zct,"packgeSize = %d\n",packgeSize);
unsigned char sum = 0x00;
for(size_t i = 13; i < thisSize;i++){
sum += buffer[i];
}
printf("sum = %x\n",sum % 256);
return show_value_.write(jsonVal);
char localtimestamp[32] = {0};
GetTimeNet(localtimestamp, 1);
for (size_t i = 0; i < param.dataNodeNo.size(); i++)
{
//char insertSql[1024] = {0};
//sprintf(insertSql, " '%s','%s','%d','%d','%d','%d','%d','%d','%d'",param.dataNodeNo[i].c_str(),localtimestamp);
}
}

View File

@ -48,7 +48,8 @@ enum WebCommand {
kVelocityFreqDomain = 56,
kEnableZigbeePower = 57,
kSchedulingConfiguration = 58,
kLostRecords = 59
kLostRecords = 59,
kTransducerUpgrade = 60
};
class LocalServer {

View File

@ -400,6 +400,21 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) {
std::string data = jd.JsonCmd_Cgi_59(param);
return data;
}break;
case kTransducerUpgrade:{
JsonData jd;
Param_60 param;
param.fileName = recvBody["fileName"].asString();
param.product = recvBody["product"].asInt();
Json::Value recvDataNodeNo = recvBody["DataNodeNo"];
if (recvDataNodeNo.size() > 0)
{
for (size_t i = 0; i < recvDataNodeNo.size(); i++) {
param.dataNodeNo.push_back(recvDataNodeNo[i].asString());
}
}
std::string data = jd.JsonCmd_Cgi_60(param);
return data;
}break;
default:
JsonData jd;
std::string data = jd.JsonCmd_Cgi_default();

View File

@ -45,12 +45,11 @@ 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 > 100) {
DealReviveDuration(wave_shortAddr);
zlog_info(zct, "===============0x9999 timeout= %d offSize = %d===============", timeoutflag, offSize);
zlog_info(zct, "0x9999 timeout %d===============Size = %d", timeoutflag, offSize);
FindRecvPackage(offSize, mUartRecvTmpBuf, head);
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
now_task = -1;
timeoutflag = 0;
offSize = 0;
@ -275,11 +274,11 @@ int Uart::ZigbeeTest() {
void Uart::WriteToUart(const char *strSend, int pLen) {
if (!bUpdate) {
zlog_info(zct, "Write To Uart Start:");
printf( "Write To Uart Start:\n");
for (int i = 0; i < pLen; i++) {
printf("%02X ", *(strSend + i) & 0xFF);
}
zlog_info(zct, "\nWrite To Uart End.");
printf( "\nWrite To Uart End.\n");
}
write_data(fd, (char *)strSend, pLen);
@ -371,7 +370,6 @@ int Uart::DealAskTask(uint16_t ushortAdd){
ModifyDistAddr(ushortAdd);
int next_duration = 0;
int taskID = scheduler::instance().StartSchedule(ushortAdd,next_duration);
taskID = 4;
ScheduleTask scheduleTask;
zlog_info(zct, "taskID = %d ", taskID);
if (taskID == kScheduleEigenValue) //1.特征值
@ -428,7 +426,6 @@ int Uart::DealReviveDuration(uint16_t ushortAdd){
ScheduleTask scheduleTask;
uint16_t next_duration = scheduler::instance().GetNextDuration(ushortAdd);
next_duration = 60;
zlog_info(zct, "next_duration = %d ", next_duration);
scheduleTask.cmd = REVIVE_DURATION;
scheduleTask.shortAddr = ushortAdd;
@ -958,7 +955,7 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
if ((mPackgeIndex == -1 || (unsigned int)UartRecvBuf[i + 6] == 0) && (!bUpdatePre && !bUpdateconfig)) {
mPackgeIndex = UartRecvBuf[i + 6] & 0xFF;
} else if ((unsigned int)mPackgeIndex == (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && (!bUpdatePre && !bUpdateconfig) && command != 2) {
zlog_error(zct, "mPackgeIndex same index1:%d,index2:%02d ShortAddr :%s ", mPackgeIndex, UartRecvBuf[i + 6] & 0xff, strShortAddr.c_str());
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 && (!bUpdatePre && !bUpdateconfig) && command != 2) {
@ -975,16 +972,6 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
strcat(tmp2, tmp);
}
zlog_error(zct, "error str = %s", tmp2);
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
tcflush(fd, TCIOFLUSH);
sleep(1);
modify_LocalAddr(0x8888);
sleep(1);
bModifyAddr = true;
bSendTimeStamp = false;
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
break;
}

View File

@ -29,6 +29,7 @@ enum InteractiveCommand {
SIGNAL_STRENGTH = 13, // 信号强度
DEVICE_EXCEPTION = 14, // 异常: 外设
WAVE_COMPRESS = 15, // 波形数据压缩
UPGRADE_FIRMWARE = 16 //固件升级内容
};
// 无线传感器请求任务
typedef struct {

View File

@ -177,6 +177,7 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
// return;
// }
memset(whereCon, 0x00, sizeof(whereCon));
sprintf(szTableNameData, "t_data_%s", strMeasurementID.c_str());
///////////////////////////////////////////////////////////// for V2.0.3 upgrade to V3.0
std::string strTmp = "";
char sztmp[100] = {0x00};
@ -231,6 +232,7 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
int Count = sqlite_db_ctrl::instance().GetTableRows(szTableName, whereCon);
if (Count == -1) {
sqlite_db_ctrl::instance().CreatedataStatictable(szTableName);
sqlite_db_ctrl::instance().Createtable(szTableNameData);
}
zlog_info(zct, "strLongAddr = %s,strTime = %s", strLongAddr.c_str(), strTime.c_str());
long lTime = atol(nowTimetamp.c_str()) - atol(strTime.c_str());
@ -271,9 +273,7 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
}
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]);
@ -817,7 +817,7 @@ std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRa
std::vector<float> vecData;
size_t j = 0;
std::string strShortAddr = "";
if (iChannel == 3) {
if (iChannel == WAVE_X) {
if (VecWaveDataX.size() > 0) {
g_VecWaveDataX.assign(VecWaveDataX.begin(), VecWaveDataX.end());
waveCount = VecWaveDataX.size();
@ -833,7 +833,7 @@ std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRa
compress = g_mapCompress[strShortAddr].compressChannelX;
count = g_mapCompress[strShortAddr].CountX;
}
if (iChannel == 4) {
if (iChannel == WAVE_Y) {
if (VecWaveDataY.size() > 0) {
g_VecWaveDataY.assign(VecWaveDataY.begin(), VecWaveDataY.end());
waveCount = VecWaveDataY.size();
@ -849,7 +849,7 @@ std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRa
compress = g_mapCompress[strShortAddr].compressChannelY;
count = g_mapCompress[strShortAddr].CountY;
}
if (iChannel == 5) {
if (iChannel == WAVE_Z) {
if (VecWaveDataZ.size() > 0) {
g_VecWaveDataZ.assign(VecWaveDataZ.begin(), VecWaveDataZ.end());
waveCount = VecWaveDataZ.size();
@ -896,27 +896,27 @@ std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRa
}
vecData.push_back(fTemp);
if (strProduct == "01") {
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == 3) { //过滤数据包结尾空数据
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == WAVE_X) { //过滤数据包结尾空数据
zlog_info(zct, "%d vecData.size() == %d,sampleRate * ACCSampleTime = %d", iChannel, vecData.size(), sampleRate * ACCSampleTime);
break;
}
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == 4) { //过滤数据包结尾空数据
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == WAVE_Y) { //过滤数据包结尾空数据
zlog_info(zct, "%d vecData.size() == %d,sampleRate * ACCSampleTime = %d", iChannel, vecData.size(), sampleRate * ACCSampleTime);
break;
}
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == 5) { //过滤数据包结尾空数据
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == WAVE_Z) { //过滤数据包结尾空数据
zlog_info(zct, "%d vecData.size() == %d,sampleRate * ACCSampleTime = %d", iChannel, vecData.size(), sampleRate * ACCSampleTime);
break;
}
} else if (strProduct == "02") {
if (vecData.size() == 8192 && iChannel == 3) { //过滤数据包结尾空数据
if (vecData.size() == 8192 && iChannel == WAVE_X) { //过滤数据包结尾空数据
break;
}
if (vecData.size() == 8192 && iChannel == 4) { //过滤数据包结尾空数据
if (vecData.size() == 8192 && iChannel == WAVE_Y) { //过滤数据包结尾空数据
break;
}
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == 5) { //过滤数据包结尾空数据
if (vecData.size() == sampleRate * ACCSampleTime && iChannel == WAVE_Z) { //过滤数据包结尾空数据
break;
}
}
@ -965,27 +965,27 @@ void Uart::DealWave() {
n = (int)strtol(getrange, NULL, 32);
if (m_waveCountX > 0 || VecWaveDataX.size() > 0) {
zlog_info(zct, "m_waveCountX = %d,VecWaveData = %d", m_waveCountX, VecWaveDataX.size());
coe = Calcoe(n, 3, strProduct, range);
vecData = DealData(3, coe, sampleRate, ACCSampleTime, strProduct);
WriteDatFile(sampleRate, strMeasurementID, 3, vecData);
coe = Calcoe(n, WAVE_X, strProduct, range);
vecData = DealData(WAVE_X, coe, sampleRate, ACCSampleTime, strProduct);
WriteDatFile(sampleRate, strMeasurementID, WAVE_X, vecData);
m_waveCountX = 0;
g_VecWaveDataX.clear();
VecWaveDataX.clear();
}
if (m_waveCountY > 0 || VecWaveDataY.size() > 0) {
zlog_info(zct, "m_waveCountY = %d,VecWaveData = %d", m_waveCountY, VecWaveDataY.size());
coe = Calcoe(n, 4, strProduct, range);
vecData = DealData(4, coe, sampleRate, ACCSampleTime, strProduct);
WriteDatFile(sampleRate, strMeasurementID, 4, vecData);
coe = Calcoe(n, WAVE_Y, strProduct, range);
vecData = DealData(WAVE_Y, coe, sampleRate, ACCSampleTime, strProduct);
WriteDatFile(sampleRate, strMeasurementID, WAVE_Y, vecData);
m_waveCountY = 0;
g_VecWaveDataY.clear();
VecWaveDataY.clear();
}
if (m_waveCountZ > 0 || VecWaveDataZ.size() > 0) {
zlog_info(zct, "m_waveCountZ = %d,VecWaveDataZ = %d", m_waveCountZ, VecWaveDataZ.size());
coe = Calcoe(n, 5, strProduct, range);
vecData = DealData(5, coe, sampleRate, ACCSampleTime, strProduct);
WriteDatFile(sampleRate, strMeasurementID, 5, vecData);
coe = Calcoe(n, WAVE_Z, strProduct, range);
vecData = DealData(WAVE_Z, coe, sampleRate, ACCSampleTime, strProduct);
WriteDatFile(sampleRate, strMeasurementID, WAVE_Z, vecData);
m_waveCountZ = 0;
g_VecWaveDataZ.clear();
VecWaveDataZ.clear();
@ -1016,10 +1016,10 @@ float Uart::Calcoe(int ran, int iChannel, std::string &product, int range) {
} break;
}
} else if (product == "02") {
if (iChannel == 3 || iChannel == 4) {
if (iChannel == WAVE_X || iChannel == WAVE_Y) {
coe = 0.00048828125;
}
if (iChannel == 5) {
if (iChannel == WAVE_Z) {
coe = 0.00172607421875;
}
}
@ -1034,15 +1034,15 @@ void Uart::WriteDatFile(int sampleRate, std::string &strMeasurementID, int iChan
std::string nowTimetamp = std::string(localtimestamp);
std::string strChannelID = "";
switch (iChannel) {
case 3: {
case WAVE_X: {
strFileName = "/opt/data/" + strMeasurementID + "-X.dat";
strChannelID = strMeasurementID + "-X";
} break;
case 4: {
case WAVE_Y: {
strFileName = "/opt/data/" + strMeasurementID + "-Y.dat";
strChannelID = strMeasurementID + "-Y";
} break;
case 5: {
case WAVE_Z: {
strFileName = "/opt/data/" + strMeasurementID + "-Z.dat";
strChannelID = strMeasurementID + "-Z";
} break;