diff --git a/common/parameter_defination.hpp b/common/parameter_defination.hpp index a821103..9da6047 100644 --- a/common/parameter_defination.hpp +++ b/common/parameter_defination.hpp @@ -373,6 +373,37 @@ struct Param_66 { int mSensorLooseEnable; Param_66() : mSensorLooseEnable(0){}; }; + +struct Param_67 { + int mMode; + int mPackageFlag; + std::vector measurementID; + Param_67() : mMode(0),mPackageFlag(0){}; +}; + +struct Param_68 { + int lowSignal; + int signalThreshold; + int lowBatteryLevel; + int batteryThreshold; + Param_68():lowSignal(0),signalThreshold(0),lowBatteryLevel(0),batteryThreshold(0){}; +}; + +struct Param_69{ + int threshold; + Param_69():threshold(0){}; +}; + +struct Param_70{ + int mPackageFlag; + Param_70():mPackageFlag(0){}; +}; + +struct Param_71{ + int mPackageFlag; + Param_71():mPackageFlag(0){}; +}; + // 无线温度传感器(蓝牙) struct Param_100{ int mPackageFlag; diff --git a/dbaccess/sql_db.cpp b/dbaccess/sql_db.cpp index ccadd82..bcb1db4 100644 --- a/dbaccess/sql_db.cpp +++ b/dbaccess/sql_db.cpp @@ -198,14 +198,11 @@ void SqliteDB::SqliteInit(const char *pDbName) { if(iRet == 0){ CreateTable("ALTER TABLE t_datastatic_info ADD COLUMN 'nodeTimeStamp'"); } - iRet = GetTableRows(" sqlite_master "," name = 't_datastatic_info' and sql LIKE '%minmumBatteryVoltageType%' "); + iRet = GetTableRows(" sqlite_master "," name = 't_datastatic_info' and sql LIKE '%comprehensiveRSSI%' "); if(iRet == 0){ - CreateTable("ALTER TABLE t_datastatic_info ADD COLUMN 'minmumBatteryVoltageType'"); - } - iRet = GetTableRows(" sqlite_master "," name = 't_datastatic_info' and sql LIKE '%instantaneousBatteryVoltage%' "); - if(iRet == 0){ - CreateTable("ALTER TABLE t_datastatic_info ADD COLUMN 'instantaneousBatteryVoltage'"); + CreateTable("ALTER TABLE t_datastatic_info ADD COLUMN 'comprehensiveRSSI'"); } + memset(sql_exec, 0, 2048); // clang-format off 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);", @@ -359,8 +356,8 @@ void SqliteDB::CreatedataStatictable(const char *ptableName) { char sql_exec[2048]; //创建传感器数据存储表 memset(sql_exec, 0, 2048); - sprintf(sql_exec, "create table if not exists %s(%s,%s,%s,%s,%s,%s,%s,%s integer,%s,%s,%s,%s integer,%s,%s,%s,%s,%s);", ptableName, T_DATASTATIC_INFO(DATANODENO), T_DATASTATIC_INFO(CHANNELID), T_DATASTATIC_INFO(TEMTOP), T_DATASTATIC_INFO(TEMBOT), T_DATASTATIC_INFO(DIP), - T_DATASTATIC_INFO(VOLTAGE), "zigbeeSignal", "StaticIndex", T_DATASTATIC_INFO(TIMESTAMP), "sendMsg", "nodeResend", "zigbeeSignalNode", "statisticType", "timing", "nodeTimestamp","minmumBatteryVoltageType","instantaneousBatteryVoltage"); + sprintf(sql_exec, "create table if not exists %s(%s,%s,%s,%s,%s,%s,%s,%s integer,%s,%s,%s,%s integer,%s,%s,%s,%s,%s,%s);", ptableName, T_DATASTATIC_INFO(DATANODENO), T_DATASTATIC_INFO(CHANNELID), T_DATASTATIC_INFO(TEMTOP), T_DATASTATIC_INFO(TEMBOT), T_DATASTATIC_INFO(DIP), + T_DATASTATIC_INFO(VOLTAGE), "zigbeeSignal", "StaticIndex", T_DATASTATIC_INFO(TIMESTAMP), "sendMsg", "nodeResend", "zigbeeSignalNode", "statisticType", "timing", "nodeTimestamp","minmumBatteryVoltageType","instantaneousBatteryVoltage","comprehensiveRSSI"); CreateTable(sql_exec); memset(sql_exec, 0, 2048); sprintf(sql_exec, "CREATE INDEX %s_1 ON %s (%s)", ptableName, ptableName, T_DATA_INFO(DATANODENO)); diff --git a/jsonparse/communication_cmd.hpp b/jsonparse/communication_cmd.hpp index 979df52..dacf221 100644 --- a/jsonparse/communication_cmd.hpp +++ b/jsonparse/communication_cmd.hpp @@ -41,7 +41,7 @@ public: // web command parse2 std::string JsonCmd_Cgi_26(Param_26 ¶m); - std::string JsonCmd_Cgi_27(Param_27 ¶m); + std::string JsonCmd_Cgi_27(std::vector ¶m); std::string JsonCmd_Cgi_28(Param_28 ¶m); std::string JsonCmd_Cgi_29(Param_29 ¶m); //获取原始数据 std::string JsonCmd_Cgi_30(Param_30 ¶m); //获取频域数据 @@ -75,6 +75,11 @@ public: std::string JsonCmd_Cgi_64(Param_64 ¶m); std::string JsonCmd_Cgi_65(Param_65 ¶m); std::string JsonCmd_Cgi_66(Param_66 ¶m); + std::string JsonCmd_Cgi_67(Param_67 ¶m); + std::string JsonCmd_Cgi_68(Param_68 ¶m); + std::string JsonCmd_Cgi_69(Param_69 ¶m); + std::string JsonCmd_Cgi_70(Param_70 ¶m); + std::string JsonCmd_Cgi_71(Param_71 ¶m); // 无线温度传感器(蓝牙) std::string JsonCmd_Cgi_100(Param_100 ¶m); diff --git a/jsonparse/web_cmd_parse.cpp b/jsonparse/web_cmd_parse.cpp index a3bf9ca..3644f72 100644 --- a/jsonparse/web_cmd_parse.cpp +++ b/jsonparse/web_cmd_parse.cpp @@ -244,11 +244,11 @@ std::string JsonData::JsonCmd_Cgi_09(Param_09 ¶m) { jsStaticData["ChannelType"] = "STATUS"; jsStaticData["ChannelId"] = vecRes[1]; jsStaticData["TimeStamp"] = vecRes[8]; - jsStaticData["battery"] = vecRes[14]; + jsStaticData["battery"] = vecRes[15]; jsStaticData["MeasurementID"] = strMeasurementID; jsStaticData["dataNodeNo"] = arrResAll[i][0]; jsStaticData["ShortAddr"] = strShortAddr; - jsStaticData["status"] = vecRes[12]; + jsStaticData["status"] = vecRes[13]; jsStaticData["loose"] = "0"; } else { diff --git a/jsonparse/web_cmd_parse2.cpp b/jsonparse/web_cmd_parse2.cpp index adce404..370b1cc 100644 --- a/jsonparse/web_cmd_parse2.cpp +++ b/jsonparse/web_cmd_parse2.cpp @@ -218,7 +218,7 @@ std::string JsonData::JsonCmd_Cgi_54(Param_54 ¶m) { return show_value_.write(jsonVal); } -std::string JsonData::JsonCmd_Cgi_27(Param_27 ¶m) { +std::string JsonData::JsonCmd_Cgi_27(std::vector ¶m) { Json::Value jsonVal; jsonVal.clear(); @@ -228,40 +228,43 @@ std::string JsonData::JsonCmd_Cgi_27(Param_27 ¶m) { jsonVal["message"] = " "; char whereCon[128] = {0}; char localtimestamp[32] = {0}; - 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_BATTERY_INFO(TNAME), whereCon); - sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon); - memset(whereCon,0,sizeof(whereCon)); - sprintf(whereCon, "channelID like '%%%s%%'", param.mMeasurementID.c_str()); - sqlite_db_ctrl::instance().DeleteTableData(" t_data_waveSend ", whereCon); - char szTableName[50] = {0x00}; - sprintf(szTableName, "DROP TABLE t_data_%s", param.mMeasurementID.c_str()); - sqlite_db_ctrl::instance().CreateTable(szTableName); - memset(szTableName, 0x00, sizeof(szTableName)); - sprintf(szTableName, "DROP TABLE t_dataStatic_%s", param.mMeasurementID.c_str()); - sqlite_db_ctrl::instance().CreateTable(szTableName); - uint16_t short_addr; - char *end_ptr = NULL; - short_addr = strtol(param.mShortAddr.c_str(), &end_ptr, 16); - zlog_warn(zct,"delete short_addr = %02x%02x",UINT16_HIGH(short_addr),UINT16_LOW(short_addr)); - scheduler::instance().ClearScheduleCfg(short_addr); - - } 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()); - GetTimeNet(localtimestamp, 1); - sprintf(updateSql, "LooseValue = '0,2,"); - std::string strUpdateSql = std::string(updateSql) + std::string(localtimestamp) + "' "; - sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_INFO(TNAME), strUpdateSql.c_str(), whereCon); - } else { - jsonVal["success"] = false; - jsonVal["message"] = "没有传感器号"; + for (size_t i = 0; i < param.size(); i++) + { + if (param[i].mDataNodeNo.length() > 0 && param[i].mType == "DELETE") { + sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param[i].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[i].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_BATTERY_INFO(TNAME), whereCon); + sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon); + memset(whereCon,0,sizeof(whereCon)); + sprintf(whereCon, "channelID like '%%%s%%'", param[i].mMeasurementID.c_str()); + sqlite_db_ctrl::instance().DeleteTableData(" t_data_waveSend ", whereCon); + char szTableName[50] = {0x00}; + sprintf(szTableName, "DROP TABLE t_data_%s", param[i].mMeasurementID.c_str()); + sqlite_db_ctrl::instance().CreateTable(szTableName); + memset(szTableName, 0x00, sizeof(szTableName)); + sprintf(szTableName, "DROP TABLE t_dataStatic_%s", param[i].mMeasurementID.c_str()); + sqlite_db_ctrl::instance().CreateTable(szTableName); + uint16_t short_addr; + char *end_ptr = NULL; + short_addr = strtol(param[i].mShortAddr.c_str(), &end_ptr, 16); + zlog_warn(zct,"delete short_addr = %02x%02x",UINT16_HIGH(short_addr),UINT16_LOW(short_addr)); + scheduler::instance().ClearScheduleCfg(short_addr); + + } else if (param[i].mDataNodeNo.length() > 0 && param[i].mType == "CORRECT") { + char updateSql[1024] = {0}; + sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param[i].mDataNodeNo.c_str()); + GetTimeNet(localtimestamp, 1); + sprintf(updateSql, "LooseValue = '0,2,"); + std::string strUpdateSql = std::string(updateSql) + std::string(localtimestamp) + "' "; + sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_INFO(TNAME), strUpdateSql.c_str(), whereCon); + } else { + jsonVal["success"] = false; + jsonVal["message"] = "没有传感器号"; + } } return show_value_.write(jsonVal); } diff --git a/jsonparse/web_cmd_parse3.cpp b/jsonparse/web_cmd_parse3.cpp index db71170..3eaffda 100644 --- a/jsonparse/web_cmd_parse3.cpp +++ b/jsonparse/web_cmd_parse3.cpp @@ -1231,4 +1231,99 @@ std::string JsonData::JsonCmd_Cgi_66(Param_66 ¶m) { jsonVal["content"] = jsBody; return show_value_.write(jsonVal); +} + +std::string JsonData::JsonCmd_Cgi_67(Param_67 ¶m){ + Json::Value jsonVal; + jsonVal.clear(); + + jsonVal[JSON_FIELD_CMD] = "67"; + jsonVal["success"] = true; + jsonVal["message"] = " "; + if(param.mMode == 0){ + array_t arrResAll = sqlite_db_ctrl::instance().GetDataMultiLine(T_SENSOR_INFO(TNAME), " dataNodeNo,MeasurementID,zigbeeShortAddr ", NULL); + int nSize = arrResAll.size(); + if (nSize > 0) { + int packgeNo = param.mPackageFlag; + int packgeMax = 0; + int packgeNum = 0; + jsonVal["package"] = packgeNo; + int lastSize = nSize % 10; + int index = nSize / 10; + if (lastSize > 0 && index > 0) { + packgeMax = index + 1; + if (packgeNo + 1 == packgeMax) { + packgeNum = nSize; + jsonVal["packageMax"] = index + 1; + } else { + packgeNum = (packgeNo + 1) * 10; + jsonVal["packageMax"] = index + 1; + } + } else if (lastSize == 0 && index > 0) { + packgeNum = (packgeNo + 1) * 10; + packgeMax = index; + jsonVal["packageMax"] = index; + } else if (lastSize > 0 && index == 0) { + packgeNum = lastSize; + packgeMax = index + 1; + jsonVal["packageMax"] = index + 1; + } + Json::Value jsSensor; + for (int i = packgeNo * 10; i < packgeNum; i++) { + std::string strMeasurementID = arrResAll[i][1]; + std::string strShortAddr = arrResAll[i][2]; + char whereCon[512] = {}; + char selectCon[128] = {0}; + char column[128] = {0}; + char tablename[256] = {0}; + sprintf(selectCon, " t_sensor_info.MeasurementID='%s' ", strMeasurementID.c_str()); + sprintf(column, " _debug_info.*,t_sensor_info.status,t_sensor_info.dataNodeName "); + sprintf(tablename, " t_debug_info LEFT JOIN t_sensor_info "); + array_t arrRes; + arrRes = sqlite_db_ctrl::instance().GetDataMultiLineTransaction(tablename, "*", selectCon); + int iResult = arrRes.size(); + if (iResult > 0) { + for (int j = 0; j < iResult; j++) { + Json::Value jsChannelData; + jsChannelData["dataNodeName"] = arrRes[j][9]; + jsChannelData["zigbeeAddr"] = arrRes[j][1]; + jsChannelData["MeasurementID"] = arrRes[j][0]; + jsChannelData["status"] = atoi(arrRes[j][0].c_str()); + jsChannelData["gatewayRssi"] = atoi(arrRes[j][2].c_str()); + jsChannelData["dataNodeRssi"] = atoi(arrRes[j][3].c_str()); + jsChannelData["comprehensiveRssi"] = atof(arrRes[j][4].c_str()); + jsChannelData["minimumVoltage"] = atof(arrRes[j][5].c_str()); + jsChannelData["currentBatteryLevel"] = atof(arrRes[j][6].c_str()); + jsChannelData["TimeStamp"] = arrRes[j][7]; + jsSensor.append(jsChannelData); + } + } + } + if (jsSensor.size() == 0) { + jsonVal["success"] = false; + jsonVal["content"].resize(0); + } else { + jsonVal["content"] = (jsSensor); + } + }else { + jsonVal["success"] = false; + jsonVal["content"].resize(0); + } + }else if(param.mMode == 1){//启动传感器调试 + + } + return show_value_.write(jsonVal); +} +std::string JsonData::JsonCmd_Cgi_68(Param_68 ¶m){ + +} + +std::string JsonData::JsonCmd_Cgi_69(Param_69 ¶m){ + +} +std::string JsonData::JsonCmd_Cgi_70(Param_70 ¶m){ + +} +std::string JsonData::JsonCmd_Cgi_71(Param_71 ¶m){ + } \ No newline at end of file diff --git a/localserver/local_server.hpp b/localserver/local_server.hpp index 79ad820..db5d7f8 100644 --- a/localserver/local_server.hpp +++ b/localserver/local_server.hpp @@ -56,6 +56,11 @@ enum WebCommand { kFeatureSend = 64, kFeatureWaveCount = 65, KSensorLoose = 66, + KDebugSensor = 67, // 调试传感器 + KWaveRule = 68, // 波形规则配置 + KTrigerWaveUpload = 69, // 触发波形上传 + KProcessLog = 70, // 获取应用程序运行日志 + KSystemLog = 71, // 获取系统日志 //CMT TCP kGateWayVersion = 80, diff --git a/localserver/web_cmd.cpp b/localserver/web_cmd.cpp index 4e2f7a9..4ff23a1 100644 --- a/localserver/web_cmd.cpp +++ b/localserver/web_cmd.cpp @@ -173,11 +173,15 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) { return data; } break; case kWebDeleteTransducerInfo: { - Param_27 param; - param.mDataNodeNo = recvBody["dataNodeNo"].asString(); - param.mShortAddr = recvBody["shortAddr"].asString(); - param.mMeasurementID = recvBody["MeasurementID"].asString(); - param.mType = recvBody["type"].asString(); + std::vector param; + for (size_t i = 0; i < recvBody.size(); i++) { + Param_27 p; + p.mDataNodeNo = recvBody[i]["dataNodeNo"].asString(); + p.mShortAddr = recvBody[i]["shortAddr"].asString(); + p.mMeasurementID = recvBody[i]["MeasurementID"].asString(); + p.mType = recvBody[i]["type"].asString(); + param.push_back(p); + } JsonData jd; std::string data = jd.JsonCmd_Cgi_27(param); return data; @@ -537,6 +541,27 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) { return data; } break; + case KDebugSensor:{ + JsonData jd; + Param_67 param; + std::string type = recvBody["type"].asString(); + if (0 == type.compare("SET")) { + param.mMode = 1; + Json::Value recvDataNodeNo = recvBody["DataNodeNo"]; + if (recvDataNodeNo.size() > 0) + { + for (size_t i = 0; i < recvDataNodeNo.size(); i++) { + param.measurementID.push_back(recvDataNodeNo[i].asString()); + } + } + } + if (0 == type.compare("GET")) { + param.mMode = 0; + } + std::string data = jd.JsonCmd_Cgi_67(param); + return data; + } + break; case kGetSensorInfo:{ JsonData jd; Param_100 param; diff --git a/uart/uart.hpp b/uart/uart.hpp index 518d238..1a2fcec 100644 --- a/uart/uart.hpp +++ b/uart/uart.hpp @@ -247,6 +247,7 @@ private: std::string m_strDestShortAddr; uint16_t wave_shortAddr; int now_task; + struct timespec wave_recv_start,wave_recv_end; int waittime; enum { BUF_LENGTH = 40960 }; diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index c3ccc3d..b7c4fa3 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -32,6 +32,49 @@ void Uart::RecordBattery(std::string &strLongAddr, DataRecvStatic &dataStatic, s char insertSql[1024] = {0}; sprintf(insertSql, "'%s','%d','%f','%f','%f','%d','','','%s'", strLongAddr.c_str(), dataStatic.Dip, dataStatic.TemBot, dataStatic.nodeWorkTime, dataStatic.nodeSendTime, dataStatic.Voltage, nowTimetamp.c_str()); sqlite_db_ctrl::instance().InsertData(T_BATTERY_INFO(TNAME), insertSql); + + //计算综合信号强度 + char tableName[64] = {0}; + char whereCon[128] = {0}; + sprintf(tableName,"t_dataStatic_%s",(char*)strLongAddr.c_str()); + sprintf(whereCon, "dataNodeNo='%s' and zigbeeSignal <> '' and zigbeeSignalNode <> '' and comprehensiveRSSI = '' order by timeStamp desc limit 1", strLongAddr.c_str()); + vec_t res_static = sqlite_db_ctrl::instance().GetDataSingleLine(tableName, " * ", whereCon); + if(res_static.size() < 1){ + zlog_info(zct, "No static data found for dataNodeNo='%s' to calculate comprehensiveRSSI", strLongAddr.c_str()); + return; + } + memset(whereCon, 0x00, sizeof(whereCon)); + sprintf(whereCon,"data_nodeno like '%%%s%%' and timeStamp = '%s'", strLongAddr.c_str(), res_static[8].c_str()); + vec_t package_length = sqlite_db_ctrl::instance().GetDataMultiLineOfOneColumn(" receive_wave_status ", " package_length ", whereCon); + int wave_dataLen = 0; + if (package_length.size() < 1) + { + zlog_info(zct, "No wave package_length found for dataNodeNo='%s' and timeStamp = '%s'", strLongAddr.c_str(), res_static[8].c_str()); + return; + } + + for (size_t i = 0; i < package_length.size(); i++){ + wave_dataLen += atoi(package_length[i].c_str()); + } + //信号质量计算:[传感器信号强度+网关信号强度]x[实际速率/标准速率(5kB/s)] + if (res_static.size() > 0){ + int zigbeeSignal = atoi(res_static[6].c_str()); + int zigbeeSignalNode = atoi(res_static[11].c_str()); + float standardRate = 5000.0f; //5kB/s + float actualRate = 0.0f; + if (dataStatic.nodeSendTime > 0){ + actualRate = (wave_dataLen / 1024.0f) / (dataStatic.nodeSendTime / 1000.0f); //单位:KB/s + } + float comprehensiveRSSI = (zigbeeSignal + zigbeeSignalNode) * (actualRate / standardRate); + zlog_info(zct, "dataNodeNo='%s',wave_dataLen=%d,nodeSendTime=%f,actualRate=%f", strLongAddr.c_str(), wave_dataLen, dataStatic.nodeSendTime, actualRate); + //更新综合信号强度到数据库 + char updateSql[256] = {0}; + memset(whereCon, 0x00, sizeof(whereCon)); + sprintf(whereCon, "dataNodeNo='%s' and timeStamp = '%s'", strLongAddr.c_str(), res_static[8].c_str()); + sprintf(updateSql, "comprehensiveRSSI = '%f'", comprehensiveRSSI); + sqlite_db_ctrl::instance().UpdateTableData(tableName, updateSql, whereCon); + zlog_info(zct, "dataNodeNo='%s',zigbeeSignal=%d,zigbeeSignalNode=%d,actualRate=%f,comprehensiveRSSI=%f", strLongAddr.c_str(), zigbeeSignal, zigbeeSignalNode, actualRate, comprehensiveRSSI); + } } void Uart::DataExtract(RecvData *p, int id, unsigned int &lowbit, float &n) { @@ -143,7 +186,7 @@ int Uart::DealDataNodeFeature(const char *pData, int flag) { DataExtract(pRecvData, 32, lowbit, n); dataStatic.nodeSendTime = lowbit * n; dataStatic.nodeWorkTime = dataStatic.nodeWorkTime - dataStatic.nodeSendTime; - + zlog_info(zct, "nodeWorkTime = %f,nodeSendTime = %f", dataStatic.nodeWorkTime, dataStatic.nodeSendTime); RecordBattery(strMeasurementID, dataStatic, nowTimetamp); memset(buf, 0, sizeof(buf)); @@ -244,24 +287,24 @@ int Uart::DealDataNodeFeature(const char *pData, int flag) { zlog_info(zct, "dataStatic.TemTop : %f dataStatic.TemBot : %f dataStatic.Dip :%d dataStatic.Voltage : %d", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage); - sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %ld, nodeResend = %d,zigbeeSignal = '',zigbeeSignalNode = '',statisticType = '%d',timing = '%d',,nodeTimestamp = '%s',minmumBatteryVoltageType = '%d',instantaneousBatteryVoltage = '%d' ", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, + sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %ld, nodeResend = %d,zigbeeSignal = '',zigbeeSignalNode = '',statisticType = '%d',timing = '%d',nodeTimestamp = '%s',minmumBatteryVoltageType = '%d',instantaneousBatteryVoltage = '%d' ", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(), staticIndex, nodeResend, flag, timing, nodetimestamp, dataStatic.minmumBatteryVoltageType, dataStatic.instantaneousBatteryVoltage); 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) { zlog_info(zct, "insert static data to sql"); char insertSql[1024] = {0}; - sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%ld,'%s','1',%d,'','%d','%d','%s','%d','%d'", strMeasurementID.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex, nowTimetamp.c_str(), nodeResend, flag, + sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%ld,'%s','1',%d,'','%d','%d','%s','%d','%d',''", strMeasurementID.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex, nowTimetamp.c_str(), nodeResend, flag, timing,nodetimestamp, dataStatic.minmumBatteryVoltageType, dataStatic.instantaneousBatteryVoltage); 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','',%ld,'%s','1',%d,%s,'%d','%d'", strMeasurementID.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex, nowTimetamp.c_str(), nodeResend,nodetimestamp, dataStatic.minmumBatteryVoltageType, dataStatic.instantaneousBatteryVoltage); + sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%ld,'%s','1',%d,%s,'%d'", strMeasurementID.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex, nowTimetamp.c_str(), nodeResend,nodetimestamp); 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 = %ld,nodeTimestamp = '%s',minmumBatteryVoltageType = '%d',instantaneousBatteryVoltage = '%d' ", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(), staticIndex,nodetimestamp, dataStatic.minmumBatteryVoltageType, dataStatic.instantaneousBatteryVoltage); + sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %ld,nodeTimestamp = '%s' ", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(), staticIndex,nodetimestamp); sqlite_db_ctrl::instance().UpdateTableData(T_DATASTATIC_INFO(TNAME), updateSql, whereCon); } } else { @@ -785,6 +828,7 @@ std::vector Uart::DealData(int iChannel, float coe, unsigned int sampleRa } void Uart::DealWave() { + std::string strShortAddr = ""; std::string strShortAddrTemp; std::string strLongAddr = ""; @@ -793,7 +837,8 @@ void Uart::DealWave() { std::string strProduct = ""; std::vector vecDataX, vecDataY, vecDataZ; if (wave_trans_) { //对每个传感器的每个通道进行遍历然后处理数据,例如:传感器1x轴的数据处理完后,再去处理y轴的。传感器1的所有数据处理完后,再处理传感器2的 - char getzigbeeShortAddr[32] = {0}; + + char getzigbeeShortAddr[32] = {0}, tableName[64] = {0}, whereCon[128] = {0}; sprintf(getzigbeeShortAddr, "zigbeeShortAddr='%02x%02x'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF); vec_t res = sqlite_db_ctrl::instance().GetDataSingleLine(T_SENSOR_INFO(TNAME), " * ", getzigbeeShortAddr); if (res.size() < 0) @@ -809,7 +854,10 @@ void Uart::DealWave() { wave_trans_ = false; return; } - + sprintf(tableName, "t_dataStatic_%s", (char *)res[44].c_str()); + memset(whereCon,0,sizeof(whereCon)); + sprintf(whereCon, "dataNodeNo='%s' order by timeStamp desc limit 1", strMeasurementID.c_str()); + std::string timestamp_last = sqlite_db_ctrl::instance().GetData(tableName, " timeStamp ", whereCon); std::string ran = ""; int n = 0; @@ -853,25 +901,23 @@ void Uart::DealWave() { g_VecWaveDataZ.clear(); VecWaveDataZ.clear(); } - char localtimestamp[32] = {0}; - GetTimeNet(localtimestamp, 1); char insertSql[100] = {0x00}; - char whereCon[50] = {0x00}; + memset(whereCon,0,sizeof(whereCon)); sprintf(whereCon, "MeasurementID='%s'",strMeasurementID.c_str()); memset(whereCon, 0x00, sizeof(whereCon)); if (vecDataX.size() > 0) { - sprintf(insertSql, "'%s-X','%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); + sprintf(insertSql, "'%s-X','%02x%02x','%s',%d,'1','%s','' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,(char*)timestamp_last.c_str(),g_mapCompress[strShortAddr].CountX,""); + sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); } if (vecDataY.size() > 0) { - sprintf(insertSql, "'%s-Y','%02x%02x','%s',0,'1','%s','' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp,""); + sprintf(insertSql, "'%s-Y','%02x%02x','%s',%d,'1','%s','' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,(char*)timestamp_last.c_str(),g_mapCompress[strShortAddr].CountY,""); sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); } if (vecDataZ.size() > 0) { - sprintf(insertSql, "'%s-Z','%02x%02x','%s',0,'1','%s','' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp,""); + sprintf(insertSql, "'%s-Z','%02x%02x','%s',%d,'1','%s','' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,(char*)timestamp_last.c_str(),g_mapCompress[strShortAddr].CountZ,""); sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); } zlog_warn(zct,"waveCountX = %d, waveCountY = %d, waveCountZ = %d", vecDataX.size() , vecDataY.size(), vecDataZ.size()); @@ -885,7 +931,7 @@ void Uart::DealWave() { memset(whereCon, 0x00, sizeof(whereCon)); char updateSql[1024] = { 0 }; sprintf(updateSql, "resend = '%d'", iRet); - sprintf(whereCon, "short_addr='%02x%02x' and timestamp = '%s'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp); + sprintf(whereCon, "short_addr='%02x%02x' and timestamp = '%s'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,(char*)timestamp_last.c_str()); sqlite_db_ctrl::instance().UpdateTableData(" receive_wave_status ", updateSql, whereCon); } }else if ((vecDataX.size() > 0 && g_mapCompress[strShortAddr].CountX > 0) || @@ -897,7 +943,7 @@ void Uart::DealWave() { memset(whereCon, 0x00, sizeof(whereCon)); char updateSql[1024] = { 0 }; sprintf(updateSql, "resend = '%d'", iRet); - sprintf(whereCon, "short_addr='%02x%02x' and timestamp = '%s'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp); + sprintf(whereCon, "short_addr='%02x%02x' and timestamp = '%s'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,(char*)timestamp_last.c_str()); sqlite_db_ctrl::instance().UpdateTableData(" receive_wave_status ", updateSql, whereCon); } } @@ -908,7 +954,7 @@ void Uart::DealWave() { memset(whereCon, 0x00, sizeof(whereCon)); char updateSql[1024] = { 0 }; sprintf(updateSql, "resend = '%d'", iRet); - sprintf(whereCon, "short_addr='%02x%02x' and timestamp = '%s'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp); + sprintf(whereCon, "short_addr='%02x%02x' and timestamp = '%s'", (wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,(char*)timestamp_last.c_str()); sqlite_db_ctrl::instance().UpdateTableData(" receive_wave_status ", updateSql, whereCon); } }