Tag: MQTT

  • Optimaliseren van de warmtepomp deel 4

    Nadat het systeem om warmte op te wekken behandels is in de delen 1 en 2 en vervolgens in deel 3 de warmtevraag, is in dit deel het systeem van warmteafgifte het onderwerp.

    Beide deelsystemen horen in evenwicht te zijn. Aangezien ze ieder hun eigen circulatie hebben en deze via een kortsluiting met een buffervat ontkoppeld zijn voor wat betreft de debieten hoeft dat niet zo te zijn, maar dat is wel voordelig.

    Immers: als de circulatie over de radiatoren en de vloerverwarming (veel) hoger is dan die over de warmtepomp, circuleert dit systeem over het buffervat en wordt warm water vanuit de warmtepomp opgemengd met met retourwater uit de radiatoren: dit vernietigt “energiewaarde” (geen energie maar de waarde ervan, oftewel werkt entropieverhogend).

    Analoog is het als de circulatie over de warmtepomp veel hoger is: in dat geval wordt de retourstroom uit de radiatoren opgemengd met warm water uit de warmtepomp en wordt ook daar de energiewaarde vernietigd.

    Nu is de grootte van beide circulaties niet onafhankelijk in te stellen; ze zijn geregelde grootheden. Alle radiatoren en het vloerverwarmingssysteem hebben eigen regelaars die afhankelijk van ieders warmtevraag de stroming vergroten of verkleinen. De circulatie over de warmtepomp wordt gestuurd door het regelen van de verschiltemperatuur van de circulatie over de warmtepomp. Beide circulaties zijn dus afhankelijk van enerzijds de warmtevraag en anderzijds de warmte-input door de warmtepomp.

    De vrijheidsgraden om de warmteafgifte in te stellen zijn de voetventielen van de individuele radiatoren, de instelwaarde van de vloerverwarming en de instelling van de circulatiepomp.

    Om met het laatste te beginnen: de circulatiepomp heeft 3 instellingen voor “hoe hard hij pompt” en 3 instellingen voor de pompcurve, dus in totaal 9 combinaties. Ik heb de laagste instelling voor hoe hard hij pompt, aangezien bij een hogere instelling ik merkte dat constant er circulatie over het verschildrukventiel ging: dat is ongewenst en daarom de lagere waarde. Een mogelijkheid zou nog zijn om de instelwaarde van dit ventiel te verhogen, maar dat heb ik tot nu toe niet gedaan.

    Er zijn 3 pompcurves:

    1. altijd op hetzelfde vermogen; in dit geval zal er bij stroming door de radiatoren een lagere verschildruk ontstaan (hij zakt dan in); dit verstoort dan weer de doorstroming van de andere radiatoren;
    2. een vaste verschildruk; in dat geval zal er bij een lage doorstroming een lager vermogen door de pomp geleverd worden en bij het verder openen van een radiatorventiel gaat de doorstroming omhoog. maar compenseert de pomp dit door meer vermogen; als er geen weerstand in de aan- en afvoerleidingen is, dan zorgt dit ervoor dat de verschildruk over de radiator (min of meer) constant blijft en dat de ventielen ideaal kunnen werken;
    3. een toenemende verschildruk bij een toenemende doorstroming: in dat geval wordt het effect van 2 “overdreven”. er wordt onevenredig meer vermogen geleverd bij toenemende doorstroming en dit compenseert het drukverlies in de aan- en afvoerleidingen zodat ter plaatse van de radiator zelf de verschildruk weer min of meer constant is. Optie 1) is dus: accepteer dat bij hogere doorstroming de verschildruk wat wegval; optie 2 gebruik je bij relatief lage drukval in de leidingen en optie 3) als de leidingweerstand relevant hoog is. Aangezien ik wat langere leidingen heb, heb ik optie 3) ingesteld.

    De instelwaarde voor de vloerverwarming is een vaste instelling van een mechanische regelaar; deze zorgt voor een enigszins fluctuerende temperatuur in de woonkamer (als je er niet meer aankomt) omdat de vloertemperatuur constant is. De instelling is gedurende de loop der tijden tot stand gekomen; met een stift heb ik de voorkeursinstelling en een instelling bij -10 graden gemarkeerd, zodat ik als het nodig is kan bijregelen, wat zelden gebeurt.

    De installatie is ooit (eind 90’er jaren) gebouwd voor een gasketel. Met een warmtepomp heb je beduidend lagere watertemperaturen en is het zaak om de radiatoren goed in te regelen. Normaal wordt een verschiltemperatuur van ca. 10 graden Celsius als vuistregel genomen; in mijn geval zou dat echter tot zodanig koele radiatoren leiden dat ze te weinig capaciteit zouden krijgen. Ik heb er uiteindelijk voor gekozen om ze op een verschiltemperatuur van 6 graden Celsius in te stellen. Diezelfde verschiltemperatuur is ook ingesteld over de warmtepomp.

    Om die verschiltemperatuur te kunnen instellen, moet je die wel kunnen meten. Hiervoor heb ik 2 klemthermometers (Testo 115i) gekocht:

    Deze moet je op/bij de radiator aanbrengen zodat je zo zuiver mogelijk de aan- en afvoertemperaturen kunt meten.

    Het mooie van deze meters is, is dat er een IOS app is, die deze metingen logt, visualiseert én ook een API heeft waarmee je de data live kunnen opvragen. Deze app heb ik op mijn iPad geïnstalleerd.

    De app kan een CSV bestand opleveren. De data erin kun je combineren met metingen van de buitentemperatuur, de warmtepomp-temperaturen, maar ook de Honeywell HR92 metingen en dan kun jet het hele radiatorgedrag beoordelen.

    Het combineren van al die data is best wel een hoop werk. Maar wacht: de gegevens van de warmtepomp en van de HR92 radiatorventielen had ik toch al in mijn MQTT server beschikbaar? Wat nu als ik die van de Testo thermometers daar ook zou kunnen krijgen?

    Ik heb daarom een python script gemaakt (met Chatgpt) dat de API in de iPAD gebruikt om de meetdata op te vragen en die worden vervolgens in de MQTT server gepubliceerd.

    Vervolgens heb ik op dezelfde manier een python script gemaakt dat een logboek van data genereert (wel in csv) dat op hetzelfde tijdstip alle relevante data uit de MQTT server opvraagt (van de warmtepomp, de HR92 regelaars en van de Testo thermometers) en netjes opslaat.

    Een meetsessie duurt makkelijk enkele uren vanwege de traagheid van het systeem: je hoeft de sessie alleen maar op te starten; even te checken of alles werkt en vervolgens heb je er geen omkijken meer naar totdat je de data gaat uitwerken.

    Een logboek ziet er dan zo uit:

    De oranje lijn is de verschiltemperatuur. Bij zit rond de 6 graden; alleen aan het einde zakt die in, omdat dan de temperatuurinstelling verlaagd is en de regelaar de hele watertoevoer naar de radiator heeft dichtgedraaid en het geheel helemaal aan het afkoelen is.

    Op die manier kon ik dus alle radiatoren individueel instellen.

    Het volgende onderdeel behandelt dan hoe alles samenkomt: hoe zorg ik ervoor dat alle temperaturen goed geregeld worden?

  • Optimaliseren van de warmtepomp deel 3

    Dit onderdeel beschrijft het meten van de warmtevraag om ruimtes in mijn huis op de gewenste temperatuur te houden. Die vraag moet dan door het warmtepomp-systeem geleverd kunnen worden.

    In 2020 werd in ons huis het Honeywell EvoHome systeem geïnstalleerd. Dit systeem bestaat uit elektronische radiatorventielen (-kranen) die draadloos met een centrale unit communiceren. Er werden 8 ventielen geïnstalleerd, praktisch in elke ruimte eentje. In de woonkamer is er vloerverwarming die een handmatige temperatuurinstelling bleef behouden en zijn er 3 kleine radiatoren, waarvan 1 er een EvoHome ventiel kreeg en de andere 2 hun mechanische thermostaten hielden.

    De woonkamer is een vreemd geval: de vloerverwarming heeft de grootste invloed op de temperatuur. Ik probeer zo weinig mogelijk aan de temperatuurinstelling (rond 26 °C) te veranderen. De enige Evohome regelaar (en de mechanische regelaars) kunnen dan lokaal via hun kleine radiator een wat hogere temperatuur leveren met een wat lagere algemene woonkamer-temperatuur.

    Het EvoHome systeem heeft een centrale unit die als kamerthermostaat dient en via welke je voor elke ventiel een temperatuurprogramma kunt instellen. Deze unit communiceert met het internet en heeft natuurlijk een passend gebruikersinterface.

    Tenslotte heeft het systeem een kastje dat oorspronkelijk mijn oude CV-installatie aantuurde met een aan/uit-regeling. De oude CV-ketel had een verouderd protocol voor het modulerend aansturen, maar dat bleek niet compatibel te maken met dat van het EvoHome systeem.

    Nadat de warmtepomp geïnstalleerd was, was het kastje dat de CV aanstuurde niet meer nodig; in de centrale unit kon deze ook uit de functionaliteit verwijderd worden en sindsdien is het EvoHome systeem dus een losstaand systeem dat de temperatuur in de verschillende ruimtes probeert te regelen, zonder de warmtebron te kunnen aansturen. Dat hoeft geen probleem te zijn, als er maar voldoende warmte (de aanvoertemperatuur naar de radiator moet hoog genoeg zijn) beschikbaar is, wanneer deze nodig is. En dat is nu het doel van het optimaal instellen van de stooklijn (en de andere parameters).

    Het EvoHome systeem heeft ook een API via welke je meetgegevens kunt opvragen; misschien kun je ook dingen instellen, maar dat doe ik niet; het gaat prima via het gebruikersinterface. Er is een standaard module voor deze API van Domoticz en die gebruik ik dus om de gegevens op te halen en verder te verwerken.

    De API levert het setpoint en de gemeten waarde per radiator en van de centrale unit (woonkamer) met een resolutie van 0,5 °C. Maar hij levert niet de warmtevraag. Je zou die warmtevraag kunnen afleiden van het setpoint en de gemeten waarde, maar dat zou te speculatief en naar mijn inschatting te onnauwkeurig zijn; het regelalgoritme ken ik niet.

    In het EvoHome-systeem communiceren de onderdelen met elkaar via een draadloos protocol en wel op 868 Mhz. Er bestaat een USB dongle, die bestaat uit een transceiver chip samen met een micro-Arduino onder de naam Nano CUL 868.

    Je kunt er misschien wel meer mee, maar ik gebruik deze USB dongle om het communicatieverkeer tussen de EvoHome onderdelen af te luisteren, en met name dan de signalen die door de radiator-ventielen naar de centrale unit worden verstuurd. Ik heb deze bij Amazon besteld. Het jammere is, dat er verschillende protocollen bestaan en dat de firmware die je dan krijgt niet het EvoHome protocol kan ontcijferen. Je moet dus een nieuwe firmware naar de chiup op de Arduino schrijven.

    Dat bleek best wel wat werk: het meeste werk (voor mij) was om een aansluiting op het arduinobordje te maken waarmee ik een programmeerapparaatje kon aansluiten. Dit moest gesoldeerd worden en solderen is niet mijn sterkste kant. Met wat hulp (ik had 3 handen nodig) is het toch gelukt en wonderwel had ik niets beschadigd aan het bordje en de aansluitingen waren allemaal OK, waarna ik de firmware kon laden. Meer informatie op deze pagina.

    Ik kon de dongle in een Raspberry Pi met Ubuntu steken en daarop de EvoGateway software installeren. Het werkte eigenlijk best snel , ook de configuratie is snel aangemaakt, want na een tijdje luisteren naar de communicatie maakt de software zelf alvast een configuratiebestand aan. Volgens mij hoefde ik alleen nog maar de namen van de ruimtes in het huis in te vullen; de rest was er al. (Lijkt de Belastingdienst wel.) En het mooie is: de EvoGateway stuurt de meetgegevens naar een MQTT server.

    Laat ik nou net al een MQTT server hebben met daarop de data van de warmtepomp (en ook van de thuisbatterij, maar dat is een ander verhaal) en de EvoHome signalen konden er gemakkelijk bij. Ik moest nog wel een aparte Domoticz module maken (met behulp van Chatgpt) om deze gegevens in te lezen, maar toen had ik uiteindelijk alles.

    Het resultaat was: setpoints en temperaturen in hogere resolutie en een nieuwe meting per radiator-ventiel; “heat demand” oftewel “warmtevraag” op een schaal van 0 tot 1.

    Mij is geen documentatie bekend, maar kijkende naar het gedrag van de regelaars, beschouw ik een waarde van 0,5 als “in balans”; een waarde lager dan dat als “meer dan genoeg voorhanden” en groter dan 0,5 “ik heb meer nodig”. Dit betekent dan, dat het maximum van alle HD waardes de overall vraag bepaalt om ervoor te zorgen dat alle temperaturen adequaat gehandhaafd kunnen worden.

    Met dit hele verhaal is het dus mogelijk om de in deel 2 al genoemde optimalisatie-doelstelling verder uit te werken, ware het niet dat … er uiteenlopende waardes van de heat demand (HD) waren over de verschillende radiatoren en ik me ging afvragen: zijn alle radiatoren wel goed ingesteld? Deze vraag is het onderwerp van deel 4.

  • Optimaliseren van de warmtepomp deel 1

    In plaats van de hele infrastructuur van mijn thuis-automatisering helemaal uit te leggen, ga ik de laatste toepassing ervan, het optimaliseren van de warmtepomp beschrijven en en passant komen de onderdelen van die automatisering wel langs.

    In 2022 was mijn oorspronkelijk verwarmingsketel aan vervanging toe en toen besloten we een hybride warmtepomp / gasketel combinatie te nemen. Dat werd een Nefit Bosch Enviline Monoblock. Daar zit een complexe binnen-unit bij die alle circulatiestromen stuurt met de benodigde meet- en regel functionaliteit. Er zijn maar beperkte instelmogelijkheden (zeker als je op het werk gewend bent in het DCS systeem alles te kunnen instellen en wijzigen!), maar wat wel mogelijk is, om alle signalen digitaal op te vragen.

    Er bestaat namelijk een kastje dat het netwerkprotocol (EMS bus) dat de sturing van alle onderdelen van het systeem (de binnen- en de buiten-unit, de communicatie met de CV ketel (ook Nefit) kan afluisteren. Dat is een kastje van BBQKees. In totaal zijn er zo’n 100 signalen, maar een hoop ervan zijn overbodig of nietszeggend, dus uiteindelijk verwerk is er iets meer dan de helft ervan, zeg zo’n 65 signalen.

    Het BBQKees kastje kan als MQTT client communiceren met een MQTT server en daarop al die meetgegevens publiceren.

    In mijn thuis automatisering speelt Domoticz een centrale rol als centrale waarop vele signalen binnenkomen. Ik heb het ooit eens geïnstalleerd toen ik in 2019 begon met zonnepanelen en ik de gegevens van mijn gas- en stroommeter wilde registreren. Nadien zijn er diverse andere typen signalen aan toegevoegd. De functionaliteit van Domoticz vind ik niet denderend, maar je kunt de metingen doorsturen naar InfluxDB en dat is de kern van de verwerking van real-time signalen naar “bruikbare” geaggregeerde data.

    Domoticz nu, kan zich abonneren op MQTT data en het is zelfs zo dat het BBQKees der opbouw van het topic met al die EMS meetgegevens zodanig kan doen dat je met een eenvoudige Domoticz module ze allemaal naar binnen kunt halen.

    De Domoticz applicatie draait op een dedicated Raspi server en op diezelfde server heb ik de MQTT server software geïnstalleerd. Deze server draait in zijn eigen VLAN in mijn thuisnetwerk. Het BBQKees kastje zit in het IoT VLAN en met firewall-regels op de OPNsense zorg ik ervoor dat hij op de MQTT server kan publiceren.

    Even terug naar het oorspronkelijke doel: het optimaliseren van de hybride warmtepomp-installatie: je hebt daarvoor meetgegevens nodig en dat is dus mogelijk doordat Netfit-Bosch het EMS protocol gebruikt om systeem-onderdelen met elkaar te laten communiceren. Aan datzelfde netwerk kun je een BBQKees kastje koppelen dat naar een servertje met Domoticz en een MQTT server de signalen kan ontvangen.

    Om het deel van de warmtepomp compleet te maken, hierbij ook nog een schema van het fysieke systeem:

    Er zijn twee circulatiepompen, eentje over de radiatoren en de vloerverwarming (“Buderus” pomp, eigenlijk een Buderus-systeem met daarin een Wilo pomp) en eentje die de circulatie over de buiten-unit stuurt (zit in de binnen-unit). Die laatste circulatiepomp regelt het temperatuurverschil ((TC3 – TC0) over de buiten-unit door de circulatiesnelheid aan te passen. Je kunt daarvan het setpoint instellen, maar Nefit Bosch geeft hiervoor een advieswaarde.

    Dit is het voorlopig even. De volgende hoofdstukken gaan over

    • De individuele regelventielen (Honeywell EvoHome HR92) op de radiatoren: hierbij de door de fabrikant geleverde API en mijn zelfgebouwde systeempje om de ruwe data uit de communicatie tussen regelaars en centrale unit te onderscheppen)
    • De Testo klem-temperatuurmeters die je op leidingen of radiatoren kunt klemmen om lokale temperaturen te meten; ook hierbij de manier om de signalen via een API te kunnen registreren en via MQTT verder te verwerken
    • Daarna komt het hele meten en optimaliseren van het gehele system aan bod

    Als je al specifieke vragen bet, kun je die via Contact stellen.