Heat Pumps, Electric Heaters
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"
# [...]
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.
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
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
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
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)