Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Request] Different DPL strategies for handling multiple inverters #1409

Open
schlimmchen opened this issue Nov 19, 2024 · 4 comments
Open
Labels
enhancement New feature or request

Comments

@schlimmchen
Copy link
Member

Is your feature request related to a problem? Please describe.

The implementation merged in #1216 prefers to change the limit of those inverters which promise to implement the needed change in AC output with a single limit update. If none can implement the change in one go, the inverters are sorted by the contribution they can make to the required change.

This tries to make sure that the DPL reacts as quickly as possible.

This also means that the DPL is happy to put inverters online, but hesitant to put them into standby.

However, people objected that this can lead to less than ideal situations, where multiple inverters are online producing at less efficiency while less inverters could be producing at the same total power with higher efficiency.

Describe the solution you'd like

Without too much trouble, we could implement different strategies in the DPL. The respective function implementing a particular strategy would always receive a bunch of inverters as input as well as the desired change in output, and it would be responsible to determine which of those inverters are supposed to change their limit by how much.

Describe alternatives you've considered

No response

Additional context

I am happy to help implement different strategies and make them selectable (config switch, UI changes, etc.). If you think the DPL should implement a different strategy, please see

if (diff < 0) {
uint16_t reduction = static_cast<uint16_t>(diff * -1);
uint16_t totalMaxReduction = 0;
for (auto const pInv : matchingInverters) {
totalMaxReduction += pInv->getMaxReductionWatts(false/*no standby*/);
}
// test whether we need to put at least one of the inverters into
// standby to achieve the requested reduction.
bool allowStandby = (totalMaxReduction < reduction);
std::sort(matchingInverters.begin(), matchingInverters.end(),
[allowStandby](auto const a, auto const b) {
auto aReduction = a->getMaxReductionWatts(allowStandby);
auto bReduction = b->getMaxReductionWatts(allowStandby);
return aReduction > bReduction;
});
for (auto pInv : matchingInverters) {
auto maxReduction = pInv->getMaxReductionWatts(allowStandby);
if (reduction >= hysteresis && maxReduction >= hysteresis) {
reduction -= pInv->applyReduction(reduction, allowStandby);
}
covered += pInv->getExpectedOutputAcWatts();
}
}
else {
uint16_t increase = static_cast<uint16_t>(diff);
std::sort(matchingInverters.begin(), matchingInverters.end(),
[](auto const a, auto const b) {
return a->getMaxIncreaseWatts() > b->getMaxIncreaseWatts();
});
for (auto pInv : matchingInverters) {
auto maxIncrease = pInv->getMaxIncreaseWatts();
if (increase >= hysteresis && maxIncrease >= hysteresis) {
increase -= pInv->applyIncrease(increase);
}
covered += pInv->getExpectedOutputAcWatts();
}
}

for inspiration and describe the method you would like to see the DPL using. The more technical (flow-chart, pseudo-code) and detailed, the better.

@Manos1966
Copy link

Hi @schlimmchen suchst du weiterhin nach [Tersters]?
(ich habe eine Test-Installation mit 2-3 Hoymiles online).

@schlimmchen
Copy link
Member Author

Naja, jetzt ist die Katze ja aus dem Sack. Unsere Nutzer werden das neue Release sicherlich ausprobieren und wir hören sicherlich, wenn es Probleme gibt.

@spcqike
Copy link

spcqike commented Nov 21, 2024

Ich hab aktuell nur 1 wechselrichter und viel zu wenig Sonne.

Das Feature testen werde ich dann ab April 2025 😄

@Manos1966
Copy link

Jesus! 😱 😱 😱 😱 😱
image

🥇 🥇 🥇 🥇 🥇 🥇 🥇 🥇
🥂 🥂 🥂 🥂 🥂 🥂 🥂 🥂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants