diff --git a/main/ZactuatorONOFF.ino b/main/ZactuatorONOFF.ino index 97886f8a06..be008453b9 100644 --- a/main/ZactuatorONOFF.ino +++ b/main/ZactuatorONOFF.ino @@ -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(); - ONOFFdata["cmd"] = (int)level; - ONOFFdata["origin"] = subjectGTWONOFFtoMQTT; - handleJsonEnqueue(ONOFFdata, QueueSemaphoreTimeOutTask); + # ifdef ESP32 if (ONOFFConfig.useLastStateOnStart) { + StaticJsonDocument<64> jsonBuffer; + JsonObject ONOFFdata = jsonBuffer.to(); + 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(); ONOFFdata["cmd"] = (int)digitalRead(ACTUATOR_ONOFF_GPIO); +# ifdef ESP32 + ONOFFdata["uselaststate"] = ONOFFConfig.useLastStateOnStart; +# endif ONOFFdata["origin"] = subjectGTWONOFFtoMQTT; handleJsonEnqueue(ONOFFdata, QueueSemaphoreTimeOutTask); } diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index 84cd28c42d..3e1c73796b 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -949,7 +949,7 @@ void pubMqttDiscovery() { # ifdef ZactuatorONOFF Log.trace(F("actuatorONOFFDiscovery" CR)); - char* actuatorONOFF[8] = {"switch", "actuatorONOFF", "", "", "", "{\"cmd\":1}", "{\"cmd\":0}", ""}; + char* actuatorONOFF[8] = {"switch", "actuatorONOFF", "", "", "{{ value_json.cmd }}", "{\"cmd\":1}", "{\"cmd\":0}", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement //trc(actuatorONOFF[1]); @@ -959,7 +959,8 @@ void pubMqttDiscovery() { actuatorONOFF[5], actuatorONOFF[6], actuatorONOFF[7], 0, Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoONOFF, "", "", "", "", false, // device name, device manufacturer, device model, device ID, retain - stateClassNone //State Class + stateClassNone, //State Class + "0", "1" //state_off, state_on ); # endif diff --git a/main/ZsensorRN8209.ino b/main/ZsensorRN8209.ino index 61ad1a9cdc..f881cf3026 100644 --- a/main/ZsensorRN8209.ino +++ b/main/ZsensorRN8209.ino @@ -106,7 +106,7 @@ void setupRN8209() { cal.EC = RN8209_EC; set_user_param(cal); init_8209c_interface(); - xTaskCreate(rn8209_loop, "rn8209_loop", 5000, NULL, 10, &rn8209TaskHandle); + xTaskCreate(rn8209_loop, "rn8209_loop", 5500, NULL, 10, &rn8209TaskHandle); //esp_task_wdt_add(rn8209TaskHandle); Log.trace(F("ZsensorRN8209 setup done " CR)); }