| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971 |
- #include "sqlite_handle.h"
- #include "elog.h"
- #include "time.h"
- #include "math.h"
- #define TOTAL_COUNT 60//统计总数
- /// @brief 初始化SQLite数据库
- /// @param db 数据库接口
- /// @param daba_name 数据库名称
- /// @return
- int sqlite_init(sqlite3** db, const char* daba_name)
- {
- int ret = 0;
- char *errorMsg = NULL;
- ret = sqlite3_open(daba_name,db);
- if(ret != SQLITE_OK)
- return -1 ;
- char SetData[]="PRAGMA cache_size = 0;";
- ret = sqlite3_exec(*db,SetData,NULL,NULL,&errorMsg);
- return 0;
- }
- /// @brief 关闭SQLite数据库
- /// @param db 数据库接口
- void sqlite_deinit(sqlite3 *db)
- {
- int ret = 0;
- ret = sqlite3_close(db);
- if(ret != SQLITE_OK)
- return;
- return;
- }
- int dev_update_485_consumer(sqlite3 *db,float consumer,GlobalDeviceInfo* _globalDeviceInfo)
- {
- int res ;
- char select_sql[256] = {0};
- //// char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char buff[200] = {0};
- sprintf(buff,"%.2f",consumer);
- sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_consumer=%s WHERE product_id=%d;",buff,_globalDeviceInfo->product_id);
- //printf("consumer=%2f. product_id = %d\n",consumer,_globalDeviceInfo->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK){
- printf("UPDATE dasdasdasdasdasdasdas FAIELD\n");
- return -1 ;
- }
-
- sqlite3_free_table(pResult);
- }
- int dev_set_485_saddr(sqlite3 *db,uint16_t saddr,GlobalDeviceInfo* _globalDeviceInfo)
- {
- int res ;
- char select_sql[256] = {0};
- //// char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_addr=%d WHERE product_id=%d;",saddr,_globalDeviceInfo->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 查询设备信息表
- /// @param db 数据库接口
- /// @param _globalDeviceInfo 返回数据接口
- /// @return 0:正常
- int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
- {
- int res = 0 ;
- int rowIndex = 1 ;
- // // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- const char* select_sql = "SELECT* from Table_DeviceInfo;";
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- //提取数据
- if(nrow==0)
- return -1 ;
- //获取ID
- _globalDeviceInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
- //获取产品编号
- strcpy(_globalDeviceInfo->product_number,pResult[rowIndex*ncolumn+1]);
- //获取产品名称
- strcpy(_globalDeviceInfo->product_name,pResult[rowIndex*ncolumn+2]);
- //获取产品类型
- _globalDeviceInfo->product_type = atoi(pResult[rowIndex*ncolumn+3]);
- //获取电源类型
- _globalDeviceInfo->product_pwr_type = atoi(pResult[rowIndex*ncolumn+4]);
- //获取版本号
- strcpy((char *)(_globalDeviceInfo->product_version),pResult[rowIndex*ncolumn+5]);
- //多国语言
- _globalDeviceInfo->product_language = atoi(pResult[rowIndex*ncolumn+6]);
- //获取级联设备数
- _globalDeviceInfo->product_count = atoi(pResult[rowIndex*ncolumn+7]);
- //获取采样间隔时间
- _globalDeviceInfo->product_samp_time = atoi(pResult[rowIndex*ncolumn+8]);
- //获取采样存储时间
- _globalDeviceInfo->product_save_time = atoi(pResult[rowIndex*ncolumn+9]);
- //获取modbus主从模式
- _globalDeviceInfo->_modbus_info.product_modbus_type = atoi(pResult[rowIndex*ncolumn+10]);
- //获取波特率
- _globalDeviceInfo->_modbus_info.product_modbus_baud = atoi(pResult[rowIndex*ncolumn+11]);
- //获取从Modbus地址信息
- _globalDeviceInfo->_modbus_info.product_modbus_addr = atoi(pResult[rowIndex*ncolumn+12]);
- //获取继电器控制端口号
- strcpy(_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,pResult[rowIndex*ncolumn+13]);
- _globalDeviceInfo->consumer = atof(pResult[rowIndex*ncolumn+14]);
- //_globalDeviceInfo->consumer = 0;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 更新设备信息表
- /// @param db 数据库接口
- /// @param _globalDeviceInfo 更新的数据接口
- /// @return
- int dev_update_device_genera_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
- {
- int res ;
- char select_sql[256] = {0};
- //// char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_number='%s',product_name='%s',product_type=%d,product_pwr_type=%d,product_version='%s',product_language=%d,product_count=%d,product_samp_time=%d,product_save_time=%d WHERE product_id=%d;",
- _globalDeviceInfo->product_number,
- _globalDeviceInfo->product_name,
- _globalDeviceInfo->product_type,
- _globalDeviceInfo->product_pwr_type,
- _globalDeviceInfo->product_version,
- _globalDeviceInfo->product_language,
- _globalDeviceInfo->product_count,
- _globalDeviceInfo->product_samp_time,
- _globalDeviceInfo->product_save_time,
- _globalDeviceInfo->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 更新modbus相关控制接口
- /// @param db
- /// @param _globalDeviceInfo
- /// @return
- int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
- {
- int res ;
- char select_sql[256] = {0};
- // // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_type=%d,product_modbus_baud=%d,product_modbus_addr=%d,product_relay_ctrl_port='%s' WHERE product_id=%d;",
- _globalDeviceInfo->_modbus_info.product_modbus_type,
- _globalDeviceInfo->_modbus_info.product_modbus_baud,
- _globalDeviceInfo->_modbus_info.product_modbus_addr,
- _globalDeviceInfo->_modbus_info.product_relay_ctrl_port,
- _globalDeviceInfo->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 获取最大的Index
- /// @param db
- int dev_search_last_Index(sqlite3 *db,int* nIndex,char* tableName)
- {
- int res ;
- char select_sql[512] = {0};
- // // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"SELECT count(*),max(product_Index) FROM %s;",tableName);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search no data.");
- return -1 ;
- }
- if (!pResult[nrow * ncolumn])
- {
- *nIndex = 1;
- }
- else
- {
- int nCount = atoi(pResult[nrow * ncolumn]);
- if (nCount > 0)
- {
- *nIndex = atoi(pResult[nrow * ncolumn + 1]);
- }
- *nIndex += 1;
- }
-
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 删除最早的数据将所有数据平移。
- /// @param db
- int dev_change_last_Index(sqlite3 *db,int* nIndex,int nDeleteNumber,char* tableName)
- {
- int res ;
- char select_sql[512] = {0};
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"delete FROM %s where product_Index<%d;",tableName,nDeleteNumber);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error: %s \n%s", err_msg,select_sql);
- return -1 ;
- }
- sqlite3_free_table(pResult);
- sprintf(select_sql,"UPDATE %s SET product_Index = product_Index - %d;",tableName,nDeleteNumber);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error: %s \n%s", err_msg,select_sql);
- return -1 ;
- }
- *nIndex-=nDeleteNumber;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 插入一条电源监控信息
- /// @param db
- /// @param _globalPowerChnInfo
- /// @return
- int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int* nIndex)
- {
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
-
- sprintf(select_sql,"INSERT INTO Table_PowerInfo VALUES ('%s',%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%d);",
- _globalPowerChnInfo->samp_time,
- _globalPowerChnInfo->product_id,
- _globalPowerChnInfo->product_ch_id,
- _globalPowerChnInfo->product_status,
- _globalPowerChnInfo->_power_info.voltage,
- _globalPowerChnInfo->_power_info.current,
- _globalPowerChnInfo->_power_info.power,
- _globalPowerChnInfo->_power_info.freq,
- _globalPowerChnInfo->_power_info.consumption,
- _globalPowerChnInfo->_power_info.factor,
- *nIndex);
- (*nIndex)+=1;
- // if(_globalPowerChnInfo->product_ch_id==0)
- //log_d(select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error: %s \n%s", err_msg,select_sql);
- return -1 ;
- }
-
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 获取采集的最新值
- /// @param db
- /// @param product_id
- /// @param product_ch_id
- /// @param _globalPowerInfo
- /// @return
- int dev_search_latest_power_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerInfo* _globalPowerInfo)
- {
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- // SELECT *
- // FROM Table_PowerInfo
- // WHERE product_id = 1 AND product_ch_id = 0
- // ORDER BY product_samp_time DESC
- // LIMIT 1;
- // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
- // product_id,
- // product_ch_id);
- sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY product_samp_time DESC LIMIT 1;",
- product_id,
- product_ch_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search no data.");
- return -1 ;
- }
- _globalPowerInfo->product_id = atoi(pResult[nrow*ncolumn+1]);
- _globalPowerInfo->product_ch_id = atoi(pResult[nrow*ncolumn+2]);
- _globalPowerInfo->_power_info.status = atoi(pResult[nrow*ncolumn+3]);
- _globalPowerInfo->_power_info.voltage = atof(pResult[nrow*ncolumn+4]);
- _globalPowerInfo->_power_info.current = atof(pResult[nrow*ncolumn+5]);
- _globalPowerInfo->_power_info.power = atof(pResult[nrow*ncolumn+6]);
- _globalPowerInfo->_power_info.freq = atof(pResult[nrow*ncolumn+7]);
- _globalPowerInfo->_power_info.consumption = atof(pResult[nrow*ncolumn+8]);
- _globalPowerInfo->_power_info.factor = atof(pResult[nrow*ncolumn+9]);
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 获取所有采集的最新值
- /// @param db
- /// @param _globalPowerManger
- /// @return
- #if 0
- int dev_search_latest_power_All_info(GlobalDeviceManager* __globalDeviceManger,_OverChnPwrAckInfo* __overChnPwrAckInfo)
- {
- GlobalPowerManger* _globalPowerMangerTemp = NULL ;
- char* upgrade_msg = NULL ;
- list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManger->_globalPowerManger.list, list)
- {
- _OverChnPwrAckInfo *_overChnPwrBackInfoTemp = (_OverChnPwrAckInfo *)malloc(sizeof(_OverChnPwrAckInfo));
- if (_overChnPwrBackInfoTemp == NULL)
- {
- log_e("_overChnPwrBackInfoTemp malloc err.");
- return -1;
- }
- // 填数据
- _overChnPwrBackInfoTemp->product_name = __globalDeviceManage._global_device_info->product_name;
- _overChnPwrBackInfoTemp->product_number = __globalDeviceManage._global_device_info->product_number;
- _overChnPwrBackInfoTemp->product_id = __globalDeviceManage._global_device_info->product_id;
- _overChnPwrBackInfoTemp->productChName = _globalPowerMangerTemp->product_ch_name;
- _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
- _overChnPwrBackInfoTemp->status = _globalPowerMangerTemp->_PowerInfo.status;
- _overChnPwrBackInfoTemp->voltage = _globalPowerMangerTemp->_PowerInfo.voltage;
- _overChnPwrBackInfoTemp->current = _globalPowerMangerTemp->_PowerInfo.current;
- _overChnPwrBackInfoTemp->power = _globalPowerMangerTemp->_PowerInfo.power;
- _overChnPwrBackInfoTemp->freq = _globalPowerMangerTemp->_PowerInfo.freq;
- _overChnPwrBackInfoTemp->consumption = _globalPowerMangerTemp->_PowerInfo.consumption;
- _overChnPwrBackInfoTemp->factor = _globalPowerMangerTemp->_PowerInfo.factor;
- _overChnPwrBackInfoTemp->product_ch_start_delay=_globalPowerMangerTemp->product_ch_start_delay;
- _overChnPwrBackInfoTemp->product_ch_stop_delay=_globalPowerMangerTemp->product_ch_stop_delay;
- list_add_tail(&_overChnPwrBackInfoTemp->list, &__overChnPwrAckInfo->list);
- }
- return 0;
- }
- #endif
- /// @brief 获取所有采集统计的最新值
- /// @param db
- /// @param _globalPowerManger
- /// @return
- #if 0
- int dev_search_latest_power_statistic_info(GlobalDeviceManager* __globalDeviceManger)
- {
- _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
- GlobalPowerManger* _globalPowerMangerTemp = NULL ;
- char* upgrade_msg = NULL ;
- float fSaveVoltage =0.0f,fSaveFreq =0.0f,fSaveFactor =0.0f;
- float faverageVoltage =0.0f,faverageFreq =0.0f,faverageFactor =0.0f;
- float fDiffVoltage =0.0f,fDiffFreq =0.0f,fDiffFactor =0.0f;
- float fNowVoltage =0.0f,fNowFreq =0.0f,fNowFactor =0.0f;
- memset(&_over_all_pwr_back_info,0,sizeof(_OverAllPwrAckInfo));
- _over_all_pwr_back_info.product_name = __globalDeviceManage._global_device_info->product_name;
- _over_all_pwr_back_info.product_id = __globalDeviceManage._global_device_info->product_id;
- _over_all_pwr_back_info.product_number = __globalDeviceManage._global_device_info->product_number;
- int nTempSum=0;
- list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManger->_globalPowerManger.list, list)
- {
- faverageVoltage += _globalPowerMangerTemp->_PowerInfo.voltage;
- faverageFreq += _globalPowerMangerTemp->_PowerInfo.freq;
- faverageFactor += _globalPowerMangerTemp->_PowerInfo.factor;
- nTempSum++;
- }
- if (nTempSum>0)
- {
- faverageVoltage /= nTempSum;
- faverageFreq /= nTempSum;
- faverageFactor /= nTempSum;
- }else
- {
- return -1;
- }
- nTempSum=0;
- list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManger->_globalPowerManger.list, list)
- {
- if (nTempSum==0)
- {
- fSaveVoltage=_globalPowerMangerTemp->_PowerInfo.voltage;
- fSaveFreq=_globalPowerMangerTemp->_PowerInfo.freq;
- fSaveFactor=_globalPowerMangerTemp->_PowerInfo.factor;
- fDiffVoltage=abs(faverageVoltage-fSaveVoltage);
- fDiffFreq=abs(faverageFreq-fSaveFreq);
- fDiffFactor=abs(faverageFactor-fSaveFactor);
- }else
- { //其他位则计算偏差值
- fNowVoltage=abs(faverageVoltage-_globalPowerMangerTemp->_PowerInfo.voltage);
- fNowFreq=abs(faverageFreq-_globalPowerMangerTemp->_PowerInfo.freq);
- fNowFactor=abs(faverageFactor-_globalPowerMangerTemp->_PowerInfo.factor);
- if (fNowVoltage<fDiffVoltage)
- {
- fSaveVoltage=_globalPowerMangerTemp->_PowerInfo.voltage;
- fDiffVoltage=fNowVoltage;
- }
- if (fNowFreq<fDiffFreq)
- {
- fSaveFreq=_globalPowerMangerTemp->_PowerInfo.freq;
- fDiffFreq=fNowFreq;
- }
- if (fNowFactor<fDiffFactor)
- {
- fSaveFactor=_globalPowerMangerTemp->_PowerInfo.voltage;
- fDiffFactor=fNowFactor;
- }
- }
- // 填数据
- _over_all_pwr_back_info.current += _globalPowerMangerTemp->_PowerInfo.current ;
- _over_all_pwr_back_info.power += _globalPowerMangerTemp->_PowerInfo.power ;
- _over_all_pwr_back_info.consumption += _globalPowerMangerTemp->_PowerInfo.consumption ;
- nTempSum++;
- }
- _over_all_pwr_back_info.voltage = fSaveVoltage ;
- _over_all_pwr_back_info.freq = fSaveFreq ;
- _over_all_pwr_back_info.factor = fSaveFactor;
- upgrade_msg = ws_over_status_ack_to_json(0,&_over_all_pwr_back_info);
- //struct mg_connection *WStemp = WSLinklist;
- //while (WStemp != NULL)
- //{
- // mg_ws_send(WStemp->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
- // WStemp = WStemp->next;
- // }
- if (__globalDeviceManger->ws_client != NULL)
- {
- mg_ws_send(__globalDeviceManger->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
- }
- //释放资源,一定要记得释放json字符串
- free(upgrade_msg);
- return 0;
- }
- #endif
- #define DEBUG_TEST 0
- /// @brief 获取一段时间内采集的最新值
- /// @param db
- /// @param product_id
- /// @param product_ch_id
- /// @param total_type
- /// @param _globalPowerInfo
- /// @return
- int dev_search_time_power_info(sqlite3 *db,int product_id,int product_ch_id,int total_type,GlobalPowerInfo* _globalPowerInfo,char* start_time,char* end_time)
- {
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- // SELECT *
- // FROM Table_PowerInfo
- // WHERE product_id = 1 AND product_ch_id = 0
- // ORDER BY product_samp_time DESC
- // LIMIT 1;
- // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
- // product_id,
- // product_ch_id);
- log_d("product_id = %d product_ch_id=%d ",product_id,product_ch_id);
- //数据库查询 1MIN一个点
- // snprintf(select_sql,sizeof(select_sql),"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY product_Index DESC LIMIT 60;",
- // product_id,
- // product_ch_id);
- snprintf(select_sql, sizeof(select_sql), "SELECT * FROM Table_PowerInfo WHERE (product_id=%d) AND (product_ch_id=%d) AND (product_samp_time BETWEEN '%s' AND '%s') ORDER BY product_Index DESC LIMIT 60;",
- product_id,
- product_ch_id,
- start_time,
- end_time);
- //300是秒数,即5分钟的秒数为300秒,这个间隔数可以自己定义
- // select id,cameraName,checkPointName,datetime(strftime('%s', countTime)/300*300,'unixepoch')
- // as countTime,sum(todayCount) as 'todaycount'
- // from cardetectinfo where countTime>='2022-04-01 01:01:01' and countTime<='2022-08-31 01:01:01' group by strftime('%s', countTime)/300 order by countTime limit 0,20
- // SELECT TO_CHAR(TRUNC(SYSDATE, 'DD') + (1 / (24 * 60) * ROWNUM),
- // 'YYYY-MM-DD hh24:MI:SS')
- // FROM ALL_OBJECTS
- // WHERE ROWNUM <= 1440 / 1;
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search no data.");
- return -1 ;
- }
- int nCount=1;
- if (nrow<=TOTAL_COUNT)
- {
- nCount=nrow;
- }
- else nCount=TOTAL_COUNT;
-
- //电压统计
- if(total_type == TOTAL_VOLTAGE_TYPE)
- {
-
- for(int i=0;i < nCount; i++)
- {
- _globalPowerInfo ->_total_voltage.ydata[i] = atof(pResult[(nCount-i)*ncolumn+4]);
- strcpy(_globalPowerInfo ->_total_voltage.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
- #if DEBUG_TEST
- _globalPowerInfo ->_total_voltage.ydata[i] = 220.0+i*0.8;
- sprintf(data_time_str,"2023-01-23:%d",i+4);
- strcpy(&_globalPowerInfo ->_total_voltage.xAxis[i][0],data_time_str);
- #endif
- }
- }
- //电流统计
- else if(total_type == TOTAL_CURRENT_TYPE)
- {
- for(int i=1;i < nCount; i++)
- {
- #if DEBUG_TEST
- _globalPowerInfo ->_total_current.ydata[i] = i+2.7;
- sprintf(data_time_str,"2023-01-23:%d",i+6);
- strcpy(&_globalPowerInfo ->_total_current.xAxis[i][0],data_time_str);
- #endif
- _globalPowerInfo->_total_current.ydata[i] = atof(pResult[(nCount-i)*ncolumn+5]);
- strcpy(_globalPowerInfo ->_total_current.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
- }
- }
- //功率统计
- else if(total_type == TOTAL_POWER_TYPE)
- {
- for(int i=0;i < nCount; i++)
- {
- #if DEBUG_TEST
- _globalPowerInfo ->_total_power.ydata[i] = i+5.8;
- sprintf(data_time_str,"2023-01-23:%d",i+12);
- strcpy(&_globalPowerInfo ->_total_power.xAxis[i][0],data_time_str);
- #endif
- _globalPowerInfo->_total_power.ydata[i] = atof(pResult[(nCount-i)*ncolumn+6]);
- strcpy(_globalPowerInfo ->_total_power.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
- }
- }
- //耗电量统计
- else if(total_type == TOTAL_POWER_CONS_TYPE)
- {
- for(int i=0;i < nCount; i++)
- {
- #if DEBUG_TEST
- _globalPowerInfo ->_total_consumption.ydata[i] = i+7.2;
- sprintf(data_time_str,"2023-01-23:%d",i+10);
- strcpy(&_globalPowerInfo ->_total_consumption.xAxis[i][0],data_time_str);
- #endif
- _globalPowerInfo->_total_consumption.ydata[i] = atof(pResult[(nCount-i)*ncolumn+8]);
- strcpy(_globalPowerInfo ->_total_consumption.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
- }
- }
-
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 获取系统总数信息
- /// @param db
- /// @param product_id
- /// @param product_ch_id
- /// @param _globalPowerInfo
- /// @return
- int dev_get_system_total_info(sqlite3 *db,int product_id,int product_ch_id, SystemTotalInfo* __SystemTotalInfo,char* start_time,char* end_time)
- {
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- __SystemTotalInfo->log_total=0;
- __SystemTotalInfo->sensor_total=0;
- __SystemTotalInfo->warn_total=0;
- //查询告警总数
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) and (alarmDate BETWEEN '%s' AND '%s');",0,start_time,end_time);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite select Table_AlarmManage handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search Table_AlarmManage no data.");
- return -1 ;
- }
- __SystemTotalInfo->warn_total = atoi(pResult[1]);
- //查询日志总数
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) and (alarmDate BETWEEN '%s' AND '%s');",2,start_time,end_time);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite select run_log handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search run_log no data.");
- return -1 ;
- }
- __SystemTotalInfo->log_total = atoi(pResult[1]);
- //查询传感器总数
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_SensorManage;");
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite select Table_SensorInfo handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search Table_SensorInfo no data.");
- return -1 ;
- }
- __SystemTotalInfo->sensor_total = atoi(pResult[1]);
- #if 0
- __SystemTotalInfo->channel_total =
- #endif
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 功率趋势图接口(有功功率、无功功率以及视在功率)
- /// @param db
- /// @param product_id
- /// @param product_ch_id
- /// @param total_type
- /// @param _globalPowerInfo
- /// @return
- int dev_search_power_trend_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerInfo* _globalPowerInfo,char* start_time,char* end_time)
- {
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- // SELECT *
- // FROM Table_PowerInfo
- // WHERE product_id = 1 AND product_ch_id = 0
- // ORDER BY product_samp_time DESC
- // LIMIT 1;
- // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_id=%d AND product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
- // product_id,
- // product_ch_id);
- // 数据库查询 1MIN一个点
- snprintf(select_sql, sizeof(select_sql), "SELECT * FROM Table_PowerInfo WHERE (product_id=%d) AND (product_ch_id=%d) AND (product_samp_time BETWEEN '%s' AND '%s') ORDER BY product_Index DESC LIMIT 60;",
- product_id,
- product_ch_id,
- start_time,
- end_time);
- //300是秒数,即5分钟的秒数为300秒,这个间隔数可以自己定义
- // select id,cameraName,checkPointName,datetime(strftime('%s', countTime)/300*300,'unixepoch')
- // as countTime,sum(todayCount) as 'todaycount'
- // from cardetectinfo where countTime>='2022-04-01 01:01:01' and countTime<='2022-08-31 01:01:01' group by strftime('%s', countTime)/300 order by countTime limit 0,20
- // SELECT TO_CHAR(TRUNC(SYSDATE, 'DD') + (1 / (24 * 60) * ROWNUM),
- // 'YYYY-MM-DD hh24:MI:SS')
- // FROM ALL_OBJECTS
- // WHERE ROWNUM <= 1440 / 1;
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search no data.");
- return -1 ;
- }
- int nCount=1;
- if (nrow<=TOTAL_COUNT)
- {
- nCount=nrow;
- }
- else nCount=TOTAL_COUNT;
- // char data_time_str[32]={0};
- for(int i=0;i < nCount; i++)
- {
- _globalPowerInfo ->_power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i] = atof(pResult[(nCount-i)*ncolumn+6]);
- _globalPowerInfo ->_power_trend_info.ydata[POWER_REACTIVE_TYPE][i] =atof(pResult[(nCount-i)*ncolumn+6])*atof(pResult[(nCount-i)*ncolumn+9]) - atof(pResult[(nCount-i)*ncolumn+6]);
- _globalPowerInfo ->_power_trend_info.ydata[POWER_APPARENT_TYPE][i] = atof(pResult[(nCount-i)*ncolumn+6])*atof(pResult[(nCount-i)*ncolumn+9]);
- strcpy(_globalPowerInfo ->_power_trend_info.xAxis[i],pResult[(nCount-i)*ncolumn+0]);
- #if DEBUG_TEST
- sprintf(data_time_str,"2023-01-23:%d",i+4);
- strcpy(&_globalPowerInfo ->_power_trend_info.xAxis[i][0],data_time_str);
- _globalPowerInfo ->_power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i] = i+1.5;
- _globalPowerInfo ->_power_trend_info.ydata[POWER_REACTIVE_TYPE][i] = i+2;
- _globalPowerInfo ->_power_trend_info.ydata[POWER_APPARENT_TYPE][i] = i+2.5;
- #endif
-
- }
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 查询电源监控信息表 查询条件 时间与ID号
- /// @param db
- /// @param product_id 查询产品ID号
- /// @param start_time 查询起始时间
- /// @param stop_time 查询结束时间
- /// @param size 查询数据个数
- /// @param _globalPowerInfo 返回信息
- /// @return
- int dev_search_power_info(sqlite3 *db,
- int product_id,
- int product_ch_id,
- char* start_time,
- char* stop_time,
- int page,
- int pageSize,
- int* size,
- GlobalPowerInfo* _globalPowerInfo)
- {
- //按时间段查询语句
- //SELECT* FROM Table_PowerInfo WHERE product_id=product_id AND (product_samp_time BETWEEN 'start_time' AND 'stop_time');
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
-
- sprintf(select_sql,"SELECT* FROM Table_PowerInfo WHERE (product_id=%d AND product_ch_id=%d) AND (product_samp_time BETWEEN '%s' AND '%s') LIMIT %d OFFSET %d;",
- product_id,
- product_ch_id,
- start_time,
- stop_time,
- pageSize,
- page);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- if(nrow==0)
- return -1 ;
- //log_d(select_sql);
- //log_d("total_num: %d", nrow-1);
- //初始化头
- // int k = 0 ;
- for (size_t i = 1; i < nrow + 1; i++)
- {
- GlobalPowerInfo* _globalPowerInfoTemp = (GlobalPowerInfo*)malloc(sizeof(GlobalPowerInfo));
- if(_globalPowerInfoTemp==NULL)
- return -1 ;
- strcpy(_globalPowerInfoTemp->samp_time,pResult[i*ncolumn+0]);//i=0 10
- _globalPowerInfoTemp->product_id = atoi(pResult[i*ncolumn+1]);
- _globalPowerInfoTemp->product_ch_id = atoi(pResult[i*ncolumn+2]);
- _globalPowerInfoTemp->product_status = atoi(pResult[i*ncolumn+3]);
- _globalPowerInfoTemp->_power_info.voltage = atof(pResult[i*ncolumn+4]);
- _globalPowerInfoTemp->_power_info.current = atof(pResult[i*ncolumn+5]);
- _globalPowerInfoTemp->_power_info.power = atof(pResult[i*ncolumn+6]);
- _globalPowerInfoTemp->_power_info.freq = atof(pResult[i*ncolumn+7]);
- _globalPowerInfoTemp->_power_info.consumption = atof(pResult[i*ncolumn+8]);
- _globalPowerInfoTemp->_power_info.factor = atof(pResult[i*ncolumn+9]);
- //尾部插入
- list_add_tail(&_globalPowerInfoTemp->list, &_globalPowerInfo->list);
- }
- *size = nrow;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 添加通道管理信息
- /// @param db
- /// @param product_id
- /// @param product_ch_id
- /// @param _globalPowerChnManger
- /// @return
- int dev_insert_power_manage_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
- {
- int res ;
- char select_sql[512] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
-
- sprintf(select_sql,"INSERT INTO Table_PowerManage VALUES (%d,%d,'%s',%d,%d,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%.2f,%d,%d,%d,%d);",
- _globalPowerChnManger->product_id,
- _globalPowerChnManger->product_ch_id,
- _globalPowerChnManger->product_ch_name,
- _globalPowerChnManger->product_ch_type,
- _globalPowerChnManger->product_ch_status,
- _globalPowerChnManger->product_ch_start_delay,
- _globalPowerChnManger->product_ch_stop_delay,
- _globalPowerChnManger->global_over_manager->product_vol_upper_enable,
- _globalPowerChnManger->global_over_manager->product_vol_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_vol_lower_enable,
- _globalPowerChnManger->global_over_manager->product_vol_lower_threshold,
- _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_cur_upper_enable,
- _globalPowerChnManger->global_over_manager->product_cur_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_pwr_upper_enable,
- _globalPowerChnManger->global_over_manager->product_pwr_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_pwrcon_upper_enable,
- _globalPowerChnManger->global_over_manager->product_pwrcon_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->product_saddr,
- _globalPowerChnManger->product_ch_addr
- );
- printf("select_sql:%s\n",select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 查询电源通道管理信息
- /// @param db
- /// @param product_id
- /// @param _globalPowerManger
- /// @return
- int dev_get_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
- {
- int res = 0 ;
- int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[256] = {0};
- sprintf(select_sql,"SELECT* FROM Table_PowerManage WHERE product_id=%d AND product_ch_addr_id=%d and product_ch_addr_ch_id=%d;",product_id,product_addr,product_ch_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -2 ;
- //提取数据
- if(nrow==0)
- return -1 ;
- //获取产品ID
- _globalPowerChnManger->product_id = atoi(pResult[rowIndex*ncolumn+0]);
- //获取产品ID
- _globalPowerChnManger->product_ch_id = atoi(pResult[rowIndex*ncolumn+1]);
- //获取通道名称
- strcpy(_globalPowerChnManger->product_ch_name,pResult[rowIndex*ncolumn+2]);
- //获取通道类型
- _globalPowerChnManger->product_ch_type = atoi(pResult[rowIndex*ncolumn+3]);
- //获取通道状态
- _globalPowerChnManger->product_ch_status = atoi(pResult[rowIndex*ncolumn+4]);
- //获取通道延时
- _globalPowerChnManger->product_ch_start_delay = atoi(pResult[rowIndex*ncolumn+5]);
- //获取通道延时
- _globalPowerChnManger->product_ch_stop_delay = atoi(pResult[rowIndex*ncolumn+6]);
- if (_globalPowerChnManger->_PowerSXManage == NULL) _globalPowerChnManger->_PowerSXManage = (_PowerSXManage_t*)malloc(sizeof(_PowerSXManage_t));
- if (__globalSxIdx >= pow(2, 32)) __globalSxIdx = 0;
- _globalPowerChnManger->_PowerSXManage->firingSortno = __globalSxIdx++;
- _globalPowerChnManger->_PowerSXManage->closeSortno = __globalSxIdx++;
- //获取电压超上限使能
- _globalPowerChnManger->global_over_manager->product_vol_upper_enable = atoi(pResult[rowIndex*ncolumn+7]);
- //获取电压上限范围
- _globalPowerChnManger->global_over_manager->product_vol_upper_threshold = atof(pResult[rowIndex*ncolumn+8]);
- //获取电压上限超限动作
- _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+9]);
- //获取电压上限超限关联参数
- _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+10]);
- //获取电压超下限使能
- _globalPowerChnManger->global_over_manager->product_vol_lower_enable = atoi(pResult[rowIndex*ncolumn+11]);
- //获取电压下限范围
- _globalPowerChnManger->global_over_manager->product_vol_lower_threshold = atof(pResult[rowIndex*ncolumn+12]);
- //获取电压下限超限动作
- _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+13]);
- //超限关联参数
- _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+14]);
- //获取电流超上限使能
- _globalPowerChnManger->global_over_manager->product_cur_upper_enable = atoi(pResult[rowIndex*ncolumn+15]);
- //获取电流上限范围
- _globalPowerChnManger->global_over_manager->product_cur_upper_threshold = atof(pResult[rowIndex*ncolumn+16]);
- //获取电流上限超限动作
- _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+17]);
- //超限关联参数
- _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+18]);
- //获取功耗超上限使能
- _globalPowerChnManger->global_over_manager->product_pwr_upper_enable = atoi(pResult[rowIndex*ncolumn+19]);
- //获取功耗上限范围
- _globalPowerChnManger->global_over_manager->product_pwr_upper_threshold = atof(pResult[rowIndex*ncolumn+20]);
- //获取功耗上限超限动作
- _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+21]);
- //超限关联参数
- _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+22]);
- //获取耗电量超上限使能
- _globalPowerChnManger->global_over_manager->product_pwrcon_upper_enable = atoi(pResult[rowIndex*ncolumn+23]);
- //获取耗电量上限范围
- _globalPowerChnManger->global_over_manager->product_pwrcon_upper_threshold = atof(pResult[rowIndex*ncolumn+24]);
- //获取耗电量上限超限动作
- _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = atoi(pResult[rowIndex*ncolumn+25]);
- //超限关联参数
- _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl_para = atoi(pResult[rowIndex*ncolumn+26]);
- //获取板ID
- _globalPowerChnManger->product_saddr = atoi(pResult[rowIndex*ncolumn+27]);
- //获取板TYPE
- _globalPowerChnManger->product_ch_addr = atoi(pResult[rowIndex*ncolumn+28]);
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 更新通道基本管理信息
- /// @param db
- /// @param product_id
- /// @param _globalPowerManger
- /// @return
- int dev_update_power_manage_genera_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"UPDATE Table_PowerManage SET product_id=%d,product_ch_id=%d,product_ch_name='%s',product_ch_type=%d,product_ch_status=%d,product_ch_start_delay=%d,product_ch_stop_delay=%d WHERE product_id=%d AND product_ch_id=%d;",
- _globalPowerChnManger->product_id,
- _globalPowerChnManger->product_ch_id,
- _globalPowerChnManger->product_ch_name,
- _globalPowerChnManger->product_ch_type,
- _globalPowerChnManger->product_ch_status,
- _globalPowerChnManger->product_ch_start_delay,
- _globalPowerChnManger->product_ch_stop_delay,
- product_id,
- product_ch_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- return -1 ;
- }
-
- sqlite3_free_table(pResult);
- return 0 ;
- }
- /// @brief 更新超限信息
- /// @param db
- /// @param product_id
- /// @param product_ch_id
- /// @param _globalPowerChnManger
- /// @return
- int dev_update_power_manage_over_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerManger* _globalPowerChnManger)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"UPDATE Table_PowerManage SET product_vol_u_enable=%d,product_vol_u_threshold=%0.2f,product_vol_over_u_threshold_ctrl=%d,product_vol_over_u_threshold_para=%d,product_vol_l_enable=%d,product_vol_l_threshold=%0.2f,product_vol_over_l_threshold_ctrl=%d,product_vol_over_l_threshold_para=%d,product_cur_u_enable=%d,product_cur_u_threshold=%0.2f,product_cur_over_u_threshold_ctrl=%d,product_cur_over_u_threshold_para=%d,product_pwr_u_enable=%d,product_pwr_u_threshold=%0.2f,product_pwr_over_u_threshold_ctrl=%d,product_pwr_over_u_threshold_para=%d,product_pwrcon_u_enable=%d,product_pwrcon_u_threshold=%0.2f,product_pwrcon_over_u_threshold_ctrl=%d,product_pwrcon_over_u_threshold_para=%d WHERE product_id=%d AND product_ch_id=%d;",
- _globalPowerChnManger->global_over_manager->product_vol_upper_enable,
- _globalPowerChnManger->global_over_manager->product_vol_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_vol_lower_enable,
- _globalPowerChnManger->global_over_manager->product_vol_lower_threshold,
- _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_vol_over_lower_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_cur_upper_enable,
- _globalPowerChnManger->global_over_manager->product_cur_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_pwr_upper_enable,
- _globalPowerChnManger->global_over_manager->product_pwr_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_pwr_over_upper_threshold_ctrl_para,
- _globalPowerChnManger->global_over_manager->product_pwrcon_upper_enable,
- _globalPowerChnManger->global_over_manager->product_pwrcon_upper_threshold,
- _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl,
- _globalPowerChnManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl_para,
- product_id,
- product_ch_id);
- // log_i(select_sql);
- printf("%s\n",select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0 ;
- }
- /// @brief 获取传感器管理信息
- /// @param db
- /// @param product_id
- /// @param _globalSensorManger
- /// @return
- int dev_get_sensor_manage_info(sqlite3 *db,int product_id,GlobalSensorManger* _globalSensorManger)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- //GlobalSensorManger* _globalSensorMangerTemp = NULL;
- sprintf(select_sql,"SELECT* FROM Table_SensorManage WHERE product_id=%d;",product_id);
- printf("product_id =%d\n",product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -2 ;
- //提取数据
- if(nrow==0)
- return -1 ;
- for (size_t i = 1; i <= nrow; i++)
- {
- GlobalSensorManger* _globalSensorMangerTemp = (GlobalSensorManger*)malloc(sizeof(GlobalSensorManger));
- if(_globalSensorMangerTemp==NULL)
- return -1 ;
- _globalSensorMangerTemp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
- if(_globalSensorMangerTemp->over_manager==NULL)
- return -1 ;
- _globalSensorMangerTemp->product_id = atoi(pResult[i*ncolumn+0]);
- _globalSensorMangerTemp->sensor_id = atoi(pResult[i*ncolumn+1]);
- _globalSensorMangerTemp->sensor_type = atoi(pResult[i*ncolumn+2]);
- _globalSensorMangerTemp->sensor_interface_type = atoi(pResult[i*ncolumn+3]);
- strcpy(_globalSensorMangerTemp->sensor_name,pResult[i*ncolumn+4]);
- strcpy(_globalSensorMangerTemp->sensor_port_name,pResult[i*ncolumn+5]);
- if( _globalSensorMangerTemp->sensor_interface_type==1)
- {
- _globalSensorMangerTemp->sensor_baud = atoi(pResult[i*ncolumn+6]);
- _globalSensorMangerTemp->sensor_addr = atoi(pResult[i*ncolumn+7]);
- }
- else
- {
- _globalSensorMangerTemp->sensor_baud = 0 ;
- _globalSensorMangerTemp->sensor_addr = 0 ;
- }
- _globalSensorMangerTemp->sensor_status = 1;//atoi(pResult[i*ncolumn+8]);
- _globalSensorMangerTemp->sensor_val_count = atoi(pResult[i*ncolumn+9]);
- //记录超限信息
- _globalSensorMangerTemp->over_manager->sensor_val1_upper_enabled = atoi(pResult[i*ncolumn+10]);
- _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold = atof(pResult[i*ncolumn+11]);
- _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl = atoi(pResult[i*ncolumn+12]);
- _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para = atoi(pResult[i*ncolumn+13]);
- _globalSensorMangerTemp->over_manager->sensor_val1_lower_enabled = atoi(pResult[i*ncolumn+14]);
- _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold = atof(pResult[i*ncolumn+15]);
- _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl = atoi(pResult[i*ncolumn+16]);
- _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para = atoi(pResult[i*ncolumn+17]);
- _globalSensorMangerTemp->over_manager->sensor_val2_upper_enabled = atoi(pResult[i*ncolumn+18]);
- _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold = atof(pResult[i*ncolumn+19]);
- _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl = atoi(pResult[i*ncolumn+20]);
- _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para = atoi(pResult[i*ncolumn+21]);
- _globalSensorMangerTemp->over_manager->sensor_val2_lower_enabled = atoi(pResult[i*ncolumn+22]);
- _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold = atof(pResult[i*ncolumn+23]);
- _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl = atoi(pResult[i*ncolumn+24]);
- _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para = atoi(pResult[i*ncolumn+25]);
- //尾部插入
- list_add_tail(&_globalSensorMangerTemp->list, &_globalSensorManger->list);
- }
- sqlite3_free_table(pResult);
- return 0 ;
- }
- /// @brief 插入一条传感器值
- /// @param db
- /// @param _globalSensorInfo
- /// @return
- int dev_insert_sensor_info(sqlite3 *db,GlobalSensorInfo* _globalSensorInfo,int *nIndex)
- {
- int res ;
- char select_sql[256] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
-
- sprintf(select_sql,"INSERT INTO Table_SensorInfo VALUES (%d,'%s',%d,%d,%.2f,%.2f);",
- *nIndex,
- _globalSensorInfo->samp_time,
- _globalSensorInfo->product_id,
- _globalSensorInfo->sensor_id,
- _globalSensorInfo->val1,
- _globalSensorInfo->val2);
-
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
-
- if(res != SQLITE_OK)
- {
- printf("errmsg = %s %s\n",err_msg,select_sql);
- return -1 ;
- }
- sqlite3_free_table(pResult);
- *nIndex+=1;
- return 0;
- }
- /// @brief 返回传感器的最新值
- /// @param db
- /// @param product_id
- /// @param sensor_id
- /// @param sensor_type
- /// @param _globalSensorInfo
- /// @return
- int dev_serach_latest_sensor_info(sqlite3 *db,int product_id,int sensor_id,GlobalSensorInfo* _globalSensorInfo)
- {
- int res ;
- char select_sql[256] = {0};
- // char *errorMsg = NULL;
- int nrow = 1; //满足条件的记录数目
- int ncolumn = 1; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"SELECT * FROM Table_SensorInfo WHERE product_id=%d AND sensor_id=%d ORDER BY sensor_samp_time DESC LIMIT 1;",
- product_id,
- sensor_id);
- //log_d(select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search no data.");
- return -1 ;
- }
- printf("nrow = %d ncolumen = %d\n",nrow,ncolumn);
- strcpy(_globalSensorInfo->samp_time,pResult[nrow*ncolumn+1]);
- _globalSensorInfo->product_id = atoi(pResult[nrow*ncolumn+2]);
- _globalSensorInfo->sensor_id = atoi(pResult[nrow*ncolumn+3]);
- _globalSensorInfo->val1 = atof(pResult[nrow*ncolumn+4]);
- _globalSensorInfo->val2 = atof(pResult[nrow*ncolumn+5]);
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 查询传感器信息
- /// @param db
- /// @param product_id
- /// @param sensor_id
- /// @param start_time
- /// @param stop_time
- /// @param size
- /// @param _globalSensorInfo
- /// @return
- int dev_search_sensor_info(sqlite3 *db,
- int product_id,
- int sensor_id,
- char* start_time,
- char* stop_time,
- int pageNum,
- int pageSize,
- int* size,
- GlobalSensorInfo* _globalSensorInfo)
- {
- //按时间段查询语句
- //SELECT* FROM Table_PowerInfo WHERE product_id=product_id AND (product_samp_time BETWEEN 'start_time' AND 'stop_time');
- int res ;
- char select_sql[256] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
-
- sprintf(select_sql,"SELECT* FROM Table_SensorInfo WHERE (product_id=%d) AND (sensor_id=%d) AND (sensor_samp_time BETWEEN '%s' AND '%s') LIMIT %d OFFSET %d;",
- product_id,
- sensor_id,
- start_time,
- stop_time,
- pageSize,
- pageNum);
- log_d(select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- if(nrow==0)
- return -1 ;
-
- //初始化头
- //GlobalSensorInfo* _temp = _globalSensorInfo;
- for (size_t i = 1; i <= nrow; i++)
- {
- GlobalSensorInfo* _globalSensorInfoTemp = (GlobalSensorInfo*)malloc(sizeof(GlobalSensorInfo));
- if(_globalSensorInfoTemp==NULL)
- return -1 ;
- strcpy(_globalSensorInfoTemp->samp_time,pResult[i*ncolumn+2]);
- _globalSensorInfoTemp->product_id = atoi(pResult[i*ncolumn+3]);
- _globalSensorInfoTemp->sensor_id = atoi(pResult[i*ncolumn+4]);
- if(pResult[i*ncolumn+5]!=NULL)
- _globalSensorInfoTemp->val1 = atof(pResult[i*ncolumn+5]);
- if(pResult[i*ncolumn+6]!=NULL)
- _globalSensorInfoTemp->val2 = atof(pResult[i*ncolumn+6]);
- //尾部插入
- list_add_tail(&_globalSensorInfoTemp->list, &_globalSensorInfo->list);
- }
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 删除一条传感器信息
- /// @param db
- /// @param product_id
- /// @param sensor_id
- /// @return
- int dev_delete_sensor_manage(sqlite3 *db,int product_id,int sensor_id)
- {
- int res ;
- char select_sql[256] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"DELETE FROM Table_SensorManage WHERE product_id=%d AND sensor_id=%d;",
- product_id,
- sensor_id
- );
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 插入一条传感器管理信息
- /// @param db
- /// @param _globalSensorManger
- /// @return
- int dev_insert_sensor_genera_manage(sqlite3 *db,GlobalSensorManger* _globalSensorManger)
- {
- int res ;
- char select_sql[1024] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"INSERT INTO Table_SensorManage (product_id,sensor_type,sensor_interface_type,sensor_name,sensor_port_name,sensor_baud,sensor_addr,sensor_status,sensor_val_count,sensor_val1_u_enable,sensor_val1_u_threshold,sensor_val1_over_u_threshold_ctrl,sensor_val1_over_u_threshold_ctrl_para,sensor_val1_l_enable,sensor_val1_l_threshold,sensor_val1_over_l_threshold_ctrl,sensor_val1_over_l_threshold_ctrl_para,sensor_val2_u_enable,sensor_val2_u_threshold,sensor_val2_over_u_threshold_ctrl,sensor_val2_over_u_threshold_ctrl_para,sensor_val2_l_enable,sensor_val2_l_threshold,sensor_val2_over_l_threshold_ctrl,sensor_val2_over_l_threshold_ctrl_para) VALUES (%d,%d,%d,'%s','%s',%d,%d, %d,%d,%d,%0.2f,%d,%d,%d,%0.2f,%d,%d,%d,%0.2f,%d,%d,%d,%0.2f,%d,%d);",
- _globalSensorManger->product_id,
- // _globalSensorManger->sensor_id,
- _globalSensorManger->sensor_type,
- _globalSensorManger->sensor_interface_type,
- _globalSensorManger->sensor_name,
- _globalSensorManger->sensor_port_name,
- _globalSensorManger->sensor_baud,
- _globalSensorManger->sensor_addr,
- _globalSensorManger->sensor_status,
- _globalSensorManger->sensor_val_count,
- 0,
- 0.0,
- 0,
- 0,
- 0,
- 0.0,
- 0,
- 0,
- 0,
- 0.0,
- 0,
- 0,
- 0,
- 0.0,
- 0,
- 0);
- log_d(select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 更新传感器基本信息
- /// @param db
- /// @param product_id
- /// @param sensor_id
- /// @param _globalSensorManger
- /// @return
- int dev_update_sensor_genera_manage(sqlite3 *db,int product_id,int sensor_id,GlobalSensorManger* _globalSensorManger)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"UPDATE Table_SensorManage SET product_id=%d,sensor_id=%d,sensor_type=%d,sensor_interface_type=%d,sensor_name='%s',sensor_port_name='%s',sensor_baud=%d,sensor_addr=%d,sensor_status=%d,sensor_val_count=%d WHERE product_id=%d AND sensor_id=%d;",
- _globalSensorManger->product_id,
- _globalSensorManger->sensor_id,
- _globalSensorManger->sensor_type,
- _globalSensorManger->sensor_interface_type,
- _globalSensorManger->sensor_name,
- _globalSensorManger->sensor_port_name,
- _globalSensorManger->sensor_baud,
- _globalSensorManger->sensor_addr,
- _globalSensorManger->sensor_status,
- _globalSensorManger->sensor_val_count,
- product_id,
- sensor_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0 ;
- }
- /// @brief 更新一条传感器超限信息
- /// @param db
- /// @param product_id
- /// @param sensor_id
- /// @param _globalSensorManger
- /// @return
- int dev_update_sensor_over_manage(sqlite3 *db,int product_id,int sensor_id,GlobalSensorManger* _globalSensorManger)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"UPDATE Table_SensorManage SET sensor_val1_u_enabled=%d,sensor_val1_u_threshold=%0.2f,sensor_val1_u_threshold_ctrl=%d,sensor_val1_u_threshold_ctrl_para=%d,sensor_val2_u_enabled=%d,sensor_val2_u_threshold=%0.2f,sensor_val2_u_threshold_ctrl=%d,sensor_val2_u_threshold_ctrl_para=%d WHERE product_id=%d AND product_ch_id=%d;",
- _globalSensorManger->over_manager->sensor_val1_upper_enabled,
- _globalSensorManger->over_manager->sensor_val1_upper_threshold,
- _globalSensorManger->over_manager->sensor_val1_upper_threshold_ctrl,
- _globalSensorManger->over_manager->sensor_val1_upper_threshold_ctrl_para,
- _globalSensorManger->over_manager->sensor_val2_upper_enabled,
- _globalSensorManger->over_manager->sensor_val2_upper_threshold,
- _globalSensorManger->over_manager->sensor_val2_upper_threshold_ctrl,
- _globalSensorManger->over_manager->sensor_val2_upper_threshold_ctrl_para,
- product_id,
- sensor_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0 ;
- }
- /// @brief 插入一条告警信息
- /// @param db
- /// @param product_id
- /// @param alarm_type
- /// @param alarm_content
- /// @return
- int dev_insert_alarm_info(sqlite3* db,int product_id,int alarm_type,char* date_time,char* alarm_content)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"INSERT INTO Table_AlarmManage (alarmDate,alarmType,product_id,alarmContent) VALUES ('%s',%d,%d,'%s');",
- date_time,
- alarm_type,
- product_id,
- alarm_content);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- /// @brief 查询电源 传感器以及网络告警信息
- /// @param db
- /// @param product_id
- /// @param alarm_type
- /// @param _alarm_ack_info
- /// @return
- #if 0
- int dev_serarch_all_alarm(sqlite3* db,
- int product_id,
- int alarm_type,
- int page_num,
- int page_size,
- _AlarmAckInfo* _alarm_ack_info,int* nAlarmSum)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- //查询告警总数
- if (alarm_type<0)//小于0加载所有的
- {
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage);");
- }else{
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) ;",alarm_type);
- }
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite select Table_AlarmManage handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search Table_AlarmManage no data.");
- return -1 ;
- }
- *nAlarmSum = atoi(pResult[1]);
- sqlite3_free_table(pResult);
- if (alarm_type<0)//小于0加载所有的
- {
- sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) order by alarmType desc LIMIT %d OFFSET %d ",
- product_id,
- page_size,
- page_num>0?(page_num-1)*page_size:0);
- }else
- {
- sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) AND (alarmType=%d) LIMIT %d OFFSET %d",
- product_id,
- alarm_type,
- page_size,
- page_num>0?(page_num-1)*page_size:0);
- }
- //log_d(select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- if(nrow==0)
- return -1 ;
- //初始化头
- for (size_t i = 1; i <= nrow; i++)
- {
- _AlarmAckInfo* _alarmTemp = (_AlarmAckInfo*)malloc(sizeof( _AlarmAckInfo));
- if(_alarmTemp==NULL)
- log_e("alarm malloc failed");
- strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
- strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
- _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
- strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._global_device_info->product_number);
- strcpy(_alarmTemp->deviceName,__globalDeviceManage._global_device_info->product_name);
- strcpy(_alarmTemp->alarmContent,pResult[i*ncolumn+4]);
- //尾部插入
- list_add_tail(&_alarmTemp->list, &_alarm_ack_info->list);
- }
- sqlite3_free_table(pResult);
- }
- #endif
- /// @brief 查询告警历史记录
- /// @param db
- /// @param product_id
- /// @param alarm_type
- /// @param start_time
- /// @param end_time
- /// @param page_num
- /// @param page_size
- /// @param _alarm_ack_info
- /// @return
- #if 0
- int dev_search_alarm_info(sqlite3* db,
- int product_id,
- int alarm_type,
- char* start_time,
- char* end_time,
- int page_num,
- int page_size,
- _AlarmAckInfo* _alarm_ack_info,
- int *nAlarmSum
- )
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
-
- //查询告警总数
- if (alarm_type<0)//小于0加载所有的
- {
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmDate BETWEEN '%s' AND '%s');",start_time,end_time);
- }else{
- snprintf(select_sql,sizeof(select_sql),"SELECT count (*) FROM Table_AlarmManage where (alarmType=%d) and (alarmDate BETWEEN '%s' AND '%s');",alarm_type,start_time,end_time);
- }
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- {
- log_e("sqlite select Table_AlarmManage handle error.");
- return -1 ;
- }
- if(nrow==0)
- {
- log_e("sqlite search Table_AlarmManage no data.");
- return -1 ;
- }
- *nAlarmSum = atoi(pResult[1]);
- sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) AND (alarmType=%d) AND (alarmDate BETWEEN '%s' AND '%s') LIMIT %d OFFSET %d;",
- product_id,
- alarm_type,
- start_time,
- end_time,
- page_size,
- page_num>0?(page_num-1)*page_size:0);
- log_d(select_sql);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- if(nrow==0)
- return -1 ;
- //初始化头
- for (size_t i = 1; i <= nrow; i++)
- {
- _AlarmAckInfo* _alarmTemp = (_AlarmAckInfo*)malloc(sizeof( _AlarmAckInfo));
- if(_alarmTemp==NULL)
- log_e("alarm malloc failed");
- strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
- strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
- _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
- strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._global_device_info->product_number);
- strcpy(_alarmTemp->deviceName,__globalDeviceManage._global_device_info->product_name);
- strcpy(_alarmTemp->alarmContent,pResult[i*ncolumn+4]);
- //尾部插入
- list_add_tail(&_alarmTemp->list, &_alarm_ack_info->list);
- }
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_get_ntp_info(sqlite3 *db,NTPManager* _globalNTPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql, "SELECT* from Table_NTPManage WHERE product_id = %d;", __globalDeviceManage._global_device_info->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- //提取数据
- if(nrow==0)
- return -2 ;
- //获取ID
- _globalNTPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
- _globalNTPInfo->mode = atoi(pResult[rowIndex*ncolumn+1]);
- _globalNTPInfo->ntpName= malloc(64);
- strcpy(_globalNTPInfo->ntpName,pResult[rowIndex*ncolumn+2]);
- _globalNTPInfo->ntpaddress= malloc(64);
- strcpy(_globalNTPInfo->ntpaddress ,pResult[rowIndex*ncolumn+3]);
- _globalNTPInfo->port = atoi(pResult[rowIndex*ncolumn+4]);
- _globalNTPInfo->time= malloc(64);
- strcpy(_globalNTPInfo->time,pResult[rowIndex*ncolumn+5]);
- _globalNTPInfo->weekday = atoi(pResult[rowIndex*ncolumn+6]);
- _globalNTPInfo->tzone = atoi(pResult[rowIndex*ncolumn+7]);
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_update_ntp_info(sqlite3 *db, int product_id, NTPManager* _globalNTPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"UPDATE Table_NTPManage SET enable=%d,name='%s',address='%s',port=%d,time='%s',weekday=%d,timezone=%d WHERE product_id=%d ;",
- _globalNTPInfo->mode,
- _globalNTPInfo->ntpName,
- _globalNTPInfo->ntpaddress,
- _globalNTPInfo->port,
- _globalNTPInfo->time,
- _globalNTPInfo->weekday,
- _globalNTPInfo->tzone,
- product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_insert_ntp_info(sqlite3 *db,NTPManager* _globalNTPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"INSERT INTO Table_NTPManage (product_id, enable, name, address, port, time, weekday, timezone) VALUES (%d,%d,'%s','%s', %d,'%s',%d,%d);",
- _globalNTPInfo->product_id,
- _globalNTPInfo->mode,
- _globalNTPInfo->ntpName,
- _globalNTPInfo->ntpaddress,
- _globalNTPInfo->port,
- _globalNTPInfo->time,
- _globalNTPInfo->weekday,
- _globalNTPInfo->tzone);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_get_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql, "SELECT* from Table_SNMPManage WHERE product_id = %d;", __globalDeviceManage._global_device_info->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- //提取数据
- if(nrow==0)
- return -2 ;
- //获取ID
- _globalSNMPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
- _globalSNMPInfo->version= atoi(pResult[rowIndex*ncolumn+1]);
- _globalSNMPInfo->mode = atoi(pResult[rowIndex*ncolumn+2]);
- _globalSNMPInfo->public= malloc(64);
- strcpy(_globalSNMPInfo->public,pResult[rowIndex*ncolumn+3]);
- _globalSNMPInfo->trapmode = atoi(pResult[rowIndex*ncolumn+4]);
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_insert_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"INSERT INTO Table_SNMPManage (product_id, proto_type, enable, public, TrapEnable) VALUES (%d,%d,%d,'%s',%d);",
- _globalSNMPInfo->product_id,
- _globalSNMPInfo->version,
- _globalSNMPInfo->mode,
- _globalSNMPInfo->public,
- _globalSNMPInfo->trapmode);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_update_snmp_info(sqlite3 *db, int product_id, SNMPManager* _globalSNMPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"UPDATE Table_SNMPManage SET proto_type='%d',enable=%d,public='%s',TrapEnable=%d WHERE product_id=%d;",
- _globalSNMPInfo->version,
- _globalSNMPInfo->mode,
- _globalSNMPInfo->public,
- _globalSNMPInfo->trapmode,
- product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_get_smtp_info(sqlite3 *db, SMTPManager* _globalSMTPInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql, "SELECT* from Table_SMTPManage WHERE product_id = %d;", __globalDeviceManage._global_device_info->product_id);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- //提取数据
- if(nrow==0)
- return -2 ;
- //获取ID
- _globalSMTPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
- _globalSMTPInfo->mode = atoi(pResult[rowIndex*ncolumn+1]);
- strcpy(_globalSMTPInfo->account,pResult[rowIndex*ncolumn+2]);
- strcpy(_globalSMTPInfo->password,pResult[rowIndex*ncolumn+3]);
- strcpy(_globalSMTPInfo->server,pResult[rowIndex*ncolumn+4]);
- _globalSMTPInfo->port = atoi(pResult[rowIndex*ncolumn+5]);
- strcpy(_globalSMTPInfo->auth,pResult[rowIndex*ncolumn+6]);
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- #if 0
- int dev_get_smtp_recv_user_list(sqlite3 *db, SMTPreceiveAccount* _globalSMTPreceiveAccount)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql, "SELECT* from Table_SMTPRecAccount;");
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- //提取数据
- if(nrow==0)
- return -2 ;
- for(int i = 1; i <= nrow; i++)
- {
- SMTPreceiveAccount* iterator = (SMTPreceiveAccount*)malloc(sizeof(SMTPreceiveAccount));
- iterator->idx = atoi(pResult[i*ncolumn+0]);
- iterator->receive_account = malloc(128);
- strcpy(iterator->receive_account,pResult[i*ncolumn+1]);
- iterator->receive_account_info = malloc(128);
- strcpy(iterator->receive_account_info,pResult[i*ncolumn+2]);
- list_add_tail(&iterator->list, &_globalSMTPreceiveAccount->list);
- }
- sqlite3_free_table(pResult);
- return 0;
- }
- #endif
- /// @brief 插入一条报警信息
- /// @param db
- /// @param product_id
- /// @param alarm_content
- /// @return
- int dev_insert_alarm_ctrl(sqlite3* db,int product_id,int nAlarmType,char* alarm_content)
- {
- struct tm* t ;
- time_t now;
- time(&now);
- t = localtime(&now);
- char buffer[80];
- strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
- dev_insert_alarm_info(db,product_id,nAlarmType,buffer,alarm_content);
- return 0;
- }
- /// @brief 删除分组信息
- int dev_delete__group_info(sqlite3 *db,int product_id)
- {
- int res ;
- char select_sql[256] = {0};
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- sprintf(select_sql,"DELETE FROM Table_GroupManage WHERE product_id=%d;",
- product_id
- );
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
- int dev_insert_group_info(sqlite3 *db,GroupInfo* _globalgroupInfo)
- {
- int res = 0 ;
- // int rowIndex = 1 ;
- // char *errorMsg = NULL;
- int nrow = 0; //满足条件的记录数目
- int ncolumn = 0; //每条记录包含的字段数据
- char** pResult = NULL; //用来指向sql执行结果的指针
- char* err_msg=NULL;
- char select_sql[1024] = {0};
- sprintf(select_sql,"INSERT INTO Table_GroupManage (product_id, groupID, groupName, groupChList) VALUES (%d,%d,'%s','%s');",
- _globalgroupInfo->product_id,
- _globalgroupInfo->GroupID,
- _globalgroupInfo->GroupName,
- _globalgroupInfo->GroupChList);
- res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
- if(res != SQLITE_OK)
- return -1 ;
- sqlite3_free_table(pResult);
- return 0;
- }
|