gridPowerDelta Relay FIX
This commit is contained in:
parent
465d4e0624
commit
ccc9eea312
44
src/Relay.h
44
src/Relay.h
@ -27,7 +27,7 @@ class Relay final : public Output {
|
|||||||
|
|
||||||
long gridPowerDeltaOffDelay = 0;
|
long gridPowerDeltaOffDelay = 0;
|
||||||
|
|
||||||
unsigned long gridPowerDeltaMillis = 0;
|
unsigned long gridPowerDeltaLast = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ public:
|
|||||||
|
|
||||||
void set(const bool state) override {
|
void set(const bool state) override {
|
||||||
Output::set(state);
|
Output::set(state);
|
||||||
gridPowerDeltaMillis = 0;
|
gridPowerDeltaLast = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -159,9 +159,6 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void doGridPowerDelta() {
|
void doGridPowerDelta() {
|
||||||
if (isnan(gridPowerDeltaValue) || millis() - gridPowerDeltaMillis > 10000) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (get()) {
|
if (get()) {
|
||||||
gridPowerDeltaOff();
|
gridPowerDeltaOff();
|
||||||
} else {
|
} else {
|
||||||
@ -169,22 +166,27 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool gridPowerDeltaConfigInvalid() {
|
||||||
|
return gridPowerDeltaOffThreshold < gridPowerDeltaOnThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
void gridPowerDeltaOff() {
|
void gridPowerDeltaOff() {
|
||||||
if (!gridPowerDeltaOffEnabled) {
|
if (!gridPowerDeltaOffEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (gridPowerDeltaValue > gridPowerDeltaOffThreshold) {
|
const auto invalid = isnan(gridPowerDeltaValue) || millis() - gridPowerDeltaMillis > 10000 || gridPowerDeltaConfigInvalid();
|
||||||
if (gridPowerDeltaMillis == 0) {
|
if (gridPowerDeltaValue > gridPowerDeltaOffThreshold || invalid) {
|
||||||
Serial.printf("[%s] CONSUMING TOO MUCH: Preparing to power OFF...\n", name.c_str());
|
if (gridPowerDeltaLast == 0 && gridPowerDeltaOffDelay > 0) {
|
||||||
gridPowerDeltaMillis = max(1UL, millis());
|
Serial.printf("[RELAY] \"%s\": CONSUMING TOO MUCH: Preparing to power OFF...\n", name.c_str());
|
||||||
|
gridPowerDeltaLast = max(1UL, millis());
|
||||||
} else {
|
} else {
|
||||||
if (millis() - gridPowerDeltaMillis > gridPowerDeltaOffDelay) {
|
if (millis() - gridPowerDeltaLast > gridPowerDeltaOffDelay) {
|
||||||
set(false);
|
set(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (gridPowerDeltaMillis > 0) {
|
} else if (gridPowerDeltaLast > 0) {
|
||||||
Serial.printf("[%s] Powering off CANCELED!\n", name.c_str());
|
Serial.printf("[RELAY] \"%s\": Powering off CANCELED!\n", name.c_str());
|
||||||
gridPowerDeltaMillis = 0;
|
gridPowerDeltaLast = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,18 +194,18 @@ private:
|
|||||||
if (!gridPowerDeltaOnEnabled) {
|
if (!gridPowerDeltaOnEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (gridPowerDeltaValue < gridPowerDeltaOnThreshold) {
|
if (gridPowerDeltaValue < gridPowerDeltaOnThreshold && !gridPowerDeltaConfigInvalid()) {
|
||||||
if (gridPowerDeltaMillis == 0) {
|
if (gridPowerDeltaLast == 0 && gridPowerDeltaOnDelay > 0) {
|
||||||
Serial.printf("[%s] PRODUCING TOO MUCH: Preparing to power ON...\n", name.c_str());
|
Serial.printf("[RELAY] \"%s\": PRODUCING TOO MUCH: Preparing to power ON...\n", name.c_str());
|
||||||
gridPowerDeltaMillis = max(1UL, millis());
|
gridPowerDeltaLast = max(1UL, millis());
|
||||||
} else {
|
} else {
|
||||||
if (millis() - gridPowerDeltaMillis > gridPowerDeltaOnDelay) {
|
if (millis() - gridPowerDeltaLast > gridPowerDeltaOnDelay) {
|
||||||
set(true);
|
set(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (gridPowerDeltaMillis > 0) {
|
} else if (gridPowerDeltaLast > 0) {
|
||||||
Serial.printf("[%s] Powering on CANCELED!\n", name.c_str());
|
Serial.printf("[RELAY] \"%s\": Powering on CANCELED!\n", name.c_str());
|
||||||
gridPowerDeltaMillis = 0;
|
gridPowerDeltaLast = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user