瀏覽代碼

传感器数据导出!

liyi 10 月之前
父節點
當前提交
d3fc1d9e4f
共有 4 個文件被更改,包括 135 次插入 和 10 次删除
  1. 21 6
      pro/src/app.c
  2. 56 2
      pro/src/appweb_handle.c
  3. 57 2
      pro/src/sqlite_handle.c
  4. 1 0
      pro/src/sqlite_handle.h

+ 21 - 6
pro/src/app.c

@@ -1773,7 +1773,7 @@ void AlarmCtrlAll(int nCtrl)
  * @param _globalSensorMangerTemp 全局传感器管理器指针
  * @param nAlarmType 报警类型(如SENSOR_VAL1_UPPER、SENSOR_VAL1_LOWER等)
  */
-void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
+void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType,int32_t *index)
 {
     int *penable = NULL;   //使能
     int *pSave = NULL;     //是否已报警
@@ -1838,6 +1838,10 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
                 *pSave = true;
                 log_d("Sensor_Alarm CtrlType=%d,value=%s",*nCtrlType,strCtrlValue);
                 dev_sensor_Alarm_send_message(&__globalDeviceManage, _globalSensorMangerTemp, nAlarmType);
+                //保存
+                dev_insert_sensor_info(__globalDeviceManage.db, &_globalSensorMangerTemp->Cur_sensor_info, index);
+
+
                 if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
                 {
                     char *pCHlist;
@@ -1870,6 +1874,7 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
                 *pSave = true;
                 log_d("Sensor_Alarm CtrlType=%d,value=%s",*nCtrlType,strCtrlValue);
                 dev_sensor_Alarm_send_message(&__globalDeviceManage, _globalSensorMangerTemp, nAlarmType);
+                dev_insert_sensor_info(__globalDeviceManage.db, &_globalSensorMangerTemp->Cur_sensor_info, index);
                 if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
                 {
                     char *pCHlist;
@@ -2376,7 +2381,17 @@ static void* sensor_thread(void* arg)
                         }
                     }
 
-                    if (alarmflag)dev_sensor_Alarm_send_message(&__globalDeviceManage, _globalSensorMangerTemp, -1);
+                    if (alarmflag){
+                        dev_sensor_Alarm_send_message(&__globalDeviceManage, _globalSensorMangerTemp, -1);
+                        time_t now;
+                        time(&now);
+                        t = localtime(&now);
+                        ret = dev_insert_sensor_info(_globalDeviceManager->db, &_globalSensorMangerTemp->Cur_sensor_info, &nSaveIndex);
+                        if (ret != 0)
+                        {
+                            log_e("sensor_temp_write database error.");
+                        }
+                    }
                     
 
                     _globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
@@ -2606,10 +2621,10 @@ static void* sensor_thread(void* arg)
             }
             if (_globalSensorMangerTemp->sensor_status == 0)
             {
-                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_UPPER);
-                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_LOWER);
-                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_UPPER);
-                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_LOWER);
+                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_UPPER,&nSaveIndex);
+                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL1_LOWER,&nSaveIndex);
+                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_UPPER,&nSaveIndex);
+                sensor_alarm(_globalSensorMangerTemp, SENSOR_VAL2_LOWER,&nSaveIndex);
             }
             if (_globalSensorMangerTemp->sensor_interface_type == 1) // 485 类型传感器
             {

+ 56 - 2
pro/src/appweb_handle.c

@@ -51,6 +51,7 @@ enum {
 
     FILE_LOGO,
     FILE_HOST_FW,
+    FILE_SENSOR_INFO,
 };
 
 
@@ -234,6 +235,21 @@ static int gettime2(char *buf, char *tok, char *timestr)
     memcpy(timestr+11, p+13, 8); timestr[19] = 0;
     return 0;
 }
+
+static int get_sensor2(char* buf,char *tok,char *sensor_type)
+{
+    char *p=strstr(buf, tok);
+    if(!p) {
+        return -1;
+    }
+    p += strlen(tok);
+    memcpy(sensor_type, p, 1); 
+    //sensor_type[1] = 0;
+    return 0; 
+}
+
+
+
 static int get_range(time_t *from, time_t *to, char *start, char *end, int max_days)
 {
     time_t cur=gettime(start);
@@ -286,6 +302,26 @@ static int power_export(char *path, char *start, char *end)
     return dev_power_xport(from, to, path);
 }
 
+
+static int sensor_export(char *path, char *start, char *end,char type)
+{
+    int r;
+    time_t from,to;
+    char tmp1[100],tmp2[100];
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+
+    get_range(&from, &to, start, end, 7);
+    get_time_str2(tmp1,sizeof(tmp1),from);
+    get_time_str2(tmp2,sizeof(tmp2),to);
+    sprintf(path, "/tmp/sensor_%s_%s.csv", tmp1, tmp2);
+    int sensor_type = atoi(&type);
+
+    return dev_sensor_info_xport(from, to, path,sensor_type);
+}
+
+
+
+
 static int file_io(void *conn, int ftype, int io, char *buf)
 {
     int r,flag=0;
@@ -450,6 +486,22 @@ static int file_io(void *conn, int ftype, int io, char *buf)
             }
         }
         break;
+        case FILE_SENSOR_INFO:
+        {
+            char start[100],end[100];
+            char sensor_type;
+            if(io==FILE_EXPORT) {
+                gettime2(buf, "startTime=", start);
+                gettime2(buf, "endTime=", end);
+                get_sensor2(buf,"sensorType=",&sensor_type);
+                r = sensor_export(path, start, end,sensor_type);
+                if(r==0) {
+                    download_file(conn, path);
+                    file_remove(path);
+                }
+            }
+        }
+        break;
 
         default:
         return -1;
@@ -2318,8 +2370,10 @@ static void sensorStatusMonitoring(void* conn)
     cjson = json_to_sensor_manage(rx_body_buf,&_over_all_sensor_request);
     if(cjson==NULL)
     {
-        http_reply(conn, 400, NULL);
-        return ;        
+        if (strstr(hm->uri.buf,"type=export")) {
+            file_io(conn, FILE_SENSOR_INFO, FILE_EXPORT, hm->uri.buf);
+        }
+        return;   
     } 
     //查询json参数
     if(strcmp(_over_all_sensor_request.type,"listQuery")==0)

+ 57 - 2
pro/src/sqlite_handle.c

@@ -5430,7 +5430,7 @@ const char *tabNamePool[TAB_ID_MAX]={
     "Table_PowerInfo",
     "Table_PhasePowerInfo",
 };
-static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to, handle_t l)
+static int db_exec(sqlite3 *db, int tab_id, int type, time_t from, time_t to, handle_t l)
 {
     int r=-1,cnt=0;
     char *p,temp[1024];
@@ -5635,7 +5635,8 @@ static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to,
         {
             GlobalSensorInfo tmp;
 
-            snprintf(temp, sizeof(temp), "SELECT * FROM %s WHERE (sensor_samp_time BETWEEN '%s' AND '%s') ORDER BY sensor_samp_time DESC;", tabNamePool[tab_id], time_s, time_e);
+            snprintf(temp,sizeof(temp),"SELECT * FROM Table_sensorInfo where (sensor_samp_time BETWEEN '%s' and '%s' ) and sensor_id in (SELECT a.sensor_type from Table_SensorManage a where (a.sensor_type=%d));",time_s, time_e,type);
+            //snprintf(temp, sizeof(temp), "SELECT * FROM %s WHERE (sensor_samp_time BETWEEN '%s' AND '%s') ORDER BY sensor_samp_time DESC;", tabNamePool[tab_id], time_s, time_e);
             r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
             if (r != SQLITE_OK) {
                 log_e("___db_requery 2, sqlite3_prepare_v2 failed\n");
@@ -5992,6 +5993,24 @@ static void replace_chr(char *buf, char a, char b)
         buf++;
     }
 }
+
+static int sensor_iterator_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
+{
+    arg_t *parg=(arg_t*)arg;
+    GlobalSensorInfo *tmp = (GlobalSensorInfo*)xd->buf;
+    fprintf(parg->fp, "%d,", parg->id);
+    fprintf(parg->fp, "%d,", tmp->product_id);
+    fprintf(parg->fp, "%d,", tmp->sensor_id);
+    fprintf(parg->fp, "%0.2f,", tmp->val1);
+    fprintf(parg->fp, "%0.2f,", tmp->val2);
+    fprintf(parg->fp, "%s,", tmp->samp_time);
+    replace_chr(tmp->samp_time, '-', '.');
+    fprintf(parg->fp, "\n");
+    parg->id++;
+    return 0;
+}
+
+
 static int pwr_iterator_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
 {
     arg_t *parg=(arg_t*)arg;
@@ -6033,6 +6052,42 @@ static int pwr_iterator_fn(handle_t l, node_t *node, node_t *xd, void *arg, int
     return 0;
 }
 
+int dev_sensor_info_xport(time_t from, time_t to, char *path,int type)
+{
+    int i,r=-1;
+    handle_t l;
+    FILE *fp;
+    arg_t arg;
+    list_cfg_t lc={0,0,-1};
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    int tab_id=TAB_ID_SENSOR_INFO;
+
+    if(file_exist(path)) {
+        return 0;
+    }
+
+    l = xlist_init(&lc);
+
+
+    db_exec(dm->db, tab_id, type, from, to, l);
+
+    fp = fopen(path, "wt");
+    if(!fp) {
+        log_e("__%s open failed\n", path);
+        xlist_free(l);
+        return -1;
+    }
+    fprintf(fp, "id,product_id,sensor_id,sensor_val1,sensor_val2,samp_time\n");
+    arg.fp = fp; arg.id = 1;
+
+    xlist_iterator(l, NULL, sensor_iterator_fn, &arg);
+
+    fclose(fp);
+    xlist_free(l);
+    return 0;
+}
+
+
 int dev_power_xport(time_t from, time_t to, char *path)
 {
     int i,r=-1;

+ 1 - 0
pro/src/sqlite_handle.h

@@ -212,5 +212,6 @@ int dev_power_xport(time_t from, time_t to, char *path);
 int dev_clear_table(sqlite3 *db, int tab_id);
 
 void set_led_beep(int led_mode, int beep_mode);
+int dev_sensor_info_xport(time_t from, time_t to, char *path,int type);
 
 #endif