Relay code clean

This commit is contained in:
Patrick Haßel 2025-09-03 14:27:58 +02:00
parent b8d79dbc67
commit a3076b9b2f
2 changed files with 24 additions and 24 deletions

View File

@ -70,8 +70,8 @@ public:
} }
virtual void set(const bool state) { virtual void set(const bool state) {
_write(state);
onCount = 0; onCount = 0;
_write(state);
} }
void toggle() { void toggle() {

View File

@ -27,7 +27,7 @@ class Relay final : public Output {
long gridPowerDeltaOffDelay = 0; long gridPowerDeltaOffDelay = 0;
unsigned long gridPowerDeltaLast = 0; unsigned long gridPowerDeltaAlarmSince = 0;
public: public:
@ -125,6 +125,8 @@ public:
json["topic"] = topic; json["topic"] = topic;
json["gridPowerDeltaAlarmSince"] = gridPowerDeltaAlarmSince;
json["gridPowerDeltaOffEnabled"] = gridPowerDeltaOffEnabled; json["gridPowerDeltaOffEnabled"] = gridPowerDeltaOffEnabled;
json["gridPowerDeltaOnThreshold"] = gridPowerDeltaOnThreshold; json["gridPowerDeltaOnThreshold"] = gridPowerDeltaOnThreshold;
json["gridPowerDeltaOnDelay"] = gridPowerDeltaOnDelay; json["gridPowerDeltaOnDelay"] = gridPowerDeltaOnDelay;
@ -138,8 +140,8 @@ public:
} }
void set(const bool state) override { void set(const bool state) override {
gridPowerDeltaAlarmSince = 0;
Output::set(state); Output::set(state);
gridPowerDeltaLast = 0;
} }
protected: protected:
@ -174,20 +176,19 @@ private:
if (!gridPowerDeltaOffEnabled) { if (!gridPowerDeltaOffEnabled) {
return; return;
} }
const auto invalid = isnan(gridPowerDeltaValue) || millis() - gridPowerDeltaMillis > 10000 || gridPowerDeltaConfigInvalid(); const auto now = max(1UL, millis());
const auto invalid = isnan(gridPowerDeltaValue) || now - gridPowerDeltaMillis > 10000 || gridPowerDeltaConfigInvalid();
if (gridPowerDeltaValue > gridPowerDeltaOffThreshold || invalid) { if (gridPowerDeltaValue > gridPowerDeltaOffThreshold || invalid) {
if (gridPowerDeltaLast == 0 && gridPowerDeltaOffDelay > 0) { if (gridPowerDeltaAlarmSince == 0 && gridPowerDeltaOffDelay > 0) {
Serial.printf("[RELAY] \"%s\": CONSUMING TOO MUCH: Preparing to power OFF...\n", name.c_str()); Serial.printf("[RELAY] \"%s\": CONSUMING TOO MUCH: Powering OFF in %ld ms...\n", name.c_str(), gridPowerDeltaOffDelay);
gridPowerDeltaLast = max(1UL, millis()); gridPowerDeltaAlarmSince = now;
} else { }
if (millis() - gridPowerDeltaLast > gridPowerDeltaOffDelay) { if (now - gridPowerDeltaAlarmSince >= gridPowerDeltaOffDelay) {
Serial.printf("[RELAY] \"%s\": CONSUMING TOO MUCH: Powering OFF!\n", name.c_str()); Serial.printf("[RELAY] \"%s\": CONSUMING TOO MUCH: Powering OFF!\n", name.c_str());
set(false); set(false);
} }
} } else if (gridPowerDeltaAlarmSince > 0) {
} else if (gridPowerDeltaLast > 0) {
Serial.printf("[RELAY] \"%s\": Powering off CANCELED!\n", name.c_str()); Serial.printf("[RELAY] \"%s\": Powering off CANCELED!\n", name.c_str());
gridPowerDeltaLast = 0;
} }
} }
@ -195,19 +196,18 @@ private:
if (!gridPowerDeltaOnEnabled) { if (!gridPowerDeltaOnEnabled) {
return; return;
} }
const auto now = max(1UL, millis());
if (gridPowerDeltaValue < gridPowerDeltaOnThreshold && !gridPowerDeltaConfigInvalid()) { if (gridPowerDeltaValue < gridPowerDeltaOnThreshold && !gridPowerDeltaConfigInvalid()) {
if (gridPowerDeltaLast == 0 && gridPowerDeltaOnDelay > 0) { if (gridPowerDeltaAlarmSince == 0 && gridPowerDeltaOnDelay > 0) {
Serial.printf("[RELAY] \"%s\": PRODUCING TOO MUCH: Preparing to power ON...\n", name.c_str()); Serial.printf("[RELAY] \"%s\": PRODUCING TOO MUCH: Powering ON in %ld ms...\n", name.c_str(), gridPowerDeltaOnDelay);
gridPowerDeltaLast = max(1UL, millis()); gridPowerDeltaAlarmSince = now;
} else { }
if (millis() - gridPowerDeltaLast > gridPowerDeltaOnDelay) { if (now - gridPowerDeltaAlarmSince >= gridPowerDeltaOnDelay) {
Serial.printf("[RELAY] \"%s\": PRODUCING TOO MUCH: Powering ON!\n", name.c_str()); Serial.printf("[RELAY] \"%s\": PRODUCING TOO MUCH: Powering ON!\n", name.c_str());
set(true); set(true);
} }
} } else if (gridPowerDeltaAlarmSince > 0) {
} else if (gridPowerDeltaLast > 0) {
Serial.printf("[RELAY] \"%s\": Powering on CANCELED!\n", name.c_str()); Serial.printf("[RELAY] \"%s\": Powering on CANCELED!\n", name.c_str());
gridPowerDeltaLast = 0;
} }
} }