feat: added GPIO inversion setting for extpump

This commit is contained in:
Yurii
2025-10-31 21:08:35 +03:00
parent 5667199988
commit b9010643f0
9 changed files with 58 additions and 6 deletions

View File

@@ -609,7 +609,12 @@ protected:
if (GPIO_IS_VALID(settings.externalPump.gpio)) {
configuredGpio = settings.externalPump.gpio;
pinMode(configuredGpio, OUTPUT);
digitalWrite(configuredGpio, LOW);
digitalWrite(
configuredGpio,
settings.externalPump.invertState
? HIGH
: LOW
);
} else if (configuredGpio != GPIO_IS_NOT_CONFIGURED) {
configuredGpio = GPIO_IS_NOT_CONFIGURED;
@@ -637,7 +642,12 @@ protected:
if (!settings.externalPump.use) {
if (vars.externalPump.state) {
digitalWrite(configuredGpio, LOW);
digitalWrite(
configuredGpio,
settings.externalPump.invertState
? HIGH
: LOW
);
vars.externalPump.state = false;
vars.externalPump.lastEnabledTime = millis();
@@ -650,7 +660,12 @@ protected:
if (vars.externalPump.state && !this->heatingEnabled) {
if (this->extPumpStartReason == MainTask::PumpStartReason::HEATING && millis() - this->heatingDisabledTime > (settings.externalPump.postCirculationTime * 1000u)) {
digitalWrite(configuredGpio, LOW);
digitalWrite(
configuredGpio,
settings.externalPump.invertState
? HIGH
: LOW
);
vars.externalPump.state = false;
vars.externalPump.lastEnabledTime = millis();
@@ -658,7 +673,12 @@ protected:
Log.sinfoln(FPSTR(L_EXTPUMP), F("Disabled: expired post circulation time"));
} else if (this->extPumpStartReason == MainTask::PumpStartReason::ANTISTUCK && millis() - this->externalPumpStartTime >= (settings.externalPump.antiStuckTime * 1000u)) {
digitalWrite(configuredGpio, LOW);
digitalWrite(
configuredGpio,
settings.externalPump.invertState
? HIGH
: LOW
);
vars.externalPump.state = false;
vars.externalPump.lastEnabledTime = millis();
@@ -674,7 +694,12 @@ protected:
this->externalPumpStartTime = millis();
this->extPumpStartReason = MainTask::PumpStartReason::HEATING;
digitalWrite(configuredGpio, HIGH);
digitalWrite(
configuredGpio,
settings.externalPump.invertState
? LOW
: HIGH
);
Log.sinfoln(FPSTR(L_EXTPUMP), F("Enabled: heating on"));
@@ -683,7 +708,12 @@ protected:
this->externalPumpStartTime = millis();
this->extPumpStartReason = MainTask::PumpStartReason::ANTISTUCK;
digitalWrite(configuredGpio, HIGH);
digitalWrite(
configuredGpio,
settings.externalPump.invertState
? LOW
: HIGH
);
Log.sinfoln(FPSTR(L_EXTPUMP), F("Enabled: anti stuck"));
}

View File

@@ -162,6 +162,7 @@ struct Settings {
struct {
bool use = false;
uint8_t gpio = DEFAULT_EXT_PUMP_GPIO;
bool invertState = false;
unsigned short postCirculationTime = 600;
unsigned int antiStuckInterval = 2592000;
unsigned short antiStuckTime = 300;

View File

@@ -542,6 +542,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) {
auto externalPump = dst[FPSTR(S_EXTERNAL_PUMP)].to<JsonObject>();
externalPump[FPSTR(S_USE)] = src.externalPump.use;
externalPump[FPSTR(S_GPIO)] = src.externalPump.gpio;
externalPump[FPSTR(S_INVERT_STATE)] = src.externalPump.invertState;
externalPump[FPSTR(S_POST_CIRCULATION_TIME)] = roundf(src.externalPump.postCirculationTime / 60, 0);
externalPump[FPSTR(S_ANTI_STUCK_INTERVAL)] = roundf(src.externalPump.antiStuckInterval / 86400, 0);
externalPump[FPSTR(S_ANTI_STUCK_TIME)] = roundf(src.externalPump.antiStuckTime / 60, 0);
@@ -1492,6 +1493,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false
}
}
if (src[FPSTR(S_EXTERNAL_PUMP)][FPSTR(S_INVERT_STATE)].is<bool>()) {
bool value = src[FPSTR(S_EXTERNAL_PUMP)][FPSTR(S_INVERT_STATE)].as<bool>();
if (value != dst.externalPump.invertState) {
dst.externalPump.invertState = value;
changed = true;
}
}
if (!src[FPSTR(S_EXTERNAL_PUMP)][FPSTR(S_POST_CIRCULATION_TIME)].isNull()) {
unsigned short value = src[FPSTR(S_EXTERNAL_PUMP)][FPSTR(S_POST_CIRCULATION_TIME)].as<unsigned short>();