diff --git a/include/PowerLimiterInverter.h b/include/PowerLimiterInverter.h index 97030a995..adff68091 100644 --- a/include/PowerLimiterInverter.h +++ b/include/PowerLimiterInverter.h @@ -93,6 +93,8 @@ class PowerLimiterInverter { void setTargetPowerState(bool enable) { _oTargetPowerState = enable; } void setExpectedOutputAcWatts(uint16_t power) { _expectedOutputAcWatts = power; } + static char mpptName(MpptNum_t mppt); + // copied to avoid races with web UI PowerLimiterInverterConfig _config; diff --git a/include/PowerLimiterSolarInverter.h b/include/PowerLimiterSolarInverter.h index 392615b36..72023211c 100644 --- a/include/PowerLimiterSolarInverter.h +++ b/include/PowerLimiterSolarInverter.h @@ -17,5 +17,4 @@ class PowerLimiterSolarInverter : public PowerLimiterInverter { private: uint16_t scaleLimit(uint16_t expectedOutputWatts); void setAcOutput(uint16_t expectedOutputWatts) final; - static char mpptName(MpptNum_t mppt); }; diff --git a/src/PowerLimiterInverter.cpp b/src/PowerLimiterInverter.cpp index 09c23b545..947b18205 100644 --- a/src/PowerLimiterInverter.cpp +++ b/src/PowerLimiterInverter.cpp @@ -349,4 +349,44 @@ void PowerLimiterInverter::debug() const (_oTargetPowerState.has_value()?(*_oTargetPowerState?"production":"standby"):"unchanged"), getUpdateTimeouts() ); + + MessageOutput.printf(" MPPTs AC power:"); + + auto pStats = _spInverter->Statistics(); + float inverterEfficiencyFactor = pStats->getChannelFieldValue(TYPE_INV, CH0, FLD_EFF) / 100; + std::vector dcMppts = _spInverter->getMppts(); + + for (auto& m : dcMppts) { + float mpptPowerAC = 0.0; + std::vector mpptChnls = _spInverter->getChannelsDCByMppt(m); + + for (auto& c : mpptChnls) { + mpptPowerAC += pStats->getChannelFieldValue(TYPE_DC, c, FLD_PDC) * inverterEfficiencyFactor; + } + + MessageOutput.printf(" %c: %.0f W", + mpptName(m), mpptPowerAC); + } + + MessageOutput.printf("\r\n"); +} + +char PowerLimiterInverter::mpptName(MpptNum_t mppt) +{ + switch (mppt) { + case MpptNum_t::MPPT_A: + return 'a'; + + case MpptNum_t::MPPT_B: + return 'b'; + + case MpptNum_t::MPPT_C: + return 'c'; + + case MpptNum_t::MPPT_D: + return 'd'; + + default: + return '?'; + } } diff --git a/src/PowerLimiterSolarInverter.cpp b/src/PowerLimiterSolarInverter.cpp index 4baef515f..c8972b0f9 100644 --- a/src/PowerLimiterSolarInverter.cpp +++ b/src/PowerLimiterSolarInverter.cpp @@ -244,23 +244,3 @@ void PowerLimiterSolarInverter::setAcOutput(uint16_t expectedOutputWatts) setTargetPowerLimitWatts(scaleLimit(expectedOutputWatts)); setTargetPowerState(true); } - -char PowerLimiterSolarInverter::mpptName(MpptNum_t mppt) -{ - switch (mppt) { - case MpptNum_t::MPPT_A: - return 'a'; - - case MpptNum_t::MPPT_B: - return 'b'; - - case MpptNum_t::MPPT_C: - return 'c'; - - case MpptNum_t::MPPT_D: - return 'd'; - - default: - return '?'; - } -}