-
Notifications
You must be signed in to change notification settings - Fork 7
Description
What's needed?
So far, the RPC SetComponentPowerActive only allows setting the total active power of a component without differentiating between the sources (PV arrays and batteries) when dealing with hybrid inverters.
This limitation primarily affects scenarios where more granular control is required, especially during discharging operations, as clients may need to specify whether the energy is drawn from the battery or the PV arrays.
We need a way to specify the DC energy source when issuing discharge commands.
We do not need to specify the DC component for
- charge commands, because it will anyway always target batteries, as there is no charge functionality for PV arrays.
- reactive-power commands, because inverters manage reactive power generation or absorption internally.
Proposed solution
Proposal 1
This approach is about asking the user specifics for hybrid-inverter-discharges, and ignoring this input for other cases.
message SetComponentPowerActiveRequest {
...
// This is the field being added.
// For PV and battery inverters, this field will be ignored
// For hybrid inverters, for charge commands, this field will be ignored.
// For hybrid inverters, for discharge commands, this field is mandatory.
ComponentPowerSource source = 4;
}
enum ComponentPowerSource {
// Default
COMPONENT_POWER_SOURCE_UNSPECIFIED = 0;
// When the PV arrrays should be used as the energy source.
COMPONENT_POWER_SOURCE_PV = 1;
// When the batteries should be used as the energy source.
COMPONENT_POWER_SOURCE_BATTERY = 2;
}Proposal 2
This approach is about using defaults as much as possible.
message SetComponentPowerActiveRequest {
...
// This is the field being added.
// For PV inverters, specifying battery will result in an error.
// For battery inverters, specifying PV will result in an error.
// For hybrid inverters,
// - specifying PV for charging will result in an error.
// - specifying nothing for discharging will result in preferring the PV, and any excess goes to batteries.
// - specifying PV or batteries will result in the input being chosen as the preferred source.
ComponentPowerPreferredSource source = 4;
}
enum ComponentPowerPreferredSource {
// Default
COMPONENT_POWER_PREFERRED_SOURCE_UNSPECIFIED = 0;
// When the PV arrays should be preferred as the energy source.
COMPONENT_POWER_PREFERRED_SOURCE_PV = 1;
// When the batteries should be preferred as the energy source.
COMPONENT_POWER_PREFERRED_SOURCE_BATTERY = 2;
}Proposal 3
This is a combination of the above two:
message SetComponentPowerActiveRequest {
...
// This is the field being added.
// For PV inverters, specifying battery will result in an error.
// For battery inverters, specifying PV will result in an error.
// For hybrid inverters,
// ...
ComponentPowerSource source = 4;
}
enum ComponentPowerSource {
// Default. Results in PV being preferred.
COMPONENT_POWER_SOURCE_UNSPECIFIED = 0;
// When only the PV arrays should be used as the energy source.
// Commands exceeding the limits of the PV arrays will result in an error.
COMPONENT_POWER_SOURCE_PV_ONLY = 1;
// When the PV arrays should be used as the preferred energy source,
// and any leftover power is pulled from batteries.
COMPONENT_POWER_SOURCE_PV_PREFERRED = 2;
// When only the batteries should be used as the energy source.
// Commands exceeding the limits of the batteries will result in an error.
COMPONENT_POWER_SOURCE_BATTERY_ONLY = 3;
// When the batteries should be used as the preferred energy source,
// and any leftover power is pulled from PV, as much as possible.
COMPONENT_POWER_SOURCE_BATTERY_PREFERRED = 2;
}One implication of this approach is that the underlying controller should be responsible for maintaining a steady AC output if the PV power fluctuates.
Use cases
No response
Alternatives and workarounds
No response
Additional context
No response