Skip to content

Add configurable minimum session duration to reduce charging fragmentation #445

@steynovich

Description

@steynovich

Problem / Motivation

With 15-minute electricity price intervals, non-continuous charging can become highly fragmented, resulting in:

  • Frequent start/stop cycles (e.g., 8 individual 15-minute sessions for 2 hours of charging)
  • Increased wear on charger hardware and EV battery
  • Reduced charging efficiency for EVs that perform better with longer sessions

Example: Without grouping, charging might occur at: 02:00-02:15, 02:45-03:00, 03:30-03:45, etc. → 8 start/stop cycles

Proposed Solution

Add a new Minimum Session Duration parameter:

  • Range: 0-4 hours (step: 0.25h)
  • Default: 0 (backward compatible)
  • Type: Number entity
  • Applies to: Non-continuous charging only

How It Works

When set > 0 (e.g., 1.0 hour):

  1. Selects cheapest quarters as usual
  2. Groups into contiguous sessions
  3. Filters out sessions shorter than minimum
  4. Replaces with adjacent quarters to extend existing sessions
  5. Result: Fewer, longer sessions

Example with 1-hour minimum:

  • Before: 8× 15-min sessions → 8 cycles
  • After: 2× 1-hour sessions → 2 cycles ✅

Implementation

Files Modified

  • const.py - Add constants and defaults
  • __init__.py - Schema migration v7→v8
  • number.py - New number entity
  • coordinator.py - Parameter handling
  • helpers/coordinator.py - Grouping algorithm (new _apply_minimum_session_duration())
  • All translation files (en, da, nb, nl, sv)
  • README.md - Documentation

Algorithm

def _apply_minimum_session_duration(selected_quarters, sorted_index, ...):
    1. Group quarters into contiguous sessions
    2. Remove sessions < minimum duration
    3. Add replacement quarters adjacent to existing sessions
    4. Iterate until all sessions meet minimum
    5. Maintain total charging time

Benefits

✅ Reduces hardware wear
✅ Improves efficiency
✅ User-configurable
✅ Backward compatible
✅ Multi-language support

User Experience

Navigate to device → Adjust "Minimum session duration" slider (0-4h)

Recommended: Start with 1.0 hour for optimal balance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions