[ONOFF] ON OFF behavior fixes (#1828)

-Avoid plug restart in case of OverCurrent detection, introduced with central queue add
-publish uselaststate value
-if uselaststate is false we switch off the relay at restart
This commit is contained in:
Florian authored and GitHub committed 2023-12-07 15:48:06 -06:00
1 parent 87cb2fecd2
commit 8c8dc6b6f6
3 files changed
+17 -11

No files matched your search

+13 -8
View File
@@ -121,8 +121,11 @@ void setupONOFF() {
# ifdef ACTUATOR_ONOFF_DEFAULT
digitalWrite(ACTUATOR_ONOFF_GPIO, ACTUATOR_ONOFF_DEFAULT);
# elif defined(ESP32)
if (ONOFFConfig.useLastStateOnStart)
if (ONOFFConfig.useLastStateOnStart) {
digitalWrite(ACTUATOR_ONOFF_GPIO, ONOFFConfig.ONOFFState);
} else {
digitalWrite(ACTUATOR_ONOFF_GPIO, !ACTUATOR_ON);
}
# endif
updatePowerIndicator();
Log.trace(F("ZactuatorONOFF setup done" CR));
@@ -194,6 +197,7 @@ void MQTTtoONOFF(char* topicOri, JsonObject& ONOFFdata) {
// Load config from json if available
ONOFFConfig_fromJson(ONOFFdata);
stateONOFFMeasures();
}
}
# endif
@@ -285,14 +289,12 @@ void ActuatorTrigger() {
} else {
PowerIndicatorOFF();
}
// Send the state of the switch to the broker so as to update the status
StaticJsonDocument<64> jsonBuffer;
JsonObject ONOFFdata = jsonBuffer.to<JsonObject>();
ONOFFdata["cmd"] = (int)level;
ONOFFdata["origin"] = subjectGTWONOFFtoMQTT;
handleJsonEnqueue(ONOFFdata, QueueSemaphoreTimeOutTask);
# ifdef ESP32
if (ONOFFConfig.useLastStateOnStart) {
StaticJsonDocument<64> jsonBuffer;
JsonObject ONOFFdata = jsonBuffer.to<JsonObject>();
ONOFFdata["cmd"] = (int)level;
ONOFFdata["save"] = true;
ONOFFConfig_fromJson(ONOFFdata);
}
@@ -302,9 +304,12 @@ void ActuatorTrigger() {
void stateONOFFMeasures() {
//Publish actuator state
StaticJsonDocument<64> jsonBuffer;
StaticJsonDocument<128> jsonBuffer;
JsonObject ONOFFdata = jsonBuffer.to<JsonObject>();
ONOFFdata["cmd"] = (int)digitalRead(ACTUATOR_ONOFF_GPIO);
# ifdef ESP32
ONOFFdata["uselaststate"] = ONOFFConfig.useLastStateOnStart;
# endif
ONOFFdata["origin"] = subjectGTWONOFFtoMQTT;
handleJsonEnqueue(ONOFFdata, QueueSemaphoreTimeOutTask);
}