diff --git a/include/MqttHandlePowerLimiter.h b/include/MqttHandlePowerLimiter.h index fa7ef12cc..fd35b5798 100644 --- a/include/MqttHandlePowerLimiter.h +++ b/include/MqttHandlePowerLimiter.h @@ -23,7 +23,8 @@ class MqttHandlePowerLimiterClass { VoltageStartThreshold, VoltageStopThreshold, FullSolarPassThroughStartVoltage, - FullSolarPassThroughStopVoltage + FullSolarPassThroughStopVoltage, + UpperPowerLimit }; void onMqttCmd(MqttPowerLimiterCommand command, const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total); diff --git a/src/MqttHandlePowerLimiter.cpp b/src/MqttHandlePowerLimiter.cpp index 95f90db2f..dd1c96dd3 100644 --- a/src/MqttHandlePowerLimiter.cpp +++ b/src/MqttHandlePowerLimiter.cpp @@ -44,6 +44,7 @@ void MqttHandlePowerLimiterClass::init(Scheduler& scheduler) subscribe("threshold/voltage/full_solar_passthrough_start", MqttPowerLimiterCommand::FullSolarPassThroughStartVoltage); subscribe("threshold/voltage/full_solar_passthrough_stop", MqttPowerLimiterCommand::FullSolarPassThroughStopVoltage); subscribe("mode", MqttPowerLimiterCommand::Mode); + subscribe("upper_power_limit", MqttPowerLimiterCommand::UpperPowerLimit); _lastPublish = millis(); } @@ -75,6 +76,8 @@ void MqttHandlePowerLimiterClass::loop() auto val = static_cast(PowerLimiter.getMode()); MqttSettings.publish("powerlimiter/status/mode", String(val)); + + MqttSettings.publish("powerlimiter/status/upper_power_limit", String(config.PowerLimiter.UpperPowerLimit)); MqttSettings.publish("powerlimiter/status/inverter_update_timeouts", String(PowerLimiter.getInverterUpdateTimeouts())); @@ -174,6 +177,11 @@ void MqttHandlePowerLimiterClass::onMqttCmd(MqttPowerLimiterCommand command, con MessageOutput.printf("Setting full solar passthrough stop voltage to: %.2f V\r\n", payload_val); config.PowerLimiter.FullSolarPassThroughStopVoltage = payload_val; break; + case MqttPowerLimiterCommand::UpperPowerLimit: + if (config.PowerLimiter.UpperPowerLimit == intValue) { return; } + MessageOutput.printf("Setting upper power limit to: %d W\r\n", intValue); + config.PowerLimiter.UpperPowerLimit = intValue; + break; } // not reached if the value did not change