diff --git a/include/VictronMppt.h b/include/VictronMppt.h index 6718ef330..d64fbb4cf 100644 --- a/include/VictronMppt.h +++ b/include/VictronMppt.h @@ -25,6 +25,15 @@ class VictronMpptClass { // total output of all MPPT charge controllers in Watts int32_t getPowerOutputWatts() const; + // total panel input power of all MPPT charge controllers in Watts + int32_t getPanelPowerWatts() const; + + // sum of total yield of all MPPT charge controllers in kWh + double getYieldTotal() const; + + // sum of today's yield of all MPPT charge controllers in kWh + double getYieldDay() const; + private: VictronMpptClass(VictronMpptClass const& other) = delete; VictronMpptClass(VictronMpptClass&& other) = delete; diff --git a/src/VictronMppt.cpp b/src/VictronMppt.cpp index b857e0ec0..609f8bf05 100644 --- a/src/VictronMppt.cpp +++ b/src/VictronMppt.cpp @@ -78,7 +78,7 @@ VeDirectMpptController::spData_t VictronMpptClass::getData(size_t idx) const if (_controllers.empty() || idx >= _controllers.size()) { MessageOutput.printf("ERROR: MPPT controller index %d is out of bounds (%d controllers)\r\n", idx, _controllers.size()); - return VeDirectMpptController::spData_t{}; + return std::make_shared(); } return _controllers[idx]->getData(); @@ -94,3 +94,36 @@ int32_t VictronMpptClass::getPowerOutputWatts() const return sum; } + +int32_t VictronMpptClass::getPanelPowerWatts() const +{ + int32_t sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->PPV; + } + + return sum; +} + +double VictronMpptClass::getYieldTotal() const +{ + double sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->H19; + } + + return sum; +} + +double VictronMpptClass::getYieldDay() const +{ + double sum = 0; + + for (const auto& upController : _controllers) { + sum += upController->getData()->H20; + } + + return sum; +} diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index fdca8baae..f74d5a549 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -192,10 +192,9 @@ void WebApiWsLiveClass::generateJsonResponse(JsonVariant& root) vedirectObj[F("enabled")] = Configuration.get().Vedirect_Enabled; JsonObject totalVeObj = vedirectObj.createNestedObject("total"); - auto spMpptData = VictronMppt.getData(); - addTotalField(totalVeObj, "Power", spMpptData->PPV, "W", 1); - addTotalField(totalVeObj, "YieldDay", spMpptData->H20 * 1000, "Wh", 0); - addTotalField(totalVeObj, "YieldTotal", spMpptData->H19, "kWh", 2); + addTotalField(totalVeObj, "Power", VictronMppt.getPanelPowerWatts(), "W", 1); + addTotalField(totalVeObj, "YieldDay", VictronMppt.getYieldDay() * 1000, "Wh", 0); + addTotalField(totalVeObj, "YieldTotal", VictronMppt.getYieldTotal(), "kWh", 2); JsonObject huaweiObj = root.createNestedObject("huawei"); huaweiObj[F("enabled")] = Configuration.get().Huawei_Enabled;