Skip to content

Allow Specifying DC Energy Source for Hybrid Inverters #258

@tiyash-basu-frequenz

Description

@tiyash-basu-frequenz

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    part:❓We need to figure out which part is affectedpriority:❓We need to figure out how soon this should be addressedtype:enhancementNew feature or enhancement visitble to users

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions