Register /gpu-fan handler in setup() using global server variable

- Add webHandlerRegistered flag to prevent duplicate registration
- Call registerWebHandler() in both setup() and connected()
- Use global 'server' variable directly with lambda
- Removed unused methods
This commit is contained in:
dawie 2026-01-30 19:23:36 +02:00
parent e5b02c65e8
commit 7816ecf949

View File

@ -41,6 +41,7 @@ class GPUFanControllerUsermod : public Usermod {
// Configuration
bool enabled = true;
bool initDone = false;
bool webHandlerRegistered = false;
int8_t pwmPin = PWM_FAN_PIN;
#ifdef ARDUINO_ARCH_ESP32
@ -219,9 +220,16 @@ class GPUFanControllerUsermod : public Usermod {
}
}
// Serve the curve editor page
static void serveGpuFanPage(AsyncWebServerRequest *request) {
// Register web handler - call this once
void registerWebHandler() {
if (webHandlerRegistered) return;
server.on("/gpu-fan", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", GPU_FAN_HTML);
});
webHandlerRegistered = true;
DEBUG_PRINTLN(F("GPU Fan: Web handler registered at /gpu-fan"));
}
public:
@ -231,11 +239,16 @@ class GPUFanControllerUsermod : public Usermod {
setFanPWM((fixedSpeedPct * 255) / 100); // Initial speed
lastTempUpdate = millis();
initDone = true;
// Register web handler immediately during setup
registerWebHandler();
DEBUG_PRINTLN(F("GPU Fan Controller initialized"));
}
void connected() override {
// Nothing special needed on WiFi connect
// Also try to register here in case setup was too early
registerWebHandler();
}
void loop() override {
@ -265,16 +278,6 @@ class GPUFanControllerUsermod : public Usermod {
return false;
}
// Register the /gpu-fan endpoint
void addToJsonState(JsonObject& root) override {
// This is called during setup, we can use it to register our endpoint
}
// Called when web server is ready - register our custom page
void onStateChange(uint8_t callMode) override {
// Not the best place, but works
}
// Add info to the WLED info panel
void addToJsonInfo(JsonObject& root) override {
JsonObject user = root["u"];
@ -291,7 +294,7 @@ class GPUFanControllerUsermod : public Usermod {
uiDomString += F("}});\"><i class=\"icons ");
uiDomString += enabled ? "on" : "off";
uiDomString += F("\">&#xe08f;</i></button>");
uiDomString += F(" <a href=\"/gpu-fan\" style=\"color:#e94560;font-size:0.9em;\">[Curve Editor]</a>");
uiDomString += F(" <a href=\"/gpu-fan\" target=\"_blank\" style=\"color:#e94560;font-size:0.9em;\">[Editor]</a>");
infoArr.add(uiDomString);
if (enabled) {
@ -450,11 +453,6 @@ class GPUFanControllerUsermod : public Usermod {
return !top["curve-t1"].isNull();
}
// Register web handler
void addToWebHandlers(AsyncWebServer& server) {
server.on("/gpu-fan", HTTP_GET, serveGpuFanPage);
}
uint16_t getId() override {
return USERMOD_ID_UNSPECIFIED; // Change this if you add to const.h
}