X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FDeviceData.cc;h=13c28aa22f63207e323f26eb2dfd2532f87ed787;hb=dcc5fd94e2ec65898dd8bda440cb0539e1f60373;hp=259d821ae38310cebc583baeab048c4e637af82c;hpb=8c97cbb9b5f8997fe9ab3917fcbea66d74b45837;p=lib1wire.git diff --git a/src/DeviceData.cc b/src/DeviceData.cc index 259d821..13c28aa 100644 --- a/src/DeviceData.cc +++ b/src/DeviceData.cc @@ -169,59 +169,137 @@ long int get_interval_type(Date *start_date, return ret_val; } -Data *DeviceData::get_daily_summary(Date *date) { +Data *DeviceData::get_day_summary(Date *date) { Data *ret_val; W1Store *store; + bool suc_flg; + + ret_val = NULL; + store = new W1Store(device_id, date); + if (store != NULL) { + suc_flg = store->load(); + if (suc_flg == true) { + switch(summary_calc_type) { + case SUM: + ret_val = store->get_sum(); + break; + case DELTA: + ret_val = store->get_delta(); + break; + case MEAN: + default: + ret_val = store->get_mean(); + break; + case MAX: + ret_val = store->get_max(); + break; + case MIN: + ret_val = store->get_min(); + break; + } + if (ret_val != NULL) { + ret_val->printout(); + } + else { + log_error("Could not read data log for device: %s\n", device_id.c_str()); + } + } + else { + log_error("Could not read data log for device: %s. Data file open load failed.\n", device_id.c_str()); + } + } + else { + log_error("Could not read data log for device: %s\n", device_id.c_str()); + } + delete(store); + return ret_val; +} + +DataRange *DeviceData::get_daily_summary(Date *start_date, + Date *end_date) { + DataRange *ret_val; + Data *data; + Date *date; + + ret_val = NULL; + date = start_date->clone(); + while(date->before(*end_date)) { + data = get_day_summary(date); + if (data != NULL) { + if (ret_val == NULL) { + ret_val = new DataRange(*data); + } + else { + ret_val->add_data(*data); + } + delete(data); + } + date->tomorrow(); + } + delete(date); + return ret_val; +} + +vector DeviceData::get_hourly_summary(Date *date) { + vector ret_val; + W1Store * store; store = new W1Store(device_id, date); store->load(); switch(summary_calc_type) { +/* case SUM: ret_val = store->get_sum(); break; +*/ case DELTA: - ret_val = store->get_delta(); + ret_val = store->get_delta(3600); break; case MEAN: default: - ret_val = store->get_mean(); + ret_val = store->get_mean(3600); break; +/* case MAX: ret_val = store->get_max(); break; case MIN: ret_val = store->get_min(); break; +*/ } - ret_val->printout(); delete(store); - return ret_val; } -DataRange *DeviceData::get_daily_summary(Date *start_date, +DataRange *DeviceData::get_hourly_summary(Date *start_date, Date *end_date) { DataRange *ret_val; + vector dta_list; Data *data; Date *date; ret_val = NULL; date = start_date->clone(); while(date->before(*end_date)) { - data = get_daily_summary(date); - if (ret_val == NULL) { - ret_val = new DataRange(*data); - } - else { - ret_val->add_data(*data); + dta_list = get_hourly_summary(date); + for(vector::iterator list_iter = dta_list.begin(); list_iter != dta_list.end(); list_iter++) { + data = (Data *)*list_iter; + if (data != NULL) { + if (ret_val == NULL) { + ret_val = new DataRange(*data); + } + else { + ret_val->add_data(*data); + } + delete(data); + } } - delete(data); date->tomorrow(); } delete(date); return ret_val; } - DataRange *DeviceData::get_data(Date *start_date, Date *end_date) { DataRange *ret_val; @@ -237,6 +315,7 @@ DataRange *DeviceData::get_data(Date *start_date, break; case 1: log_debug("get monthly summary\n"); + ret_val = get_daily_summary(start_date, end_date); break; case 2: log_debug("get daily summary\n"); @@ -244,6 +323,7 @@ DataRange *DeviceData::get_data(Date *start_date, break; case 3: log_debug("get hourly summary\n"); + ret_val = get_hourly_summary(start_date, end_date); break; case 4: log_debug("get minute summary data\n");