diff --git a/data-template/index.html b/data-template/index.html
index 85a5495..da863f0 100644
--- a/data-template/index.html
+++ b/data-template/index.html
@@ -9,6 +9,10 @@
+
+
+
+
🌥
diff --git a/data-template/script.js b/data-template/script.js
index 9dcc53b..6c85ed9 100644
--- a/data-template/script.js
+++ b/data-template/script.js
@@ -48,7 +48,7 @@ function showTimer(id, timer) {
row.appendChild(enabled);
var popup_button = document.createElement('td');
- popup_button.innerHTML = '';
+ popup_button.innerHTML = '';
popup_button.id = 'popup-' + id;
row.appendChild(popup_button);
@@ -68,7 +68,7 @@ function showTimer(id, timer) {
document.getElementById('timers').getElementsByTagName('tbody')[0].appendChild(row);
}
-function showPopup(id) {
+function showPopup() {
var overlay = document.createElement('div');
overlay.className = 'overlay';
overlay.onclick = function() {
@@ -89,6 +89,73 @@ function showPopup(id) {
modal.appendChild(closeButton);
+ return modal;
+}
+
+function showLogs() {
+ var modal = showPopup();
+
+ var text = document.createElement('h2');
+ text.className = 'schedule-header';
+ text.textContent = 'Logs 📜';
+ modal.appendChild(text);
+
+ var body = document.createElement('div');
+ body.className = 'log-body';
+ modal.appendChild(body);
+
+ // Show IFrame of /logging
+ var iframe = document.createElement('iframe');
+ iframe.src = url + '/logging';
+ iframe.className = 'logging-iframe';
+ body.appendChild(iframe);
+
+ // Refresh button
+ var button_div = document.createElement('div');
+ button_div.className = 'refresh-div';
+ modal.appendChild(button_div);
+
+ var refresh_button = document.createElement('button');
+ refresh_button.innerHTML = 'Refresh';
+ refresh_button.className = 'refresh-button';
+ refresh_button.onclick = function() {
+ iframe.src = url + '/logging';
+ }
+ button_div.appendChild(refresh_button);
+
+ var link_button = document.createElement('button');
+ link_button.innerHTML = 'Open in new tab';
+ link_button.className = 'link-button';
+ link_button.onclick = function() {
+ window.open(url + '/logging', '_blank');
+ }
+ button_div.appendChild(link_button);
+
+ var clear_button = document.createElement('button');
+ clear_button.innerHTML = 'Clear logs';
+ clear_button.className = 'clear-button';
+ clear_button.onclick = function() {
+ fetch(url + '/reset_logs')
+ .then(response => {
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return response.text();
+ })
+ .catch((error) => {
+ console.error('Error:', error);
+ });
+
+ iframe.src = url + '/logging';
+ }
+ button_div.appendChild(clear_button);
+
+ document.body.appendChild(modal);
+}
+
+function showWeekdayConfig(id) {
+ var modal = showPopup();
+
var text = document.createElement('h2');
text.className = 'schedule-header';
text.textContent = '⏰ ' + timers[id].time + ' - ' + timers[id].name;
diff --git a/data-template/style.css b/data-template/style.css
index 8fb8b74..69684cd 100644
--- a/data-template/style.css
+++ b/data-template/style.css
@@ -539,4 +539,35 @@ input[type="number"] {
font-style: italic;
display: flex;
justify-content: center;
+}
+
+.logging-iframe {
+ border-radius: 15px;
+ overflow: hidden;
+ border: 2px solid black;
+ box-shadow: #333 0px 0px 10px;
+ width: 100%;
+ height: 100%;
+}
+
+
+.log-button {
+ position: fixed;
+ top: 10px;
+ left: 10px;
+ border: none;
+}
+
+.log-body {
+ width: 80%;
+ height: 68%;
+ margin: 20px auto;
+ border-color: #007bff;
+ border-radius: 10px;
+ border-width: 2px;
+}
+
+.refresh-div {
+ display: flex;
+ justify-content: center;
}
\ No newline at end of file
diff --git a/lib/LoggingManager/LoggingManager.cpp b/lib/LoggingManager/LoggingManager.cpp
index c6f294d..c49a6e4 100644
--- a/lib/LoggingManager/LoggingManager.cpp
+++ b/lib/LoggingManager/LoggingManager.cpp
@@ -36,6 +36,40 @@ bool LoggingManager::is_initialized()
return this->initialized;
}
+bool LoggingManager::reset_logs()
+{
+ // check if file exists
+ if (!LittleFS.exists(this->filename))
+ {
+ File file = LittleFS.open(this->filename, "w");
+ file.close();
+
+ this->file_line_counter = 0;
+
+ this->log(LOG_LEVEL_INFO, "No log file found, new log file was created");
+
+ return true;
+ }
+
+ // delete file
+ if (LittleFS.remove(this->filename))
+ {
+ // create file
+ File file = LittleFS.open(this->filename, "w");
+ file.close();
+
+ this->file_line_counter = 0;
+
+ this->log(LOG_LEVEL_INFO, "Log file was reset");
+
+ return true;
+ }
+
+ this->log(LOG_LEVEL_ERROR, "Log file could not be reset");
+
+ return false;
+}
+
String LoggingManager::log_string(log_level_t level)
{
String log_message = "(";
diff --git a/lib/LoggingManager/LoggingManager.h b/lib/LoggingManager/LoggingManager.h
index 7ef681a..2fb7210 100644
--- a/lib/LoggingManager/LoggingManager.h
+++ b/lib/LoggingManager/LoggingManager.h
@@ -46,6 +46,7 @@ class LoggingManager
void begin();
bool is_initialized();
+ bool reset_logs();
void log(log_level_t level, const char *message);
void log(log_level_t level, String message);
diff --git a/src/main.cpp b/src/main.cpp
index 1c6e807..2ddad59 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -182,7 +182,7 @@ void setup()
int line_counter = loggingManager.count_log_lines() + 1;
int file_line_counter = loggingManager.get_file_line_counter() + 1;
- loggingManager.start_seq(LOG_LEVEL_INFO_FILE, "GET /log_lines [");
+ loggingManager.start_seq(LOG_LEVEL_INFO, "GET /log_lines [");
loggingManager.append_seq(line_counter);
loggingManager.append_seq(", ");
loggingManager.append_seq(file_line_counter);
@@ -242,7 +242,6 @@ void setup()
server.on("/sleep", HTTP_GET, [](AsyncWebServerRequest *request)
{
loggingManager.log(LOG_LEVEL_INFO, "GET /sleep");
- loggingManager.log(LOG_LEVEL_INFO_FILE, "Schlafmodus aktiviert");
goToSleep();
@@ -311,6 +310,14 @@ void setup()
request->send(200); });
+ // reset the logs (delete and create new file)
+ server.on("/reset_logs", HTTP_GET, [](AsyncWebServerRequest *request)
+ {
+ loggingManager.log(LOG_LEVEL_INFO, "GET /reset_logs");
+ loggingManager.reset_logs();
+
+ request->send(200); });
+
// get autosleep remaining time
server.on("/autosleep", HTTP_GET, [](AsyncWebServerRequest *request)
{
@@ -385,6 +392,8 @@ void goToSleep()
// Set next alert
alertManager.set_next_alert();
+ loggingManager.log(LOG_LEVEL_INFO_FILE, "Go to sleep");
+
// go to sleep
#if defined(ESP32DEV)
esp_deep_sleep_start();