chunked response working a charm
This commit is contained in:
parent
d2eee55953
commit
a0b01f4839
@ -11,7 +11,7 @@ void collector_loop();
|
|||||||
// Set delay between sensor readings.
|
// Set delay between sensor readings.
|
||||||
#define DELAY 3000 //3s , longer and the web requests time-out
|
#define DELAY 3000 //3s , longer and the web requests time-out
|
||||||
#define MINUTE 120 // 6 min average
|
#define MINUTE 120 // 6 min average
|
||||||
#define WEEK 1000 // 4 days worth of 6min sample
|
#define WEEK 1500 // 7 days worth of 6min sample
|
||||||
#define MONTH 750 // 1 month of hourly sample
|
#define MONTH 750 // 1 month of hourly sample
|
||||||
#define PER_HOUR 10
|
#define PER_HOUR 10
|
||||||
|
|
||||||
@ -28,9 +28,6 @@ protected:
|
|||||||
|
|
||||||
void add_month(int from ) ;
|
void add_month(int from ) ;
|
||||||
|
|
||||||
String one_week( float[] );
|
|
||||||
String one_month( float[] );
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
float week_in[WEEK];
|
float week_in[WEEK];
|
||||||
float week_out[WEEK];
|
float week_out[WEEK];
|
||||||
@ -41,8 +38,8 @@ public:
|
|||||||
void add_week(float in , float out) ;
|
void add_week(float in , float out) ;
|
||||||
void add(float in , float out) ;
|
void add(float in , float out) ;
|
||||||
|
|
||||||
String week_data();
|
String week_data( int at);
|
||||||
String month_data();
|
String month_data(int at);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -98,42 +98,19 @@ void Collector::add_month(int from){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String Collector::one_week(float week[]){
|
String Collector::week_data(int at){
|
||||||
String data = "[";
|
if( at < WEEK){
|
||||||
data += String(week[0] , 1) ;
|
return String(week_in[at] , 2) ;
|
||||||
for( int a = 1; a < WEEK ; a += 1 ) {
|
}else{
|
||||||
data += "," ;
|
return String(week_out[at - WEEK] , 2) ;
|
||||||
data += String(week[a] , 1) ;
|
|
||||||
}
|
}
|
||||||
data += "]";
|
|
||||||
return data ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String Collector::week_data(){
|
|
||||||
String data = "[";
|
|
||||||
data += one_week(week_in) ;
|
|
||||||
data += "," ;
|
|
||||||
// data += one_week(week_out) ;
|
|
||||||
// data += "]";
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
String Collector::one_month(float month[]){
|
String Collector::month_data(int at){
|
||||||
String data = "[";
|
if( at < MONTH){
|
||||||
data += String(month[0] , 1);
|
return String(month_in[at] , 2) ;
|
||||||
for( int a = 1; a < MONTH ; a += 1 ) {
|
}else{
|
||||||
data += "," ;
|
return String(month_out[at - MONTH] , 2) ;
|
||||||
data += String(month[a], 1) ;
|
|
||||||
}
|
}
|
||||||
data += "]";
|
|
||||||
return data ;
|
|
||||||
}
|
|
||||||
|
|
||||||
String Collector::month_data(){
|
|
||||||
String data = "[";
|
|
||||||
data += one_month(month_in) ;
|
|
||||||
// data += "," ;
|
|
||||||
// data += one_month(month_out) ;
|
|
||||||
data += "]";
|
|
||||||
return data ;
|
|
||||||
}
|
}
|
@ -21,35 +21,65 @@ String getContentType(String filename){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// AsyncCallbackJsonWebHandler* monthly = new AsyncCallbackJsonWebHandler("/monthly");
|
|
||||||
// monthly.onRequest( [](AsyncWebServerRequest *request, JsonVariant &json) {
|
|
||||||
// const JsonArray& root_array = json.as<JsonArray>();
|
|
||||||
// JsonArray nested = root_array.createNestedArray();
|
|
||||||
// copyArray(collector.month_in , MONTH , nested);
|
|
||||||
// nested = root_array.createNestedArray();
|
|
||||||
// copyArray(collector.month_out , MONTH , nested);
|
|
||||||
// });
|
|
||||||
|
|
||||||
void notFound(AsyncWebServerRequest *request) {
|
void notFound(AsyncWebServerRequest *request) {
|
||||||
request->send(404, "text/plain;charset=utf-8", "Not found");
|
request->send(404, "text/plain;charset=utf-8", "Not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int week_counter = 0;
|
||||||
|
int month_counter = 0;
|
||||||
|
|
||||||
void server_setup(){
|
void server_setup(){
|
||||||
LittleFS.begin();
|
LittleFS.begin();
|
||||||
|
|
||||||
server.on("/weekly", HTTP_ANY, [](AsyncWebServerRequest * request) {
|
server.on("/weekly", HTTP_ANY, [](AsyncWebServerRequest * request) {
|
||||||
DEBUG_OUT.println("weekly");
|
DEBUG_OUT.println("weekly start");
|
||||||
String data = collector.week_data();
|
|
||||||
request->send(200, "application/json;charset=utf-8", data);
|
AsyncWebServerResponse *response = request->beginChunkedResponse("application/json", [](uint8_t *buffer, size_t maxLen, size_t index) -> size_t {
|
||||||
data.clear();
|
|
||||||
|
if(week_counter == 2*WEEK){ // sent all data (ret 0), reset counter
|
||||||
|
week_counter = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
String to_send = "";
|
||||||
|
if(week_counter == 0 ) to_send = "[[";
|
||||||
|
else if(week_counter == WEEK) to_send = "],[";
|
||||||
|
else to_send += ",";
|
||||||
|
to_send += collector.week_data(week_counter);
|
||||||
|
if(week_counter == (2*WEEK - 1)) to_send += "]]";
|
||||||
|
week_counter++;
|
||||||
|
//send the data, copy to buffer
|
||||||
|
to_send.getBytes(buffer, maxLen);
|
||||||
|
return to_send.length();
|
||||||
});
|
});
|
||||||
server.on("/monthly", HTTP_ANY, [](AsyncWebServerRequest * request) {
|
request->send(response);
|
||||||
String data = collector.month_data();
|
DEBUG_OUT.println("weekly end");
|
||||||
request->send(200, "application/json;charset=utf-8", data);
|
|
||||||
data.clear();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.on("/monthly", HTTP_ANY, [](AsyncWebServerRequest * request) {
|
||||||
|
DEBUG_OUT.println("monthly start");
|
||||||
|
|
||||||
|
AsyncWebServerResponse *response = request->beginChunkedResponse("application/json", [](uint8_t *buffer, size_t maxLen, size_t index) -> size_t {
|
||||||
|
|
||||||
|
if(month_counter == 2*MONTH){ // sent all data (ret 0), reset counter
|
||||||
|
month_counter = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
String to_send = "";
|
||||||
|
if(month_counter == 0 ) to_send = "[[";
|
||||||
|
else if(month_counter == MONTH) to_send = "],[";
|
||||||
|
else to_send += ",";
|
||||||
|
// getting the acual data, just one point at a time (for simplicity, hope speed is ok)
|
||||||
|
to_send += collector.month_data(month_counter);
|
||||||
|
if(month_counter == (2*MONTH - 1)) to_send += "]]";
|
||||||
|
month_counter++;
|
||||||
|
//send the data, copy to buffer
|
||||||
|
to_send.getBytes(buffer, maxLen);
|
||||||
|
return to_send.length();
|
||||||
|
});
|
||||||
|
request->send(response);
|
||||||
|
DEBUG_OUT.println("monthly done");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
|
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||||
DEBUG_OUT.println("Index.html");
|
DEBUG_OUT.println("Index.html");
|
||||||
|
Loading…
Reference in New Issue
Block a user