On this page

A Vaillant heat pump has no "use my solar" button. The myVAILLANT app shows your PV yield next to the heat pump's consumption, but it doesn't act on it, and "SG Ready" on the datasheet doesn't mean what most people hope. Still, you can make an aroTHERM heat the house and the hot water tank mainly when the sun is out. This post compares the five ways to do it, from a free settings change to a full local integration, and shows which one I run in my house in Vienna and why.

Tested in my house. Unless marked ⚠️, everything here runs on my setup: aroTHERM split VWL 75/5 AS + uniTOWER VWL 78/5 IS, VRC 700 with a VR 921 gateway, Huawei SUN2000-5KTL-M1. Anything marked ⚠️ depends on your model, controller or firmware: check your manuals before copying it.

The short answer

  1. Free, today: allow hot water only from 11:00 to 15:00, and put the warmer heating times in the middle of the day. This alone moves a large part of the consumption into sunny hours.
  2. With an energy manager: use the heat pump's SG Ready or PV input, if your controller supports it. ⚠️ It raises targets by a fixed offset; it doesn't follow the surplus.
  3. With Home Assistant or an ESP32: read the surplus from the inverter and raise the room target with a temporary quick veto over the myVAILLANT cloud. This is what I run.
  4. Fully local: an eBUS adapter with ebusd. The most control, the most work.

Why Vaillant is harder than other brands

Some heat pumps accept a power target ("use up to 1.5 kW now") over Modbus. The aroTHERM doesn't expose anything like that to end users. What you can change is what the controller already offers in the app:

  • the room target temperature (per zone),
  • the hot water target and when hot water is allowed,
  • the operating mode and the time programs.

So every solution works the same way underneath: when there's surplus, ask for more heat (a higher room or hot water target), and let the controller and the compressor decide how much power that takes. The house and the water tank are the battery.

That has two consequences you need to design for:

  • You don't control the power draw. A raised target starts the compressor at whatever level it chooses. My unit draws about 0.7–0.9 kW at its minimum while heating the rooms, and around 1.8 kW during a hot water reheat.
  • The compressor must not cycle. Starting it for one sunny minute between clouds costs more than it saves. Any automation needs a steadiness check and a rest time between starts.

Option 1: time programs (no hardware, no code)

This is the step with the best effort-to-result ratio, and I'd do it before anything else:

  • Hot water only from 11:00 to 15:00. The tank holds heat for many hours, so you rarely notice the difference. In the app this is the hot water time program; on the VRC 700 it's under the hot water settings.
  • Shift the comfort period. Set the day temperature for the late morning to the afternoon, and let the house drift down slightly in the evening. A well-insulated house keeps the stored heat.
  • Keep the setback modest. A deep night setback makes the heat pump work hard in the cold morning, without sun, which is the opposite of what you want.

It doesn't react to clouds, but it costs nothing and can't break anything.

Option 2: SG Ready and the PV input ⚠️

Many Vaillant installations have a two-contact input meant for an energy manager. The idea: your inverter's energy manager closes a contact when there's surplus, and the controller raises its targets by a configured offset.

Read the fine print before buying hardware for it:

  • SG Ready is not "PV ready". SG Ready was designed for grid operators and has four fixed states. It can say "heat more now", not "you have 1.2 kW spare".
  • What exactly happens depends on the controller generation. On the sensoCOMFORT VRC 720 the PV contact raises the hot water target by an offset; users report that the real behaviour doesn't always match the manual. I haven't used this input on my VRC 700.
  • Wiring belongs to an installer. The contacts must be potential-free, and the input has to be enabled in the installer menu.

If your inverter already has an energy manager with a relay output, this is a reasonable middle ground. If not, options 3 to 5 give you more control for less money.

Option 3: Home Assistant and the myVAILLANT cloud ⚠️

If you already run Home Assistant, the mypyllant-component integration (based on the myPyllant library) brings your zones and hot water in as entities. Your inverter integration provides the surplus. The logic is then a normal automation.

When a zone runs on a time program, setting a temperature creates a quick veto: a temporary target that the controller removes by itself when it expires. That is exactly what you want, because if Home Assistant goes down mid-boost, the heating returns to normal on its own.

A starting point (⚠️ not what I run; replace the entity names with yours and test with low values first):

alias: Heat pump solar boost
triggers:
    - trigger: numeric_state
      entity_id: sensor.grid_export_power # W, positive while exporting
      above: 1200
      for: { minutes: 15 } # steady surplus, not a sunny minute
conditions:
    - condition: state
      entity_id: input_boolean.solar_boost_active
      state: "off"
    - condition: numeric_state
      entity_id: sensor.living_room_temperature
      below: 23.5 # hard cap
actions:
    - action: climate.set_temperature
      target: { entity_id: climate.zone_1_circuit_0_climate }
      data: { temperature: 23 } # day target + ~1.5 °C
    - action: input_boolean.turn_on
      target: { entity_id: input_boolean.solar_boost_active }
mode: single

You need a second automation that ends the boost (export below ~200 W for 10 minutes, or the room reaches the cap) and turns the helper off, and a third that won't start a new boost within 30 minutes of the last one.

Three cloud limits apply whatever you build on top of it:

  • Rate limit. Too many calls return 403 "Out of call volume quota". Keep the polling interval at several minutes.
  • Lag. After a change, the old value can come back for several minutes. Don't react to it.
  • Sign-in. It's OAuth with your myVAILLANT account. Don't try to automate the login page.

Option 4: an ESP32 on its own (what I run)

I didn't want a server in the loop, so a €5 ESP32 does the whole job: it reads my Huawei inverter over Modbus TCP every few seconds, decides every 10 minutes whether the surplus is steady enough, and sets a quick veto on the VRC 700 through the myVAILLANT API. It also raises the hot water target during surplus and restores the original value afterwards.

The full build, with registers, firmware and the rules I tuned over a few weeks, is in its own article: Heating with surplus solar: an ESP32 between a Huawei inverter and a Vaillant heat pump.

Option 5: eBUS, fully local ⚠️

The controller, the heat pump and the gateway talk over eBUS, a two-wire bus. An ebusd adapter on that bus and ebusd give you local access to flow and return temperatures, compressor data and setpoints, without the cloud and its rate limit. ebusd publishes to MQTT, so Home Assistant or an ESP32 can use it the same way as option 3.

The catch: message definitions differ by controller and firmware. Start read-only (ebusctl find, then ebusctl read <name>), and write setpoints only after you've confirmed the exact message on your device. Never connect eBUS to microcontroller pins directly.

Comparison

Reacts to cloudsLocalEffortCost
1. Time programsNoYesMinutes€0
2. SG Ready / PV input ⚠️On/off onlyYesInstallerEnergy manager + wiring
3. Home Assistant + cloud ⚠️YesNoAn evening€0 if HA already runs
4. ESP32 + cloudYesPartlyA weekend~€5
5. eBUS + ebusd ⚠️YesYesSeveral eveningseBUS adapter

Rules that matter, whichever option you pick

  • Start on steady surplus only. I require it for at least 80 % of a 10-minute window.
  • Rest 30 minutes between boosts. It protects the compressor.
  • Use temporary changes. A quick veto expires on its own; a changed time program doesn't.
  • Cap everything. A maximum room target (mine is 24.5 °C) and a maximum hot water target.
  • Missing data means "stop". If the inverter or the cloud doesn't answer, end the boost.
  • Leave the heat pump's own protections alone: frost protection, the legionella program, minimum run times.
  • Check the room control setting. With room temperature control set to "None", the VRC 700 follows only the outdoor temperature and ignores a raised room target. ⚠️ Changing it to "Active" only makes sense if the controller hangs in a living room.

Is it worth it?

The saving per kWh is the difference between what you pay for grid electricity and what you get for exporting. In Austria that gap is large: you buy at a multiple of the feed-in price. Every kWh the heat pump takes from the roof instead of from the grid in the evening saves that difference.

Where it doesn't help: in December and January there's rarely enough surplus to start a boost at all. The gain comes from spring, autumn and hot water all year round.

FAQ

Can a Vaillant heat pump use surplus solar on its own?

Not automatically. The myVAILLANT app shows solar yield, but the controller doesn't react to it unless an energy manager uses the PV/SG Ready input or something raises the targets for it (Home Assistant, an ESP32, ebusd).

Is the aroTHERM SG Ready?

⚠️ Many aroTHERM installations have an SG Ready-capable input, depending on the controller and the modules installed. Check the installation manual of your controller and ask your installer to enable it.

Does running on surplus wear out the compressor?

Not if you avoid short cycles. Require steady surplus, keep a rest time between boosts, and let each boost run long enough. Raising a target by 1–2 °C for an hour is gentle; switching every few minutes is not.

Does myVAILLANT have an API?

Not an official public one. The app's cloud API is documented by the open-source myPyllant project. It works well, but it's unofficial and rate limited, so build in fallbacks.

What about a dynamic electricity tariff?

The same mechanism works for cheap hours instead of sunny ones: raise the targets when the price is low. I'll cover that in a separate article.

Summary

Start with the time programs: hot water at midday, comfort hours while the sun is up. If you want the heat pump to follow the actual surplus, raise the room and hot water targets with a temporary quick veto, from Home Assistant or a small ESP32, and protect the compressor with a steadiness check and a rest time. SG Ready is a fallback for an existing energy manager, and eBUS is the option for people who want everything local.