Skip to main content

Heat Pumps, Electric Heaters

Under development

The topic of heating devices is still in the testing phase.
For the devices listed here, a sponsorship will be required in the future.

evcc supports different types of heating devices. Simple devices like heaters or fans can be switched on/off via Smart Switches. On this page you will learn how to also heat pumps or electric water heaters can be regulated.

Heat pumps

Many heat pumps support the SG-ready model, allowing their operation to be adapted to the local energy situation. In addition to normal operation, an enhanced operation (boost) and a blocking operation (dimming) can be signaled from the outside.

If excess power is available or the grid power is particularly cheap or clean, evcc can instruct the heat pump to increase the heating power and switch to enhanced operation (boost).

The dimming function is currently not supported. We plan to integrate this via load management. This would also satisfy the requirements for §14e EnWG.

direct communication

Many modern heat pumps offer API interfaces, through which not only the operating mode can be set, but also the state of the device (e.g. temperature) can be queried. See heating devices for a list of supported devices.

If your heat pump has an interface that we do not yet support, please create a GitHub Issue with all necessary information.

via relay contacts

Many older heat pumps have SG-ready relay contacts through which the operating state (normal, boost, dimming) can be signaled. In our example, we focus on the switch between normal and boost operation. Here, a controllable relay is used, e.g. a Shelly 1.

This relay is connected to the SG-ready contacts of the heat pump. The exact wiring depends on the device and should be discussed with the installer. If there is excess PV power or cheap energy, evcc switches the relay and gives the heat pump the signal for enhanced operation (boost).

The following diagram shows the setup:

If you want to monitor the power and energy consumption of the heat pump, you can optionally install a meter at the power supply of the device. In the diagram, a Shelly 3EM is shown, but any meter can be used.

This example shows how to configure a heat pump using a Shelly 1 and a Shelly 3EM. The special type sgready is used for this.

loadpoints:
- title: Meine Wärmepumpe
charger: heatpump_control
meter: heatpump_power
# Usual parameters for loadpoints can be added here, especially to prevent short runtimes, e.g.
enable:
threshold: -1300 # Activate at 1.300W power surplas for 5 min.
delay: 5m
disable:
threshold: 150 # Deactivate at 150W power consumption for 20 min.
delay: 20m #some devices require a minimum runtime (check specification / manual of your heatpump)
meters:
- name: heatpump_power
type: template
template: shelly-3em # Power consumption of the heat pump
host: 192.168.0.102

chargers:
- name: heatpump_control
type: sgready
setmode:
source: switch
switch:
- case: 1 # dimm (not supported, yet)
set:
source: error
error: ErrNotAvailable
- case: 2 # normal
set:
source: const
value: false
set:
# Add the function here to set the heatpump in normal operation mode.
# All types of plugins can be used.
source: charger
config:
type: template
template: shelly # Boost contact of the heat pump
host: 192.168.0.101
- case: 3 # boost
set:
# Add the function here to set the heatpump in boost mode.
source: const
value: true
set:
source: charger
config:
type: template
template: shelly # Boost contact of the heat pump
host: 192.168.0.101
getmode:
# Add function here to get the current mode of the heatpump, return
# 1 for reduced operation
# 2 for normal operation
# 3 for boost operation
source: calc
add:
- source: const
value: 2
- source: charger
config:
type: template
template: shelly # Boost contact of the heat pump
host: 192.168.0.101
# temp:
# source: http
# uri: "http://192.168.0.103/temperature"

# [...]
note

This code example contains some redundancies. We will later provide templates for easier configuration of common hardware constellations.

In addition to setmode and getmode, you can optionally add the current temperature (temp) via Plugin. This is only used for display. evcc does not use this value for regulation.

Electric water heaters

evcc forwards the currently available power to the device. This available power is continuously adapted to the current situation, analogously to the charging process of a vehicle.

evcc offers adjustable limits, with which you can set your desired temperature. This should not be understood as a safety feature.

danger

Your electric water heater must have its own temperature limit, which prevents overheating in case of a failure of evcc.


Heating devices

alpha innotec

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Bosch SG Ready

Integrated via EMSESP

chargers:
- name: my_heating
type: template
template: emsesp
host: 192.0.2.2 # IP address or hostname
token: # Token, optional
powersource: hpcurrpower # Power source, [hpcurrpower, hppower] (optional)
tempsource: # Temperature source, [warmwater] (optional)

Buderus

Logamatic HMC 20

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Logamatic HMC 20 Z

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

SG Ready

Integrated via EMSESP

chargers:
- name: my_heating
type: template
template: emsesp
host: 192.0.2.2 # IP address or hostname
token: # Token, optional
powersource: hpcurrpower # Power source, [hpcurrpower, hppower] (optional)
tempsource: # Temperature source, [warmwater] (optional)

Bösch x-change

chargers:
- name: my_heating
type: template
template: kermi
host: 192.0.2.2 # IP address or hostname
tempsource: # Temperature source, [warmwater, buffer] (optional)

CTA All-In-One Aeroplus

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Daikin HomeHub (SG Ready)

chargers:
- name: my_heating
type: template
template: daikin-homehub

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: # Temperature source, [warmwater, buffer] (optional)

Elco

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

IDM

chargers:
- name: my_heating
type: template
template: idm

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: # Temperature source, [warmwater_top, warmwater_bottom, buffer] (optional)

Junkers SG Ready

Integrated via EMSESP

chargers:
- name: my_heating
type: template
template: emsesp
host: 192.0.2.2 # IP address or hostname
token: # Token, optional
powersource: hpcurrpower # Power source, [hpcurrpower, hppower] (optional)
tempsource: # Temperature source, [warmwater] (optional)

Kermi x-center pro

chargers:
- name: my_heating
type: template
template: kermi
host: 192.0.2.2 # IP address or hostname
tempsource: # Temperature source, [warmwater, buffer] (optional)

Lambda EU-L Series

Energy management settings of the device:

  • E-Meter communication type: "ModBus Client"
  • E-Meter measuring point: "Pos. E-Überschuss"
chargers:
- name: my_heating
type: template
template: lambda-zewotherm
host: 192.0.2.2 # IP address or hostname
tempsource: # Temperature source, [warmwater_top, warmwater_bottom, buffer_top, buffer_bottom] (optional)

my-PV

AC ELWA 2

chargers:
- name: my_heating
type: template
template: ac-elwa-2

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
scale: 1 # Scale factor for power limit, optional
Sponsor-Token erforderlich

Weitere Informationen zum 💚 evcc Sponsorship gibt es hier.

AC•THOR

chargers:
- name: my_heating
type: template
template: ac-thor

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: 1 # Temperature source, [1, 2, 3] (optional)
scale: 1 # Scale factor for power limit, optional
Sponsor-Token erforderlich

Weitere Informationen zum 💚 evcc Sponsorship gibt es hier.

AC•THOR 9s

chargers:
- name: my_heating
type: template
template: ac-thor

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: 1 # Temperature source, [1, 2, 3] (optional)
scale: 1 # Scale factor for power limit, optional
Sponsor-Token erforderlich

Weitere Informationen zum 💚 evcc Sponsorship gibt es hier.

Nibe AP-AW10

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Novelan WPR NET

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Roth

ThermoAura

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

ThermoTerra

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Stiebel Eltron

LWA/LWZ (SG Ready)

chargers:
- name: my_heating
type: template
template: stiebel-lwa

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: # Temperature source, [warmwater] (optional)

WPM (SG Ready)

chargers:
- name: my_heating
type: template
template: stiebel-wpm

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: # Temperature source, [warmwater, buffer] (optional)

Tecalor THZ (SG Ready)

chargers:
- name: my_heating
type: template
template: stiebel-lwa

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
tempsource: # Temperature source, [warmwater] (optional)

Vaillant SensoNET (SG Ready)

The boost function heats hot water or a boost zone. The boost zone is identified by the ID. The boost temperature is specified in degrees Celsius. If boost temperature is specified, the boost zone is activated, otherwise hot water.

chargers:
- name: my_heating
type: template
template: vaillant
user: # Username, e.g. email address, user id, etc. (optional)
password: # Password, Use single quotes in case of leading zeros (optional)
realm: DE # Region, [DE, AT] (optional)
zone: # Boost zone ID, optional
setpoint: # Boost temperature, optional

Viessmann Heatpump (SG Ready)

One-time hot water preparation to a configurable target temperature. The device automatically decides whether to use the heat pump or the auxiliary electric heater (if available).

chargers:
- name: my_heating
type: template
template: viessmann
user: # Username, Register at [app.developer.viessmann.com](https://app.developer.viessmann.com)
password: # Password, For the configured Viessmann account.
clientid: # Client ID, Configure at [app.developer.viessmann.com](https://app.developer.viessmann.com)
gateway_serial: # Gateway Serial, VitoConnect serial number (VitoCare App -> Settings -> Communication module -> Serial number)
installation_id: # Installation ID, Unfortunately you cannot simply lookup this number in the Viessmann app - instead you need to use the following commands on the command line... we're aware this is not for every user, but currently we don't have a better workflow...<br/> Prerequisites: curl, jq, and the following parameters: ``` VIESSMANN_USER=<your-user> VIESSMANN_PASS=<your-password> VIESSMANN_CLIENT_ID=<your-clientid> ``` Then execute the following to get an oauth token (n.b. it's best to paste the entire block as-is, since the intermediate 'CODE' is only valid for 20 seconds): ``` VIESSMANN_REDIRECT_URI="http://localhost:4200/" VIESSMANN_CODE_CHALLENGE="5M5nhkBfkWZCGfLZYcTL-l7esjPUN7PpZ4rq8k4cmys" VIESSMANN_CODE_VERIFIER="6PygdmeK8JKPuuftlkc6q4ceyvjhMM_a_cJrPbcmcLc-SPjx2ZXTYr-SOofPUBydQ3McNYRy7Hibc2L2WtVLJFpOQ~Qbgic455ArKjUz9_UiTLnO6q8A3e.I_fIF8hAo" VIESSMANN_CODE=$(curl -X POST --silent --user $VIESSMANN_USER:$VIESSMANN_PASS --output /dev/null --dump-header - "https://iam.viessmann.com/idp/v3/authorize?client_id=$VIESSMANN_CLIENT_ID&redirect_uri=$VIESSMANN_REDIRECT_URI&scope=IoT%20User%20offline_access&response_type=code&code_challenge=$VIESSMANN_CODE_CHALLENGE&code_challenge_method=S256" | grep "^location: " | sed 's/.*\?code=\(.*\).*/\1/' | tr -d '[:space:]') TOKEN_RESPONSE=$(curl -XPOST --silent -H "Content-Type: application/x-www-form-urlencoded" --data "grant_type=authorization_code&client_id=$VIESSMANN_CLIENT_ID&redirect_uri=$VIESSMANN_REDIRECT_URI&code_verifier=$VIESSMANN_CODE_VERIFIER&code=$VIESSMANN_CODE" https://iam.viessmann.com/idp/v3/token) VIESSMANN_TOKEN=$(echo $TOKEN_RESPONSE | jq --raw-output .access_token) ``` Finally, get the installation id: ``` curl --silent -H "Authorization: Bearer $VIESSMANN_TOKEN" https://api.viessmann.com/iot/v1/equipment/installations?includeGateways=true | jq '.data[].id' ```
device_id: 0 # Device ID, typically `0`
target_temperature: 45 # Target temperature for one-time charge (°C), max. 60°C

Wolf

BWL

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

BWS

For heatpumps with Luxtronik 2.1 controller. Uses modbus-tcp. Requires software v3.90.3 or later. Enable via SERVICE, Systemsteuerung, Konnektivität, Smart-Home-Interface.

chargers:
- name: my_heating
type: template
template: luxtronik

# Modbus TCP
modbus: tcpip
id: 1
host: 192.0.2.2 # Hostname
port: 502 # Port
heatoffset: 0.0 # Heating temperature boost (K), optional

Zewotherm EU-L Series

Energy management settings of the device:

  • E-Meter communication type: "ModBus Client"
  • E-Meter measuring point: "Pos. E-Überschuss"
chargers:
- name: my_heating
type: template
template: lambda-zewotherm
host: 192.0.2.2 # IP address or hostname
tempsource: # Temperature source, [warmwater_top, warmwater_bottom, buffer_top, buffer_bottom] (optional)