Illustratie van een rijtjeshuis met zonnepanelen, warmtepomp, thuisbatterij en een ladende auto, verbonden met één thuisserver

Make your battery, heat pump and car work together on tomorrow’s quarter-hour prices

Home Assistant energy management, without the mistakes I already made.

This is one working installation in the Netherlands: a 12 kW Deye inverter with a 30 kWh battery, a 9 kW LG R290 heat pump, a Zaptec charger with evcc, and Tibber quarter-hour prices. I describe how it is built, with the settings and the measurement data.

New to Home Assistant? Read what it is and how to get started first.


Battery on quarter-hour prices

Every 15 minutes, EMHASS looks 36 hours ahead and plans charging and discharging on tomorrow’s prices. A translation layer of my own takes that plan safely to the inverter.

EMHASS and the battery →

A heat pump that pays attention

Home Assistant reads the LG over Modbus and heats the hot water at the cheapest or sunniest hour. A custom room thermostat keeps the compressor calm.

Heat pump over Modbus →

A car that doesn’t steal the sun

evcc gives the home battery priority up to 60 % and then charges the car on surplus solar or below a price limit. The battery never charges the car.

Car and evcc →

One owner per actuator

Every device that can switch something has exactly one piece of software that writes to it. EMHASS does the maths, but controls nothing itself.

Tibber, sun, load, SoC ──> EMHASS (plan)
                              ├──> Translator ──> Deye + battery
                              └──> Hot water  ──> LG heat pump
HA room thermostat ──────────────────────────────────────> LG heat pump
evcc ──────────────────────────────────────────────> Zaptec charger

What went wrong

  • On day one the battery exported itself from 81 down to 25 %, because two automations controlled the same inverter. Read more
  • For three days the heat pump showed frozen values, while everything looked normal. Read more
  • The energy meter showed a neat value in standby and a negative power under load. Read more