Kaynağa Gözat

Merge branch 'master' of http://jiecheng2024.tpddns.cn:3000/liyuezong/SmartPDCode

chenyuanjie 1 yıl önce
ebeveyn
işleme
76ea288d28

+ 34 - 0
ip/src/appweb_handle.c

@@ -5172,6 +5172,40 @@ static void equipmentMintenance(void *conn)
           dev_sql_VACCUM(__globalDeviceManage.db);
           log_i("Database SQLite VACCUM!\n");
           ack_str=ctrl_sts_ack_to_json();
+    }else if(strcmp(_Over_equipment_mintenance.type,"restartAll") == 0)
+    {
+        char temp[100];
+        sprintf(temp, "System reboot all device!!");
+        cmd_data_t cmd = {0};
+            
+        dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
+        cmd.cmd = CASCADE_CMD_REBOOT;
+        cmd.obj = OBJ_CHANNEL;
+        cmd.chId = 0;
+        cascade_request_saddr(&cmd,0,0);
+        sqlite3_close(__globalDeviceManage.db);
+        sys_reboot();
+    }else if(strcmp(_Over_equipment_mintenance.type,"restoreAll") == 0)
+    {
+
+            char temp[100];
+            sprintf(temp, "Factory reset all device!");
+            dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
+            cmd_data_t cmd = {0};
+            cmd.cmd = CASCADE_CMD_RECOVERY;
+            cmd.obj = OBJ_CHANNEL;
+            cmd.chId = 0;
+            cascade_request_saddr(&cmd,0,0);
+
+            for (size_t i = 0; i < MAX_CHN_COUNT; i++)
+            {
+                if (__globalDeviceManage._all_ctrl_board[i].product_saddr <= 0)
+                {
+                    continue;
+                }
+                g_switch_get_all_reset(&__globalDeviceManage._globalRelaySampManger,__globalDeviceManage._all_ctrl_board[i].product_type,__globalDeviceManage._all_ctrl_board[i].product_saddr);
+            }
+            sys_set_factory();
     }
 
     cJSON_Delete(cjson);

+ 0 - 2
ip/src/cascade.c

@@ -1455,8 +1455,6 @@ static int master_cmd_addr(cascade_handle_t *cas, cmd_data_t *cmd,int saddr,int
     int i,r;
     GlobalDeviceManager *dm=get_dm();
     data_t rdata,wdata;
-    if(saddr == 0)
-        return -1;
     switch(cmd->cmd) {
         case CASCADE_CMD_GET_INFO:
         {

+ 16 - 7
pro/src/appweb_handle.c

@@ -245,7 +245,7 @@ static int file_io(void *conn, int ftype, int io, char *buf)
     switch(ftype) {
         case FILE_SYS_CFG:
         {
-            sys_get_path(tmp, "config.ini");
+            sprintf(tmp, "/tmp/config.ini");
             sys_get_path(path, INI_FILE_NAME);
             if(io==FILE_IMPORT) {
                 r = upload_file(conn, tmp);
@@ -272,10 +272,13 @@ static int file_io(void *conn, int ftype, int io, char *buf)
 #if 0
         case FILE_SERV_CFG:
         {
+            sprintf(path, "/tmp/service.ini");
             if(io==FILE_IMPORT) {
                 r = upload_file(conn, path);
                 if(r==0) {
-                    r = paras_serv_xport(path, PARAS_IMPORT);  
+                    r = paras_serv_xport(path, PARAS_IMPORT);
+                    file_remove(path);
+                    if(r==0) exit(0);
                 }
             }
             else {
@@ -283,44 +286,50 @@ static int file_io(void *conn, int ftype, int io, char *buf)
                 if(r==0) {
                     r = download_file(conn, path);
                 }
+                file_remove(path);
             }
-            file_remove(path);
         }
         break;
 
         case FILE_ALARM_CFG:
         {
+            sprintf(path, "/tmp/alarm.ini");
             if(io==FILE_IMPORT) {
                 r = upload_file(conn, path);
                 if(r==0) {
-                    r = paras_alarm_xport(path, PARAS_IMPORT);  
+                    r = paras_alarm_xport(path, PARAS_IMPORT);
+                    file_remove(path);
+                    if(r==0) exit(0);
                 }
             }
             else {
                 r = paras_alarm_xport(path, PARAS_EXPORT);
                 if(r==0) {
                     r = download_file(conn, path);
+                    file_remove(path);
                 }
             }
-            file_remove(path);
         }
         break;
 
         case FILE_SENSOR_CFG:
         {
+            sprintf(path, "/tmp/sensor.ini");
             if(io==FILE_IMPORT) {
                 r = upload_file(conn, path);
                 if(r==0) {
-                    r = paras_sensor_xport(path, PARAS_IMPORT);  
+                    r = paras_sensor_xport(path, PARAS_IMPORT);
+                    file_remove(path);
+                    if(r==0) exit(0);
                 }
             }
             else {
                 r = paras_sensor_xport(path, PARAS_EXPORT);
                 if(r==0) {
                     r = download_file(conn, path);
+                    file_remove(path);
                 }
             }
-            file_remove(path);
         }
         break;
 #endif

+ 1 - 1
pro/src/common.c

@@ -537,7 +537,7 @@ int get_curtime_str(char *s, int len)
 {
     time_t t=time(NULL);
     struct tm *tm=localtime(&t);
-    return snprintf(s, len, "%04d%02d%02d%02d%02d%02d", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
+    return snprintf(s, len, "%04d-%02d-%02d %02d:%02d:%02d", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
 }
 
 char* getUserNamebyToken(char* Token)

+ 5 - 5
pro/src/common.h

@@ -640,15 +640,15 @@ typedef struct
 typedef struct 
 {
     int                 product_id                                 ;//产品ID    
-    char                sensor_id                                  ;//传感器ID
-    char                sensor_type                                ;//传感器类型
-    char                sensor_interface_type;                     //接口类型
+    int                 sensor_id                                  ;//传感器ID
+    int                 sensor_type                                ;//传感器类型
+    int                 sensor_interface_type;                     //接口类型
     char                sensor_name[64]                            ;//传感器名称
     char                sensor_port_name[32]                       ;//传感器端口号
     int                 sensor_baud                                ;//波特率
-    char                sensor_addr                                ;//modbus地址
+    int                 sensor_addr                                ;//modbus地址
     int                 sensor_status                              ;//传感器状态
-    char                sensor_val_count                           ;//传感器值个数
+    int                 sensor_val_count                           ;//传感器值个数
     int                 sensor_node_number                         ;//节点号
     GlobalSensorInfo Cur_sensor_info ;
     GlobalSensorOverManage over_manager                            ;//超限管理   

+ 371 - 303
pro/src/paras.c

@@ -138,10 +138,10 @@ static int ini_read(dictionary *dic, char *key, void *val, int len, int type)
         }
     }
     else if(type==TYPE_FLOAT) {
-        double c=0.0;
-        double f = iniparser_getdouble(dic, key, c);
+        double c=-10000.0;
+        double f = (float)iniparser_getdouble(dic, key, c);
         if(!feq(f,c)) {
-            *((float*)val) = f;
+            *((float*)val) = (float)f;
             r = 0;
         }
     }
@@ -697,7 +697,8 @@ static int proc_ntp(char *path, int op, NTPManager *ntp)
                 pntp->product_id = 0;
                 r = proc_ntp(path, PARAS_CHECK, pntp);
                 if(r==0) {
-                    r = dev_update_ntp_info(get_dm()->db, 0, pntp);
+                    //r = dev_clear_table(dm->db, TAB_ID_NTP);  if(r) goto quit;
+                    r = dev_update_ntp_info(dm->db, 0, pntp);
                 }
             }
             else {
@@ -876,6 +877,7 @@ static int proc_snmp(char *path, int op, SNMPManager *snmp)
             if(op==PARAS_READ) {
                 r = proc_snmp(path, PARAS_CHECK, psnmp);
                 if(r==0) {
+                    //r = dev_clear_table(dm->db, TAB_ID_SNMP);  if(r) goto quit;
                     r = dev_update_snmp_info(dm->db, 0, psnmp);
                 }
             }
@@ -1042,6 +1044,7 @@ static int proc_mqtt(char *path, int op, mqtt_info_t *mqtt)
             if(op==PARAS_READ) {
                 r = proc_mqtt(path, PARAS_CHECK, pmqtt);
                 if(r==0) {
+                    r = dev_clear_table(dm->db, TAB_ID_MQTT);  if(r) goto quit;
                     r = dev_mqtt_update_info(dm->db, pmqtt);
                 }
             }
@@ -1165,19 +1168,12 @@ static int proc_mail(char *path, int op, mail_info_t *mail)
         break;
 
         case PARAS_READ:
-        case PARAS_WRITE:
         {
             pmail = &mail2;
             send = &pmail->send;
-            if(op==PARAS_READ) {
-                dic = iniparser_load(path); if(!dic) return -1;
-                send->id = 0;
-            }
-            else {
-                r = dev_mail_get(dm->db, pmail); if(r) return -1;
-                r = proc_mail(path, PARAS_CHECK, pmail); if(r) return -1;
-                dic = dictionary_new(0); if(!dic) return -1;
-            }
+            send->id = 0;
+
+            dic = iniparser_load(path); if(!dic) return -1;
 
             r = ini_rw(dic, "mail:send.mode",    &send->mode,   sizeof(send->mode),    TYPE_INT, op); if(r) goto quit;
             r = ini_rw(dic, "mail:send.server",  send->server,  sizeof(send->server),  TYPE_STR, op); if(r) goto quit;
@@ -1199,16 +1195,42 @@ static int proc_mail(char *path, int op, mail_info_t *mail)
                 }
             }
 
-            if(op==PARAS_READ) {
-                r = proc_mail(path, PARAS_CHECK, pmail);
-                if(r==0) {
-                    r = dev_mail_update_send(dm->db, &pmail->send);
-                    r = dev_mail_update_recv(dm->db, pmail->recv);
+            r = proc_mail(path, PARAS_CHECK, pmail);  if(r) goto quit;
+            r = dev_clear_table(dm->db, TAB_ID_MAIL);  if(r) goto quit;
+            r = dev_mail_update_send(dm->db, &pmail->send); if(r) goto quit;
+            r = dev_mail_update_recv(dm->db, pmail->recv);  if(r) goto quit;
+        }
+        break;
+
+        case PARAS_WRITE:
+        {
+            pmail = &mail2;
+            send = &pmail->send;
+            
+            r = dev_mail_get(dm->db, pmail); if(r) return -1;
+            r = proc_mail(path, PARAS_CHECK, pmail); if(r) return -1;
+            dic = dictionary_new(0); if(!dic) return -1;
+
+            r = ini_rw(dic, "mail:send.mode",    &send->mode,   sizeof(send->mode),    TYPE_INT, op); if(r) goto quit;
+            r = ini_rw(dic, "mail:send.server",  send->server,  sizeof(send->server),  TYPE_STR, op); if(r) goto quit;
+            r = ini_rw(dic, "mail:send.port",    send->port,    sizeof(send->port),    TYPE_STR, op); if(r) goto quit;
+            r = ini_rw(dic, "mail:send.auth",    send->auth,    sizeof(send->auth),    TYPE_STR, op); if(r) goto quit;
+            r = ini_rw(dic, "mail:send.ca",      send->ca,      sizeof(send->ca),      TYPE_STR, op); if(r) goto quit;
+            r = ini_rw(dic, "mail:send.account", send->account, sizeof(send->account), TYPE_STR, op); if(r) goto quit;
+
+            for(i=0; i<MAIL_RECV_MAX; i++) {
+                mail_recv_t *recv=&pmail->recv[i];
+
+                recv->idx = i;
+                if(op==PARAS_READ || (op==PARAS_WRITE && recv->use)) {
+                    sprintf(token, "mail:recv%d.use", i+1);
+                    r = ini_rw(dic, token, &recv->use, sizeof(recv->use), TYPE_INT, op); if(r) goto quit;
+
+                    sprintf(token, "mail:recv%d.account", i+1);
+                    r = ini_rw(dic, token, recv->account, sizeof(recv->account), TYPE_STR, op); if(r) goto quit;
                 }
             }
-            else {
-                r = ini_dump(path, dic);
-            }
+            r = ini_dump(path, dic);
         }
         break;
 
@@ -1288,32 +1310,41 @@ static int proc_role(char *path, int op, RoleInfo *role)
 
         case PARAS_READ:
         {
+            int x,chk_ok=0;
+
             prole = &role2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            while(1) {
-                sprintf(token, "role:role%d.name", i);
-                r = ini_rw(dic, token, prole->roleName, sizeof(prole->roleName), TYPE_STR, op);    if(r) break;
+            for(x=0; x<2; x++) {
+                i = 1;
+                while(1) {
+                    sprintf(token, "role:role%d.name", i);
+                    r = ini_rw(dic, token, prole->roleName, sizeof(prole->roleName), TYPE_STR, op);    if(r) break;
 
-                sprintf(token, "role:role%d.level", i);
-                r = ini_rw(dic, token, &prole->roleLevel, sizeof(prole->roleLevel), TYPE_STR, op); if(r) break;
+                    sprintf(token, "role:role%d.level", i);
+                    r = ini_rw(dic, token, &prole->roleLevel, sizeof(prole->roleLevel), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "role:role%d.auth", i);
-                r = ini_rw(dic, token, prole->roleAuthority, sizeof(prole->roleAuthority), TYPE_STR, op); if(r) break;
+                    sprintf(token, "role:role%d.auth", i);
+                    r = ini_rw(dic, token, prole->roleAuthority, sizeof(prole->roleAuthority), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "role:role%d.sort", i);
-                r = ini_rw(dic, token, &prole->roleSort, sizeof(prole->roleAuthority), TYPE_INT, op); if(r) break;
+                    sprintf(token, "role:role%d.sort", i);
+                    r = ini_rw(dic, token, &prole->roleSort, sizeof(prole->roleAuthority), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "role:role%d.time", i);
-                r = ini_rw(dic, token, prole->createTime, sizeof(prole->createTime), TYPE_STR, op); if(r) break;
+                    sprintf(token, "role:role%d.time", i);
+                    r = ini_rw(dic, token, prole->createTime, sizeof(prole->createTime), TYPE_STR, op); if(r) break;
 
-                r = proc_role(path, PARAS_CHECK, prole);
-                if(r==0) {
-                    r = dev_update_role_info(dm->db, prole);
+                    if(chk_ok==0) {
+                        r = proc_role(path, PARAS_CHECK, prole); if(r) break;
+                    }
+                    else {
+                        r = dev_insert_role_info(dm->db, prole); if(r) break;
+                    }
+
+                    i++;
                 }
                 if(r) break;
-
-                i++;
+                chk_ok = 1;
+                r = dev_clear_table(dm->db, TAB_ID_ROLE); if(r) break;
             }
         }
         break;
@@ -1439,32 +1470,39 @@ static int proc_user(char *path, int op, UserInfo *user)
 
         case PARAS_READ:
         {
+            int x,chk_ok=0;
             puser = &user2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            while(1) {
-                sprintf(token, "role:role%d.name", i);
-                r = ini_rw(dic, token, puser->userName, sizeof(puser->userName), TYPE_STR, op); if(r) break;
+            for(x=0; x<2; x++) {
+                i = 1;
+                while(1) {
+                    sprintf(token, "role:role%d.name", i);
+                    r = ini_rw(dic, token, puser->userName, sizeof(puser->userName), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "role:role%d.password", i);
-                r = ini_rw(dic, token, &puser->userPW, sizeof(puser->userPW), TYPE_STR, op); if(r) break;
+                    sprintf(token, "role:role%d.password", i);
+                    r = ini_rw(dic, token, &puser->userPW, sizeof(puser->userPW), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "role:role%d.nick_name", i);
-                r = ini_rw(dic, token, puser->nickName, sizeof(puser->nickName), TYPE_STR, op); if(r) break;
+                    sprintf(token, "role:role%d.nick_name", i);
+                    r = ini_rw(dic, token, puser->nickName, sizeof(puser->nickName), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "role:role%d.role_id", i);
-                r = ini_rw(dic, token, &puser->roleID, sizeof(puser->roleID), TYPE_INT, op); if(r) break;
+                    sprintf(token, "role:role%d.role_id", i);
+                    r = ini_rw(dic, token, &puser->roleID, sizeof(puser->roleID), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "role:role%d.time", i);
-                r = ini_rw(dic, token, puser->createTime, sizeof(puser->createTime), TYPE_STR, op); if(r) break;
+                    sprintf(token, "role:role%d.time", i);
+                    r = ini_rw(dic, token, puser->createTime, sizeof(puser->createTime), TYPE_STR, op); if(r) break;
 
-                r = proc_user(path, PARAS_CHECK, puser);
-                if(r==0) {
-                    r = dev_update_user_info(dm->db, puser);
+                    if(chk_ok==0) {
+                        r = proc_user(path, PARAS_CHECK, puser); if(r) break;
+                    }
+                    else {
+                        r = dev_insert_user_info(dm->db, puser); if(r) break;
+                    }
+                    i++;
                 }
                 if(r) break;
-
-                i++;
+                chk_ok = 1;
+                r = dev_clear_table(dm->db, TAB_ID_USER);  if(r) break;
             }
         }
         break;
@@ -1561,27 +1599,33 @@ static int proc_group(char *path, int op, GroupInfo *group)
 
         case PARAS_READ:
         {
+            int x,chk_ok=0;
             pgroup = &group2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            while(1) {
-                sprintf(token, "group:group%d.id", i);
-                r = ini_rw(dic, token, &pgroup->GroupID,    sizeof(pgroup->GroupID),     TYPE_STR, op); if(r) break;
+            for(x=0; x<2; x++) {
+                i = 1;
+                while(1) {
+                    sprintf(token, "group:group%d.id", i);
+                    r = ini_rw(dic, token, &pgroup->GroupID,    sizeof(pgroup->GroupID),     TYPE_STR, op); if(r) break;
 
-                sprintf(token, "group:group%d.name", i);
-                r = ini_rw(dic, token, pgroup->GroupName,   sizeof(pgroup->GroupName),   TYPE_STR, op); if(r) break;
+                    sprintf(token, "group:group%d.name", i);
+                    r = ini_rw(dic, token, pgroup->GroupName,   sizeof(pgroup->GroupName),   TYPE_STR, op); if(r) break;
 
-                sprintf(token, "group:group%d.ch_list", i);
-                r = ini_rw(dic, token, pgroup->GroupChList, sizeof(pgroup->GroupChList), TYPE_STR, op); if(r) break;
+                    sprintf(token, "group:group%d.ch_list", i);
+                    r = ini_rw(dic, token, pgroup->GroupChList, sizeof(pgroup->GroupChList), TYPE_STR, op); if(r) break;
 
-                r = proc_group(path, PARAS_CHECK, pgroup);
-                if(r==0) {
-                    r = dev_update_group_info(dm->db, pgroup);
-                    if(r) {
-                        break;
+                    if(chk_ok==0) {
+                        r = proc_group(path, PARAS_CHECK, pgroup);  if(r) break;
+                    }
+                    else {
+                        r = dev_insert_group_info(dm->db, pgroup);  if(r) break;
                     }
+                    i++;
                 }
-                i++;
+                if(r) break;
+                chk_ok = 1;
+                r = dev_clear_table(dm->db, TAB_ID_GROUP);  if(r) break;
             }
         }
         break;
@@ -1729,107 +1773,116 @@ static int proc_sensor(char *path, int op, GlobalSensorManger *sensor)
         case PARAS_READ:
         {
             float f;
+            int x,chk_ok=0;
 
             psensor = &sensor2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            while(1) {
-                sprintf(token, "sensor:sensor%d.id", i);
-                r = ini_rw(dic, token, &psensor->sensor_id, sizeof(psensor->sensor_id), TYPE_INT, op); if(r) break;
+            for(x=0; x<2; x++) {
+                i = 1;
+                while(1) {
+                    sprintf(token, "sensor:sensor%d.id", i);
+                    r = ini_rw(dic, token, &psensor->sensor_id, sizeof(psensor->sensor_id), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.type", i);
-                r = ini_rw(dic, token, &psensor->sensor_type, sizeof(psensor->sensor_type), TYPE_INT, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.type", i);
+                    r = ini_rw(dic, token, &psensor->sensor_type, sizeof(psensor->sensor_type), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.name", i);
-                r = ini_rw(dic, token, psensor->sensor_name, sizeof(psensor->sensor_name), TYPE_STR, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.name", i);
+                    r = ini_rw(dic, token, psensor->sensor_name, sizeof(psensor->sensor_name), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.iface", i);
-                r = ini_rw(dic, token, &psensor->sensor_interface_type, sizeof(psensor->sensor_interface_type), TYPE_INT, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.iface", i);
+                    r = ini_rw(dic, token, &psensor->sensor_interface_type, sizeof(psensor->sensor_interface_type), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.port", i);
-                r = ini_rw(dic, token, psensor->sensor_port_name, sizeof(psensor->sensor_port_name), TYPE_STR, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.port", i);
+                    r = ini_rw(dic, token, psensor->sensor_port_name, sizeof(psensor->sensor_port_name), TYPE_STR, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.addr", i);
-                r = ini_rw(dic, token, &psensor->sensor_addr, sizeof(psensor->sensor_addr), TYPE_INT, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.addr", i);
+                    r = ini_rw(dic, token, &psensor->sensor_addr, sizeof(psensor->sensor_addr), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.baudrate", i);
-                r = ini_rw(dic, token, &psensor->sensor_baud, sizeof(psensor->sensor_baud), TYPE_INT, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.baudrate", i);
+                    r = ini_rw(dic, token, &psensor->sensor_baud, sizeof(psensor->sensor_baud), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "sensor:sensor%d.vcnt", i);
-                r = ini_rw(dic, token, &psensor->sensor_val_count, sizeof(psensor->sensor_val_count), TYPE_INT, op); if(r) break;
+                    sprintf(token, "sensor:sensor%d.vcnt", i);
+                    r = ini_rw(dic, token, &psensor->sensor_val_count, sizeof(psensor->sensor_val_count), TYPE_INT, op); if(r) break;
 
-                //////////////////////
-                GlobalSensorOverManage *pover=&psensor->over_manager;
-                for(j=1; j<=2; j++) {
-                    for(k=1; k<=2; k++) {
-                        if(j==1) {
-                            if(k==1) {
-                                sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_upper_enabled, sizeof(pover->sensor_val1_upper_enabled), TYPE_INT, op); if(r) break;
+                    //////////////////////
+                    GlobalSensorOverManage *pover=&psensor->over_manager;
+                    for(j=1; j<=2; j++) {
+                        for(k=1; k<=2; k++) {
+                            if(j==1) {
+                                if(k==1) {
+                                    sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_upper_enabled, sizeof(pover->sensor_val1_upper_enabled), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold, sizeof(pover->sensor_val1_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold, sizeof(pover->sensor_val1_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl, sizeof(pover->sensor_val1_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl, sizeof(pover->sensor_val1_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl_para, sizeof(pover->sensor_val1_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
-                            }
-                            else {
-                                sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_lower_enabled, sizeof(pover->sensor_val1_lower_enabled), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_upper_threshold_ctrl_para, sizeof(pover->sensor_val1_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                                }
+                                else {
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_lower_enabled, sizeof(pover->sensor_val1_lower_enabled), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold, sizeof(pover->sensor_val1_lower_threshold), TYPE_FLOAT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold, sizeof(pover->sensor_val1_lower_threshold), TYPE_FLOAT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl, sizeof(pover->sensor_val1_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl, sizeof(pover->sensor_val1_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl_para, sizeof(pover->sensor_val1_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val1_lower_threshold_ctrl_para, sizeof(pover->sensor_val1_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                                }
                             }
-                        }
-                        else {
-                            if(k==1) {
-                                sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_upper_enabled, sizeof(pover->sensor_val2_upper_enabled), TYPE_INT, op); if(r) break;
+                            else {
+                                if(k==1) {
+                                    sprintf(token, "sensor:sensor%d.v%d.up.en", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_upper_enabled, sizeof(pover->sensor_val2_upper_enabled), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold, sizeof(pover->sensor_val2_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.up.th", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold, sizeof(pover->sensor_val2_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl, sizeof(pover->sensor_val2_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.up.th_act", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl, sizeof(pover->sensor_val2_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl_para, sizeof(pover->sensor_val2_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
-                            }
-                            else {
-                                sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_lower_enabled, sizeof(pover->sensor_val2_lower_enabled), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.up.th_para", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_upper_threshold_ctrl_para, sizeof(pover->sensor_val2_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                                }
+                                else {
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.en", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_lower_enabled, sizeof(pover->sensor_val2_lower_enabled), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold, sizeof(pover->sensor_val2_lower_threshold), TYPE_FLOAT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.th", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold, sizeof(pover->sensor_val2_lower_threshold), TYPE_FLOAT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl, sizeof(pover->sensor_val2_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.th_act", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl, sizeof(pover->sensor_val2_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                                sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
-                                r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl_para, sizeof(pover->sensor_val2_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                                    sprintf(token, "sensor:sensor%d.v%d.lo.th_para", i, j);
+                                    r = ini_rw(dic, token, &pover->sensor_val2_lower_threshold_ctrl_para, sizeof(pover->sensor_val2_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                                }
                             }
+                            if(r) break;
                         }
                         if(r) break;
                     }
                     if(r) break;
-                }
-                if(r) break;
 
-                r = proc_sensor(path, PARAS_CHECK, psensor);
-                if(r==0) {
-                    r = dev_update_sensor_genera_manage(dm->db, 0, psensor->sensor_id, psensor);
-                    r = dev_update_sensor_over_manage(dm->db, 0, psensor->sensor_id, psensor);
+                    if(chk_ok==0) {
+                        r = proc_sensor(path, PARAS_CHECK, psensor);   if(r) break;
+                    }
+                    else {
+                        r = dev_insert_sensor_genera_manage(dm->db, psensor);  if(r) break;
+                        r = dev_update_sensor_over_manage(dm->db, 0, psensor->sensor_id, psensor);    if(r) break;
+                    }
+                    i++;
                 }
                 if(r) break;
+                chk_ok = 1;
+                r = dev_clear_table(dm->db, TAB_ID_SENSOR);  if(r) break;
             }
         }
         break;
@@ -1960,7 +2013,7 @@ static int proc_sensor(char *path, int op, GlobalSensorManger *sensor)
 }
 static int proc_power(char *path, int op, GlobalPowerManger *power)
 {
-    int i=1,r=0;
+    int i,j,r=0;
     char temp[100];
     char *p,token[100];
     dictionary *dic=NULL;
@@ -1996,106 +2049,113 @@ static int proc_power(char *path, int op, GlobalPowerManger *power)
         case PARAS_READ:
         {
             float f;
+            int x,chk_ok=0;
 
             GlobalPowerManger *tmp=&power2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            for(i=1; i<=dm->brdMax; i++) {
-                sprintf(token, "power:channel%d.addr",i);
-                r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op); if(r) break;
-                tmp->product_ch_id = i;
+            for(x=0; x<2; x++) {
+                for(i=1; i<=dm->brdMax; i++) {
+                    sprintf(token, "power:channel%d.addr",i);
+                    r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op); if(r) break;
+                    tmp->product_ch_id = i;
 
-                sprintf(token, "power:channel%d.ch_addr",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.ch_addr",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.name",tmp->product_ch_id);
-                r = ini_rw(dic, token, tmp->product_ch_name, sizeof(tmp->product_ch_name), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.name",tmp->product_ch_id);
+                    r = ini_rw(dic, token, tmp->product_ch_name, sizeof(tmp->product_ch_name), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.type",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ch_type, sizeof(tmp->product_ch_type), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.type",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ch_type, sizeof(tmp->product_ch_type), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.status",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ch_status, sizeof(tmp->product_ch_status), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.status",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ch_status, sizeof(tmp->product_ch_status), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.start_delay",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ch_start_delay, sizeof(tmp->product_ch_start_delay), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.start_delay",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ch_start_delay, sizeof(tmp->product_ch_start_delay), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.stop_delay",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ch_stop_delay, sizeof(tmp->product_ch_stop_delay), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.stop_delay",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ch_stop_delay, sizeof(tmp->product_ch_stop_delay), TYPE_INT, op); if(r) break;
 
-                ///////////voltage//////////
-                GlobalOverManager *pover=&tmp->global_over_manager;
-                //upper
-                sprintf(token, "power:channel%d.threshold.voltate.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////voltage//////////
+                    GlobalOverManager *pover=&tmp->global_over_manager;
+                    //upper
+                    sprintf(token, "power:channel%d.threshold.voltate.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
-
-                sprintf(token, "power:channel%d.threshold.voltate.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                //lower
-                sprintf(token, "power:channel%d.threshold.voltate.lo.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.lo.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op); if(r) break;
+                    //lower
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.lo.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.lo.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
 
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                ///////////current//////////
-                sprintf(token, "power:channel%d.threshold.current.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////current//////////
+                    sprintf(token, "power:channel%d.threshold.current.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.current.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.current.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.current.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.current.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.current.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.current.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                ///////////power//////////
-                sprintf(token, "power:channel%d.threshold.power.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////power//////////
+                    sprintf(token, "power:channel%d.threshold.power.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.power.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.power.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.power.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.power.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.power.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.power.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                ///////////power consumption//////////
-                sprintf(token, "power:channel%d.threshold.powerc.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////power consumption//////////
+                    sprintf(token, "power:channel%d.threshold.powerc.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.powerc.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.powerc.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.powerc.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.powerc.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.powerc.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
-                
-                r = proc_power(path, PARAS_CHECK, tmp);
-                if(r==0) {
-                    r = dev_update_power_manage_genera_info(dm->db, 0, i, tmp);
-                    r = dev_update_power_manage_over_info(dm->db, 0, i, tmp);
+                    sprintf(token, "power:channel%d.threshold.powerc.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    
+                    if(chk_ok==0) {
+                        r = proc_power(path, PARAS_CHECK, tmp); if(r) break;
+                    }
+                    else {
+                        r = dev_update_power_manage_genera_info(dm->db, 0, i, tmp);  if(r) break;
+                        r = dev_update_power_manage_over_info(dm->db, 0, i, tmp);    if(r) break;
+                    }
                 }
+
+                if(r) break;
+                chk_ok = 1;
             }
         }
         break;
@@ -2258,102 +2318,109 @@ static int proc_power3(char *path, int op, GlobalTreeACManager *power)
         case PARAS_READ:
         {
             float f;
+            int x,chk_ok=0;
 
             GlobalTreeACManager *tmp=&power2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            for(i=1; i<=dm->brdMax; i++) {
-                sprintf(token, "power:channel%d.addr",i);
-                r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op); if(r) break;
-                tmp->product_ch_id = i;
+            for(x=0; x<2; x++) {
+                for(i=1; i<=dm->brdMax; i++) {
+                    sprintf(token, "power:channel%d.addr",i);
+                    r = ini_rw(dic, token, &tmp->product_saddr, sizeof(tmp->product_saddr), TYPE_INT, op); if(r) break;
+                    tmp->product_ch_id = i;
 
-                sprintf(token, "power:channel%d.ch_addr",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.ch_addr",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ch_addr, sizeof(tmp->product_ch_addr), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.ph_id",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ph_id, sizeof(tmp->product_ph_id), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.ph_id",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ph_id, sizeof(tmp->product_ph_id), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.ph_type",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ph_type, sizeof(tmp->product_ph_type), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.ph_type",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ph_type, sizeof(tmp->product_ph_type), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.ph_otype",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ph_outputType, sizeof(tmp->product_ph_outputType), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.ph_otype",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ph_outputType, sizeof(tmp->product_ph_outputType), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.ph_ostat",tmp->product_ch_id);
-                r = ini_rw(dic, token, &tmp->product_ph_outputStatus, sizeof(tmp->product_ph_outputStatus), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.ph_ostat",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &tmp->product_ph_outputStatus, sizeof(tmp->product_ph_outputStatus), TYPE_INT, op); if(r) break;
 
-                ///////////voltage//////////
-                GlobalOverManager *pover=&tmp->global_over_manager;
-                //upper
-                sprintf(token, "power:channel%d.threshold.voltate.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////voltage//////////
+                    GlobalOverManager *pover=&tmp->global_over_manager;
+                    //upper
+                    sprintf(token, "power:channel%d.threshold.voltate.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_upper_enable, sizeof(pover->product_vol_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_upper_threshold, sizeof(pover->product_vol_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl, sizeof(pover->product_vol_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_upper_threshold_ctrl_para, sizeof(pover->product_vol_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                //lower
-                sprintf(token, "power:channel%d.threshold.voltate.lo.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op); if(r) break;
+                    //lower
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_lower_enable, sizeof(pover->product_vol_lower_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.lo.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_lower_threshold, sizeof(pover->product_vol_lower_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.lo.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl, sizeof(pover->product_vol_over_lower_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.voltate.lo.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.voltate.lo.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_vol_over_lower_threshold_ctrl_para, sizeof(pover->product_vol_over_lower_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                ///////////current//////////
-                sprintf(token, "power:channel%d.threshold.current.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////current//////////
+                    sprintf(token, "power:channel%d.threshold.current.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_upper_enable, sizeof(pover->product_cur_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.current.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.current.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_upper_threshold, sizeof(pover->product_cur_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.current.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.current.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl, sizeof(pover->product_cur_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.current.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.current.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_cur_over_upper_threshold_ctrl_para, sizeof(pover->product_cur_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                ///////////power//////////
-                sprintf(token, "power:channel%d.threshold.power.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////power//////////
+                    sprintf(token, "power:channel%d.threshold.power.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_upper_enable, sizeof(pover->product_pwr_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.power.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.power.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_upper_threshold, sizeof(pover->product_pwr_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.power.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.power.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl, sizeof(pover->product_pwr_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.power.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.power.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwr_over_upper_threshold_ctrl_para, sizeof(pover->product_pwr_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
 
-                ///////////power consumption//////////
-                sprintf(token, "power:channel%d.threshold.powerc.up.en",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op); if(r) break;
+                    ///////////power consumption//////////
+                    sprintf(token, "power:channel%d.threshold.powerc.up.en",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_upper_enable, sizeof(pover->product_pwrcon_upper_enable), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.powerc.up.val",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.powerc.up.val",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_upper_threshold, sizeof(pover->product_pwrcon_upper_threshold), TYPE_FLOAT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.powerc.up.act",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
+                    sprintf(token, "power:channel%d.threshold.powerc.up.act",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl), TYPE_INT, op); if(r) break;
 
-                sprintf(token, "power:channel%d.threshold.powerc.up.para",tmp->product_ch_id);
-                r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
-                
-                r = proc_power3(path, PARAS_CHECK, tmp);
-                if(r==0) {
-                    r = dev_update_t_ac_power_manage_info(dm->db, tmp);
-                    r = dev_update_t_ac_power_manage_over_info(dm->db, tmp);
+                    sprintf(token, "power:channel%d.threshold.powerc.up.para",tmp->product_ch_id);
+                    r = ini_rw(dic, token, &pover->product_pwrcon_over_upper_threshold_ctrl_para, sizeof(pover->product_pwrcon_over_upper_threshold_ctrl_para), TYPE_INT, op); if(r) break;
+                    
+                    if(chk_ok==0) {
+                        r = proc_power3(path, PARAS_CHECK, tmp); if(r) break;
+                    }
+                    else {
+                        r = dev_update_t_ac_power_manage_info(dm->db, tmp);      if(r) break;
+                        r = dev_update_t_ac_power_manage_over_info(dm->db, tmp); if(r) break;
+                    }
                 }
+                if(r) break;
+                chk_ok = 1;
             }
         }
         break;
@@ -2775,10 +2842,8 @@ static int ini_save(paras_handle_t *h)
     return 0;
 }
 #endif
-
 ////////////////////////////////////////////////////////////
 
-
 int paras_init(void)
 {
     int r=0;
@@ -2881,30 +2946,31 @@ int paras_serv_xport(char *path, int io)
     int r=-1;
     char temp[100];
 
-    get_curtime_str(temp,sizeof(temp));
-    sprintf(path, "/tmp/service_%s.ini", temp);
     if(io==PARAS_IMPORT) {
-        r = proc_ntp(path,   PARAS_READ, NULL);
-        r = proc_mqtt(path,  PARAS_READ, NULL);
-        r = proc_mail(path,  PARAS_READ, NULL);
-        r = proc_snmp(path,  PARAS_READ, NULL);
-        r = proc_role(path,  PARAS_READ, NULL);
-        r = proc_user(path,  PARAS_READ, NULL);
-        r = proc_group(path, PARAS_READ, NULL);
-        //r = proc_timer(path, PARAS_READ, NULL);
+        r *= proc_ntp(path,   PARAS_READ, NULL);
+        r *= proc_mqtt(path,  PARAS_READ, NULL);
+        r *= proc_mail(path,  PARAS_READ, NULL);
+        r *= proc_snmp(path,  PARAS_READ, NULL);
+        r *= proc_role(path,  PARAS_READ, NULL);
+        r *= proc_user(path,  PARAS_READ, NULL);
+        r *= proc_group(path, PARAS_READ, NULL);
+        //r *= proc_timer(path, PARAS_READ, NULL);
     }
     else if(io==PARAS_EXPORT) {
-        r = proc_ntp(path,   PARAS_WRITE, NULL);
-        r = proc_mqtt(path,  PARAS_WRITE, NULL);
-        r = proc_mail(path,  PARAS_WRITE, NULL);
-        r = proc_snmp(path,  PARAS_WRITE, NULL);
-        r = proc_role(path,  PARAS_WRITE, NULL);
-        r = proc_user(path,  PARAS_WRITE, NULL);
-        r = proc_group(path, PARAS_WRITE, NULL);
-        //r = proc_timer(path, PARAS_WRITE, NULL);
+        get_curtime_str(temp,sizeof(temp));
+        sprintf(path, "/tmp/service_%s.ini", temp);
+
+        r *= proc_ntp(path,   PARAS_WRITE, NULL);
+        r *= proc_mqtt(path,  PARAS_WRITE, NULL);
+        r *= proc_mail(path,  PARAS_WRITE, NULL);
+        r *= proc_snmp(path,  PARAS_WRITE, NULL);
+        r *= proc_role(path,  PARAS_WRITE, NULL);
+        r *= proc_user(path,  PARAS_WRITE, NULL);
+        r *= proc_group(path, PARAS_WRITE, NULL);
+        //r *= proc_timer(path, PARAS_WRITE, NULL);
     }
 
-    return 0;
+    return r;
 }
 
 int paras_alarm_xport(char *path, int io)
@@ -2913,22 +2979,23 @@ int paras_alarm_xport(char *path, int io)
     char temp[100];
 
     pwr3 = is_power3();
-    get_curtime_str(temp,sizeof(temp));
-    sprintf(path, "/tmp/power_%s.ini", temp);
     if(io==PARAS_IMPORT) {
         if(pwr3) {
-            r = proc_power(path, PARAS_READ, NULL);
+            r *= proc_power(path, PARAS_READ, NULL);
         }
         else {
-            r = proc_power3(path, PARAS_READ, NULL);
+            r *= proc_power3(path, PARAS_READ, NULL);
         }
     }
     else if(io==PARAS_EXPORT) {
+        get_curtime_str(temp,sizeof(temp));
+        sprintf(path, "/tmp/power_%s.ini", temp);
+
         if(pwr3) {
-            r = proc_power3(path, PARAS_WRITE, NULL);
+            r *= proc_power3(path, PARAS_WRITE, NULL);
         }
         else {
-            r = proc_power(path, PARAS_WRITE, NULL);
+            r *= proc_power(path, PARAS_WRITE, NULL);
         }
     }
 
@@ -2939,14 +3006,15 @@ int paras_sensor_xport(char *path, int io)
 {
     int r=-1;
     char temp[100];
-
-    get_curtime_str(temp,sizeof(temp));
-    sprintf(path, "/tmp/sensor_%s.ini", temp);
+    
     if(io==PARAS_IMPORT) {
-        r = proc_sensor(path, PARAS_READ, NULL);
+        r *= proc_sensor(path, PARAS_READ, NULL);
     }
     else if(io==PARAS_EXPORT) {
-        r = proc_sensor(path, PARAS_WRITE, NULL);
+        get_curtime_str(temp,sizeof(temp));
+        sprintf(path, "/tmp/sensor_%s.ini", temp);
+
+        r *= proc_sensor(path, PARAS_WRITE, NULL);
     }
 
     return r;

+ 17 - 0
pro/src/sqlite_handle.c

@@ -5431,3 +5431,20 @@ int dev_power_xport(int type, time_t from, time_t to, char *path)
 }
 
 
+int dev_clear_table(sqlite3 *db, int tab_id)
+{
+    int r;
+    char temp[1024];
+
+    if(!db || tab_id<TAB_ID_NTP || tab_id>=TAB_ID_MAX) {
+        return -1;
+    }
+
+    sprintf(temp, "DELETE FROM %s;", tabNamePool[tab_id]);
+    r = sqlite3_exec(db, temp, NULL, NULL, NULL);
+    if(r!=SQLITE_OK) {
+        printf("__clear %s failed\n", tabNamePool[tab_id]);
+    }
+
+    return r;
+}

+ 1 - 1
pro/src/sqlite_handle.h

@@ -204,7 +204,7 @@ int dev_alarm_xport(int io_type, char *path);
 int dev_serv_xport(int io_type, char *path);
 int dev_log_xport(int type, time_t from, time_t to, char *path);
 int dev_power_xport(int type, time_t from, time_t to, char *path);
-
+int dev_clear_table(sqlite3 *db, int tab_id);