DIY zoneregeling met Home Assistant, ESPHome en (connected) thermometers
n.a.v. een vraag hier mijn setup hoe ik zoneregeling uiteindelijk zelf heb ingeregeld.
Achtergrondinformatie
Als eerst, even een beschrijving van mijn huis. twee-onder-een kap, 2012, recht opgetrokken standaard "blokkendoos" a la dit:

Oppervlakte 6x10 meter. 1e verdieping 3 slaapkamers + badkamer. Zolder is geen verwarming aanwezig. gebouwd met cv ketel en Evohome kamerthermostaat in de woonkamer, vloerverwarming bg (5 groepen) en 1e verdieping 4 groepen (1 per kamer). Evohome kon bg en 1e verdieping los schakelen, maar niet losse kamers op de 1e verdieping, het was alles of niets per verdieping. Begin 2024 de cv ketel laten vervangen door de Altherma 8kW. tegelijkertijd ook de vloerverwarming verdelers beiden laten vervangen door een kunststof open verdeler model.
De wens was vooraf om zoneregeling per (slaap)kamer te hebben op de 1e verdieping.
Omdat ik er geen verstand van had destijds, was het idee om Evohome te houden en daar de HCC100 van honeywell bij te plaatsen op de 1e verdieping als regelunit voor de zoneregeling + per kamer een draadloze thermostaat. Kosten: 300 euro voor de HCC100 en 100 euro per kamerthermostaat, excl. installatie kosten. Uiteindelijk in overleg met de installateurs op de dag van installatie afgezien van het hele systeem en daar ben ik zéér blij mee, want Evohome was gegarandeerd een Tweaker onwaardig drama geworden.
Bijzonderheden
Ons huis kent enkele... bijzonderheden. Of noem het "huis eigenschappen", die mogelijk niet voor iedereen hetzelfde zijn en daarom mogelijk mijn keuzes niet goed toepasbaar of adviseerbaar zijn op elk ander huis. Ik noem ze even zodat duidelijk is waarom bepaalde keuzes gemaakt zijn.
De warmtepomp werd zoals gebruikelijk geplaatst met de madoka in de woonkamer en in "kamerthermostaat modus". oftewel: te koud in de kamer = wp aan, te warm in de kamer = wp weer uit.
Onze badkamer werd i.c.m. deze modus zeer slecht warm in de winter, want telkens was er een reden waarom de woonkamer al warm genoeg was om de wp te laten stoppen (zon, koken, oven, etc). De badkamer heeft geen andere verwarming dan de vloer. Die vloer doet er na opstarten van de wp minimaal 2 uur over om van temperatuur te veranderen (lange opstarttijd). Dit verklaart ook waarom die zo slecht warm werd omdat de wp te korte runs maakte.
Ook werd 1 slaapkamer af en toe (ik vermoed idd bij wind uit "verkeerde" richting") ineens een stuk kouder.
De oplossing: Zelf zoneregeling maken die wel slim is.
Ik zal jullie het vele meten (= weten), uitzoeken, trial en error besparen en beschrijven wat ik heb gemaakt.
Als eerste is de oplossing geweest om de warmtepomp niet in kamerthermostaat modus te zetten maar in vertrekwaterregeling. In deze modus staat de warmtepomp, als hij aan staat,
altijd aan. Eenmaal een goede stooklijn ingesteld kan je alleen de LWT verhogen of verlagen t.o.v. de stooklijn. Dit is ideaal voor die dagen met wind uit de verkeerde richting waarin kamers ineens kouder worden dan zou moeten volgens de stooklijn. Hierover later meer. Uitzetten kan via smartgrid (maar zet ook je watertank verwarming uit), via cloud (gebruik ik), en ik denk dat P1P2 MQTT ook werkt, al gebruik ik dat niet.
Daarbij ontstaat dus een nieuw probleem: Als je warmtepomp altijd aan staat, wordt het veel te warm op bepaalde kamers. De oplossing: op (bijna) elke vloerverwarming groep deze actuator monteren:
te vinden op aliexpress voor +- 10 euro per stuk. Ik heb ze Normally Closed (NC), maar Normally Open (NO) is ook mogelijk. Enige verschil is dat NC versies 2watt stroom nodig hebben om open te blijven, en NO 2 watt nodig hebben om dicht te blijven.
Die actuatoren moeten uiteraard aan worden gestuurd, en dat doe ik met deze relais modules (de 4 kanaals variant):
https://nl.aliexpress.com/item/1005003750654499.html
Voor de oplettende lezer die denkt: "Huh een 4 kanaals relais voor 5 groepen verwarming?" Scherp! Lees vooral verder.
7 actuatoren: 7 x 10 euro = 70 euro
2x 4 kanaals relais: 2x 4 euro = 8 euro
Die relais worden vervolgens weer aangestuurd door een ESP32. Ik gebruik deze:
https://www.wemos.cc/en/latest/s3/s3_mini.html
omdat ik hier ook DS18B20 sensoren aan kon solderen zodat ik gelijk alle groepen afzonderlijk kon meten op de verdelers.
2x ESP32 S3: 2x 10 euro = 20 euro
Uiteindelijk ziet dat er zo uit:
in de kabeldoos zit de relais en lasklemmen om de actuatoren van stroom te voorzien (die werken op 230v)., de ESP32 zit in het zwarte kastje wat met kleurrijke kabels naar de kabeldoos gaat.
dus reken er nog +- 20 euro per verdeler bij voor:
-evt usb lader
-bekabeling
-lasklemmen
-kabeldoos
-geaarde stekker
Hiervoor is het wel noodzakelijk dat je in de buurt van je verdeler een stroompunt hebt zitten, maar volgens mij is dat standaard aanwezig.
Dan missen we alleen nog de "thermostaten". Ik schrijf die tussen aanhalingstekens want wat ik gebruik zijn eigenlijk gewoon temperatuursensoren. het thermostaat/regel gedeelte gebeurt puur virtueel in HA, daarover later meer. Ik heb gekozen voor XMWSDJ04MMC:
Want deze hadden een mooi E-ink scherm zodat ik ook analoog de temperatuur af kon lezen. Vond ik belangrijk. Enige nadeel aan deze modellen is dat ze slechts 1x per 5 minuten hun temperatuur/RLV "beaconen" via bluetooth, dus het is een relatief traag systeem, wat helemaal prima is want dat is vloerverwarming ook! De ESP32's gebruik ik niet alleen voor het aansturen van de actuatoren maar ook als bluetooth proxy om die sensor data op te vangen. werkt top!
1 thermostaat per slaapkamer + badkamer = 4x 10 = 40 euro.
totaal kosten kom ik dan op net onder de 200 euro uit.
En daarna begint het echte tweaken natuurlijk, want er komt best wat bij kijken.
Waar moest ik rekening mee houden
Begin bij het maken van virtuele thermostaten per kamer. Dit doe ik met
https://github.com/zacs/ha-dualmodegeneric
Omdat HA standaard niet toestaat dezelfde switch te gebruiken als actie als de thermostaat in heat staat of in cool staat. voorbeeld yaml van 1 thermostaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| climate:
- platform: dualmode_generic
unique_id: slaapkamerthermostaat
name: Slaapkamer Thermostaat
heater: switch.vloerverwarming_boven_vloerlus_1 # Heating switch
cooler: switch.vloerverwarming_boven_vloerlus_1 # Cooling switch (using the same switch)
target_sensor: sensor.thermometer_1 #<<<dit is de sensor in HA van je thermometer!
min_temp: 15
max_temp: 30
target_temp: 19.5
cold_tolerance: 0.1
hot_tolerance: 0.1
initial_hvac_mode: "off"
precision: 0.1
target_temp_step: 0.5 |
Ik laat het "hoe zorg ik dat mijn thermometer in HA komt" even buiten beschouwing, want dat is afhankelijk van de thermometer die je gebruikt.
Nu had ik thermostaten, in HA, die zodra de current temp onder/boven de target temp komt (is gewoon instelbaar als een climate entity, de 19.5 hierboven is alleen voor startup), de vloerverwarming lus opent of weer dicht zet. En als grote bonus ook nog instelbaar in stapjes van 0.1c i.p.v. 0.5 wat vaak gebruikelijk is (dus als setpoint 19.0 is, dan actuator openen als temp 18.8 is, en dicht als het 19.2 is)
Omdat in het stookseizoen de badkamer (bijna) nooit warm genoeg werd, kon ik dus in LWT modus draaien. Daardoor was mijn "hoe zorgt een kamerthermostaat op een bad/slaapkamer er voor dat de WP aan gaat" opgelost, want die staat dus altijd aan. Dat is wat mij betreft ook gelijk het lastigste aan deze setup. Als LWT voor jouw huis niet een optie is, dan weet ik niet hoe ik dit anders zou regelen. Maar in theorie zou dit altijd wel mogelijk moeten zijn denk ik, het is uiteraard gewoon een kwestie van de juiste stooklijn. Daarbij heb ik er ook voor gekozen om de badkamer niet te voorzien van actuator. Er hangt wel een thermostaat, maar de climate entity in HA stuurt geen actuator op de groep aan (te zien op de foto de blauwe thermostaat knop / dop). De badkamer is dus een "open zone" en staat altijd aan.
Na bovenstaande ben je er bijna. Je hebt zoneregeling, de woonkamer verdeler zet zichzelf dicht zodra de target temp wordt gehaald. (Ik heb o.b.v. de ESPAltherma RoomTemperature sensor ook voor de woonkamer een dualmode_generic thermostat aangemaakt.)
Maar mijn relais zijn maar 4 kanaals en mijn verdeler beneden is 5 groepen (Ok in theorie zou een 1 kanaals relais voldoende moeten zijn, want alle groepen moeten tegelijk open of dicht).
Ik heb door meten de vloerlus op de bg gevonden die het grootst is / waarbij de retour temp altijd het laatste was. Die groep hanteer ik ook als "open zone".
Die groep op de bg + badkamer als open zone was noodzakelijk om storingen in de wp te voorkomen, met name tijdens defrosts. De wp vereist dan een bepaald debiet en als je dat niet haalt krijg je storing. die ene zone open op de bg + de bypass (vlakbij de wp binnenunit zelf) maakte dat dit voor mij de beste oplossing was, zodat de bypass alleen open gaat als er een defrost plaats vindt in het geval dat de woonkamer geen warmte vraag heeft (actuatoren gesloten). De actuatoren werken zeer traag (zo maar 60 sec voor ze open gaan na schakelen) en ik durf het niet aan om te vertrouwen op een automation die zegt "Als ESPAltherma aangeeft dat er een defrost plaats vindt, zet alle actuatoren open.
de kers op de taart
En omdat je nu al deze thermostaten in HA hebt, kan je i.c.m. ESPAltherma data en de Daikin Onecta integratie echt tweakerwaardige dingen gaan doen (voor zo ver je eigen zoneregeling maken dat niet al was):
- Als ESPAltherma aangeeft dat de WP in CV Heating modus staat, zet alle thermostaten in heating modus, idem voor cooling. (de thermostaat in HA zet de switch van de actuator pas om zodra current temp boven/onder setpoint komt) Zo staan je thermostaten altijd in de juiste modus, en "stuurt" je wp dus op heating of cooling. Aangezien ik heating / cooling handmatig 1-2x per jaar aanzet, is dat prima zo voor mij.
- Je kan nu een automation maken die elke kamer controleert op "Is het warmer / kouder dan het setpoint". Als alle kamers dat zijn, dan kan je via de Onecta integratie de woningverwarming/CV aan/uitzetten. Is voornamelijk van toepassing aan begin en einde stookseizoen en HA checkt dit elk uur.
- vergelijkbaar als bovenstaande: LWT offset increase controleer elke nacht of er een kamer is waarbij de huidige temperatuur te ver onder het setpoint zit. (Wind van verkeerde richting) Zo ja, verhoog LWT (stooklijn) met 2 graden.Wat "te ver onder het setpoint" is, bepaal je uiteraard zelf (per kamer).
- En omgekeerd, LWT offset decrease: als elke kamer op/boven het setpoint zit, verlaag LWT dan met 1 graad. Zo los je (met enige vertraging) een paar dagen koude wind van de verkeerde windrichting op!
- Voor de echte diehards die smartgrid nog slimmer willen maken: Ik zet de wp uit via smartgrid als de prijs op dat moment te hoog is (price level). Dat zorgt voor periodes (vaak 7-9u en 17-22u) dat de wp uit staat. Dat moet de wp later uiteraard weer compenseren. Omdat ik bovenstaande LWT offset automation gebruik, wordt dat compenseren automatisch dagelijks gedaan indien nodig. En wordt het op een kamer echt te koud (current temp meer dan 1c onder setpoint, instelbaar), dan negeren we smartgrid om comfort te behouden.
Conclusie
Uiteindelijk zo ik blij (hobby), vrouw blij (DIY is 2-3x goedkoper) en is het ook nog eens veel flexibeler in te stellen dan via COTS zoneregeling. en door smartgrid i.c.m. dynamisch energiecontract scheelt het ook nog jaarlijks geld. Erg tevreden mee en ik vond het heerlijk om hier "lekker mee te pielen". Maar het is zeker geen goede oplossing voor niet-tweakers die een "set and forget" optie willen.
En nu?
Ik ben voor volgend zomerseizoen aan het kijken hoe ik per thermostaat o.b.v. temperatuur en RLV het dauwpunt kan berekenen, en zo koeling kan laten met genoeg marge tussen vloer temperatuur en dauwpunt, om condensatie te voorkomen.