removed lambda function

This commit is contained in:
Ralf Bauer 2023-06-13 22:49:07 +02:00
parent ec788d6a30
commit 925c434e61
6 changed files with 71 additions and 65 deletions

View File

@ -12,7 +12,7 @@ public:
void loop(); void loop();
bool write(float energy); bool write(float energy);
struct Data { struct pvData {
uint8_t tm_year; uint8_t tm_year;
uint8_t tm_mon; uint8_t tm_mon;
uint8_t tm_mday; uint8_t tm_mday;
@ -22,6 +22,8 @@ public:
private: private:
void onDatabase(AsyncWebServerRequest* request); void onDatabase(AsyncWebServerRequest* request);
static size_t readchunk(uint8_t* buffer, size_t maxLen, size_t index);
static size_t readchunk1(uint8_t* buffer, size_t maxLen, size_t index);
AsyncWebServer* _server; AsyncWebServer* _server;
}; };

View File

@ -48,7 +48,7 @@ bool WebApiDatabaseClass::write(float energy)
return (false); return (false);
// MessageOutput.println("Energy difference > 0"); // MessageOutput.println("Energy difference > 0");
struct Data d; struct pvData d;
d.tm_hour = old_hour; d.tm_hour = old_hour;
old_hour = timeinfo.tm_hour; old_hour = timeinfo.tm_hour;
d.tm_year = timeinfo.tm_year - 100; // year counting from 2000 d.tm_year = timeinfo.tm_year - 100; // year counting from 2000
@ -70,63 +70,73 @@ bool WebApiDatabaseClass::write(float energy)
MessageOutput.println("Failed to append to database."); MessageOutput.println("Failed to append to database.");
return (false); return (false);
} }
f.write((const uint8_t*)&d, sizeof(Data)); f.write((const uint8_t*)&d, sizeof(pvData));
f.close(); f.close();
// MessageOutput.println("Write data point."); // MessageOutput.println("Write data point.");
return (true); return (true);
} }
// read chunk from database
size_t WebApiDatabaseClass::readchunk(uint8_t* buffer, size_t maxLen, size_t index)
{
static bool first = true;
static bool last = false;
static File f;
uint8_t* pr = buffer;
uint8_t* pre = pr + maxLen - 50;
size_t r;
struct pvData d;
if (first) {
f = LittleFS.open(DATABASE_FILENAME, "r", false);
if (!f) {
return (0);
}
*pr++ = '[';
}
while (true) {
r = f.read((uint8_t*)&d, sizeof(pvData)); // read from database
if (r <= 0) {
if (last) {
f.close();
first = true;
last = false;
return (0); // end transmission
}
last = true;
*pr++ = ']';
return (pr - buffer); // last chunk
}
if (first) {
first = false;
} else {
*pr++ = ',';
}
int len = sprintf((char*)pr, "[%d,%d,%d,%d,%f]",
d.tm_year, d.tm_mon, d.tm_mday, d.tm_hour, d.energy);
if (len >= 0) {
pr += len;
}
if (pr >= pre)
return (pr - buffer); // buffer full, return number of chars
}
}
size_t WebApiDatabaseClass::readchunk1(uint8_t* buffer, size_t maxLen, size_t index)
{
size_t x = readchunk(buffer, maxLen, index);
MessageOutput.println("----------");
MessageOutput.println(maxLen);
MessageOutput.println(x);
return(x);
}
void WebApiDatabaseClass::onDatabase(AsyncWebServerRequest* request) void WebApiDatabaseClass::onDatabase(AsyncWebServerRequest* request)
{ {
if (!WebApi.checkCredentialsReadonly(request)) { if (!WebApi.checkCredentialsReadonly(request)) {
return; return;
} }
AsyncWebServerResponse* response = request->beginChunkedResponse("application/json", readchunk);
AsyncWebServerResponse* response = request->beginChunkedResponse("application/json",
[](uint8_t* buffer, size_t maxLen, size_t index) -> size_t {
static bool first = true;
static bool last = false;
static File f;
uint8_t* pr = buffer;
uint8_t* pre = pr + maxLen - 30;
size_t r;
struct Data d;
if (first) {
f = LittleFS.open(DATABASE_FILENAME, "r", false);
if (!f) {
return (0);
}
*pr++ = '[';
}
while(true) {
r = f.read((uint8_t*)&d, sizeof(Data)); // read from database
if (r <= 0) {
if (last) {
f.close();
first = true;
last = false;
return (0); // end transmission
}
last = true;
*pr++ = ']';
return (pr - buffer); // last chunk
}
if (first) {
first = false;
} else {
*pr++ = ',';
}
int len = sprintf((char*)pr, "[%d,%d,%d,%d,%f]",
d.tm_year, d.tm_mon, d.tm_mday, d.tm_hour, d.energy);
if (len >= 0) {
pr += len;
}
if (pr >= pre)
return (pr - buffer); // buffer full, return number of chars
}
});
request->send(response); request->send(response);
} }

View File

@ -1,11 +1,9 @@
<template> <template>
<div class="card" :class="{}"> <div class="card" :class="{}">
<div v-if="dataBase.valid_data"> <div class="card-header">
<div class="card-header"> {{ $t('chart.LastDay') }}
{{ $t('chart.LastDay') }}
</div>
<GoogleChart />
</div> </div>
<GoogleChart />
</div> </div>
</template> </template>
@ -20,9 +18,9 @@ export const type_col = 'ColumnChart';
export const options_col = { export const options_col = {
height: 300, height: 300,
chartArea: { chartArea: {
top: 25, top: 25,
width: '85%', width: '85%',
height: '80%' height: '80%'
}, },
bar: { bar: {
groupWidth: '100%' groupWidth: '100%'

View File

@ -1,12 +1,8 @@
<template> <template>
<div class="card" :class="{}"> <div class="card" :class="{}">
<div v-if="dataBase.valid_data"> <div class="card-header">
<div class="card-header">
</div>
<div>
<GoogleChart />
</div>
</div> </div>
<GoogleChart />
</div> </div>
</template> </template>

View File

@ -16,7 +16,7 @@
</button> </button>
</div> </div>
</div> </div>
<BarChart v-bind:dataBase="dataBase" dataLoading="dataLoading" /> <BarChart v-bind:dataBase="dataBase" />
<CalendarChart v-bind:dataBase="dataBase" /> <CalendarChart v-bind:dataBase="dataBase" />
<div class="tab-content" id="v-pills-tabContent" :class="{ <div class="tab-content" id="v-pills-tabContent" :class="{

Binary file not shown.