diff --git a/usermods/PWM_fan/usermod_PWM_fan.h b/usermods/PWM_fan/usermod_PWM_fan.h index 6dfe12fa..fec2e726 100644 --- a/usermods/PWM_fan/usermod_PWM_fan.h +++ b/usermods/PWM_fan/usermod_PWM_fan.h @@ -103,6 +103,7 @@ class PWMFanUsermod : public Usermod { // https://randomnerdtutorials.com/esp32-pwm-arduino-ide/ void initPWMfan(void) { if (pwmPin < 0 || !pinManager.allocatePin(pwmPin, true, PinOwner::UM_Unspecified)) { + enabled = false; pwmPin = -1; return; } @@ -218,11 +219,23 @@ class PWMFanUsermod : public Usermod { * Below it is shown how this could be used for e.g. a light sensor */ void addToJsonInfo(JsonObject& root) { + JsonObject user = root["u"]; + if (user.isNull()) user = root.createNestedObject("u"); + + JsonArray infoArr = user.createNestedArray(FPSTR(_name)); + String uiDomString = F(""); + infoArr.add(uiDomString); + if (enabled) { - JsonObject user = root["u"]; - if (user.isNull()) user = root.createNestedObject("u"); -// if (!tempUM) { - JsonArray infoArr = user.createNestedArray(F("Fan speed [%]")); + JsonArray infoArr = user.createNestedArray(F("Manual")); String uiDomString = F("
"); // infoArr.add(uiDomString); -// } + + JsonArray data = user.createNestedArray(F("Speed")); if (tachoPin >= 0) { - JsonArray data = user.createNestedArray(FPSTR(_name)); data.add(last_rpm); data.add(F("rpm")); } else { - JsonArray data = user.createNestedArray(FPSTR(_name)); if (lockFan) data.add(F("locked")); else data.add(F("auto")); } @@ -256,14 +268,19 @@ class PWMFanUsermod : public Usermod { * Values in the state object may be modified by connected clients */ void readFromJsonState(JsonObject& root) { - if (!initDone || !enabled) return; // prevent crash on boot applyPreset() + if (!initDone) return; // prevent crash on boot applyPreset() JsonObject usermod = root[FPSTR(_name)]; if (!usermod.isNull()) { - if (!usermod[FPSTR(_speed)].isNull() && usermod[FPSTR(_speed)].is()) { - int pwmValuePct = usermod[FPSTR(_speed)].as(); - updateFanSpeed((MAX(0,MIN(100,pwmValuePct)) * 255) / 100); + if (usermod[FPSTR(_enabled)].is()) { + enabled = usermod[FPSTR(_enabled)].as(); + if (!enabled) updateFanSpeed(0); } - if (!usermod[FPSTR(_lock)].isNull() && usermod[FPSTR(_lock)].is()) { + if (enabled && !usermod[FPSTR(_speed)].isNull() && usermod[FPSTR(_speed)].is()) { + pwmValuePct = usermod[FPSTR(_speed)].as(); + updateFanSpeed((constrain(pwmValuePct,0,100) * 255) / 100); + if (pwmValuePct) lockFan = true; + } + if (enabled && !usermod[FPSTR(_lock)].isNull() && usermod[FPSTR(_lock)].is()) { lockFan = usermod[FPSTR(_lock)].as(); } }