mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-10 18:24:27 +05:00
feat: added GPIO inversion setting for extpump
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
10
src/utils.h
10
src/utils.h
@@ -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>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user