Disclosure: de link naar HomeWizard in dit artikel is een affiliate-link (via Daisycon). Koop je daarvia, dan ontvangen wij mogelijk een commissie, zonder extra kosten voor jou. Met warmtepompfabrikanten en energieleveranciers in dit artikel hebben wij géén commissie- of affiliaterelatie; die namen worden alleen genoemd omdat hun integratie of documentatie relevant is. Bron voor de integratie-informatie: home-assistant.io, opgehaald op 21 augustus 2026. HomeWizard-prijs: homewizard.com, prijspeil augustus 2026.
Kort antwoord: een warmtepomp koppel je aan Home Assistant via een merkintegratie (Nibe, MELCloud, Daikin, ViCare, Atag One) of — als die er niet is — via Modbus TCP met de registeradressen uit het serviceboek. Daarna heb je een prijsentiteit en een buffer nodig om warmte naar goedkope uren te verschuiven. Hieronder de YAML die daarvoor nodig is.
Wat werkt er echt: de integraties die in Home Assistant core zitten
Dit is het eerste dat je wil weten voordat je iets koopt of aansluit. De volgende integraties staan in Home Assistant core (gecontroleerd op home-assistant.io, 21 augustus 2026):
| Integratie | Merk/toestel | Verbinding | Sinds |
|---|---|---|---|
nibe_heatpump | Nibe F- en S-serie, VVM | Modbus TCP (S-serie), nibegw (RS485), Modbus RTU | HA 2022.10 |
melcloud | Mitsubishi Electric, lucht-lucht en lucht-water | cloud polling | ouder dan 2022 |
daikin | Daikin met wifi-controller BRP069A41/42/43/45 | lokaal (UDP) | HA 0.59 |
vicare | Viessmann ViCare | cloud polling (API-limiet op gratis laag) | HA 0.99 |
atag | Atag One thermostaat | lokaal | HA 0.109 |
homewizard | P1-meter, Energy Socket, kWh-meter, Plug-In Battery | lokaal, 5 s polling | HA 2022.2 |
modbus | elk toestel met Modbus TCP/RTU | lokaal | core |
Twee dingen die hier níet in staan, en die je elders wel als feit ziet opduiken:
- Quatt. Er is op 21 augustus 2026 geen integratiepagina voor Quatt in Home Assistant core (
home-assistant.io/integrations/quatt/geeft een 404). Koppelen kan via een custom-integratie uit de community, maar dat is geen door HA-core onderhouden en gedocumenteerde integratie. Wij noemen die koppeling daarom onbevestigd en niet als officiële integratie. - Vaillant en Bosch. Ook hiervoor staat niets in core. Er bestaan community-integraties op basis van de fabrikant-app-API’s; die kunnen breken zodra de fabrikant zijn app-API wijzigt.
De les: check vóór aanschaf of jouw exacte model in core staat of een Modbus-poort heeft. Een merk dat alleen via een app-API te bereiken is, is de kwetsbaarste route.
Stappenplan
Stap 1 — meet eerst, stuur later. Zet een P1-meter in Home Assistant en laat het een tot twee weken meelopen. Je wil weten hoeveel kWh de warmtepomp per etmaal trekt en op welke uren. Zonder dat getal kun je later niet zien of je automatisering iets oplevert.
Wij gebruiken zelf een P1-meter als databron voor de energiepagina’s op deze site. Bekijk de HomeWizard P1-meter (€24,95)
Stap 2 — haal de prijsdata binnen. Je hebt een entiteit nodig met de prijs per uur voor vandaag en (na ongeveer 13:00) morgen. Dat kan via de integratie van je leverancier, of via een REST-sensor op een publieke bron. Zie het YAML-voorbeeld hieronder met onze eigen open endpoint.
Stap 3 — koppel de warmtepomp. Eerst kijken of je merk in de tabel hierboven staat. Zo niet: serviceboek erbij, Modbus TCP aanzetten op de regelaar en de registeradressen opzoeken. Begin met alleen lezen (temperaturen, vermogen) voordat je iets gaat schrijven.
Stap 4 — bepaal wat je stuurt. Er zijn drie realistische stuurgrepen, in volgorde van veiligheid: (a) het setpoint van het buffervat of de warmtapwaterboiler, (b) een verschuiving op de stooklijn (een paar graden op of af), (c) aan/uit via een blokkeeringang. Optie (c) is het grofst en kost het meeste rendement.
Stap 5 — bouw een fallback. De warmtepomp moet zonder Home Assistant zijn eigen regeling blijven volgen. Schrijf nooit een permanente blokkade weg die blijft staan als HA crasht, en zet een for-duur of een watchdog-automatisering op elke blokkade.
Stap 6 — evalueer over een heel stookseizoen. Vergelijk niet twee weken met twee weken: correct voor graaddagen. Een milde week ziet er altijd uit als een succesvolle automatisering.
YAML-voorbeeld 1: Modbus TCP (generiek)
Onderstaande configuratie is een template: de registeradressen hieronder zijn voorbeelden en verschillen per fabrikant en zelfs per firmwareversie. Haal jouw adressen uit het Modbus-document of serviceboek van je toestel — verkeerde adressen schrijven kan instellingen overschrijven.
# configuration.yaml
modbus:
- name: warmtepomp
type: tcp
host: 192.168.1.50
port: 502
delay: 5
message_wait_milliseconds: 30
sensors:
- name: wp_aanvoertemperatuur
slave: 1
address: 40001 # voorbeeldadres — vervang door dat van jouw toestel
input_type: holding
data_type: int16
scale: 0.1
precision: 1
unit_of_measurement: "°C"
device_class: temperature
- name: wp_retourtemperatuur
slave: 1
address: 40002
input_type: holding
data_type: int16
scale: 0.1
precision: 1
unit_of_measurement: "°C"
device_class: temperature
- name: wp_elektrisch_vermogen
slave: 1
address: 40010
input_type: holding
data_type: uint16
unit_of_measurement: W
device_class: power
state_class: measurement
climates:
- name: warmtepomp_buffer
slave: 1
address: 40100
input_type: holding
target_temp_register: 40100
data_type: int16
scale: 0.1
precision: 1
min_temp: 20
max_temp: 55
temp_step: 0.5
Dit levert je een climate.warmtepomp_buffer plus drie sensoren op. Begin met de sensoren en laat het climates-blok eruit tot je zeker weet dat het adres klopt.
YAML-voorbeeld 2: day-ahead-prijzen als REST-sensor
Heeft je leverancier geen integratie, dan kun je de uurprijzen ophalen uit een publieke bron. Onderstaand voorbeeld gebruikt onze eigen open endpoint, die de day-ahead-prijzen (kale EPEX-prijs inclusief btw, exclusief energiebelasting en inkoopvergoeding) per uur teruggeeft:
# configuration.yaml
rest:
- resource: https://beheer.wtdigital.nl/api/public/stroomprijzen
scan_interval: 900
sensor:
- name: stroomprijs_gemiddeld_vandaag
value_template: "{{ value_json.gemiddelde }}"
unit_of_measurement: "EUR/kWh"
- name: stroomprijs_nu
value_template: >
{% set u = now().hour %}
{{ (value_json.uren | selectattr('uur','eq',u) | map(attribute='prijs') | first) | default(0) }}
unit_of_measurement: "EUR/kWh"
json_attributes:
- uren
- datum
- bron
Let op: dit is de kale marktprijs. Wat jij per kWh betaalt is die prijs plus energiebelasting (€0,11085 per kWh inclusief btw in 2026) plus de inkoopvergoeding en vaste kosten van je leverancier. Voor sturing maakt dat niet uit — de belasting is elk uur gelijk, dus de spread tussen uren is hetzelfde — maar voor het uitrekenen van je besparing wel.
YAML-voorbeeld 3: is dit een goedkoop uur?
Een drempel van “onder 10 cent” werkt in de winter anders dan in de zomer. Beter is een relatieve drempel: goedkoop ten opzichte van het daggemiddelde.
# configuration.yaml
template:
- binary_sensor:
- name: Goedkoop uur
unique_id: goedkoop_uur
state: >
{% set nu = states('sensor.stroomprijs_nu') | float(0) %}
{% set gem = states('sensor.stroomprijs_gemiddeld_vandaag') | float(0) %}
{{ gem > 0 and nu < (gem - 0.05) }}
availability: >
{{ states('sensor.stroomprijs_nu') not in ['unknown', 'unavailable'] }}
YAML-voorbeeld 4: buffer opladen in de goedkope uren
# automations.yaml
- alias: Buffer opladen bij lage dagprijs
id: wp_buffer_laden_goedkoop
trigger:
- platform: state
entity_id: binary_sensor.goedkoop_uur
to: "on"
condition:
- condition: numeric_state
entity_id: sensor.buitentemperatuur
above: -2
- condition: numeric_state
entity_id: sensor.wp_aanvoertemperatuur
below: 42
action:
- service: climate.set_temperature
target:
entity_id: climate.warmtepomp_buffer
data:
temperature: 47
- delay: "02:00:00"
- service: climate.set_temperature
target:
entity_id: climate.warmtepomp_buffer
data:
temperature: 38
mode: single
Twee dingen over deze automatisering. Ten eerste: de delay met een terugzet-actie is de eenvoudigste vorm van een fallback — na twee uur staat het setpoint weer normaal, ook als de prijsdata daarna uitvalt. Ten tweede: service: mag in recente Home Assistant-versies ook action: heten; beide werken, service: is de vorm die in alle versies sinds jaren geldig is.
Wil je hetzelfde voor warmtapwater, dan is dat vaak de veiligere eerste stap: een boiler van 180 liter die je van 45 naar 55 °C opwarmt parkeert ongeveer 2 kWh warmte, en anders dan bij vloerverwarming merkt niemand het in het comfort.
YAML-voorbeeld 5: blokkeren op de piek, met watchdog
# automations.yaml
- alias: Warmtepomp terugschroeven op het duurste uur
id: wp_piek_terug
trigger:
- platform: template
value_template: >
{% set uren = state_attr('sensor.stroomprijs_nu','uren') | default([], true) %}
{% set nu = states('sensor.stroomprijs_nu') | float(0) %}
{% set top = uren | map(attribute='prijs') | list | sort | last | default(0) %}
{{ uren | count > 0 and nu >= top }}
action:
- service: climate.set_temperature
target:
entity_id: climate.warmtepomp_buffer
data:
temperature: 32
mode: single
- alias: Watchdog — setpoint nooit langer dan 3 uur verlaagd
id: wp_watchdog
trigger:
- platform: numeric_state
entity_id: climate.warmtepomp_buffer
attribute: temperature
below: 34
for: "03:00:00"
action:
- service: climate.set_temperature
target:
entity_id: climate.warmtepomp_buffer
data:
temperature: 38
mode: single
Wat levert het op? Een modelberekening
Onderstaande cijfers zijn een modelberekening met expliciete aannames, geen meting van een eigen installatie.
Aannames: een warmtepomp die per etmaal 20 kWh elektrisch verbruikt in een koude periode, waarvan je 6 kWh kunt verschuiven van een duur naar een goedkoop uur. Op basis van de EPEX-data over 2025 (jaargemiddelde €0,105/kWh inclusief btw) is een spread van €0,08/kWh tussen het goedkoopste en het duurste kwart van de dag een realistische orde van grootte in het stookseizoen; sommige dagen zijn veel beter, sommige vlak.
- Bruto prijswinst: 6 kWh × €0,08 = €0,48 per etmaal.
- Rendementsverlies: warmte wegzetten op een hogere temperatuur verlaagt de COP. Ga uit van 8 procent slechter rendement op die 6 kWh, dan kost dat ongeveer 0,5 kWh extra tegen een gemiddelde all-in prijs van €0,26/kWh (aanname all-in: EPEX €0,105 + energiebelasting €0,11085 + €0,044 opslag en vaste-kostenomslag, alle bedragen inclusief btw) — circa €0,13.
- Netto: ongeveer €0,35 per etmaal, over 150 stookdagen circa €50 per jaar.
Dat is het eerlijke beeld: prijssturing van een warmtepomp is geen verdienmodel maar een optimalisatie. Het loont vooral als je toch al een dynamisch contract hebt, als je een echt buffervat hebt (niet alleen vloerverwarming) en als je het opzetten als hobby ziet. Heb je een vast contract, dan is er geen spread om op te sturen en blijft alleen hysterese-optimalisatie over — dat is voor de meeste huishoudens de tijdsinvestering niet waard.
Reken het door met je eigen cijfers: kijk in de stroomprijzen per uur hoe groot de spread op jouw dagen werkelijk is.
Voorbeeldopzet: Daikin Altherma 3H op een dynamisch contract
Een opzet die volledig uit publiek gedocumenteerde onderdelen bestaat: een Daikin Altherma 3H, gekoppeld via de wifi-controller (BRP069A4x) en de daikin-integratie in HA core, met de uurprijzen uit een leveranciersintegratie of de REST-sensor hierboven.
De automatisering: zakt de dag-vooruitprijs onder de drempel én ligt de buitentemperatuur boven nul, dan gaat het setpoint van het buffervat omhoog zodat er warmte wordt weggezet in de goedkope uren. In de dure uren draait de pomp op een lager setpoint of staat hij stil.
Wat dit oplevert hangt af van drie dingen: de bufferomvang (hoeveel kWh je kunt wegzetten), het temperatuurverschil dat je bereid bent te accepteren, en de spread tussen goedkope en dure uren. Het verschuiven van warmte naar een hogere aanvoertemperatuur kost rendement — een warmtepomp die naar 55 °C opwarmt heeft een merkbaar lagere COP dan bij 40 °C — dus de prijswinst moet groter zijn dan het COP-verlies. Bij smalle spreads valt dat nadelig uit, bij brede spreads gunstig.
Veelgemaakte integratiefouten
- Te agressief sturen. Modulerende warmtepompen werken het efficiëntst op een constante curve. Vaker schakelen verlaagt de COP juist.
- Buitensensor negeren. Sturen op alleen prijs, zonder buitentemperatuur, leidt in het voorjaar tot oververhitting en in strenge vorst tot een pomp die op het verkeerde moment uit staat.
- Verkeerde Modbus-mapping. Niet elk toestel van hetzelfde merk heeft dezelfde registeradressen; ze wijzigen ook tussen firmwareversies. Serviceboek erbij, en eerst alleen lezen.
- Geen veiligheidsfallback. Als HA crasht moet de warmtepomp zijn eigen logica blijven volgen. Bouw een watchdog zoals in voorbeeld 5.
- Vloerverwarmingstraagheid onderschatten. Een vloer reageert in uren op een setpointwijziging, niet in minuten. Plan vooruit, of stuur op het buffervat en de boiler in plaats van op de vloer.
- Cloud-API-limieten negeren. Bij ViCare loop je op de gratis laag tegen de limiet aan als je elke 10 seconden pollt; de integratie valt dan uit precies wanneer je hem nodig hebt.
Wanneer integratie de moeite niet waard is
Heb je een vast energiecontract, dan is er geen prijsverschil per uur om op te sturen; wat overblijft is comfort en inzicht, niet besparing. Heb je een hybride opstelling zonder dataport voor modulatie, dan kun je via HA hooguit aan/uit sturen — en dat doet de regeling van de installatie zelf doorgaans beter. En heb je geen enkele buffer (geen buffervat, geen boiler, alleen radiatoren), dan is er niets om warmte in te parkeren.
Verder lezen: energiemonitor en P1-meters vergeleken, de day-ahead-prijzen per uur, wat het einde van de saldering betekent, openHAB voor zonnepanelen en thuisbatterij en Tado, Nest en Honeywell als slimme thermostaat vergeleken.