increase vTick for time screen, add lost IP event handler and system status to web interface

This commit is contained in:
Djuri Baars 2023-11-03 16:03:34 +01:00
parent 7cc524f75f
commit 5c165633d1
7 changed files with 49 additions and 3 deletions

View File

@ -20,6 +20,7 @@ $form-range-track-bg: #fff;
@import "../node_modules/bootstrap/scss/navbar"; @import "../node_modules/bootstrap/scss/navbar";
@import "../node_modules/bootstrap/scss/nav"; @import "../node_modules/bootstrap/scss/nav";
@import "../node_modules/bootstrap/scss/card"; @import "../node_modules/bootstrap/scss/card";
@import "../node_modules/bootstrap/scss/progress";
@import "../node_modules/bootstrap/scss/helpers"; @import "../node_modules/bootstrap/scss/helpers";
@import "../node_modules/bootstrap/scss/utilities/api"; @import "../node_modules/bootstrap/scss/utilities/api";

View File

@ -57,6 +57,20 @@
</span> </span>
</p> </p>
</div> </div>
<hr>
<div>
<div class="progress" role="progressbar" aria-label="Memory usage" aria-valuenow="{{ memUsage }}" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar progress-bar-striped" style="width: {{ memUsage }}%">{{ memUsage }}%</div>
</div>
<div class="d-flex justify-content-between">
<div>Memory usage</div>
<div>{{ memFree }} / {{ memTotal }} kB</div>
</div>
</div>
<hr>
<div>
<p>Uptime: {{#if uptime.h }}{{ uptime.h }}h {{/if}}{{ uptime.m }}m {{ uptime.s }}s</p>
</div>
</div> </div>
</div> </div>
</script> </script>

View File

@ -2,6 +2,23 @@ import './helpers.js';
var screens = ["Block Height", "Moscow Time", "Ticker", "Time", "Halving countdown"]; var screens = ["Block Height", "Moscow Time", "Ticker", "Time", "Halving countdown"];
toTime = (secs) => {
var hours = Math.floor(secs / (60 * 60));
var divisor_for_minutes = secs % (60 * 60);
var minutes = Math.floor(divisor_for_minutes / 60);
var divisor_for_seconds = divisor_for_minutes % 60;
var seconds = Math.ceil(divisor_for_seconds);
var obj = {
"h": hours,
"m": minutes,
"s": seconds
};
return obj;
}
getBcStatus = () => { getBcStatus = () => {
fetch('/api/status', { fetch('/api/status', {
method: 'get' method: 'get'
@ -11,7 +28,7 @@ getBcStatus = () => {
var source = document.getElementById("entry-template").innerHTML; var source = document.getElementById("entry-template").innerHTML;
var template = Handlebars.compile(source); var template = Handlebars.compile(source);
var context = { timerRunning: jsonData.timerRunning, currentScreen: jsonData.currentScreen, rendered: jsonData.rendered, data: jsonData.data, screens: screens, ledStatus: jsonData.ledStatus ? jsonData.ledStatus.map((t) => (t).toString(16)) : [] }; var context = { timerRunning: jsonData.timerRunning, memUsage: Math.round(jsonData.espFreeHeap / jsonData.espHeapSize * 100), memFree: (jsonData.espFreeHeap / 1000), memTotal: (jsonData.espHeapSize / 1000), uptime: toTime(jsonData.espUptime), currentScreen: jsonData.currentScreen, rendered: jsonData.rendered, data: jsonData.data, screens: screens, ledStatus: jsonData.ledStatus ? jsonData.ledStatus.map((t) => (t).toString(16)) : [] };
document.getElementById('output').innerHTML = template(context); document.getElementById('output').innerHTML = template(context);

View File

@ -64,7 +64,7 @@ void setupComponents()
// Serial.println(F("Leds should be on")); // Serial.println(F("Leds should be on"));
#ifndef NO_MCP #ifndef NO_MCP
if (!mcp.begin_I2C()) if (!mcp.begin_I2C(0x20))
{ {
Serial.println(F("Error MCP23017")); Serial.println(F("Error MCP23017"));
pixels.setPixelColor(0, pixels.Color(255, 0, 0)); pixels.setPixelColor(0, pixels.Color(255, 0, 0));
@ -143,6 +143,8 @@ void setupWifi()
} }
#endif #endif
//WiFi.persistent(true);
WiFi.enableLongRange(false);
setupSoftAP(); setupSoftAP();
wm.setConfigPortalTimeout(preferences.getUInt("wpTimeout", 600)); wm.setConfigPortalTimeout(preferences.getUInt("wpTimeout", 600));
@ -156,6 +158,12 @@ void setupWifi()
softAP_password.c_str()); }); softAP_password.c_str()); });
bool ac = wm.autoConnect(softAP_SSID.c_str(), softAP_password.c_str()); bool ac = wm.autoConnect(softAP_SSID.c_str(), softAP_password.c_str());
WiFi.onEvent(onWifiLostIp, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_LOST_IP);
}
void onWifiLostIp(WiFiEvent_t event, WiFiEventInfo_t info) {
ESP.restart();
} }
void setupPreferences() void setupPreferences()

View File

@ -28,6 +28,7 @@ void setCurrentScreen(uint screen);
void handleScreenTasks(uint screen); void handleScreenTasks(uint screen);
void showNetworkSettings(); void showNetworkSettings();
void toggleScreenTimer(); void toggleScreenTimer();
void onWifiLostIp(WiFiEvent_t event, WiFiEventInfo_t info);
void timebasedChangeTask(void *parameter); void timebasedChangeTask(void *parameter);

View File

@ -76,6 +76,11 @@ void onApiStatus(AsyncWebServerRequest *request)
root["currentScreen"] = String(getCurrentScreen()); root["currentScreen"] = String(getCurrentScreen());
root["timerRunning"] = timerRunning; root["timerRunning"] = timerRunning;
root["numScreens"] = NUM_SCREENS; root["numScreens"] = NUM_SCREENS;
root["espUptime"] = esp_timer_get_time() / 1000000;
root["espFreeHeap"] = ESP.getFreeHeap();
root["espHeapSize"] = ESP.getHeapSize();
root["espFreePsram"] = ESP.getFreePsram();
root["espPsramSize"] = ESP.getPsramSize();
JsonArray data = root.createNestedArray("data"); JsonArray data = root.createNestedArray("data");
JsonArray rendered = root.createNestedArray("rendered"); JsonArray rendered = root.createNestedArray("rendered");
String epdContent[NUM_SCREENS]; String epdContent[NUM_SCREENS];

View File

@ -28,7 +28,7 @@ void minuteTask(void * parameter) {
if(rtc.getSecond() != 0) { // Reset the event triggered flag if the second is not 0 if(rtc.getSecond() != 0) { // Reset the event triggered flag if the second is not 0
eventTriggered = false; eventTriggered = false;
} }
vTaskDelay(pdMS_TO_TICKS(500)); // Sleep for 500 milliseconds to avoid busy waiting vTaskDelay(pdMS_TO_TICKS(1000)); // Sleep for 1000 milliseconds to avoid busy waiting
#endif #endif
} }
} }