Victron Charge Controller - HACS Integration

Hi everyone,

I would like to introduce Victron Charge Control, a custom Home Assistant integration for Victron ESS systems.

The integration automatically controls battery charging and discharging based on EPEX Spot hourly electricity prices. The goal is simple: charge the battery during cheap hours, discharge or export during expensive hours, and keep everything adjustable directly from the Home Assistant UI.

Repository:

What It Does

  • Auto mode calculates a daily schedule from EPEX Spot prices.

  • Manual mode lets you choose specific hours for charging, discharging, blocking, or idling.

  • Force charge / force discharge modes are available for immediate control.

  • SOC limits prevent charging above or discharging below configured battery levels.

  • Grid setpoint limits help keep the Victron ESS setpoint within safe bounds.

  • Grid feed-in limiting can reduce feed-in when electricity prices are low or negative.

  • All settings are available in the UI, so no YAML editing is needed after setup.

Why I Built It

I wanted a more convenient way to use dynamic electricity pricing with a Victron ESS setup. Existing Victron and EPEX integrations provide the data and writable entities, but I wanted a dedicated control layer that combines them into an hour-by-hour charging plan.

This integration is meant for people who want to:

  • Charge their battery during the cheapest spot price hours.

  • Discharge or export during the most expensive hours.

  • Avoid charging or discharging during specific blocked hours.

  • Keep a configurable SOC reserve.

  • Adjust the strategy directly from Home Assistant.

Requirements

The integration currently expects these pieces to already be available in Home Assistant:

  • Home Assistant 2026.2 or newer

  • HACS

  • A writable Victron ESS grid setpoint entity, for example from Victron GX modbusTCP

  • Victron battery SOC and power sensors, for example from Victron Venus MQTT

  • EPEX Spot hourly price data, for example from the EPEX Spot integration

  • A writable max grid feed-in entity if you want to use feed-in limiting

During setup, the config flow asks for six entities:

  • Battery SOC sensor

  • Grid setpoint entity

  • Grid power sensor

  • Battery power sensor

  • EPEX Spot price sensor

  • Max grid feed-in entity

Created Controls

The integration creates a device with runtime controls such as:

  • Control mode: off, auto, manual, force_charge, force_discharge

  • Charge and discharge enable switches

  • Minimum and maximum SOC

  • Charge and discharge power

  • Idle, minimum, and maximum grid setpoints

  • Number of cheapest hours to charge

  • Number of most expensive hours to discharge

  • Charge and discharge price thresholds

  • Blocked charging and discharging hours

  • Grid feed-in price threshold and feed-in limits

  • A button to recalculate the schedule

  • Sensors showing the desired action, target setpoint, charge hours, discharge hours, and full charge plan

Current Status

This is an initial release, currently version 1.0.0. It works as a local polling integration and is installable through HACS as a custom repository.

I would be very happy to get feedback from other Victron ESS users, especially around different entity setups, EPEX Spot configurations, and control strategies. Issues and feature requests are welcome on GitHub:

Thanks, and I hope this is useful to others running Victron with dynamic electricity pricing.

1 Like