From 04c18e836ff775f5b48204e6ee49176bba69115c Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Sat, 27 Dec 2025 20:24:52 +0800 Subject: [PATCH] save voltage params --- common/common_func.hpp | 2 ++ dbaccess/sql_db.cpp | 12 ++++++++++-- uart/uart.cpp | 33 +++++++++++++++++++++++++++++++-- uart/uart.hpp | 1 + uart/uart_feature_parse.cpp | 22 ++++++++++++++++------ 5 files changed, 60 insertions(+), 10 deletions(-) diff --git a/common/common_func.hpp b/common/common_func.hpp index 9b79d29..8293914 100644 --- a/common/common_func.hpp +++ b/common/common_func.hpp @@ -193,6 +193,8 @@ typedef struct { int Voltage; float nodeWorkTime; float nodeSendTime; + int minmumBatteryVoltageType; + int instantaneousBatteryVoltage; }DataRecvStatic; typedef struct { diff --git a/dbaccess/sql_db.cpp b/dbaccess/sql_db.cpp index 0a805bb..ccadd82 100644 --- a/dbaccess/sql_db.cpp +++ b/dbaccess/sql_db.cpp @@ -198,6 +198,14 @@ 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%' "); + 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'"); + } 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);", @@ -351,8 +359,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);", 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"); + 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"); 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/uart/uart.cpp b/uart/uart.cpp index 096c81b..9c11fdf 100644 --- a/uart/uart.cpp +++ b/uart/uart.cpp @@ -605,6 +605,32 @@ int Uart::DealFeatureValue(const char *pData,uint16_t ushortAdd){ last_time = atol(nowTimetamp.c_str()); return 0; } +int Uart::DealAskTaskOld(uint16_t ushortAdd){ + char wherecon[50]={0}; + sprintf(wherecon, "zigbeeShortAddr='%02x%02x'", UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd)); + int sensor_count = sqlite_db_ctrl::instance().GetTableRows(T_SENSOR_INFO(TNAME), wherecon); + + if (sensor_count < 1) { + zlog_warn(zct, "device info not found %02x%02x ", UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd)); + return 1; + } + int next_duration = 0,next_task_id = 0; + int taskID; + ScheduleTask scheduleTask; + taskID = scheduler::instance().StartSchedule(ushortAdd,next_duration, next_task_id); + zlog_info(zct, "DealAskTaskOld taskID = %d next_duration = %d next_task_id = %d", taskID, next_duration, next_task_id); + if(next_task_id == kScheduleUpgrade){ + scheduleTask.cmd = REVIVE_DURATION; + scheduleTask.shortAddr = ushortAdd; + scheduleTask.duration = next_duration; + scheduleTask.next_taskID = UPGRADE; + TaskResp(scheduleTask); + } + if (taskID == kScheduleUpgrade){ + UpdateWirelessNode(ushortAdd); + } + return 0; +} void Uart::DealRecvData(const char *pData) { uint16_t ushortAdd = BUILD_UINT16(pData[3] & 0xFF, pData[4] & 0xFF); @@ -640,6 +666,9 @@ void Uart::DealRecvData(const char *pData) { case DEVICE_INF2: DealDataNodeName(pData); break; + case ASK_TASK: + DealAskTaskOld(ushortAdd); + break; // case ASK_TASK: // DealAskTask(ushortAdd); // break; @@ -1306,9 +1335,9 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { memcpy(RecvBuf, (char *)&UartRecvBuf[i], 100); DealDataNodeWave(RecvBuf, command); mPackgeIndex = (unsigned int)UartRecvBuf[i + 6]; - } else if (now_task != WAVE_CMD && ( command == DEVICE_INF || command == MEAS_EVAL || command == CONFIG || command == UPGRADE || command == DEVICE_INF2 || command == SIGNAL_STRENGTH || command == DEVICE_EXCEPTION || command == UPGRADE_ASK)) { + } else if (now_task != WAVE_CMD && ( command == ASK_TASK || command == DEVICE_INF || command == MEAS_EVAL || command == CONFIG || command == UPGRADE || command == DEVICE_INF2 || command == SIGNAL_STRENGTH || command == DEVICE_EXCEPTION || command == UPGRADE_ASK)) { char RecvBuf[100] = {0x00}; - if (command == UPGRADE_ASK) + if (command == UPGRADE_ASK || command == ASK_TASK) { memcpy(RecvBuf, &UartRecvBuf[i], 8); if (!CheckCrc(RecvBuf, 7)) { diff --git a/uart/uart.hpp b/uart/uart.hpp index 89fa937..518d238 100644 --- a/uart/uart.hpp +++ b/uart/uart.hpp @@ -166,6 +166,7 @@ public: void Stop(); void UpdateZigbeeInfo(const char* pData); + int DealAskTaskOld(uint16_t ushortAdd); void DealRecvData(const char* pData); void DealDataNodeInfo(const char* pData); void DealDataNodeName(const char* pData); diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index fc0dedf..c3ccc3d 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -146,6 +146,16 @@ int Uart::DealDataNodeFeature(const char *pData, int flag) { RecordBattery(strMeasurementID, dataStatic, nowTimetamp); + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[81]); + iTemp = (int)strtol(buf, NULL, 8); + dataStatic.minmumBatteryVoltageType = iTemp; + + memset(buf, 0, sizeof(buf)); + sprintf(buf, "%02x%02x", pRecvData->Data[83], pRecvData->Data[82]); + iTemp = (int)strtol(buf, NULL, 16); + dataStatic.instantaneousBatteryVoltage = iTemp; + char szTableName[50] = {0x00}, szTableNameStatic[50] = {0x00}, szTableNameData[50] = {0x00}; sprintf(szTableName, "t_dataStatic_%s", strMeasurementID.c_str()); memcpy(szTableNameStatic, szTableName, sizeof(szTableNameStatic)); @@ -234,24 +244,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' ", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, - nowTimetamp.c_str(), staticIndex, nodeResend, flag, timing); + 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'", strMeasurementID.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex, nowTimetamp.c_str(), nodeResend, flag, - timing,nodetimestamp); + 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", strMeasurementID.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex, nowTimetamp.c_str(), nodeResend,nodetimestamp); + 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); 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' ", dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(), staticIndex,nodetimestamp); + 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); sqlite_db_ctrl::instance().UpdateTableData(T_DATASTATIC_INFO(TNAME), updateSql, whereCon); } } else {