Explorar el Código

1、增加磁盘容量判断,低于50MB时,开始对数据库中的电力信息进行覆盖

guohui hace 2 años
padre
commit
e19cb8be6c
Se han modificado 8 ficheros con 323 adiciones y 281 borrados
  1. 59 32
      pro/src/app.c
  2. 0 1
      pro/src/appweb_handle.c
  3. 3 3
      pro/src/main.c
  4. 145 198
      pro/src/mqtt.c
  5. 83 34
      pro/src/sqlite_handle.c
  6. 2 2
      pro/src/sqlite_handle.h
  7. 28 9
      pro/src/sys.c
  8. 3 2
      pro/src/sys.h

+ 59 - 32
pro/src/app.c

@@ -29,15 +29,48 @@
 #include <unistd.h>
 
 
-static int keep_running;
-RETSIGTYPE stop_server(int __attribute__((unused)) a)
+#define DISK_THRESHOLD    (50*MB)
+static int disk_is_full(void)
 {
-    keep_running = 0;
+    int xMB=sys_get_disk_ava_MB("/");
+    if(xMB>=DISK_THRESHOLD) {
+        return 0;
+    }
+    return 1;
 }
 
-/// @brief 电源数据采集线程
-/// @param arg 
-/// @return 
+static void get_time(char *ts)
+{
+    struct timeval tv;
+    struct tm      *tm;
+
+    gettimeofday(&tv, NULL);
+    tm = localtime(&tv.tv_sec);
+    sprintf(ts, "%04d-%02d-%02d %02d:%02d:%02d.%03ld", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec/1000);
+}
+static void db_ow_test(GlobalDeviceManager *dm, int *index, int *index3)
+{
+    int i,ow_flag=0;
+    GlobalPowerInfo info;
+    GlobalTreeACManager info3;
+
+    for(i=0; i<2000; i++) {
+        get_time(info.samp_time);
+        dev_insert_power_info(dm->db, &info, index, ow_flag);
+        dev_insert_t_ac_power_info(dm->db, &info3, index3, info.samp_time, ow_flag);
+    }
+    ow_flag = 1;
+
+    for(i=0; i<100; i++) {
+        get_time(info.samp_time);
+        dev_insert_power_info(dm->db, &info, index, ow_flag);
+        dev_insert_t_ac_power_info(dm->db, &info3, index3, info.samp_time, ow_flag);
+    }
+}
+
+
+
+
 void* power_thread(void* arg)
 {
     int ret = 0 ;
@@ -53,22 +86,20 @@ void* power_thread(void* arg)
     struct tm* t ;
     struct timeval tv;
     struct timezone tz ;
-    int nSaveIndex =0;
-    char strPower[] = "Table_PowerInfo";
-    char strTacPower[] = "Table_PhasePowerInfo";
-    int nSaveTacIndex = 0;
+    int lastIndex=0,lastIndex3=0,overwrite_flag=0;
+    char *tabPower="Table_PowerInfo",*tabPower3="Table_PhasePowerInfo";
     thread_handle_t *h=(thread_handle_t*)arg;
     GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
-    dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower);       // 查询日志最大点
-    dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
+    dev_search_last_Index(_globalDeviceManager->db, &lastIndex, tabPower);       // 查询日志最大点
+    dev_search_last_Index(_globalDeviceManager->db, &lastIndex3, tabPower3);      // 查询日志最大点
     InitHashTable(_globalDeviceManager);
     unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product_samp_time;
     unsigned int usleepTime = samp_time*1000;
     unsigned int sSaveTime = _globalDeviceManager->_globalDevInfo.product_save_time;
     log_d("samp_time:%dms save_time:%dms\n", samp_time,sSaveTime);
-    int nMaxIndex=2000000000;
-    int nDeleteNumber=1000/sSaveTime*3600*24*30*10;
+
+    
     bool isErrorBreak=false;
     _globalDeviceManager->_ReloadChm_flag=false;
     list_for_each_entry(_globalPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list, list)
@@ -89,8 +120,6 @@ void* power_thread(void* arg)
         //usleep(300000);
     }
 
-
-    
     //采集线程
     while (h->quit==0)
     {
@@ -99,15 +128,13 @@ void* power_thread(void* arg)
             sleep(1);
             continue;
         }
-        if (nSaveIndex>nMaxIndex/2)
-        {
-            dev_change_last_Index(_globalDeviceManager->db, &nSaveIndex, nDeleteNumber, strPower);
-        }
-        if (nSaveTacIndex > nMaxIndex / 2)
-        {
 
-            dev_change_last_Index(_globalDeviceManager->db, &nSaveIndex, nDeleteNumber, strTacPower);
+        if(overwrite_flag==0) {
+            if(disk_is_full()) {
+                overwrite_flag = 1;
+            }
         }
+        
 #if (1)
         memset(&_globalTotalPowerInfo, 0, sizeof(GlobalPowerInfo));
         memset(&_globalPowerWarningInfo, 0, sizeof(PowerWarningInfo));
@@ -258,7 +285,7 @@ void* power_thread(void* arg)
                         SaveDBFlag=true;
                         /* code */
                         //插入数据库
-                        if(dev_insert_power_info(_globalDeviceManager->db,&_globalPowerInfo,&nSaveIndex)!=0)
+                        if(dev_insert_power_info(_globalDeviceManager->db,&_globalPowerInfo,&lastIndex, overwrite_flag)!=0)
                         {
                             log_d("ch%d insert data error.\n",_globalPowerMangerTemp->product_ch_id);
                         }
@@ -391,7 +418,7 @@ void* power_thread(void* arg)
                                 _pTreeACPowerMangerTemp->product_log_time = now;
                                 /* code */
                                 // 插入数据库
-                                if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &nSaveTacIndex, _globalPowerInfo.samp_time) != 0)
+                                if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &lastIndex3, _globalPowerInfo.samp_time, overwrite_flag) != 0)
                                 {
                                     log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
                                 }
@@ -480,7 +507,7 @@ void* power_thread(void* arg)
                         SaveDBFlag=true;
                         /* code */
                         //插入数据库
-                        if(dev_insert_power_info(_globalDeviceManager->db,&_globalPowerInfo,&nSaveIndex)!=0)
+                        if(dev_insert_power_info(_globalDeviceManager->db,&_globalPowerInfo,&lastIndex, overwrite_flag)!=0)
                         {
                             log_d("ch%d insert data error.\n",_globalPowerMangerTemp->product_ch_id);
                         }
@@ -601,7 +628,7 @@ void* power_thread(void* arg)
                             _pTreeACPowerMangerTemp->product_log_time = now;
                             /* code */
                             // 插入数据库
-                            if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &nSaveTacIndex,_globalPowerInfo.samp_time) != 0)
+                            if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &lastIndex3,_globalPowerInfo.samp_time, overwrite_flag) != 0)
                             {
                                 log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
                             }
@@ -696,7 +723,7 @@ void* power_thread(void* arg)
                         SaveDBFlag=true;                       
                         /* code */
                         //插入数据库
-                        if(dev_insert_power_info(_globalDeviceManager->db,&_globalPowerInfo,&nSaveIndex)!=0)
+                        if(dev_insert_power_info(_globalDeviceManager->db,&_globalPowerInfo,&lastIndex, overwrite_flag)!=0)
                         {
 
                             log_d("ch%d insert data error.\n",_globalPowerMangerTemp->product_ch_id);
@@ -897,7 +924,7 @@ void* power_thread(void* arg)
                     _pTreeACPowerMangerTemp->product_log_time = now;
                     /* code */
                     // 插入数据库
-                    if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &nSaveTacIndex, _globalPowerInfo.samp_time) != 0)
+                    if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &lastIndex3, _globalPowerInfo.samp_time, overwrite_flag) != 0)
                     {
                         log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
                     }
@@ -941,7 +968,7 @@ void* power_thread(void* arg)
                     _pTreeACPowerMangerTemp->product_log_time = now;
                     /* code */
                     // 插入数据库
-                    if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &nSaveTacIndex, _globalPowerInfo.samp_time) != 0)
+                    if (dev_insert_t_ac_power_info(_globalDeviceManager->db, _pTreeACPowerMangerTemp, &lastIndex3, _globalPowerInfo.samp_time, overwrite_flag) != 0)
                     {
                         log_d("ph_ch%d insert data error.\n", _pTreeACPowerMangerTemp->product_ch_id);
                     }
@@ -965,7 +992,7 @@ void* power_thread(void* arg)
         //插入数据库
         if (SaveDBFlag)
         {
-            if (dev_insert_power_info(_globalDeviceManager->db, &_globalTotalPowerInfo, &nSaveIndex) != 0)
+            if (dev_insert_power_info(_globalDeviceManager->db, &_globalTotalPowerInfo, &lastIndex, overwrite_flag) != 0)
             {
                 log_d("ch%d insert data error.\n", _globalTotalPowerInfo.product_ch_id);
             }
@@ -1961,7 +1988,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     mqtt_init();
 
-    websocket_init();
+    //websocket_init();
     appweb_init();
 
     //通知smartUPG,app已经运行起来

+ 0 - 1
pro/src/appweb_handle.c

@@ -4863,7 +4863,6 @@ static void equipmentMintenanceUpload(void *conn)
         }
     }
     else if(strstr(hm->uri.buf, "uploadType=shfw")) {   //logo upload
-        //char *save_logo="productNumber=Vq1&productVersion=undefined&uploadType=shfw&type=importData&token=b6cdd10e-e1a7-4bd9-8283-c6d6ecbae28c";
         sprintf(tmp, "%s/%s", IMAGE_PATH, LOGO_FILE);
         sys_get_path(path, tmp);
         upload_handle(conn, path);

+ 3 - 3
pro/src/main.c

@@ -15,8 +15,8 @@
 
 int main(int argc,char* argv[])
 {
-    uint32_t cnt=0;
     int avaMB;
+    uint32_t cnt=0;
     
     sys_init();
     _global_device_manage_init(&__globalDeviceManage);
@@ -24,10 +24,10 @@ int main(int argc,char* argv[])
     while(1) {
         cnt++;
         if(cnt%MEM_PERIOD==0) {
-            avaMB = sys_mem_get_available_MB();
+            avaMB = sys_get_mem_ava_MB();
             printf("___ available mem:  %dMB, threshold: %dMB\n", avaMB, MEM_THRD);
             if(avaMB<MEM_THRD) {
-                printf("___$$$___ free mem less than %dMB, reboot now ...\n", MEM_THRD);
+                printf("___ free mem less than %dMB, reboot now ...\n", MEM_THRD);
                 sys_reboot();
             }
         }

+ 145 - 198
pro/src/mqtt.c

@@ -80,9 +80,9 @@ static mqtt_handle_t mqHandle={0};
 static int my_recv(char *topic, char *data);
 static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data);
 static void timer_start(mqtt_handle_t *h, int ms);
-static int send_stat(int type, int id);
+static int post_stat(int type, int id);
 static uint32_t get_serv(char *json);
-static void send_once(void);
+static void post_once(void);
 
 //emqx serttle
 const char *ca_cert=
@@ -174,7 +174,7 @@ static int get_date_time(char *d, char *t)
     if(!tm) {
         return -1;
     }
-    sprintf(d, "%04d-%02d-%02d", tm->tm_year+1990, tm->tm_mon+1, tm->tm_mday);
+    sprintf(d, "%04d-%02d-%02d", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
     sprintf(t, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
     return 0;
 }
@@ -349,8 +349,6 @@ static int my_conn(mqtt_handle_t *h)
                 .qos = 1,
                 .version = 4,
                 .keepalive = 60,
-                //.topic = mg_str("hello"),
-                //.message = mg_str("bye"),
                 .client_id = mg_str(ser[i].cid),
                 .user = mg_str(ser[i].user),
                 .pass = mg_str(ser[i].password),
@@ -359,7 +357,6 @@ static int my_conn(mqtt_handle_t *h)
             h->conn[i].c = mg_mqtt_connect(&h->mgr, url, &opts, mqtt_fn, &h->conn[i]);
             if(h->conn[i].c) {
                 h->conn[i].ser = ser[i];
-                //h->conn[i].opts = opts;
                 my_sub(h->conn[i].c, h->prod_id);
             }
         }
@@ -381,6 +378,31 @@ static int my_send(mqtt_handle_t *h)
 
     return r;
 }
+static void post_once(void)
+{
+    post_stat(MQTT_PUB_INFO_DEVICE, 0);
+    post_stat(MQTT_PUB_STAT_NETWORK, 0);
+    post_stat(MQTT_PUB_STAT_SENSOR, 0);
+    post_stat(MQTT_PUB_STAT_SERVICE, 0);
+}
+static void post_period(void)
+{
+    post_stat(MQTT_PUB_STAT_POWER_ALL, 0);
+    post_stat(MQTT_PUB_STAT_POWER_CHN, 0);
+}
+
+static void timer_fn(void *arg)
+{
+    mqtt_handle_t *h=(mqtt_handle_t*)arg;
+
+    my_conn(h);
+    post_period();
+}
+
+static void timer_start(mqtt_handle_t *h, int ms)
+{
+    mg_timer_add(&h->mgr, ms, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, timer_fn, h);
+}
 
 static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
 {
@@ -409,16 +431,7 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
 
         case  MG_EV_MQTT_OPEN:
         {
-            LOGD("____ MG_EV_MQTT_OPEN\n");
-            //send_once();
-        }
-        break;
-
-        case  MG_EV_POLL:
-        {
-            LOGD("____ MG_EV_POLL\n");
-            my_conn(h);
-            send_once();
+            post_once();
         }
         break;
         
@@ -454,43 +467,18 @@ static void* mqtt_thread(void *arg)
     mqtt_handle_t   *h=(mqtt_handle_t*)th->arg;
     mqtt_info_t     *info=&h->dm->mqttInfo;
     
-    //timer_start(h, SEND_PERIOD);
-    my_conn(h);
+    //timer_start(h, 10000);
     while(th->quit==0) {
+        //my_send(h);
         mg_mgr_poll(&h->mgr, 2000);
     }
     my_disconn(h);
-    timer_start(h, 0);
 
     pthread_exit(NULL);
 }
 #endif
 
-static void send_once(void)
-{
-    send_stat(MQTT_PUB_INFO_DEVICE, 0);
-    send_stat(MQTT_PUB_STAT_NETWORK, 0);
-    send_stat(MQTT_PUB_STAT_SENSOR, 0);
-    send_stat(MQTT_PUB_STAT_SERVICE, 0);
-}
-static void send_period(void *arg)
-{
-    send_stat(MQTT_PUB_STAT_POWER_ALL, 0);
-    send_stat(MQTT_PUB_STAT_POWER_CHN, 0);
-}
-
-static void timer_start(mqtt_handle_t *h, int ms)
-{
-    static mg_timer_t t;
-    if(h->timer) {
-        mg_timer_free(&h->timer, &t);
-        h->timer = NULL;
-    }
 
-    if(ms>0) {
-        mg_timer_init(&h->timer, &t, ms, MG_TIMER_REPEAT|MG_TIMER_RUN_NOW, send_period, h);
-    }
-}
 //////////////////////////////////////////////////////////////////////////
 int mqtt_init(void)
 {
@@ -502,7 +490,7 @@ int mqtt_init(void)
     memset(h, 0, sizeof(mqtt_handle_t));
     mg_mgr_init(&h->mgr);
 
-    mg_log_set(MG_LL_DEBUG);
+    //mg_log_set(MG_LL_DEBUG);
     
     h->dm = &__globalDeviceManage;
     h->prod_id = h->dm->_globalDevInfo.product_id;
@@ -522,7 +510,7 @@ int mqtt_init(void)
     r = 0;
 #endif
 
-    //mqtt_test();
+    mqtt_test();
 
     return r;
 }
@@ -546,7 +534,7 @@ int mqtt_deinit(void)
 }
 
 
-static int send_stat(int type, int id)
+static int post_stat(int type, int id)
 {
     int r=-1;
 
@@ -573,20 +561,14 @@ static int send_stat(int type, int id)
         {
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-                    cJSON_AddStringToObject(data,"id", get_int_str(id));
-                    cJSON_AddStringToObject(data,"name", "Gowone smartPDU");
-                    cJSON_AddStringToObject(data,"type", "smartPDU AC");
-                    cJSON_AddStringToObject(data,"firmware", VERSION);
-                    cJSON_AddStringToObject(data,"channel_num", "8");
-                    cJSON_AddStringToObject(data,"sensor_num", "10");
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
-
-                    cJSON_AddItemToObject(root, "Data", data);
-                }
+                cJSON_AddStringToObject(root,"id", get_int_str(id));
+                cJSON_AddStringToObject(root,"name", "Gowone smartPDU");
+                cJSON_AddStringToObject(root,"type", "smartPDU AC");
+                cJSON_AddStringToObject(root,"firmware", VERSION);
+                cJSON_AddStringToObject(root,"channel_num", "8");
+                cJSON_AddStringToObject(root,"sensor_num", "10");
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
 
                 content = cJSON_Print(root);    
                 cJSON_Delete(root);
@@ -602,51 +584,46 @@ static int send_stat(int type, int id)
 
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-                    if(r4==0) {
-                        cJSON_AddStringToObject(data,"lan_ipv4_link", nw4.mode?"1":"0");
-                        cJSON_AddStringToObject(data,"lan_ipv4_address", nw4.ip_address);
-                        cJSON_AddStringToObject(data,"lan_ipv4_mask", nw4.mask);
-                    }
-                    else {
-                        cJSON_AddStringToObject(data,"lan_ipv4_link", "");
-                        cJSON_AddStringToObject(data,"lan_ipv4_address", "");
-                        cJSON_AddStringToObject(data,"lan_ipv4_mask", "");
-                    }
-
-                    if(r4==0) {
-                        cJSON_AddStringToObject(data,"lan_ipv6_link", nw6.mode?"1":"0");
-                        cJSON_AddStringToObject(data,"lan_ipv6_address", nw6.ip_address);
-                        cJSON_AddStringToObject(data,"lan_ipv6_subnet_length", nw6.mask);
-                    }
-                    else {
-                        cJSON_AddStringToObject(data,"lan_ipv6_link", "");
-                        cJSON_AddStringToObject(data,"lan_ipv6_address", "");
-                        cJSON_AddStringToObject(data,"lan_ipv6_subnet_length", "");
-                    }
-
-                    if(0) {
-                        cJSON_AddStringToObject(data,"wifi_ipv4_link", "");
-                        cJSON_AddStringToObject(data,"wifi_ipv4_address", "");
-                        cJSON_AddStringToObject(data,"wifi_ipv4_mask", "");
+ 
+                if(r4==0) {
+                    cJSON_AddStringToObject(root,"lan_ipv4_link", nw4.mode?"1":"0");
+                    cJSON_AddStringToObject(root,"lan_ipv4_address", nw4.ip_address);
+                    cJSON_AddStringToObject(root,"lan_ipv4_mask", nw4.mask);
+                }
+                else {
+                    cJSON_AddStringToObject(root,"lan_ipv4_link", "");
+                    cJSON_AddStringToObject(root,"lan_ipv4_address", "");
+                    cJSON_AddStringToObject(root,"lan_ipv4_mask", "");
+                }
 
-                        cJSON_AddStringToObject(data,"wifi_ipv6_link", "");
-                        cJSON_AddStringToObject(data,"wifi_ipv6_address", "");
-                        cJSON_AddStringToObject(data,"wifi_ipv6_mask", "");
-                    }
+                if(r4==0) {
+                    cJSON_AddStringToObject(root,"lan_ipv6_link", nw6.mode?"1":"0");
+                    cJSON_AddStringToObject(root,"lan_ipv6_address", nw6.ip_address);
+                    cJSON_AddStringToObject(root,"lan_ipv6_subnet_length", nw6.mask);
+                }
+                else {
+                    cJSON_AddStringToObject(root,"lan_ipv6_link", "");
+                    cJSON_AddStringToObject(root,"lan_ipv6_address", "");
+                    cJSON_AddStringToObject(root,"lan_ipv6_subnet_length", "");
+                }
 
-                    cJSON_AddStringToObject(data,"modbus_address", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_addr));
-                    cJSON_AddStringToObject(data,"modbus_baud", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_baud));
-                    cJSON_AddStringToObject(data,"modbus_mode", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_type));
-                    cJSON_AddStringToObject(data,"vpn_enable", "0");
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
+                if(0) {
+                    cJSON_AddStringToObject(root,"wifi_ipv4_link", "");
+                    cJSON_AddStringToObject(root,"wifi_ipv4_address", "");
+                    cJSON_AddStringToObject(root,"wifi_ipv4_mask", "");
 
-                    cJSON_AddItemToObject(root, "Data", data);
+                    cJSON_AddStringToObject(root,"wifi_ipv6_link", "");
+                    cJSON_AddStringToObject(root,"wifi_ipv6_address", "");
+                    cJSON_AddStringToObject(root,"wifi_ipv6_mask", "");
                 }
 
+                cJSON_AddStringToObject(root,"modbus_address", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_addr));
+                cJSON_AddStringToObject(root,"modbus_baud", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_baud));
+                cJSON_AddStringToObject(root,"modbus_mode", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_type));
+                cJSON_AddStringToObject(root,"vpn_enable", "0");
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
+
                 content = cJSON_Print(root);    
                 cJSON_Delete(root);
             }
@@ -657,22 +634,16 @@ static int send_stat(int type, int id)
         {
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-                    //h->dm->_globalPowerManger
-                    cJSON_AddStringToObject(data,"voltage", "");
-                    cJSON_AddStringToObject(data,"current", "");
-                    cJSON_AddStringToObject(data,"power", "");
-                    cJSON_AddStringToObject(data,"consumption", "");
-                    cJSON_AddStringToObject(data,"pactive_power", "");
-                    cJSON_AddStringToObject(data,"reactive_power", "");
-                    cJSON_AddStringToObject(data,"apparent_power", "");
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
-
-                    cJSON_AddItemToObject(root, "Data", data);
-                }
+                //h->dm->_globalPowerManger
+                cJSON_AddStringToObject(root,"voltage", "");
+                cJSON_AddStringToObject(root,"current", "");
+                cJSON_AddStringToObject(root,"power", "");
+                cJSON_AddStringToObject(root,"consumption", "");
+                cJSON_AddStringToObject(root,"pactive_power", "");
+                cJSON_AddStringToObject(root,"reactive_power", "");
+                cJSON_AddStringToObject(root,"apparent_power", "");
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
 
                 content = cJSON_Print(root);    
                 cJSON_Delete(root);
@@ -684,28 +655,22 @@ static int send_stat(int type, int id)
         {
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-                    GlobalPowerManger *tmp=get_power(h, id);
-                    if(tmp) {
-                        cJSON_AddStringToObject(data,"name", "app server channel");
-                        cJSON_AddStringToObject(data,"status", get_int_str(tmp->_PowerInfo.status));
-                        cJSON_AddStringToObject(data,"voltage", get_float_str(tmp->_PowerInfo.voltage));
-                        cJSON_AddStringToObject(data,"current", get_float_str(tmp->_PowerInfo.current));
-                        cJSON_AddStringToObject(data,"power", get_float_str(tmp->_PowerInfo.power));
-                        cJSON_AddStringToObject(data,"power_freq", get_float_str(tmp->_PowerInfo.freq));
-                        cJSON_AddStringToObject(data,"consumption", get_float_str(tmp->_PowerInfo.consumption));
-                        cJSON_AddStringToObject(data,"power_factor", get_float_str(tmp->_PowerInfo.factor));
-                        cJSON_AddStringToObject(data,"pactive_power", "");
-                        cJSON_AddStringToObject(data,"reactive_power", "");
-                        cJSON_AddStringToObject(data,"apparent_power", "");
-                    }
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
-
-                    cJSON_AddItemToObject(root, "Data", data);
+                GlobalPowerManger *tmp=get_power(h, id);
+                if(tmp) {
+                    cJSON_AddStringToObject(root,"name", "app server channel");
+                    cJSON_AddStringToObject(root,"status", get_int_str(tmp->_PowerInfo.status));
+                    cJSON_AddStringToObject(root,"voltage", get_float_str(tmp->_PowerInfo.voltage));
+                    cJSON_AddStringToObject(root,"current", get_float_str(tmp->_PowerInfo.current));
+                    cJSON_AddStringToObject(root,"power", get_float_str(tmp->_PowerInfo.power));
+                    cJSON_AddStringToObject(root,"power_freq", get_float_str(tmp->_PowerInfo.freq));
+                    cJSON_AddStringToObject(root,"consumption", get_float_str(tmp->_PowerInfo.consumption));
+                    cJSON_AddStringToObject(root,"power_factor", get_float_str(tmp->_PowerInfo.factor));
+                    cJSON_AddStringToObject(root,"pactive_power", "");
+                    cJSON_AddStringToObject(root,"reactive_power", "");
+                    cJSON_AddStringToObject(root,"apparent_power", "");
                 }
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
 
                 content = cJSON_Print(root);    
                 cJSON_Delete(root);
@@ -717,25 +682,19 @@ static int send_stat(int type, int id)
         {
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-                    GlobalSensorManger *tmp=get_sensor(h, id);
-                    if(tmp) {
-                        cJSON_AddStringToObject(data,"name", "temp sensor");
-                        cJSON_AddStringToObject(data,"type", get_int_str(tmp->sensor_type));
-                        cJSON_AddStringToObject(data,"modbus_address", get_int_str(tmp->sensor_addr));
-                        cJSON_AddStringToObject(data,"node", get_int_str(tmp->sensor_node_number));
-                        cJSON_AddStringToObject(data,"status", get_int_str(tmp->sensor_status));
-                        cJSON_AddStringToObject(data,"value_num", get_int_str(tmp->sensor_val_count));
-                        cJSON_AddStringToObject(data,"value1", get_float_str(tmp->Cur_sensor_info.val1));
-                        cJSON_AddStringToObject(data,"value2", get_float_str(tmp->Cur_sensor_info.val2));
-                    }
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
-
-                    cJSON_AddItemToObject(root, "Data", data);
+                GlobalSensorManger *tmp=get_sensor(h, id);
+                if(tmp) {
+                    cJSON_AddStringToObject(root,"name", "temp sensor");
+                    cJSON_AddStringToObject(root,"type", get_int_str(tmp->sensor_type));
+                    cJSON_AddStringToObject(root,"modbus_address", get_int_str(tmp->sensor_addr));
+                    cJSON_AddStringToObject(root,"node", get_int_str(tmp->sensor_node_number));
+                    cJSON_AddStringToObject(root,"status", get_int_str(tmp->sensor_status));
+                    cJSON_AddStringToObject(root,"value_num", get_int_str(tmp->sensor_val_count));
+                    cJSON_AddStringToObject(root,"value1", get_float_str(tmp->Cur_sensor_info.val1));
+                    cJSON_AddStringToObject(root,"value2", get_float_str(tmp->Cur_sensor_info.val2));
                 }
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
 
                 content = cJSON_Print(root);    
                 cJSON_Delete(root);
@@ -747,26 +706,20 @@ static int send_stat(int type, int id)
         {
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-
-                    uint32_t flag = get_serv(NULL);
-                    cJSON_AddStringToObject(data,"telnet", BGET(flag, SERV_TELNET)?"1":"0");
-                    cJSON_AddStringToObject(data,"smtp", BGET(flag, SERV_SMTP)?"1":"0");
-                    cJSON_AddStringToObject(data,"snmp_v1", BGET(flag, SERV_SNMP_V1)?"1":"0");
-                    cJSON_AddStringToObject(data,"snmp_v2c", BGET(flag, SERV_SNMP_V2C)?"1":"0");
-                    cJSON_AddStringToObject(data,"snmp_v3", BGET(flag, SERV_SNMP_V3)?"1":"0");
-                    cJSON_AddStringToObject(data,"snmp_trap", BGET(flag, SERV_SNMP_TRAP)?"1":"0");
-                    cJSON_AddStringToObject(data,"message", BGET(flag, SERV_MESG)?"1":"0");
-                    cJSON_AddStringToObject(data,"mqtt", BGET(flag, SERV_MQTT)?"1":"0");
-                    cJSON_AddStringToObject(data,"cloud", BGET(flag, SERV_CLOUD)?"1":"0");
-                    cJSON_AddStringToObject(data,"ntp", BGET(flag, SERV_NTP)?"1":"0");
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
-
-                    cJSON_AddItemToObject(root, "Data", data);
-                }
+    
+                uint32_t flag = get_serv(NULL);
+                cJSON_AddStringToObject(root,"telnet", BGET(flag, SERV_TELNET)?"1":"0");
+                cJSON_AddStringToObject(root,"smtp", BGET(flag, SERV_SMTP)?"1":"0");
+                cJSON_AddStringToObject(root,"snmp_v1", BGET(flag, SERV_SNMP_V1)?"1":"0");
+                cJSON_AddStringToObject(root,"snmp_v2c", BGET(flag, SERV_SNMP_V2C)?"1":"0");
+                cJSON_AddStringToObject(root,"snmp_v3", BGET(flag, SERV_SNMP_V3)?"1":"0");
+                cJSON_AddStringToObject(root,"snmp_trap", BGET(flag, SERV_SNMP_TRAP)?"1":"0");
+                cJSON_AddStringToObject(root,"message", BGET(flag, SERV_MESG)?"1":"0");
+                cJSON_AddStringToObject(root,"mqtt", BGET(flag, SERV_MQTT)?"1":"0");
+                cJSON_AddStringToObject(root,"cloud", BGET(flag, SERV_CLOUD)?"1":"0");
+                cJSON_AddStringToObject(root,"ntp", BGET(flag, SERV_NTP)?"1":"0");
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
 
                 content = cJSON_Print(root);
                 cJSON_Delete(root);
@@ -779,6 +732,7 @@ static int send_stat(int type, int id)
     }
 
     mqtt_pkt_t pkt;
+    pkt.id = type;
     snprintf(pkt.topic, sizeof(pkt.topic), "%s", topic);
     snprintf(pkt.content, sizeof(pkt.content), "%s", content);
     r = xlist_append(h->list, 0, &pkt, sizeof(pkt));
@@ -789,7 +743,7 @@ static int send_stat(int type, int id)
 }
 
 
-static int send_alarm(int type, int subtype, char *content, alarm_para_t *para)
+static int post_alarm(int type, int subtype, char *content, alarm_para_t *para)
 {
     int r=-1;
 
@@ -827,18 +781,12 @@ static int send_alarm(int type, int subtype, char *content, alarm_para_t *para)
         {
             cJSON* root=cJSON_CreateObject();
             if(root) {
-                cJSON_AddStringToObject(root,"Topic", topic);
-                cJSON* data=cJSON_CreateObject();
-                if(data) {
-                    cJSON_AddStringToObject(data,"num", get_int_str(para->nalarm));     //alarm number, how to get?
-                    cJSON_AddStringToObject(data,"context", content);
-                    cJSON_AddStringToObject(data,"action", get_int_str(para->action));
-                    cJSON_AddStringToObject(data,"action_para", get_int_str(para->actionId));
-                    cJSON_AddStringToObject(data,"date", date);
-                    cJSON_AddStringToObject(data,"time", time);
-
-                    cJSON_AddItemToObject(root, "Data", data);
-                }
+                cJSON_AddStringToObject(root,"num", get_int_str(para->nalarm));     //alarm number, how to get?
+                cJSON_AddStringToObject(root,"context", content);
+                cJSON_AddStringToObject(root,"action", get_int_str(para->action));
+                cJSON_AddStringToObject(root,"action_para", get_int_str(para->actionId));
+                cJSON_AddStringToObject(root,"date", date);
+                cJSON_AddStringToObject(root,"time", time);
 
                 json_str = cJSON_Print(root);    
                 cJSON_Delete(root);
@@ -848,6 +796,8 @@ static int send_alarm(int type, int subtype, char *content, alarm_para_t *para)
     }
 
     mqtt_pkt_t pkt;
+
+    pkt.id = pub_type;
     snprintf(pkt.topic, sizeof(pkt.topic), "%s", topic);
     snprintf(pkt.content, sizeof(pkt.content), "%s", json_str);
     r = xlist_append(h->list, 0, &pkt, sizeof(pkt));
@@ -860,7 +810,7 @@ static int send_alarm(int type, int subtype, char *content, alarm_para_t *para)
 
 int mqtt_post_alarm(int type, int subtype, char *content, alarm_para_t *para)
 {
-    return send_alarm(type, subtype, content, para);
+    return post_alarm(type, subtype, content, para);
 }
 
 
@@ -1124,30 +1074,27 @@ int mqtt_test(void)
             .mode = 1,
             .cid = "mqtlx_e92334545tet3465",
 
-    #if 0
             .server = "192.168.1.12",
             .ip = "",
             .port = "1883",
 
             //root
             //root0219107X
-    #else
-            .server = "mqtts://gaae4d7b.ala.cn-hangzhou.emqxsl.cn",
-            .ip = "",
-            .port = "8883",
-    #endif
             .user = "gowone100",
             .password = "gowone100",
 
             //.user = "gowone101",
             //.password = "gowone101",
-            
         }; 
 
     mInfo.ser[0] = ser;
-
     h->dm->mqttInfo = mInfo;
-    //mg_log_set(MG_LL_VERBOSE);
+return 0;
+    my_conn(h);
+    while(1) {
+        post_period();
+        sleep(3);
+    }
 
 #endif
     return 0;

+ 83 - 34
pro/src/sqlite_handle.c

@@ -7,6 +7,7 @@
 #include "cfg.h"
 #include "smtp.h"
 #include "mqtt.h"
+#include "sys.h"
 #include "switch_ctrl.h"
 
 #define	TOTAL_COUNT	60//统计总数
@@ -24,7 +25,7 @@ static int get_count(sqlite3 *db, char *table)
 {
     int r;
     char temp[1024];
-    sqlite3_stmt *stmt;
+    sqlite3_stmt *stmt=NULL;
     
     sprintf(temp, "SELECT * FROM %s", table);
     r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
@@ -324,7 +325,7 @@ int dev_change_last_Index(sqlite3 *db,int* nIndex,int nDeleteNumber,char* tableN
 /// @param db 
 /// @param _globalPowerChnInfo 
 /// @return 
-int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int* nIndex)
+int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int* nIndex, int overwrite)
 {
     int res ;
     char select_sql[1024] = {0};
@@ -333,28 +334,52 @@ int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int*
     int ncolumn = 0;            //每条记录包含的字段数据
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char* err_msg=NULL;
+    char *table="Table_PowerInfo";
+    GlobalPowerInfo *pInfo=_globalPowerChnInfo;
+    
+    if(overwrite) {
+        sprintf(select_sql,"UPDATE %s SET product_Index=%d,product_id=%d,product_ch_id=%d,product_ch_status=%d,"
+                                          "product_ch_voltage=%.2f,product_ch_current=%.2f,product_ch_power=%.2f,product_ch_power_freq=%.2f,"
+                                          "product_ch_consumption=%.2f,product_ch_power_factor=%.2f,product_samp_time='%s' "
+                                          "WHERE product_Index=(SELECT MIN(product_Index) FROM %s);",
+                            table,
+                            *nIndex,
+                            pInfo->product_id,
+                            pInfo->product_ch_id,
+                            pInfo->product_status,
+                            pInfo->_power_info.voltage,
+                            pInfo->_power_info.current,
+                            pInfo->_power_info.power,
+                            pInfo->_power_info.freq,
+                            pInfo->_power_info.consumption,
+                            pInfo->_power_info.factor,
+                            pInfo->samp_time,
+                            table
+                            );
+    }
+    else {
+        sprintf(select_sql,"INSERT INTO %s VALUES ('%s',%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%d);",
+                            table,
+                            pInfo->samp_time,
+                            pInfo->product_id,
+                            pInfo->product_ch_id,
+                            pInfo->product_status,
+                            pInfo->_power_info.voltage,
+                            pInfo->_power_info.current,
+                            pInfo->_power_info.power,
+                            pInfo->_power_info.freq,
+                            pInfo->_power_info.consumption,
+                            pInfo->_power_info.factor,
+                            *nIndex);
+    }
     
-    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 = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK)
     {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
         return -1 ; 
     }
+    (*nIndex) += 1;
          
     sqlite3_free_table(pResult);
 
@@ -1275,7 +1300,7 @@ int dev_check_power_manage_info(sqlite3 *db, int cnt)
         sprintf(temp, "DELETE FROM %s", table);
         r = sqlite3_exec(db, temp, NULL, 0, &errmsg);
         if(r != SQLITE_OK) {
-            log_e("___sw_update_port failed, %s, %s\n\n", temp, errmsg);
+            log_e("___sqlite3_exec failed, %s, %s\n\n", temp, errmsg);
             sqlite3_free(errmsg);
             r = -1;
         }
@@ -1688,7 +1713,7 @@ int dev_update_t_ac_power_manage_over_info(sqlite3 *db,GlobalTreeACManager* _glo
 /// @param product_id 
 /// @param _globalPowerManger 
 /// @return 
-int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo,int* nIndex,char* pTimeData)
+int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo,int* nIndex,char* pTimeData, int overwrite)
 {
     int res ;
     char select_sql[1024] = {0};
@@ -1697,21 +1722,45 @@ int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnI
     int ncolumn = 0;            //每条记录包含的字段数据
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char* err_msg=NULL;
+    char *table="Table_PhasePowerInfo";
+    GlobalTreeACManager *pInfo=_globalPowerChnInfo;
     
-    sprintf(select_sql,"INSERT INTO Table_PhasePowerInfo VALUES (%d,%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,'%s');",
-                        *nIndex,
-                        _globalPowerChnInfo->product_id,
-                        _globalPowerChnInfo->product_ph_type,
-                        _globalPowerChnInfo->product_ch_id,
-                        _globalPowerChnInfo->_PowerInfo.voltage,
-                        _globalPowerChnInfo->_PowerInfo.current,
-                        _globalPowerChnInfo->_PowerInfo.power,
-                        _globalPowerChnInfo->_PowerInfo.freq,
-                        _globalPowerChnInfo->_PowerInfo.consumption,
-                        _globalPowerChnInfo->_PowerInfo.factor,
-                        pTimeData
-                        );
-    (*nIndex)+=1;    
+    if(overwrite) {
+        sprintf(select_sql,"UPDATE %s SET product_index=%d,product_id=%d,product_ph_id=%d,product_ch_id_belong=%d,"
+                                          "product_ph_voltage=%.2f,product_ph_current=%.2f,product_ph_power=%.2f,product_ph_power_freq=%.2f,"
+                                          "product_ph_consumption=%.2f,product_ph_power_factor=%.2f,product_ph_samp_time='%s' "
+                                          "WHERE product_index=(SELECT MIN(product_index) FROM %s);",
+                            table,
+                            *nIndex,
+                            pInfo->product_id,
+                            pInfo->product_ph_type,
+                            pInfo->product_ch_id,
+                            pInfo->_PowerInfo.voltage,
+                            pInfo->_PowerInfo.current,
+                            pInfo->_PowerInfo.power,
+                            pInfo->_PowerInfo.freq,
+                            pInfo->_PowerInfo.consumption,
+                            pInfo->_PowerInfo.factor,
+                            pTimeData,
+                            table
+                            );
+    }
+    else {
+        sprintf(select_sql,"INSERT INTO %s VALUES (%d,%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,'%s');",
+                            table,
+                            *nIndex,
+                            pInfo->product_id,
+                            pInfo->product_ph_type,
+                            pInfo->product_ch_id,
+                            pInfo->_PowerInfo.voltage,
+                            pInfo->_PowerInfo.current,
+                            pInfo->_PowerInfo.power,
+                            pInfo->_PowerInfo.freq,
+                            pInfo->_PowerInfo.consumption,
+                            pInfo->_PowerInfo.factor,
+                            pTimeData
+                            );
+    }
     // if(_globalPowerChnInfo->product_ch_id==0)
     //log_d(select_sql);
     res = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
@@ -1720,6 +1769,7 @@ int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnI
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
         return -1 ; 
     }
+    (*nIndex) += 1;
          
     sqlite3_free_table(pResult);
 
@@ -4289,7 +4339,6 @@ int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
 }
 
 
-#include "sys.h"
 int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
 {
     int i,r=0,exist=0,cnt=0;

+ 2 - 2
pro/src/sqlite_handle.h

@@ -19,7 +19,7 @@ int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo
 
 int dev_search_last_Index(sqlite3 *db,int* nIndex,char* tableName);
 int dev_change_last_Index(sqlite3 *db,int* nIndex,int nDeleteNumber,char* tableName);
-int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int* nIndex);
+int dev_insert_power_info(sqlite3 *db,GlobalPowerInfo* _globalPowerChnInfo,int* nIndex, int overwrite);
 int dev_search_latest_power_info(sqlite3 *db,int product_id,int product_ch_id,GlobalPowerInfo* _globalPowerInfo);
 int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_OverChnPwrAckInfo* __overChnPwrAckInfo, int dev_addr);
 int dev_delete_power_info_all(sqlite3 *db);
@@ -49,7 +49,7 @@ int dev_get_power_manage_info_by_ID(sqlite3 *db,int product_id,int product_addr,
 
 int dev_get_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,int product_ph_type,GlobalTreeACManager* _globalPowerChnManger);
 int dev_insert_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_ch_id,GlobalTreeACManager* _globalPowerChnManger);
-int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo,int* nIndex,char* pTimeData);
+int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo,int* nIndex,char* pTimeData, int overwrite);
 int dev_update_t_ac_power_manage_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo);
 int dev_update_t_ac_power_manage_over_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnManger);
 int dev_delete_ac_power_info_all(sqlite3 *db);

+ 28 - 9
pro/src/sys.c

@@ -1,5 +1,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/sysinfo.h>
+#include <sys/statvfs.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <string.h>
@@ -1036,22 +1038,38 @@ int sys_is_running(char *prog)
     return (pid)?1:0;
 }
 
-int sys_mem_enough(uint32_t len)
+
+int sys_get_disk_ava_MB(char *path)
 {
-    int flag=0;
-    void *ptr=malloc(len);
-    if(ptr) {
-        flag = 1;
-        free(ptr);
+    int r;
+    struct statvfs st;
+
+    r = statvfs(path, &st);
+    if(r) {
+        return -1;
     }
-    return flag;
+
+    int avaMB = (st.f_frsize*st.f_bavail)/(1024*1024);
+    //int freeMB = (st.f_frsize*st.f_bfree)/(1024*1024);
+    //printf("____ava: %dMB, free %dMB\n", avaMB, freeMB);
+
+    return avaMB;
 }
 
 
-int sys_mem_get_available_MB(void)
+int sys_get_mem_ava_MB(void)
 {
-    int value=0;
+    int r,value=0;
     char buff[32];
+    struct sysinfo info;
+
+#if 0
+    r = sysinfo(&info);
+    if(r) {
+        return -1;
+    }
+    value = (info.freeram*info.mem_unit)/(1014*1024);
+#else
 
     FILE *fp = fopen("/proc/meminfo", "r");
     if(!fp) {
@@ -1063,6 +1081,7 @@ int sys_mem_get_available_MB(void)
     fscanf(fp, "MemAvailable: %s kB\n", buff);
     value = atol(buff)/1024;
     fclose(fp);
+#endif
 
     return value;
 }

+ 3 - 2
pro/src/sys.h

@@ -21,12 +21,13 @@ int sys_init(void);
 int sys_reboot(void);
 int sys_set_factory(void);
 
-int sys_mem_enough(uint32_t len);
-int sys_mem_get_available_MB(void);
+int sys_get_disk_ava_MB(char *path);
+int sys_get_mem_ava_MB(void);
 int sys_is_running(char *prog);
 int sys_get_path(char *path, char *name);
 int sys_get_net(NetworkInfo_t *para, int ipVersion);
 int sys_set_net(NetworkInfo_t *para, int ipVersion);
 int sys_get_mac(char *mac, int maclen);
 
+
 #endif