fix wave save bugs

This commit is contained in:
zhangsheng 2024-11-08 16:55:14 +08:00
parent 7de8c71652
commit 634b54f435
11 changed files with 128 additions and 67 deletions

View File

@ -917,37 +917,37 @@ std::string IpAddrInit() {
std::string strip = "";
strip = GetGwIp_(WLAN0);
if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] wlan0: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] wlan0: %s", strip.c_str());
return strip;
}
strip = GetGwIp_(WLAN2);
if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] wlan2: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] wlan2: %s", strip.c_str());
return strip;
}
strip = GetGwIp_(ETH1);
if (strip.compare("0.0.0.0") != 0 && strip.compare("192.168.188.188") != 0) {
zlog_info(zct, "[IpAddrInit] eth1: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] eth1: %s", strip.c_str());
return strip;
}
strip = GetGwIp_(ETH2);
if (strip.compare("0.0.0.0") != 0 && strip.compare("192.168.188.188") != 0) {
zlog_info(zct, "[IpAddrInit] eth2: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] eth2: %s", strip.c_str());
return strip;
}
strip = GetGwIp_(ETH0);
if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] eth0: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] eth0: %s", strip.c_str());
return strip;
}
strip = GetGwIp_(USB0);
if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] usb0: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] usb0: %s", strip.c_str());
return strip;
}
strip = GetGwIp_(WWAN0);
if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] wwan0: %s", strip.c_str());
//zlog_info(zct, "[IpAddrInit] wwan0: %s", strip.c_str());
return strip;
}
zlog_warn(zct, "[IpAddrInit] ip: %s", strip.c_str());

View File

@ -72,7 +72,17 @@ struct compressWaveChannel {
CountZ = 0;
}
};
struct WaveChannel {
std::vector<float> WaveChannelX;
std::vector<float> WaveChannelY;
std::vector<float> WaveChannelZ;
std::string wave_timestamp;
WaveChannel() {
WaveChannelX.reserve(25600);
WaveChannelY.reserve(25600);
WaveChannelZ.reserve(48000);
}
};
struct DevDataOfGwid {
std::string mDevdata;
std::string mDevid;

View File

@ -101,8 +101,10 @@ struct Param_27 {
int mMode;
std::string mCmdSerial;
std::string mDataNodeNo;
std::string mShortAddr;
std::string mMeasurementID;
std::string mType;
Param_27() : mMode(0), mCmdSerial(""), mDataNodeNo(""), mType(""){};
Param_27() : mMode(0), mCmdSerial(""), mDataNodeNo(""),mShortAddr(""),mMeasurementID(""), mType(""){};
};
struct Param_28 {

View File

@ -7,6 +7,7 @@
#include "platform/platform_init.hpp"
#include "utility/md5.h"
#include "utility/calculation.hpp"
#include "scheduler/schedule.hpp"
extern zlog_category_t *zct;
@ -271,16 +272,25 @@ std::string JsonData::JsonCmd_Cgi_27(Param_27 &param) {
if (param.mDataNodeNo.length() > 0 && param.mType == "DELETE") {
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mMeasurementID.c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_BATTERY_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "channelID like'%s'", param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().DeleteTableData(" t_data_waveSend ", whereCon);
char szTableName[50] = {0x00};
sprintf(szTableName, "DROP TABLE t_data_%s", param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName);
memset(szTableName, 0x00, sizeof(szTableName));
sprintf(szTableName, "DROP TABLE t_dataStatic_%s", param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName);
scheduler::instance().ClearScheduleCfg(atoi(param.mShortAddr.c_str()));
} else if (param.mDataNodeNo.length() > 0 && param.mType == "CORRECT") {
char updateSql[1024] = {0};
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mDataNodeNo.c_str());

View File

@ -620,7 +620,7 @@ std::string JsonData::JsonCmd_Cgi_60(Param_60 &param){
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);
sprintf(file_path, "/opt/DataNodeNo/%s",param.fileName.c_str());
FILE * pFile=NULL;
size_t thisSize = 0;
char *buffer=NULL;

View File

@ -14,7 +14,7 @@ int GlobalConfig::LinkStatus_G = 0;
int GlobalConfig::LinkCount = 0;
int GlobalConfig::net0Status = 1;
std::string GlobalConfig::Version = "3.2.5";
std::string GlobalConfig::Version = "5.0";
std::string GlobalConfig::MacAddr_G = "";
std::string GlobalConfig::MacAddr_G2 = "";
std::string GlobalConfig::IpAddr_G = "";
@ -29,6 +29,7 @@ int GlobalConfig::threadStatus = 1;
int GlobalConfig::day = 0;
extern std::map<std::string, compressWaveChannel> g_mapCompress;
extern std::map<std::string, WaveChannel> g_mapWaveChannel;
TopicList GlobalConfig::Topic_G;
ZigbeeInfo GlobalConfig::ZigbeeInfo_G;
@ -98,10 +99,12 @@ void PlatformInit::Init() {
zlog_error(zbt, "PlatFormInit exception happend.");
std::string errorinfo = "系统初始化异常";
}
vec_t vecResult = sqlite_db_ctrl::instance().GetDataMultiLineOfOneColumn(T_SENSOR_INFO(TNAME), " zigbeeShortAddr ", NULL);
for (size_t i = 0; i < vecResult.size(); i++) {
array_t arrResult = sqlite_db_ctrl::instance().GetDataMultiLineTransaction(T_SENSOR_INFO(TNAME), " MeasurementID,zigbeeShortAddr ", NULL);
for (size_t i = 0; i < arrResult.size(); i++) {
compressWaveChannel tempchannel;
g_mapCompress.insert(std::make_pair(vecResult[0], tempchannel));
WaveChannel tempwavechannel;
g_mapCompress.insert(std::make_pair(arrResult[i][1], tempchannel));
g_mapWaveChannel.insert(std::make_pair(arrResult[i][0], tempwavechannel));
}
}

View File

@ -75,7 +75,7 @@ void HeartRep() {
GlobalConfig::serverStatus = 0;
gpio_set(GlobalConfig::GPIO_G.errorLed, 0);
}
sleep(10);
sleep(30);
}
}

View File

@ -540,18 +540,27 @@ void Uart::DealDataNodeName(const char *pData) {
if (vecRes.size() > 1) {
for (size_t i = 0; i < vecRes.size(); i++) {
if (vecRes[i][1] != "") {
char whereCon1[64] = {0};
sprintf(whereCon1, " dataNodeNo='%s' ", vecRes[i][0].c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon1);
sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon1);
sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon1);
sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon1);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), vecRes[i][0].c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), vecRes[i][1].c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_BATTERY_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "channelID like'%s'", vecRes[i][1].c_str());
sqlite_db_ctrl::instance().DeleteTableData(" t_data_waveSend ", whereCon);
char szTableName[50] = {0x00};
sprintf(szTableName, "DROP TABLE t_data_%s", vecRes[i][0].c_str());
sprintf(szTableName, "DROP TABLE t_data_%s", vecRes[i][1].c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName);
memset(szTableName, 0x00, sizeof(szTableName));
sprintf(szTableName, "DROP TABLE t_dataStatic_%s", vecRes[i][0].c_str());
sprintf(szTableName, "DROP TABLE t_dataStatic_%s", vecRes[i][1].c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName);
scheduler::instance().ClearScheduleCfg(atoi(szShortAdd));
}
}
}

View File

@ -31,6 +31,16 @@ enum InteractiveCommand {
WAVE_COMPRESS = 15, // 波形数据压缩
UPGRADE_FIRMWARE = 16 //固件升级内容
};
typedef enum {
kUpgradeSuccess = 0, // 成功
kUpgradeIndexError = 1, //包接收序号错误,要重试
kProductTypeMismatch = 2, // 包有问题,不再重试
kZigbeeHWMismatch = 3, // 包有问题,不再重试
kTransmitFileCrcError = 4, // 此返回值时,要重试
kRecvDataLenError = 5, // 此返回值时,要重试
kUpgradeDoneBefore = 6 // 当前就是这个版本,不需要升级了
} FirmFileCheckResult;
// 无线传感器请求任务
typedef struct {
uint8_t cmd; // kAskTask
@ -138,6 +148,7 @@ typedef struct {
uint8_t cmd;
uint8_t success; // 0:成功, 1其它失败需要重发
} NormalResp;
class Uart {
public:
Uart();

View File

@ -18,6 +18,12 @@ std::vector<RecvData> g_VecWaveDataX;
std::vector<RecvData> g_VecWaveDataY;
std::vector<RecvData> g_VecWaveDataZ;
std::map<std::string, compressWaveChannel> g_mapCompress;
std::map<std::string, WaveChannel> g_mapWaveChannel;
unsigned char data[1024 * 30] = {0x00};
unsigned char outdata[1024 * 50] = {0x00};
unsigned char dealdata[1024 * 30] = {0x00};
char mqttData[512000] = {0};
void Uart::RecordBattery(std::string &strLongAddr, DataRecvStatic &dataStatic, std::string &nowTimetamp) {
char insertSql[1024] = {0};
@ -60,7 +66,6 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
if (!bSendTimeStamp) {
bSendTimeStamp = true;
//modify_distaddr_info(0x9999, (char*)"", pRecvData->ShortAddr); //临时参数配置
mssleep(10000);
zlog_info(zct, "Zigbee Signal !\n");
@ -76,10 +81,6 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
return;
}
// GlobalConfig::ZigbeeInfo_G.MyAddr = "9999";
// GlobalConfig::Zigbee_G.MyAddr = 0x9999;
// std::string strTime = GetLocalTimeWithMs();
m_strDestShortAddr = std::string(buf);
@ -805,10 +806,11 @@ void Uart::DealWaveThread() {
}
}
std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRate, int ACCSampleTime, std::string strProduct) {
memset(data,0,sizeof(data));
memset(dealdata,0,sizeof(dealdata));
memset(outdata,0,sizeof(outdata));
size_t waveCount = 0;
unsigned char data[1024 * 100] = {0x00};
unsigned char outdata[1024 * 100] = {0x00};
unsigned char dealdata[1024 * 100] = {0x00};
long unsigned int new_len = 0, deallen = 0;
int compress = 0;
size_t count = 0;
@ -1033,51 +1035,61 @@ void Uart::WriteDatFile(int sampleRate, std::string &strMeasurementID, int iChan
GetTimeNet(localtimestamp, 1);
std::string nowTimetamp = std::string(localtimestamp);
std::string strChannelID = "";
switch (iChannel) {
case WAVE_X: {
strFileName = "/opt/data/" + strMeasurementID + "-X.dat";
strChannelID = strMeasurementID + "-X";
} break;
case WAVE_Y: {
strFileName = "/opt/data/" + strMeasurementID + "-Y.dat";
strChannelID = strMeasurementID + "-Y";
} break;
case WAVE_Z: {
strFileName = "/opt/data/" + strMeasurementID + "-Z.dat";
strChannelID = strMeasurementID + "-Z";
} break;
default: break;
}
if (access(strFileName.c_str(), 0) > 0) { //如果存在原始数据删除原来的,只保留一份
std::string strCmd = "rm " + strFileName;
system(strCmd.c_str());
}
FILE *fp = fopen(strFileName.c_str(), "w");
fwrite(localtimestamp, sizeof(localtimestamp), 1, fp);
zlog_info(zct, "fopen FIle vecData.size : %d", vecData.size());
float mean = Calculation::mean(vecData);
float frTemp;
char buf[33] = {0x00};
std::string strWaveData = "";
WaveChannel wave_channel;
memset(mqttData,0,sizeof(mqttData));
switch (iChannel) {
case WAVE_X: {
strFileName = "/opt/data/" + strMeasurementID + "-X.dat";
strChannelID = strMeasurementID + "-X";
} break;
case WAVE_Y: {
strFileName = "/opt/data/" + strMeasurementID + "-Y.dat";
strChannelID = strMeasurementID + "-Y";
} break;
case WAVE_Z: {
strFileName = "/opt/data/" + strMeasurementID + "-Z.dat";
strChannelID = strMeasurementID + "-Z";
} break;
default: break;
}
FILE *fp = fopen(strFileName.c_str(), "w");
fwrite(localtimestamp,sizeof(localtimestamp),1,fp);
zlog_info(zct, " vecData.size : %d,start ", vecData.size());
int id = 0;
for (size_t i = 0; i < vecData.size(); i++) {
frTemp = vecData[i] - mean;
fwrite(&frTemp, sizeof(float), 1, fp);
memset(buf, 0x00, sizeof(buf));
sprintf(buf, "%.2f", frTemp);
std::string waveTemp(buf);
if (i == 0)
strWaveData = waveTemp;
else
strWaveData = strWaveData + "," + waveTemp;
if (i % 100 == 0) {
mssleep(5000);
fwrite(&frTemp,sizeof(float),1,fp);
if (iChannel == WAVE_X){
wave_channel.WaveChannelX[i] = frTemp;
}else if (iChannel == WAVE_Y){
wave_channel.WaveChannelY[i] = frTemp;
}else if (iChannel == WAVE_Z){
wave_channel.WaveChannelZ[i] = frTemp;
}
if (i != vecData.size() -1){
strncpy(mqttData + id ,buf,strlen(buf));
id = id + strlen(buf);
strncpy(mqttData + id,",",1);
id = id + 1;
}
else{
strncpy(mqttData + id ,buf,strlen(buf));
}
}
fclose(fp);
zlog_info(zct, "fopen FIle vecData.size : %d end ", vecData.size());
wave_channel.wave_timestamp = nowTimetamp;
g_mapWaveChannel[strMeasurementID] = wave_channel;
Json::Value valWaveData;
valWaveData["number"] = sampleRate;
valWaveData["channelId"] = strChannelID;
@ -1085,7 +1097,7 @@ void Uart::WriteDatFile(int sampleRate, std::string &strMeasurementID, int iChan
valWaveData["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G;
valWaveData["SensorEngineeringUnit"] = "";
valWaveData["timeStamp"] = nowTimetamp;
valWaveData["waveData"] = strWaveData;
valWaveData["waveData"] = mqttData;
valWaveData["mean"] = mean;
Json::FastWriter WaveValue;
std::string WaveData = WaveValue.write(valWaveData);

View File

@ -67,6 +67,7 @@ bool Uart::ReadUpdatePackge(unsigned short shortAdd) {
zlog_info(zct, "thisindex = %d", thisindex);
FILE* pFile = NULL;
char* buffer = NULL;
int thisSize = 0;
DataNodeUpdateFile = "/opt/DataNode/" + strFileName;
zlog_info(zct, "strFileName = %s", DataNodeUpdateFile.c_str());
@ -77,6 +78,9 @@ bool Uart::ReadUpdatePackge(unsigned short shortAdd) {
while (fgetc(pFile) != EOF) {
++thisSize;
}
rewind(pFile);
buffer = (char*)malloc(thisSize);
fread(buffer, sizeof(char), thisSize, pFile);
fclose(pFile);
}