Skip to content

[Feature Request] Add Shared Power Group Support for Deferrable Loads #686

@rwblokzijl

Description

@rwblokzijl

Problem statement

Many real-world systems (notably heat pumps) act as a single electrical actuator that can serve multiple thermal subsystems (e.g. DHW tank and underfloor heating), but cannot supply them independently or simultaneously beyond a shared power limit.

Currently, EMHASS models deferrable loads as independent consumers. While global grid import limits exist, there is no native way to express:

  • a shared power budget across multiple deferrables
  • or mutual exclusion / shared-capacity constraints between them

Real-world example

A heat pump:

  • max electrical power: 2.5 kW
  • serves:
    • DHW tank
    • underfloor heating
  • internally decides which mode runs based on setpoints

From a control perspective:

  • DHW and UFH are distinct thermal systems
  • but they share one compressor
  • total power draw must satisfy:
P_dhw[t] + P_ufh[t] ≤ P_hp_max

Optionally:

on_dhw[t] + on_ufh[t] ≤ 1

Current workaround

Users may:

  • ignore all other loads, background load and PV
  • rely on maximum_power_from_grid to approximate a shared actuator cap
  • map optimized thermal states (“predicted temperature”) to setpoints
  • configure minimum_power_of_deferrable_loads for both loads such that optimizer actions consistently exceed the heat pump’s built-in minimum-run thresholds

This works in narrow cases, but:

  • breaks once PV, EVs, or other loads are introduced
  • relies on modeling assumptions outside the optimizer
  • makes comparison across scenarios harder

Proposed enhancement

Introduce a way to explicitly model shared actuators, for example:

  1. A “shared power group” for deferrable loads:

    • multiple deferrables belong to one actuator group
    • group has a max (and optional min) power
    • optimizer enforces sum of group members ≤ group limit
  2. Optional mutual-exclusion constraints:

    • allow users to specify that only one deferrable in a group may be active per timestep
    • or allow fractional sharing, depending on the use case

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions