ik heb een systeem uit 2020 en ben benieuw of het daar ook op gaat werken.
Een oudere kraan waar alleen stomend water uit komt heeft maar een reedswitch. De weerstand tussen pin 1 en 4 is bij open reedswitch 5.2k Ohm. Dicht 470 Ohm.
[ Voor 63% gewijzigd door nomisx op 23-12-2025 23:07 ]
eerst wat onderdelen bestellen.
hey dat is bijzonder! de oude Q0 kraan die ik heb, had wel 2 reed contacten en de weerstanden die ik eerder opgegeven heb. ik ben wel benieuwd waar het serienummer van jouw kraan mee begint.nomisx schreef op dinsdag 23 december 2025 @ 22:49:
De Quooker is backwards compatible. De oplossing van COZ gaat bij jou ook werken. Een weerstand van 470ohm opent de kokendwaterklep. Dat heb ik getest.
Een oudere kraan waar alleen stomend water uit komt heeft maar een reedswitch. De weerstand tussen pin 1 en 4 is bij open reedswitch 5.2k Ohm. Dicht 470 Ohm.
[Afbeelding]
in jouw geval heb je dus een 4700 ohm weerstand in serie met een 470 ohm dus dat is ~5200 ohmnomisx schreef op dinsdag 23 december 2025 @ 22:49:
De Quooker is backwards compatible. De oplossing van COZ gaat bij jou ook werken. Een weerstand van 470ohm opent de kokendwaterklep. Dat heb ik getest.
Een oudere kraan waar alleen stomend water uit komt heeft maar een reedswitch. De weerstand tussen pin 1 en 4 is bij open reedswitch 5.2k Ohm. Dicht 470 Ohm.
[Afbeelding]
en het reed contact staat parallel aan de 4700 ohm weerstand. dus als het reed contact dicht gaat wordt de 4700 ohm dus overbrugd en zie je alleen de 470 ohm nog.
Mij kraan geeft op een ohmse waarde van 170 aan tussen pen 1 en 4, dus daar is echt iets mis mee.
Vandaag begin ik met de deurbel schakeling
EDIT: en hierbij de schakeling, ik heb het speakertje even vervangen door een led met weerstand (dit zou ook een relais kunnen zijn. Het werkt, echter de ontvanger reageert ook op mijn echte deurbel en op klik-aan klik-uit. Deze zenden ook op 433 Mhz uit.
Dus als de postbode aanbelt krijgt hij gelijk een kopje thee
Ik ga nu experimenteren met esp32 modules (Arduino).
:strip_exif()/f/image/3ARbk6CEUh1LyWXNQPxpFjfY.jpg?f=fotoalbum_large)
Edit2: de libraries in Arduino werken alleeen op Ardino's en niet op ESp boards.
Dus het wordt zoiets, met een coder en decoder chip
:no_upscale():strip_icc():strip_exif()/f/image/vHYg6wyxuG6n0HfdwcBUuLSH.jpg?f=user_large)
[ Voor 98% gewijzigd door MijnCommentaar op 24-12-2025 16:47 ]
welk exact type is voor jou een nieuwe Quooker kraan?nomisx schreef op woensdag 24 december 2025 @ 17:55:
Heeft iemand kennis over de nieuwe quooker kraan? Is er een digitale protocol? Is er al iets bekend over de aansturing naar de cube?
I´d rather be a hypocrite than the same person forever (Yauch)| 🎸 Niets is zo permanent als een tijdelijke oplossing | Een goed probleem komt nooit alleen | Gibson guitar Fender Guitar God Damn Guitar
ik kan je Home Assistant met de integratie ESPhome erg aanbevelen. dat werkt echt super.MijnCommentaar schreef op woensdag 24 december 2025 @ 08:28:
Ik ga nu experimenteren met esp32 modules (Arduino).
uiteraard hoef je je kraan niet in homeassistant maar daar programmeer je dan je esp's.
vroeger schreef ik ook mijn eigen code voor die dingen maar zo mooi en stabiel als ESPhome krijg je het niet.
bijna alles is al geïntegreerd dus dan kun je het met een paar regels configureren in ESPhome. wat ook cool is is de online logging en over the air (OTA) updaten enz. en het communiceert native met HA. dus aanrader!
https://esphome.io/components/
ik heb ergens wel eens een draadje gelezen hier op tweakers dat er een paar daar mee bezig waren, maar heb daar niks meer over gehoord.nomisx schreef op woensdag 24 december 2025 @ 17:55:
Heeft iemand kennis over de nieuwe quooker kraan? Is er een digitale protocol? Is er al iets bekend over de aansturing naar de cube?
Ik heb het nu werkend met twee eps8266 modules. Lolin D1 mini's, deze kun je met esp now met elkaar laten communiceren. Het is nog een test opstelling, dus nu even wat aan elkaar solderen.JazekerXX schreef op donderdag 25 december 2025 @ 03:06:
[...]
ik kan je Home Assistant met de integratie ESPhome erg aanbevelen. dat werkt echt super.
uiteraard hoef je je kraan niet in homeassistant maar daar programmeer je dan je esp's.
vroeger schreef ik ook mijn eigen code voor die dingen maar zo mooi en stabiel als ESPhome krijg je het niet.
bijna alles is al geïntegreerd dus dan kun je het met een paar regels configureren in ESPhome. wat ook cool is is de online logging en over the air (OTA) updaten enz. en het communiceert native met HA. dus aanrader!
https://esphome.io/components/
ESP-NOW (Espressif Protocol Network) is a fast, low-power, connectionless wireless communication protocol for ESP32/ESP8266 microcontrollers,
dat had ik vroeger wel een mooie oplossing gevonden, maar nu met Home Assistant is alles zo mooi verbonden, en kun je mooie dashboards maken helemaal zoals je wil, hoeft niet natuurlijk maar het kan. er is ook een mooie app van. werkt heel mooi allemaal. kun je ook meteen een smart home maken wat ook leuk is. HA heeft een integratie met zo'n beetje alles.MijnCommentaar schreef op donderdag 25 december 2025 @ 16:11:
[...]
Ik heb het nu werkend met twee eps8266 modules. Lolin D1 mini's, deze kun je met esp now met elkaar laten communiceren. Het is nog een test opstelling, dus nu even wat aan elkaar solderen.
ESP-NOW (Espressif Protocol Network) is a fast, low-power, connectionless wireless communication protocol for ESP32/ESP8266 microcontrollers,
ook wel cool om te zeggen hey google geef me kokend water haha
Ja maar ik wil niet afhankelijk zijn van een Homeassistent.JazekerXX schreef op donderdag 25 december 2025 @ 18:50:
[...]
dat had ik vroeger wel een mooie oplossing gevonden, maar nu met Home Assistant is alles zo mooi verbonden, en kun je mooie dashboards maken helemaal zoals je wil, hoeft niet natuurlijk maar het kan. er is ook een mooie app van. werkt heel mooi allemaal. kun je ook meteen een smart home maken wat ook leuk is. HA heeft een integratie met zo'n beetje alles.
ook wel cool om te zeggen hey google geef me kokend water haha
Sterker nog ik vraag me af of deze oplossing niet teveel stroom vreet van het eigenlijke wireless drukknopje. Wordt vervolgd....
je hoeft de HA server (raspberry pi bijv.) niet te laten draaien. zodra je de software geladen hebt met esphome, draait het stand alone. ik geef alleen aan dat het een hele eenvoudige oplossing is om een ESP te programmeren. en HA is ook heel leuk om eens uit te proberen. maar goed we raken een beetje off topicMijnCommentaar schreef op donderdag 25 december 2025 @ 20:04:
[...]
Ja maar ik wil niet afhankelijk zijn van een Homeassistent.
Sterker nog ik vraag me af of deze oplossing niet teveel stroom vreet van het eigenlijke wireless drukknopje. Wordt vervolgd....
Edit IC 3 en 4 waren nodig omdat wanneer de ontvanger aangaat zonder dat er een zender is wordt het relais gesloten en gaat er dus heet water lopen, met deze chips zorg ik ervoor dat er gecontroleerd wordt of er een geldig zendsignaal is.
Edit2: zorg dat er een antenne op de 433 zender en ontvanger zit, anders kan het signaal niet goed doorkomen.
De zender (deurbel)
:no_upscale():strip_icc():strip_exif()/f/image/3bgVEB5g1nUi1mpY8c9Z0Zt4.jpg?f=user_large)
De ontvanger
:no_upscale():strip_icc():strip_exif()/f/image/KFLzfx4lzmMZflZC3u35s3AR.jpg?f=user_large)
Het schakelgedeelte
:no_upscale():strip_icc():strip_exif()/f/image/UUAdN7Yw56hW22gYoSwTfVma.jpg?f=user_large)
De "Deurbel" geprint
[ Voor 29% gewijzigd door MijnCommentaar op 01-01-2026 20:01 ]
:no_upscale():strip_icc():strip_exif()/f/image/xYmyGmDqsvMiCgrjLx9LWpOQ.jpg?f=user_large)
- Jack plug van kraan uit Quooker vat trekken, zodat je zeker weet dat hij niet meer aan gaat.
- Knop naar beneden drukken en draaien (in de stand waarin hij staat als je warm water wilt). Dit zorgt ervoor dat het plastic deel van de knop zich met drie pennetjes borgt.
- Knop omhoogtrekken, met enig gevoel en gewrik. Dan komt de metalen knop los van de plastic ring waar de magneet in zit.
- Oude magneetje eruit halen met een scherp voorwerp.
- Schoonmaken, en nieuwe magneetje erin (SuperMagnete Q-10-04-01-G). Ik heb voor een magneetje met goud plating gekozen voor (hopelijk) een beetje betere corrosie bestendigheid.
- Jack-plug weer terug in het Quooker vat, testen of hij weer doet.
- Voor de zekerheid heb ik er een beetje lijm (UHU max repair, SuperMagete WS-ADH-01) overheen gedaan om het af te schermen voor water.
- Na uitharden/aanharden lijm de knop weer terug dukken en zorgen dat hij weer helemaal naar beneden zit in zijn oude positie.
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() |
Kort leefde de kamerplant die aan een wilde orchidee.
Door jouw post een Quooker Fusion uit 2020 kunnen repareren. Hartelijk dank.Stig schreef op zaterdag 10 januari 2026 @ 16:01:
Met dank aan dit forum ook hier een snelle reparatie uit kunnen voeren (Fusion kraan uit 2018).
[...]
Hier was het magneetje behoorlijk vergaan en bleef er een stuk achter in de houder.
Ik heb nog magneetjes over, DM me als je er één wil.
:no_upscale():strip_icc():strip_exif()/f/image/R8hsythIAQtfoA2bkGlfkjDz.jpg?f=user_large)
Bedoel je zoals hierboven de Fusion kraan? De knop vanaf onderen, in een rechte beweging naar boven duwen met twee handen (je kunt je afzetten op het aanrechtblad). En anders met twee man, twee schroevendraaiers per persoon en dan rustig de druk gelijkmatig opvoeren, wel risico op beschadiging.Anoniemand schreef op zaterdag 17 januari 2026 @ 10:53:
Ik heb sinds ik de post gelezen heb op verschillende momenten geprobeerd om de knop met enig gevoel en gewrik los te krijgen. Afgezien van rode handen en een afgebroken iFixit “opening pick” nog weinig voortgang. Nog suggesties op dat gebied?
Ik zat vooralsnog, met de minimale “wiebel” die erin zit nog, wat meer te wrikken inclusief opwaartse druk. Daarnaast met twee opening picks (bijna hetzelfde als de schroevendraaier suggestie), maar die zijn dan helaas niet sterk genoeg gebleken. Daarmee is de kans op beschadiging dan wel weer kleiner, dan met schroevendraaiers.
Bedankt voor je reactie, dan kan ik nog even verder stoeien met de kraan.
Even ter bevestiging, de knop moet in de kokend water stand (omlaag drukken) en daarbij zover mogelijk naar rechts gedraaid worden toch?
Nee, naar linksAnoniemand schreef op donderdag 22 januari 2026 @ 10:12:
Nou vandaag nog wat pogingen gedaan, maar het lijkt muurvast te zitten. Eerst nog met wat iFixit tools erna met een schroevendraaier, maar hij blijft lekker op zijn plek zitten![]()
Even ter bevestiging, de knop moet in de kokend water stand (omlaag drukken) en daarbij zover mogelijk naar rechts gedraaid worden toch?
Oh, kan ie ook die kant op
Volgens mij praten we langs elkaar heenAnoniemand schreef op donderdag 22 januari 2026 @ 11:34:
[...]
Oh, kan ie ook die kant op. Ik dacht ik vraag het nog maar even, want het zou jammer zijn als ik iets doe waardoor de borging er nog op blijft zitten.
Ik dacht dat je een grapje maakt, hij kan bij mij alleen maar rechtsom.Rowwan schreef op donderdag 22 januari 2026 @ 12:13:
[...]
Volgens mij praten we langs elkaar heen. De kokend water stand is naar beneden en naar links. Wat bedoel je met "kan hij ook die kant op"? Hij kan toch niet naar rechts?
Edit: Laat ik het maar even "tegen de klok in noemen". Achter gaat ie dan linksom, en voor naar rechts
[ Voor 12% gewijzigd door Anoniemand op 22-01-2026 14:44 ]
Rechtsom.. je komt aanrijden en je start (hopelijk doen mensen dat in ieder geval) met naar RECHTS rijden..MijnCommentaar schreef op donderdag 22 januari 2026 @ 14:44:
de vraag is dus: Is dit linksom of rechtsom
[Afbeelding]
*sowieso
Hmmm.. zo heb ik er nog nooit over nagedachtMijnCommentaar schreef op donderdag 22 januari 2026 @ 14:44:
de vraag is dus: Is dit linksom of rechtsom
[Afbeelding]
In het geval van een rotondo: Die neem je rechtsom
In het geval van een dopje van een fles: Die draai je linksom los
Maargoed, dan zal ie goed klem zitten bij mij. Binnenkort maar eens verder met de oplossing met de weerstanden en kijken of ik dat mooi weggewerkt / opgelost krijg, zonder dat er onbedoeld kokend water uit de kraan gaat komen.
dus 5600 ohm voor ruststand en parallel met drukknop 470 ohm
Draadloos
:strip_exif()/f/image/DVh8EGaO0LO38uds9NNTGb69.jpg?f=fotoalbum_large)
of deze met draad
[ Voor 27% gewijzigd door MijnCommentaar op 22-01-2026 20:10 ]
Een jaar geleden gaven wij bij Quooker al aan dat onze kraan nauwelijks functioneerde. Als we mazzel hadden konden we 1 op de 10x een kopje thee maken. Ja, kapot. Uit coulance konden we de kraan krijgen van €951,- voor €500,-...Stig schreef op zaterdag 10 januari 2026 @ 16:01:
Met dank aan dit forum ook hier een snelle reparatie uit kunnen voeren (Fusion kraan uit 2018).
Nu had ik hier al eens eerder rond gekeken maar met weerstandjes en knoppen aan de gang gaan leek mij geen goed idee. Tot jouw post, voorzien van plaatjes en een duidelijke handleiding
Vijf minuten en een magneetje van €0,35 later en er komt nu gewoon keer-op-keer kokend water uit de kraan. Je hebt geen idee hoe blij je mij en mijn gezin hiermee gemaakt hebt!
Mocht ik iemand blij kunnen maken met nog een magneetje? Gratis op te halen op het station in Amersfoort of Harderwijk
Resetten kan simpelweg door de jack plug eruit en weer erin te doen, dan gaat het weer voor 'even' goed. Soms een dag. Soms meerdere dagen. Soms enkele uren.
Kraan uitelkaar gehad. De magneet is niet het probleem en volledig intact.
Als ik het goed begrijp gaat de weerstanden oplossing niet werken met dit type kraan vanwege nieuwere elektronica? Of heb ik het mis?
De solenoïde magneet bedienen is wel een optie? Is er iemand die hier een goed te volgen bouwtekening van heeft en zou willen delen?
Het boeit mij dus niet dat de originele bediening niet meer zou werken. Ik vind het net als de rest hier belachelijk hoe Quooker hiermee omgaat. Een verdienmodel waar ze makkelijk mee weg komen.
als het goed is werkt de nieuwere type met zowel de communicatie bus als de weerstanden. ik zou het eens proberen met weerstanden...X-PloiD schreef op vrijdag 30 januari 2026 @ 10:22:
Internet en alle berichten hier doorgespit. Hier een Quooker Flex Combi+ die storing geeft en blijft terugkomen.
Resetten kan simpelweg door de jack plug eruit en weer erin te doen, dan gaat het weer voor 'even' goed. Soms een dag. Soms meerdere dagen. Soms enkele uren.
Kraan uitelkaar gehad. De magneet is niet het probleem en volledig intact.
Als ik het goed begrijp gaat de weerstanden oplossing niet werken met dit type kraan vanwege nieuwere elektronica? Of heb ik het mis?
De solenoïde magneet bedienen is wel een optie? Is er iemand die hier een goed te volgen bouwtekening van heeft en zou willen delen?
Het boeit mij dus niet dat de originele bediening niet meer zou werken. Ik vind het net als de rest hier belachelijk hoe Quooker hiermee omgaat. Een verdienmodel waar ze makkelijk mee weg komen.
Dus vorige week een nieuwe geïnstalleerd en vandaag de oude eens goed bekeken. De oogst: circa 2 kg kalk.
Ik post het hier even omdat er hier veel Quooker bezitters zijn met mogelijk hetzelfde euvel.
:strip_exif()/f/image/gRaojSc6thWRzZHb0EmqDq3z.jpg?f=fotoalbum_large)
Ik vraag me wel of of hij het nog zou doen nu ik de kalk verwijderd heb.
Aiaiai... zeker met AI gedaan
eventueel hebben ze ook een nieuw binnenwerk te koop bij Quookerbert pit schreef op maandag 2 februari 2026 @ 15:54:
Ik vraag me wel of of hij het nog zou doen nu ik de kalk verwijderd heb.
Voor een gelijkmatige aandrukking van het pakking oppervlak
[ Voor 7% gewijzigd door Edje44magnum op 03-02-2026 08:22 ]
Voor normale techneuten is dit linksom.MijnCommentaar schreef op donderdag 22 januari 2026 @ 14:44:
de vraag is dus: Is dit linksom of rechtsom
[Afbeelding]
Bekijk het als een moer, rechtsom draai je hem vast, linksom draai je hem los.
All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.
tenzij het linkse draad is natuurlijkBen(V) schreef op zondag 15 februari 2026 @ 15:27:
[...]
Voor normale techneuten is dit linksom.
Bekijk het als een moer, rechtsom draai je hem vast, linksom draai je hem los.
PS
Voor iedereen die een quooker vol kalk heeft na een aantal jaren en het ook nutteloos vind het hele verwarmings element ook te moeten vervangen.
Je kunt het Hitac filter ook gewoon opnieuw vullen met actieve kool dat je los kunt kopen.
[ Voor 111% gewijzigd door Ben(V) op 15-02-2026 15:57 ]
All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.
Met enige moeite gelukt om de ring eraf te krijgen, en inderdaad een compleet doorgeroeste magneet.
:strip_exif()/f/image/XjzRqfQwlgusdn0D9kawR4EO.jpg?f=fotoalbum_large)
Ik kreeg de ring eerst bij mij ook niet los, tot ik opeens merkte dat ik te diep met de schroevendraaier zat. Ik zat namelijk onder die beige plastic ring, waar nu ook zichtbaar een deukje op is. Je moet echt maar een klein stukje met de schroeven draaien tussen de ring, en dan omhoog duwen. Ik had de kraan in de kokend water stand gezet.[b]Anoniemand schreef op donderdag 22 januari 2026 @ 15:15:[b]
Maargoed, dan zal ie goed klem zitten bij mij. Binnenkort maar eens verder met de oplossing met de weerstanden en kijken of ik dat mooi weggewerkt / opgelost krijg, zonder dat er onbedoeld kokend water uit de kraan gaat komen.
Mocht je nog magneetjes nodig hebben, doe mij dan een berichtje, gewoon tegen de inkoopprijs, 7 euro voor 20 magneten + postzegel.
:strip_exif()/f/image/MntfHkoVOkvxUcX0SR4BWwzs.jpg?f=fotoalbum_large)
Is de elektronica die hier in zit misschien los te koop? Of is er een andere manier om het te fixen? Zonde om de kraan van 4 jaar oud te vervangen...
[ Voor 15% gewijzigd door pascalcv op 12-03-2026 22:09 . Reden: Aanvulling ]
"Chaos kan niet uit de hand lopen"
ik had hier op tweakers wel eens een topic over het ontleden van dat digitale signaal voorbij zien komen. geen idee of ze daar nog mee bezig zijn.storeman schreef op zondag 15 maart 2026 @ 20:06:
Ik had ook problemen met onze quooker. Deze knipperde (kraan 3x, boiler 4x). Ik kwam er niet uit met de Quooker hulpwizard en na het doorlezen van dit topic had ik weinig hoop op fatsoenlijke ondersteuning van Quooker zelf. Dus opengeschroefd (wat een kalk!) en ik heb er een ESP32 aangehangen. Het is mij alleen nog niet gelukt het kraan-signaal te decoderen, aangezien dit, voor zover ik kan meten, een digitaal signaal betreft. Heeft iemand dit protocol al kunnen ontleden? Ik gebruik nu een deur/contact sensor om de quooker te bedienen.
[Afbeelding]
maar volgens mij moet de weerstand methode ook werken, ik had alleen begrepen dat als je ook de cube wil aansturen dat dat dan niet werkt. ik zou zeggen probeer het eens.
ik wil nog wel een keer kijken of ik de berichten kan capture-en oid zodat je die dan met een esp32 oid naar de boiler kan sturen. geen idee of het alleen eenrichting berichten zijn of echt communicatie op en neer.
Zou top zijn als je iets kunt ontleden. Ik heb een multimeter aan alle pincombinaties gehangen, maar ik kon niets ontdekken. Ik heb overigens geen cube. Zou ik een permanente weerstand moeten meten in de verschillende posities?JazekerXX schreef op zondag 15 maart 2026 @ 22:43:
[...]
ik had hier op tweakers wel eens een topic over het ontleden van dat digitale signaal voorbij zien komen. geen idee of ze daar nog mee bezig zijn.
maar volgens mij moet de weerstand methode ook werken, ik had alleen begrepen dat als je ook de cube wil aansturen dat dat dan niet werkt. ik zou zeggen probeer het eens.
ik wil nog wel een keer kijken of ik de berichten kan capture-en oid zodat je die dan met een esp32 oid naar de boiler kan sturen. geen idee of het alleen eenrichting berichten zijn of echt communicatie op en neer.
Verder meet ik ca 5V tussen 1 en 4 geloof ik. AI dacht ook aan een digitaal signaal ivm en chip die hij zag op het bordje.
"Chaos kan niet uit de hand lopen"
nee je meet geen weerstanden op de pinnen maar je moet bepaalde weerstanden op bepaalde pinnen zetten. met een schakeling kun je dan de verschillende waardes genereren waardoor de boiler dus de druk en draai standen door krijgt. het is hier al vaak besproken, dus even terug lezen. ik heb ook schema's gedeeld dus je kan het zo na bouwen. andere kwamen met andere oplossingen misschien dat dat voor je werkt.storeman schreef op zondag 15 maart 2026 @ 23:48:
[...]
Zou top zijn als je iets kunt ontleden. Ik heb een multimeter aan alle pincombinaties gehangen, maar ik kon niets ontdekken. Ik heb overigens geen cube. Zou ik een permanente weerstand moeten meten in de verschillende posities?
Verder meet ik ca 5V tussen 1 en 4 geloof ik. AI dacht ook aan een digitaal signaal ivm en chip die hij zag op het bordje.
en ja de nieuwe kranen werken met een digitaal signaal maar zoals gezegd zou het ook met de oude weerstand methode moeten werken, tenzij je ook de qube wilt gebruiken. maar test het gewoon want ik heb dit zelf niet getest.
"Chaos kan niet uit de hand lopen"
het is me idd totaal onduidelijk wat je nu wilt bereiken.storeman schreef op dinsdag 17 maart 2026 @ 09:43:
@JazekerXX ik heb het nog even teruggelezen en ik denk dat ik onze miscommunicatie snap. Mijn kraan heeft geen probleem, die wil ik blijven gebruiken, de sturingsmodule heb ik vervangen en ik wil proberen de kraan(knop) te gebruiken. Mijn kraanknop geeft geen weerstand op de pins. Dus om de kraan met een ESP32 uit te kunnen lezen, moet ik het signaal begrijpen... Tijd voor een logica analyzer
je zegt eerst dat je knipper storingsmeldingen hebt op de kraan en boiler en dat je iets met een deurcontact sensor om de quooker te bedienen. geen idee wat je daar mee bedoeld. maar je hebt geen problemen???
je hebt de sturingsmodule vervangen, wat bedoel je daar precies mee?
ik had een keer in een youtube filmpje deze logic analyzer gezien. kost maar een paar euro. en deze kun je blijkbaar met de software van de dure jongens (saleae of pulseview etc.) gebruiken. ik heb dit zelf nog niet getest maar goed voor dat geld is het het proberen waard, toch?
https://nl.aliexpress.com/item/1005005993277484.html
"Chaos kan niet uit de hand lopen"
ah je wilt dus het digitale signaal uit de kraan gebruiken om de esp32 mee aan te sturen, en de esp32 die stuurt dan het magneetventiel aan zodat het kokend water er uit komt? heb ik het dan goed wat je wil?storeman schreef op dinsdag 17 maart 2026 @ 17:29:
@JazekerXX ik had inderdaad een knipperstoring, maar ik kwam niet helemaal uit wat de melding zou betekenen. De kraan had wat ons betreft geen probleem. Ik heb de quooker dus gedemonteerd en de sturingselektronica vervangen met een ESPHome en hiermee hangt hij in home assistant. Ik kon niet ontleden hoe de kraan precies werkt, dus ik gebruik nu een deurcontact om de het kokende water te schakelen.
maar is een nieuwe kap (elektronica) niet een simpelere oplossing?
ik zou dan wel een nieuw topic aan maken om dit topic niet verder te bevuilen. maar ik ben ook wel benieuwd in hoe dit werkt. ik zou idd met een logic analyzer eerst eens kijken wat voor data er uit komt en of het iedere keer hetzelfde is. wel moet je eerst uitzoeken welke pinnen voor wat is, je had al 5v op pin 1 en 4, dus die moet je sowieso leveren aan de kraan en mogelijk dat de andere 2 pinnen dan data zijn. ook moet er dan waarschijnlijk een logic level shifter tussen als de spanning op de data lijn ook 5v is. als die 3,3v is hoeft dat niet natuurlijk.
Ik ben eigenlijk ook zover met mijn kraan, maar dat magneetje moet je er dus uit kunnen krijgen? Lijkt hier helemaal afgesleten / ingesleten.Arnout schreef op zaterdag 17 januari 2026 @ 09:40:
[...]
Door jouw post een Quooker Fusion uit 2020 kunnen repareren. Hartelijk dank.![]()
Hier was het magneetje behoorlijk vergaan en bleef er een stuk achter in de houder.
Ik heb nog magneetjes over, DM me als je er één wil.
[Afbeelding]
[Afbeelding]
Moet dat er wel uit te krijgen zijn?
- Ter info, die 2x knipper, waar moet dat zijn op Boiler vat? Want daar brandt gewoon netjes rood lampje
- op de quooker kraan als ik met magneet in de buurt kom van de magneet in de kraan, dan gaat er eventjes rood branden
Ik durf nu eigenlijk niet te zeggen of de kraan nu wel de oorzaak is? (Maar wel heel roestig de magneet)
kreeg voor 475 ook een nieuwe kraan aangeboden (50%, echter is 35% tov de gangbare winkel prijzen!)
Enerzijds zit ik ook te denken of er geen kant en klare optie is voor dat jack mini plug systeem? Beter dan elke 6 jaar issues met dit..
![]() | ![]() |
Wat is eigenlijk het led ritme op de kraan zelf?
Die zwarte ring heeft ook van deze kleine ijzertjes moet ik daar iets mee:
[ Voor 31% gewijzigd door trekker22 op 18-03-2026 16:06 ]
Ter info ja meteen bij hem opgevraagd.MijnCommentaar schreef op woensdag 18 maart 2026 @ 16:48:
zie post van juliantje15, hij heeft er nog 19
Ik zag op een YouTube reel dat ze deze variant met een nagel schaartje de ring er af kregen. Even er onder bij die 3 pinnetjes.
Is nu de vraag: hoe weet ik nu of de kraan verder goed is. Ik kan met een magneet van boven naar beneden gaan op de plek waar eerst de magneet zat.
En led gaat dan wel aan. Maar draai beweging dan geen resultaat.
Is de sterkte magneet ook van belang? Een HDd magneet is vrij sterk. Maar is dat nodig.
Je moet niet op en neer gaan maar 2x "heen", dus naar links. Dat hij kort oplicht is een goed teken lijkt me, dan ziet hij in ieder geval een magnetisch veld.trekker22 schreef op woensdag 18 maart 2026 @ 16:55:
[...]
Is nu de vraag: hoe weet ik nu of de kraan verder goed is. Ik kan met een magneet van boven naar beneden gaan op de plek waar eerst de magneet zat.
Maar op de oude methode, met de ribbel knop er op. Dan is het toch duw, duw en draai tegen de klok in (dus naar links). Dan is het toch van boven naar beneden en weer naar boven en beneden en dan draaien?Arnout schreef op woensdag 18 maart 2026 @ 18:21:
[...]
Je moet niet op en neer gaan maar 2x "heen", dus naar links. Dat hij kort oplicht is een goed teken lijkt me, dan ziet hij in ieder geval een magnetisch veld.
of mis ik iets en is het anders met de knop er vanaf?
Ik ben er vrijwel zeker van dat in jouw geval een nieuw magneetje het probleem oplost, gezien die van mij er ook zo uit zag, en hij nu weer als nieuw werkt. Als je het handmatig met een andere magneet probeert door op die plek vast te houden, kan het soms een beetje lastig zijn, maar in mijn geval heb ik en mijn vrouw de kraan toch wel 2 weken kunnen gebruiken met behulp van een koelkast magneetje. Je moet er voor zorgen dat je de magneet meedraait met de knop, dus gewoon altijd op de plek houdt waar het originele magneetje zit.trekker22 schreef op woensdag 18 maart 2026 @ 16:55:
[...]
Is nu de vraag: hoe weet ik nu of de kraan verder goed is. Ik kan met een magneet van boven naar beneden gaan op de plek waar eerst de magneet zat.
En led gaat dan wel aan. Maar draai beweging dan geen resultaat.
Inderdaad:juliantje15 schreef op woensdag 18 maart 2026 @ 21:59:
[...]
Ik ben er vrijwel zeker van dat in jouw geval een nieuw magneetje het probleem oplost, gezien die van mij er ook zo uit zag, en hij nu weer als nieuw werkt. Als je het handmatig met een andere magneet probeert door op die plek vast te houden, kan het soms een beetje lastig zijn, maar in mijn geval heb ik en mijn vrouw de kraan toch wel 2 weken kunnen gebruiken met behulp van een koelkast magneetje. Je moet er voor zorgen dat je de magneet meedraait met de knop, dus gewoon altijd op de plek houdt waar het originele magneetje zit.
:strip_exif()/f/image/DWf6yTGuwdMWQ6WKUBabSs2B.jpg?f=fotoalbum_large)
Magneetje er in een gefixed. Absurd dat quooker dit toch niet aanbiedt. Of geven ze daar mee toe dat het product niet helemaal optimaal is.
[ Voor 7% gewijzigd door trekker22 op 21-03-2026 12:14 ]
Met alleen een magneetje kunnen ze geen geld verdienentrekker22 schreef op zaterdag 21 maart 2026 @ 12:12:
Magneetje er in een gefixed. Absurd dat quooker dit toch niet aanbiedt. Of geven ze daar mee toe dat het product niet helemaal optimaal is.
Mooi dat het opgelost is. Mochten er nog anderen zijn met dit probleem, ik heb nog magneten genoeg om te versturen.
[ Voor 12% gewijzigd door Megaladonxxl op 05-04-2026 14:21 ]
In de basisstand. Wrikken + druk verticaal recht omhoog, totdat er steeds meer speling komt. En de hals hoeft er niet af.Megaladonxxl schreef op zondag 5 april 2026 @ 13:46:
Nog even een vraag betreft verwijderen van de ring. Ik heb een Fusion model kraan maar ik zie dat mensen de ring verwijderen door hem op de kokendwaterstand zetten en anderen weer door de ring in de basis stand te laten. Maakt dit nog uit? En moet de hals van de kraan er volledig af om dit te bewerkstelligen?
Ik had hem in de kokend waterstand staan, het zal dus niet uitmaken.Megaladonxxl schreef op zondag 5 april 2026 @ 13:46:
Nog even een vraag betreft verwijderen van de ring. Ik heb een Fusion model kraan maar ik zie dat mensen de ring verwijderen door hem op de kokendwaterstand zetten en anderen weer door de ring in de basis stand te laten. Maakt dit nog uit? En moet de hals van de kraan er volledig af om dit te bewerkstelligen?
Ik kon hem er met twee duimen omhoog duwend de ring los krijgen.
Mijn nieuwe huis heeft geen quooker, dus ook geen problemen er meer mee...
Bij mijn kraan van destijds 4 jaar oud was er al sprake van vervanging, volgens mij repareren ze dit helemaal niet.Megaladonxxl schreef op dinsdag 14 april 2026 @ 12:32:
Net bericht gehad van quooker service en men geeft aan dat de kraan niet meer te maken is volgens hun. Kraan is overigens 9 jaar oud dus kans is aanwezig dat het meer kost om iemand lamgs te sturen met voorrijkosten en uurloon dan een nieuwe kraan. men heeft overigens wel een nieuwe kraan aangeboden met korting dus ik denk dat ik die maar gan aanschaffen en dan wellicht toch ga kijken als de kraan er af is om de oude quooker kraan zelf helemaal uit elkaar te halen en uivogelen wat het nou was. Wellicht kan ik de oude kraan op MP zetten en kan ik er nog iemand anders blij mee maken
Zogenaamd korting geven ze dan wel maar dat was maar een schijntje vergeleken met de winkelprijs.
Ik heb dus het nieuwe type kraan gekocht op MP, met de microcontroller in de kraan. Zonder aangesloten te zijn is er dus ook niets te meten met de multimeter. Nu mijn vraag: werkt deze op de oude kap, die eigenlijk voor de kraan met weerstandsschakelaar bedoeld is? Of werkt het alleen andersom, een oude kraan op de nieuwste kap?
Extra:
Ik heb de pennen eruit gekregen door met een "tandarts" haakje de pennen naar buiten te duwen. De gekartelde knop kon ik gewoon hard naar boven duwen, waardoor je het zwarte kunststof met de magneet en pennetjes te zien krijgt. Ik verdenk het magneetje, maar moet dus eerst zorgen dat de kap wel geschikt is.
I have a new Flex faucet, serial starting with TF, a PRO3-VAQ-B, a CUBE before Dec. of 2021 and an old Q0 faucet.
I can indeed confirm that PRO-VAQ-B works with Q0 models and new digital ones.
I want to find out how the protocol of the digital faucets works. By now I've found that the pinout is not much different.
Pin 1 = data
Pin 2 = not connected
Pin 3 = VCC
Pin 4 = GND
I took a capture of the data packets on pin 1 while only having the reservoir connected. If I can figure out what the protocol is there and can successfully replicate it, I will continue with CUBE attached as well.
But for now I thought maybe someone would like to take a look at the capture.
I couldn't figure out how to attach it to this post so I uploaded it to Mediafire: link
very interesting! and thanks for sharing.intercook schreef op woensdag 22 juli 2026 @ 15:36:
This is an interesting topic! I can only write in English since I don't speak Dutch. I hope that's not too big of a problem.
I have a new Flex faucet, serial starting with TF, a PRO3-VAQ-B, a CUBE before Dec. of 2021 and an old Q0 faucet.
I can indeed confirm that PRO-VAQ-B works with Q0 models and new digital ones.
I want to find out how the protocol of the digital faucets works. By now I've found that the pinout is not much different.
Pin 1 = data
Pin 2 = not connected
Pin 3 = VCC
Pin 4 = GND
I took a capture of the data packets on pin 1 while only having the reservoir connected. If I can figure out what the protocol is there and can successfully replicate it, I will continue with CUBE attached as well.
But for now I thought maybe someone would like to take a look at the capture.
I couldn't figure out how to attach it to this post so I uploaded it to Mediafire: link
so you captured the data while tapping cooked water. is it just a repeating message it sends to the boiler? or is there back and forth communication? i like to learn more of how this all works.
and how did you replicate the data? somehow you got the data in an esp32 or something and let an transistor with a pullup resistor generate the same data on the data pin?
what's the voltage on that data pin?
what software do i need to open those files you shared?
i'm also very interested in the cube data.
it would be awesome if we can repair these faucets too, and stop being ripped off by quooker ;)
thanks!
I was not able to replicate this signal by now since it is both way communication.
There's data present when the system is in idle, when the system is switched off (Q button on reservoir) and while tapping boiling / cooled water. This is not a simple command from the faucet like "turn on boiling water" or "turn on cooled / sparkling water".
What I got from the first capture by now is that Quooker built a 2-way communication protocol. It is half-duplex UART with a baud rate of 19200, 8 bits per frame, no parity bit and 1 stop bit. So UART 8N1 @ 19200. This means instead of regular UART having a send and receive wire, they only used one for send and receive. Therefore, data from the reservoir and the faucet are on the same data line (pin 1).
This alone does not help us much in figuring out how these systems work but should mean we can send these signals with an ESP or Arduino. Anyways, I made some more captures.
I connected only the faucet to my logic analyzer and gave it power. The faucet then goes into "two red flashes" mode, which is expected since no reservoir is present. But the interesting part here is that there is no data on the data line in this configuration. This means in this system the reservoir is the "master" and the faucet the "client" device.
I checked this by also connecting only the reservoir to my analyzer. In that capture I was able to see some data. But instead of seeing the same bursts of two data "packets" like in my first capture, which had everything connected, there were only bursts of one "packet". This means my theory of the reservoir being the "master" and the faucet being the "client" is correct.
What do we know by now?
Not much. The reservoir sends a "what is your status" command to which the faucet answers with whatever state it is in. Then the reservoir does what fits the status the faucet responded with. And this whole cycle repeats over and over many times per second.
To get any further here, we need to understand the protocol they built.
We can reverse engineer it with a good amount of effort. But this is where I would need some help since my knowledge in this area is sparse.
Still, I'll try to continue and post updates as I figure out more.
Also, here're the new captures I made: Capture of flex faucet with no reservoir connected. Capture of reservoir with nothing connected.
you know what funny is?intercook schreef op zondag 26 juli 2026 @ 14:58:
I captured it with a logic analyzer. The file can be opened with Saleae Logic 2.
I was not able to replicate this signal by now since it is both way communication.
There's data present when the system is in idle, when the system is switched off (Q button on reservoir) and while tapping boiling / cooled water. This is not a simple command from the faucet like "turn on boiling water" or "turn on cooled / sparkling water".
What I got from the first capture by now is that Quooker built a 2-way communication protocol. It is half-duplex UART with a baud rate of 19200, 8 bits per frame, no parity bit and 1 stop bit. So UART 8N1 @ 19200. This means instead of regular UART having a send and receive wire, they only used one for send and receive. Therefore, data from the reservoir and the faucet are on the same data line (pin 1).
This alone does not help us much in figuring out how these systems work but should mean we can send these signals with an ESP or Arduino. Anyways, I made some more captures.
I connected only the faucet to my logic analyzer and gave it power. The faucet then goes into "two red flashes" mode, which is expected since no reservoir is present. But the interesting part here is that there is no data on the data line in this configuration. This means in this system the reservoir is the "master" and the faucet the "client" device.
I checked this by also connecting only the reservoir to my analyzer. In that capture I was able to see some data. But instead of seeing the same bursts of two data "packets" like in my first capture, which had everything connected, there were only bursts of one "packet". This means my theory of the reservoir being the "master" and the faucet being the "client" is correct.
What do we know by now?
Not much. The reservoir sends a "what is your status" command to which the faucet answers with whatever state it is in. Then the reservoir does what fits the status the faucet responded with. And this whole cycle repeats over and over many times per second.
To get any further here, we need to understand the protocol they built.
We can reverse engineer it with a good amount of effort. But this is where I would need some help since my knowledge in this area is sparse.
Still, I'll try to continue and post updates as I figure out more.
Also, here're the new captures I made: Capture of flex faucet with no reservoir connected. Capture of reservoir with nothing connected.
i had the software already installed waiting for me to do the exact same thing as what you did.
the cheap logic analyzer was also waiting here under a layer of dust.
but this is also a first time for me so i chatted a bit with AI and got some good suggestions
to put it on hex codes, that way you can easily check the different packages by comparing the numbers.
to activate this go to the right side of the logic 2 software and press analyzers button, then select async serial and enter the 19200 8N1 and select the right channel.
i started with the boiler only so we see what the master is sending.
below you see i data packet, it contains 5 bytes. if you check the other packages you see that only byte 1 and 5 changes, they become each 1 higher. according to AI byte 1 is a counter and byte 5 is a checksum. byte 2 could be the amount of bytes in this package or an id for message from master. byte 3 is probably the address of the faucet. and byte 4 is the actual status message like standby no errors.
then the faucet. you said it did nothing but it did gave a low signal for 1,7 seconds. i think this is for letting the master know that the faucet is connected.
then the boiler and faucet connected:
this data you first shared was that only idle state or did you also use the faucet somewhere?
you see constantly these 2 packages, package 1 is the boiler and package 2 is the response from the faucet. in the packages below you see one difference in package 1 byte 5 it changes from 0x00 to 0x01. this is probably the heartbeat.
try using different AI and let them help you analyze this further.
also upload different captures of with boiler/cube or boiler/faucet/cube attached or cube only (i think that will be the same as the faucet) and when you do certain stuff like activating cooking water or cooled or sparkling. maybe then we can see what bytes change
Yeah, sorry my description was incomplete. You're right it gave a low signal but it only did this while having no power. After turning on my lab bench supply it went high.JazekerXX schreef op zondag 26 juli 2026 @ 20:59:
[...]
[Afbeelding]
then the faucet. you said it did nothing but it did gave a low signal for 1,7 seconds. i think this is for letting the master know that the faucet is connected.
The first capture was a mix of idle state and the various functions.[Afbeelding]
then the boiler and faucet connected:
this data you first shared was that only idle state or did you also use the faucet somewhere?
you see constantly these 2 packages, package 1 is the boiler and package 2 is the response from the faucet. in the packages below you see one difference in package 1 byte 5 it changes from 0x00 to 0x01. this is probably the heartbeat.
I'll definitely do that! I'll upload new captures with more precise descriptions soon. At the moment I'm trying to send the packets we saw from the boiler to the faucet via an Arduino to see how the faucet responds, but I'm still writing the code for that (just had this idea some minutes ago).[Afbeelding]
try using different AI and let them help you analyze this further.
also upload different captures of with boiler/cube or boiler/faucet/cube attached or cube only (i think that will be the same as the faucet) and when you do certain stuff like activating cooking water or cooled or sparkling. maybe then we can see what bytes change
you are very welcome!intercook schreef op zondag 26 juli 2026 @ 21:47:
Thanks a lot for having a look at it.
ah, allright that changes things.Yeah, sorry my description was incomplete. You're right it gave a low signal but it only did this while having no power. After turning on my lab bench supply it went high.
it would be awesome if you could do a capture with those functions and make a list with what you did and the approximate time stamp.The first capture was a mix of idle state and the various functions.
nice one! so what's the actual voltage on that data pin? i assume 5v because you use an arduino?I'll definitely do that! I'll upload new captures with more precise descriptions soon. At the moment I'm trying to send the packets we saw from the boiler to the faucet via an Arduino to see how the faucet responds, but I'm still writing the code for that (just had this idea some minutes ago).
Yes, it's 5V on the data line.JazekerXX schreef op maandag 27 juli 2026 @ 00:29:
nice one! so what's the actual voltage on that data pin? i assume 5v because you use an arduino?
I did not have time to get my Arduino experiments started yet. But I was able to make some more captures. (This time I will describe them in more detail)
All following captures were made with reservoir and cube attached to flex faucet.
Capture of reservoir heating.
This capture was made while the system was in idle (I did not touch it) but with the reservoir heating up, so the led ring on the faucet was red. Nothing else happened in this capture, just the reservoir heating up and the led ring being red.
Capture of activating and stopping boiling water.
This capture starts with the system in idle and the reservoir not heating. I then activated boiling water by "push - push - rotate". I let it run a little and then brought it back to idle by moving the ring / knob (I don't know what I should call this thing) back into its released position.
Capture of activating and stopping cooled non sparkling water.
This capture again starts with the system in idle and the reservoir not heating. I then activated cooled non sparkling water by "push - wait - rotate". Again I let it run a little and then brought it back to idle by moving the ring (I'll just call it ring for now) back to its released position.
Capture of activating and stopping sparkling water.
This capture started the same as the two above. The system was in idle and not heating. I activated sparkling water by "push - rotate". I let it run a little and turned it back to idle by moving the ring to its released position.
Since we have some time variance in these captures, I also made some while every function is already activated.
Capture of dispensing boiling water.
I activated boiling water (push push rotate) and then started the capture for some seconds. After ending the capture, I turned it back to idle.
Capture of dispensing cooled non sparkling water.
Same here. Cooled non sparkling water was already active when I started the capture. I again ended the capture before putting the system back to idle.
Capture of dispensing sparkling water.
This is the same as the two above, but with sparkling water.
During all of these captures, the led ring of the faucet turned on:
For boiling in red.
For non sparkling in blue.
For sparkling in blue but flashing.
I just made these, so I did not give them a good look by now, but I saw that there are now 3 packets being sent in most of them.
I hope these captures help and that my descriptions are better than last time.
Capture of everything in idle.
This capture was taken while the reservoir, faucet and cube were in idle. By this I mean, I touched nothing and the led ring on the faucet was off. The reservoir was not heating as it has reached its target temperature beforehand.
great captures! very useful..intercook schreef op maandag 27 juli 2026 @ 21:13:
[...]
Yes, it's 5V on the data line.
I did not have time to get my Arduino experiments started yet. But I was able to make some more captures. (This time I will describe them in more detail)
All following captures were made with reservoir and cube attached to flex faucet.
Capture of reservoir heating.
This capture was made while the system was in idle (I did not touch it) but with the reservoir heating up, so the led ring on the faucet was red. Nothing else happened in this capture, just the reservoir heating up and the led ring being red.
Capture of activating and stopping boiling water.
This capture starts with the system in idle and the reservoir not heating. I then activated boiling water by "push - push - rotate". I let it run a little and then brought it back to idle by moving the ring / knob (I don't know what I should call this thing) back into its released position.
Capture of activating and stopping cooled non sparkling water.
This capture again starts with the system in idle and the reservoir not heating. I then activated cooled non sparkling water by "push - wait - rotate". Again I let it run a little and then brought it back to idle by moving the ring (I'll just call it ring for now) back to its released position.
Capture of activating and stopping sparkling water.
This capture started the same as the two above. The system was in idle and not heating. I activated sparkling water by "push - rotate". I let it run a little and turned it back to idle by moving the ring to its released position.
Since we have some time variance in these captures, I also made some while every function is already activated.
Capture of dispensing boiling water.
I activated boiling water (push push rotate) and then started the capture for some seconds. After ending the capture, I turned it back to idle.
Capture of dispensing cooled non sparkling water.
Same here. Cooled non sparkling water was already active when I started the capture. I again ended the capture before putting the system back to idle.
Capture of dispensing sparkling water.
This is the same as the two above, but with sparkling water.
During all of these captures, the led ring of the faucet turned on:
For boiling in red.
For non sparkling in blue.
For sparkling in blue but flashing.
I just made these, so I did not give them a good look by now, but I saw that there are now 3 packets being sent in most of them.
I hope these captures help and that my descriptions are better than last time.
sorry i did everything in Dutch, i guess you can use the translate option in the webbrowser right?
if not and you need some help with translating, just let me know, ok?
samen met Gemini jouw captures ontleed, ik denk dat ik alle AI fouten er nu uit heb, maar goed dat zullen we nog wel zien
---
# 🛠️ Quooker Single-Wire Bus Protocol (Reverse Engineered)
Na het analyseren van diverse Logic Analyzer / CSV captures van de Quooker databuis (Boiler, Flex Kraan, CUBE), is de exacte werking en pakketstructuur van de communicatie ontrafeld.
---
## 1. Fysieke Laag & Hardware
* **Spanning:** 5V Logica.
* **Typologie:** 1-wire Shared Data Bus (Open-drain / Single-wire UART).
* **Instellingen:** `19200 Baud`, `8N1` (8 data bits, no parity, 1 stop bit).
* **Aansluiting:** Alle apparaten (Boiler, Kraan, CUBE) zitten parallel geschakeld op dezelfde datalijn.
---
## 2. Bus Rollen & Transmissie-cyclus
De **Boiler** is de Master op de bus. De communicatie vindt plaats via een strak georganiseerde time-slotting cyclus (elke ~100ms):
:strip_exif()/f/image/O6Mp40NBl2P2lUtQBYGsXfDN.png?f=user_large)
1. **Master Query (Boiler):** Zodra er een kraan/slaves zijn aangesloten, stuurt de Boiler een **17-byte Request** (`0x01 0x11 ...`).
2. **Slave Response (Flex Kraan):** Binnen ~11ms reageert de Kraan met een **16-byte Status-frame** (`0x01 0x10 ...`) waarin de actuele knopstatus en waterkeuze staan.
3. **Bus Reset / Heartbeat (Boiler):** ~10ms na het kraanbericht (of bij stilte) stuurt de boiler een **5-byte frame** (`XX 05 FA 10 CS`). Dit fungeert als heartbeat (met teller) én als **reset-signaal** om de luisterbuffers van alle apparaten op de lijn schoon te vegen bij ruis/collisions.
---
## 3. CUBE Integratie
De CUBE stuurt **geen** losse eigen communicatieberichten over de lijn, maar beïnvloedt de **statusbytes** binnen het bestaande verkeer:
* **Zonder CUBE:** Byte 10/11 in de berichten is `0x00`.
* **Met CUBE aangesloten:** Byte 10/11 verandert naar `0x40` om de aanwezigheid van de gekoelde/bruismodule aan te kondigen.
---
## 4. Checksum Formule
Alle frames (zowel 5, 10, 16 als 17 bytes) gebruiken een universele XOR Checksum.
De XOR-som van alle bytes inclusief de checksum geeft altijd `0xFF` (255):
:strip_exif()/f/image/c6GxDC4YOwTseOAonjfm4szv.png?f=user_large)
---
:strip_exif()/f/image/c3pgTIrI4oWUU3PIGCo7rc4x.png?f=user_large)
---
i don't know if it will work but you could test it... one way to find out
remember to download the used libraries...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
| #include <SoftwareSerial.h>
// ============================================================================
// PIN DEFINITIES & COMMUNICATIE
// ============================================================================
const int BUS_PIN = 2; // Quooker datakabel (5V Half-Duplex)
const int RED_LED_PIN = 5; // Optioneel: RODE LED indicator
const int BLUE_LED_PIN = 6; // Optioneel: BLAUWE LED indicator
// SoftwareSerial instantie met RX en TX op exact dezelfde pin
SoftwareSerial quookerBus(BUS_PIN, BUS_PIN);
// ============================================================================
// KRAAN STATUS BUFFER (16 Bytes)
// ============================================================================
uint8_t kraanFrame[16] = {
0x01, 0x10, 0xEF, 0x42, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
};
// Luisterbuffer voor inkomende busberichten
uint8_t rxBuf[20];
uint8_t rxIdx = 0;
// Globale statusvariabele voor LEDweergave
enum LedState { LED_OFF, LED_RED_PULSE, LED_RED_SOLID, LED_BLUE_SOLID, LED_BLUE_BLINK };
LedState currentLedState = LED_OFF;
// ============================================================================
// HULPFUNCTIES
// ============================================================================
// XOR Checksum: Som van alle bytes inclusief checksum = 0xFF
uint8_t calculateChecksum(uint8_t* buffer, size_t len) {
uint8_t xorSum = 0x00;
for (size_t i = 0; i < len - 1; i++) {
xorSum ^= buffer[i];
}
return xorSum ^ 0xFF;
}
// Pas het Kraan-antwoordbericht aan op basis van gewenste functie
void setWaterType(const char* type) {
kraanFrame[6] = 0x00; // Reset Kokend water vlag
kraanFrame[7] = 0x00; // Reset Gekoeld / Bruis vlag
if (strcmp(type, "KOKEND") == 0) {
kraanFrame[6] = 0x20; // Kokend water inschakelen
} else if (strcmp(type, "GEKOELD") == 0) {
kraanFrame[7] = 0x02; // Gekoeld water inschakelen
} else if (strcmp(type, "BRUIS") == 0) {
kraanFrame[7] = 0x08; // Bruiswater inschakelen
}
// Herbereken Checksum in Byte 15
kraanFrame[15] = calculateChecksum(kraanFrame, 16);
}
// Analoge/Digitale LED sturing op basis van de status van de Boiler
void updatePhysicalLeds() {
switch (currentLedState) {
case LED_RED_SOLID:
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, LOW);
break;
case LED_RED_PULSE:
// Simpele knipper/puls indicatie voor opwarmen
digitalWrite(RED_LED_PIN, (millis() / 500) % 2);
digitalWrite(BLUE_LED_PIN, LOW);
break;
case LED_BLUE_SOLID:
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, HIGH);
break;
case LED_BLUE_BLINK:
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, (millis() / 250) % 2);
break;
case LED_OFF:
default:
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
break;
}
}
// ============================================================================
// SETUP
// ============================================================================
void setup() {
Serial.begin(115200);
quookerBus.begin(19200);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
setWaterType("IDLE");
Serial.println(F("=============================================="));
Serial.println(F(" Quooker Kraan Emulator + LED Sturing Gestart "));
Serial.println(F("=============================================="));
Serial.println(F("Gebruik Serial Monitor: 'k'=Kokend, 'c'=Gekoeld, 'b'=Bruis, 's'=Stop"));
}
// ============================================================================
// MAIN LOOP
// ============================================================================
void loop() {
// 1. COMMUNICATIE AFHANDELING
while (quookerBus.available()) {
uint8_t b = quookerBus.read();
if (rxIdx < sizeof(rxBuf)) {
rxBuf[rxIdx++] = b;
} else {
rxIdx = 0;
}
// Filter Start-Header (0x01 0x11)
if (rxIdx == 1 && rxBuf[0] != 0x01) { rxIdx = 0; continue; }
if (rxIdx == 2 && rxBuf[1] != 0x11) { rxIdx = 0; continue; }
// Bus Reset / Heartbeat detectie (xx 05 FA 10 CS)
if (rxIdx >= 4 && rxBuf[rxIdx - 3] == 0x05 && rxBuf[rxIdx - 2] == 0xFA && rxBuf[rxIdx - 1] == 0x10) {
rxIdx = 0;
continue;
}
// Volledig Master Request (17 Bytes) van Boiler ontvangen
if (rxIdx == 17) {
rxIdx = 0;
// --- DECODEER LED STATUS UIT BOILER BERICHT ---
uint8_t b7 = rxBuf[7];
uint8_t b8 = rxBuf[8];
uint8_t b11 = rxBuf[11];
if (b7 & 0x20) {
currentLedState = LED_RED_SOLID; // Kokend water actief
} else if (b7 & 0x02) {
currentLedState = LED_RED_PULSE; // Boiler is aan het opwarmen
} else if (b8 == 0x08 || b11 == 0x08) {
currentLedState = LED_BLUE_BLINK; // Bruiswater actief
} else if (b8 == 0x02 || b11 == 0x02) {
currentLedState = LED_BLUE_SOLID; // Gekoeld water actief
} else {
currentLedState = LED_OFF; // Stand-by / Uit
}
// Reageer direct met Kraan Statusbericht (16 Bytes)
quookerBus.write(kraanFrame, 16);
quookerBus.flush();
// Flush eigen echo van de 1-wire lijn
while (quookerBus.available() > 0) quookerBus.read();
}
}
// UPDATE LED INDICATOREN
updatePhysicalLeds();
// 2. SERIËLE MONITOR BEDIENING
if (Serial.available()) {
char cmd = Serial.read();
if (cmd == 'k') { setWaterType("KOKEND"); Serial.println(F("-> KOKEND WATER")); }
if (cmd == 'c') { setWaterType("GEKOELD"); Serial.println(F("-> GEKOELD WATER")); }
if (cmd == 'b') { setWaterType("BRUIS"); Serial.println(F("-> BRUISWATER")); }
if (cmd == 's') { setWaterType("IDLE"); Serial.println(F("-> RUSTSTAND (IDLE)")); }
}
} |
I don't know how it would proof that. This is not how Cube is detected. This also changes without cube. The cube is discovered via another way. I made a capture during which the system was idle and at around 3.5 seconds I unplugged cube from the reservoir and at around 7.5 seconds I plugged it back in. This shows clearly that a cube attached to the system results in double the data between the faucet and reservoir. Also only one packet changes.JazekerXX schreef op dinsdag 28 juli 2026 @ 01:47:
[...]
## 3. CUBE Integratie
De CUBE stuurt **geen** losse eigen communicatieberichten over de lijn, maar beïnvloedt de **statusbytes** binnen het bestaande verkeer:
* **Zonder CUBE:** Byte 10/11 in de berichten is `0x00`.
* **Met CUBE aangesloten:** Byte 10/11 verandert naar `0x40` om de aanwezigheid van de gekoelde/bruismodule aan te kondigen.
FF 0A F5 41 04 7F xx 00 00 CS
in this packet the xx byte changes according to the cube being plugged in or not.
7F for Cube available
75 for Cube unavailable
CS is the checksum.
More on that later. Remember this as 10 byte packet.
Remember this as a 5 byte packet. This is not only there for heart beat etc. it is used for initialization. It gets still sent after initialization but I dont know why.3. Bus Reset / Heartbeat (Boiler): ~10ms na het kraanbericht (of bij stilte) stuurt de boiler een 5-byte frame (`XX 05 FA 10 CS`). Dit fungeert als heartbeat (met teller) én als reset-signaal om de luisterbuffers van alle apparaten op de lijn schoon te vegen bij ruis/collisions.
I did inspect the packets myself and made many many more captures last evening and I got this by now:
Frame structure
[address] [length] [length XOR FF] [command] [payload...] [XOR checksum]
Byte 0 Address or device identifier
Byte 1 Total frame length
Byte 2 Byte 1 XOR 0xFF
Byte 3 Command/message type
Bytes... Payload
Last XOR checksum
Checksum
byte0 XOR byte1 XOR ... XOR checksum = 0xFF
--> checksum = 0xFF ^ byte0 ^ byte1 ^ ... ^ previousByte;
5 Byte packets
XX 05 FA CC CS
XX changes but what it indicates is unknown. It's first (after power on) 0x01 but after some time starts incrementing from sometimes 0x20 and sometimes 0x30
05 & FA are constant
CC is the command
CS checksum
These are also used to initialize communication between the reservoir and faucet. (Your code expected 0x01 0x11 packets which will not be sent until this initialization is done. I will say more about it later)
Initialization
To initialize the reservoir sends: 5 byte packet with XX = 0x01 and CC = 0x10
The flex faucet answers: 01 0A F5 10 01 11 05 00 03 07
The reservoir sends: 5 byte packet with XX = 0x01 and CC = 0x40
The faucet sends: 01 0C F3 40 01 11 04 57 70 00 00 72
Afterwards the reservoir sends the FF 0A F5 41 04 7F 7F 00 00 BA packet which contains cube information. Then normal communication with 0x01 0x11 starts.
10 byte packets
FF 0A F5 41 04 7F XX 00 00 CS
These contain the information about a cube being connected.
XX = 7F Cube connected
XX = 75 Cube disconnected
CS checksum
17 byte packets
01 11 EE 42 ... checksum
These are the packets sent by the reservoir after a faucet was initialized.
01 11 EE 42 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 CS
Byte 0 Address / device identifier? It's mostly 0x01
Byte 1 Frame length
Byte 2 Frame length XOR FF
Byte 3 command
Byte 4 alternating between 0x00 and 0x01. Maybe for timing or heartbeat? Every time the reservoir sends this is changed from 0x00 to 0x01 or vice versa. (So if the reservoir sends 5 packets this would go 0x00 to 0x01 to 0x00 to 0x01 to 0x00...)
Byte 5 unknown mostly 0x00
Byte 6 unknown mostly 0x08
Byte 7 reservoir heating / boiling water activated status bitfield
Byte 8 cube water status bitfield
Byte 9 unknown mostly 0x00
Byte 10 unknown mostly 0x00
Byte 11 same as 7 but switches with some delay (maybe to signal the valves successfully opened?)
Byte 12 same as 8 but again with some delay (maybe to signal valve state?)
Byte 13 unknown mostly 0x00
Byte 14 unknown mostly 0x00
Byte 15 unknown mostly 0x00
Byte 16 checksum
Byte 7 / 11
0x40 Idle (reservoir holds hot water)
0x42 (0x40 + 0x02) reservoir heating
0x60 (0x40 + 0x20) dispensing boiling water
Byte 8 / 12
0x00 idle
0x02 dispensing cooled non sparkling water
0x08 dispensing cooled sparkling water
16 byte packets
01 10 EF 42 ... checksum
These are the packets from the faucet.
01 10 EF 42 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 CS
Byte 0 Address / device identifier? mostly 0x01
Byte 1 Frame length
Byte 2 Frame length XOR FF
Byte 3 command (maybe the value of the command it's responding to?)
Byte 4 unknown mostly 0x00
Byte 5 unknown mostly 0x00
Byte 6 Boiling water request bitfield
Byte 7 cube water request bitfield
Byte 8 unknown mostly 0x00
Byte 9 unknown mostly 0x00
Byte 10 maybe a reaction to the reservoirs heating / heated up state?
Byte 11 unknown mostly 0x00
Byte 12 unknown mostly 0x00
Byte 13 unknown mostly 0x00
Byte 14 unknown mostly 0x00
Byte 15 checksum
Byte 6
0x00 idle
0x20 boiling water selected / dispensing
Byte 7
0x00 idle
0x02 cooled non sparkling water selected / dispensing
0x08 sparkling water selected / dispensing
Byte 10
0x40 maybe reservoir ready (heated up)
0x42 maybe reservoir heating
Now to the code you sent...
Well simply put it did not work. But not only because initialization was missing but also because SoftwareSerial does apparently not work for half-duplex UART. After changing it a bit to use a half duplex software serial library, (https://github.com/akira215/HalfDuplexSerial-for-Arduino/tree/master) I gave it another try. This time it did not work because the reservoir sent no 17 byte packets (with 0x01 0x11), which is not surprising since we have no initialization. So I just plugged in the flex faucet to do the initialization for me. And well, now we had data and your code worked, but when I requested any water it was toggling like crazy since the faucet send another signal... But it did activate each one (boiling / sparkling / non sparkling) exactly as wanted! So we are on the right path.
I did not try to implement the initialization yet but will do that in the next hours and post here if I am successful. I scrapped my plan of using the Arduino to interact with the faucet to validate our findings, since I think we have enough evidence that we are onto something.
Someting like that could be done, but for now we should get it working first.consolefreak schreef op dinsdag 28 juli 2026 @ 11:06:
ik vind het interessant om te zien hoe jullie het protocol ontleden. Ik zou het mooi vinden als we een opensource PCB op basis van een ESP32 met ESPHome kunnen maken uiteindelijk. Zou een mooie integratie zijn voor bijvoorbeeld Home Assistant. Dat je ook het verbruik, temperaturen etc kan inzien en misschien zelfs kan aansturen. Denk er bijvoorbeeld aan dat je een losse knop maakt die een perfect afgemeten glas gekoeld water voor je tapt zonder te draaien
By perfectly tapped glass of water, do you mean you want to select how much water is dispensed? Like, you can select the amount of water before it stops?
I guess with Home Assistant and ESPHome we could implement that, but I do not know how we would avoid the faucet from sending "no water requested" packets, which would collide with our "water requested" packets...
ja ik had uiteraard ook een ESP in gedachte of dat dan met ESPhome kan dat weet ik niet. ik heb wel eens gelezen dat je op een of andere manier eigen code in de esphome omgeving kan draaien maar dat moeten we dan uitzoeken. maar verbruik en temperaturen zijn geen onderdeel van de data voor zover ik het nu begrijp. een "losse knop" heb ik vannacht nog bedacht alleen dan aan de kraan vast, als een ring onder de kraan en dan een draaiknop aan de zijkant, die je ook in kan drukken. RGB voor indicatie en misschien nog zo'n mini 64x64px color oled schermpje. ik dacht dan voor de veiligheid gaat hij na iedere keer tappen uit en dan moet je eerst weer naar de gewenste stand draaien. er zijn 3 standen dus max 2 klikjes draaien (je kan omhoog en omlaag draaien). de kabel kan eventueel van de kraan afgeknipt worden (als die defect is) en dan kan er een stukje weg geslepen worden op de plek waar de kabel zit, dan kan daar de kabel door naar de nieuwe knop zonder een extra gat in je aanrecht te boren. wel zo fijn!consolefreak schreef op dinsdag 28 juli 2026 @ 11:06:
ik vind het interessant om te zien hoe jullie het protocol ontleden. Ik zou het mooi vinden als we een opensource PCB op basis van een ESP32 met ESPHome kunnen maken uiteindelijk. Zou een mooie integratie zijn voor bijvoorbeeld Home Assistant. Dat je ook het verbruik, temperaturen etc kan inzien en misschien zelfs kan aansturen. Denk er bijvoorbeeld aan dat je een losse knop maakt die een perfect afgemeten glas gekoeld water voor je tapt zonder te draaien
een preciese hoeveelheid tappen en dat die in de ochtend al klaar staat voor je had ik ook al bedacht. volgens mij is het een kwestie van testen hoeveel seconden je moet activeren. echt in ml gaat lastig worden maar je kunt wel wat timen en daar wat "presets" voor maken, denk ik..
hey google tap 500ml bruisend water
Maar eerst maar eens het protocol beter begrijpen
[ Voor 16% gewijzigd door consolefreak op 28-07-2026 15:22 ]
Awesome news! The fact that the boiler activated all water types confirms that our byte layout, checksum calculation, and command structure are 100% correct!intercook schreef op dinsdag 28 juli 2026 @ 13:52:
[...]
Now to the code you sent...
Well simply put it did not work. But not only because initialization was missing but also because SoftwareSerial does apparently not work for half-duplex UART. After changing it a bit to use a half duplex software serial library, (https://github.com/akira215/HalfDuplexSerial-for-Arduino/tree/master) I gave it another try. This time it did not work because the reservoir sent no 17 byte packets (with 0x01 0x11), which is not surprising since we have no initialization. So I just plugged in the flex faucet to do the initialization for me. And well, now we had data and your code worked, but when I requested any water it was toggling like crazy since the faucet send another signal... But it did activate each one (boiling / sparkling / non sparkling) exactly as wanted! So we are on the right path.
I did not try to implement the initialization yet but will do that in the next hours and post here if I am successful. I scrapped my plan of using the Arduino to interact with the faucet to validate our findings, since I think we have enough evidence that we are onto something.
after plugging in the faucet for the init, did you unplug it after init?
and what do you mean with scrapped your arduino plan?
Based on your feedback, we identified two key points to fix for standalone operation (without the physical faucet connected):
1. **Half-Duplex Hardware/Software:** Standard `SoftwareSerial` indeed gets confused when RX & TX are tied together on a single wire because it receives its own transmission. Switching to `HalfDuplexSerial` (or a board with hardware serial like ESP32/Mega) is the right move.
2. **The Missing Handshake/Initialization:** The reservoir stays dormant until a slave device announces itself on the bus. Before the reservoir starts emitting the 17-byte polling frames (`0x01 0x11...`), the faucet sends a **10-byte announcement frame** (`FF 0A F5...`).
---
### Updated Code (Standalone Kraan Emulator with Init + LED feedback)
Requirements:
- Install the **HalfDuplexSerial** library (https://github.com/akira215/HalfDuplexSerial-for-Arduino).
- Connect Pin D2 to the Quooker 5V Single-Wire Data line.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
| #include <HalfDuplexSerial.h>
// ============================================================================
// PIN DEFINITIONS & HARDWARE
// ============================================================================
const int BUS_PIN = 2; // Single-wire UART data line (5V)
const int RED_LED_PIN = 5; // Optional: Red LED pin
const int BLUE_LED_PIN = 6; // Optional: Blue LED pin
// Half-Duplex serial setup on single pin
HalfDuplexSerial quookerBus;
// ============================================================================
// PROTOCOL BUFFERS & FRAMES
// ============================================================================
// 10-byte Announcement/Wake-up frame sent to wake up the Reservoir
uint8_t initFrame[10] = {
0xFF, 0x0A, 0xF5, 0x41, 0x04, 0x7F, 0x75, 0x00, 0x00, 0xB0
};
// 16-byte Faucet Status Frame
uint8_t kraanFrame[16] = {
0x01, 0x10, 0xEF, 0x42, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
};
uint8_t rxBuf[20];
uint8_t rxIdx = 0;
bool isInitialized = false;
unsigned long lastInitTx = 0;
// LED State Machine
enum LedState { LED_OFF, LED_RED_PULSE, LED_RED_SOLID, LED_BLUE_SOLID, LED_BLUE_BLINK };
LedState currentLedState = LED_OFF;
// ============================================================================
// CHECKSUM CALCULATION
// ============================================================================
// XOR Sum including checksum byte always yields 0xFF
uint8_t calculateChecksum(uint8_t* buffer, size_t len) {
uint8_t xorSum = 0x00;
for (size_t i = 0; i < len - 1; i++) {
xorSum ^= buffer~[i];
}
return xorSum ^ 0xFF;
}
// Set water request command
void setWaterType(const char* type) {
kraanFrame[6] = 0x00; // Reset Boiling flag
kraanFrame[7] = 0x00; // Reset Cold/Sparkling flag
if (strcmp(type, "KOKEND") == 0) {
kraanFrame[6] = 0x20;
} else if (strcmp(type, "GEKOELD") == 0) {
kraanFrame[7] = 0x02;
} else if (strcmp(type, "BRUIS") == 0) {
kraanFrame[7] = 0x08;
}
kraanFrame[15] = calculateChecksum(kraanFrame, 16);
}
void updatePhysicalLeds() {
switch (currentLedState) {
case LED_RED_SOLID:
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, LOW);
break;
case LED_RED_PULSE:
digitalWrite(RED_LED_PIN, (millis() / 500) % 2);
digitalWrite(BLUE_LED_PIN, LOW);
break;
case LED_BLUE_SOLID:
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, HIGH);
break;
case LED_BLUE_BLINK:
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, (millis() / 250) % 2);
break;
case LED_OFF:
default:
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
break;
}
}
// ============================================================================
// SETUP
// ============================================================================
void setup() {
Serial.begin(115200);
quookerBus.begin(BUS_PIN, 19200);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
setWaterType("IDLE");
Serial.println(F("=============================================="));
Serial.println(F(" Quooker Standalone Faucet Emulator Started "));
Serial.println(F("=============================================="));
Serial.println(F("Keys: 'k'=Boiling, 'c'=Cold, 'b'=Sparkling, 's'=Stop"));
}
// ============================================================================
// MAIN LOOP
// ============================================================================
void loop() {
// 1. INITIALIZATION HANDSHAKE
// If the reservoir hasn't sent 17-byte requests yet, send 10-byte announce frame every 500ms
if (!isInitialized && (millis() - lastInitTx > 500)) {
lastInitTx = millis();
Serial.println(F("Sending 10-byte Wake-Up / Announce frame to Reservoir..."));
quookerBus.write(initFrame, 10);
}
// 2. BUS RECEIVE & RESPONSE
while (quookerBus.available()) {
uint8_t b = quookerBus.read();
if (rxIdx < sizeof(rxBuf)) {
rxBuf[rxIdx++] = b;
} else {
rxIdx = 0;
}
// Header filter (Master Request starts with 0x01 0x11)
if (rxIdx == 1 && rxBuf[0] != 0x01) { rxIdx = 0; continue; }
if (rxIdx == 2 && rxBuf[1] != 0x11) { rxIdx = 0; continue; }
// Heartbeat / Bus Reset Frame (xx 05 FA 10 CS)
if (rxIdx >= 4 && rxBuf~[rxIdx - 3] == 0x05 && rxBuf~[rxIdx - 2] == 0xFA && rxBuf~[rxIdx - 1] == 0x10) {
rxIdx = 0;
continue;
}
// Master 17-byte Polling Request Received!
if (rxIdx == 17) {
rxIdx = 0;
if (!isInitialized) {
isInitialized = true;
Serial.println(F(" Reservoir Polling Detected! Handshake complete."));
}
// Decode LED feedback from Reservoir
uint8_t b7 = rxBuf[7];
uint8_t b8 = rxBuf[8];
uint8_t b11 = rxBuf[11];
if (b7 & 0x20) {
currentLedState = LED_RED_SOLID; // Boiling active
} else if (b7 & 0x02) {
currentLedState = LED_RED_PULSE; // Heating up
} else if (b8 == 0x08 || b11 == 0x08) {
currentLedState = LED_BLUE_BLINK; // Sparkling water active
} else if (b8 == 0x02 || b11 == 0x02) {
currentLedState = LED_BLUE_SOLID; // Cold water active
} else {
currentLedState = LED_OFF;
}
// Respond immediately with 16-byte Faucet Status
quookerBus.write(kraanFrame, 16);
}
}
updatePhysicalLeds();
// 3. SERIAL MONITOR CONTROLS
if (Serial.available()) {
char cmd = Serial.read();
if (cmd == 'k') { setWaterType("KOKEND"); Serial.println(F("-> Request BOILING")); }
if (cmd == 'c') { setWaterType("GEKOELD"); Serial.println(F("-> Request COLD")); }
if (cmd == 'b') { setWaterType("BRUIS"); Serial.println(F("-> Request SPARKLING")); }
if (cmd == 's') { setWaterType("IDLE"); Serial.println(F("-> Request IDLE")); }
}
} |
voor energie verbruik heb ik gewoon zo'n shelly stekker er tussen. als je energie wilt meten moet dat op de 230v lijn, dus als je een pcb maakt om de kraan te vervangen wordt dat een beetje onlogisch toch? en de huidige temp sensor kun je toch niet gebruiken? als het op basis van I2C is kun je niet meeluisteren toch? en als het op basis van een weerstandswaarde is dan misschien, maar dan moet je op de pcb van de quooker dit er bij gaan solderen. eventueel met een opamp er tussen zodat je een high impedance input hebt zodat je de meting niet verstoort en eventueel nog een voor de gain zodat je de twee voltage ranges op elkaar afstemt voor de hoogste precisie.consolefreak schreef op dinsdag 28 juli 2026 @ 15:15:
Voor het meten van verbruik zal extra hardware voor nodig zijn inderdaad op het PCB. Voor temperaturen is er nu al een sensor, immers hoe weet het huidige PCB nu of het water op de juiste temperatuur zit? De preciese hoeveelheid tappen zal inderdaad een kwestie van tijd zijn en aansturen. ESPHome kan UART praten in halfduplex: https://esphome.io/components/uart/
Maar eerst maar eens het protocol beter begrijpen
dat esphome ook uart kan is wel interessant, alleen hoe je dan nog je eigen code toevoegd is me nog een raadsel.
maar inderdaad eerst het protocol verder werkend krijgen.
When I unplugged it, it stopped working. This is because one of the 5 byte packets, which is used for init, is sent continously.JazekerXX schreef op dinsdag 28 juli 2026 @ 15:34:
[...]
after plugging in the faucet for the init, did you unplug it after init?
and what do you mean with scrapped your arduino plan?
By scrapping my arduino plan I meant, that we are way further in understanding this than I thought after this little time. I did no longer need to interact with the faucet via arduino, because your code and some changes of it already prove that we have everything we need.
Also I got init working! I changed the code some more and now it is working. No faucet connected and every thing just works. Great!
The arduino even reinitializes after unplugging and replugging. All the functions work. I was able to request boiling / cooled / sparkling water all from my PC via serial to the arduino.
I used an Arduino Mega 2560 so I used pin 13.
Here's the code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| #include "SoftHalfDuplexSerial.h"
const int BUS_PIN = 13;
softHalfDuplexSerial quookerBus(BUS_PIN);
uint8_t kraanFrame[16] = {
0x01, 0x10, 0xEF, 0x42, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
};
uint8_t initFrame10[10] = {
0x01, 0x0A, 0xF5, 0x10, 0x01,
0x11, 0x05, 0x00, 0x03, 0x07
};
uint8_t initFrame40[12] = {
0x01, 0x0C, 0xF3, 0x40, 0x01,
0x11, 0x04, 0x57, 0x70, 0x00, 0x00, 0x72
};
uint8_t rxBuf[20];
uint8_t rxIdx = 0;
uint8_t calculateChecksum(uint8_t* buffer, size_t len) {
uint8_t xorSum = 0x00;
for (size_t i = 0; i < len - 1; i++) {
xorSum ^= buffer~[i];
}
return xorSum ^ 0xFF;
}
void setWaterType(const char* type) {
kraanFrame[6] = 0x00; // Reset Kokend water vlag
kraanFrame[7] = 0x00; // Reset Gekoeld / Bruis vlag
if (strcmp(type, "KOKEND") == 0) {
kraanFrame[6] = 0x20; // Kokend water inschakelen
} else if (strcmp(type, "GEKOELD") == 0) {
kraanFrame[7] = 0x02; // Gekoeld water inschakelen
} else if (strcmp(type, "BRUIS") == 0) {
kraanFrame[7] = 0x08; // Bruiswater inschakelen
}
// Herbereken Checksum in Byte 15
kraanFrame[15] = calculateChecksum(kraanFrame, 16);
}
void sendDataWithDelay(uint8_t* data, int length)
{
// wait we're answering to fast
delay(2);
quookerBus.write(data, length);
quookerBus.flush();
}
void setup()
{
Serial.begin(115200);
while(!Serial){}
quookerBus.begin(19200);
setWaterType("IDLE");
Serial.println(F("=============================================="));
Serial.println(F(" Quooker Kraan Emulator + LED Sturing Gestart "));
Serial.println(F("=============================================="));
Serial.println(F("Gebruik Serial Monitor: 'k'=Kokend, 'c'=Gekoeld, 'b'=Bruis, 's'=Stop"));
}
void loop()
{
while(quookerBus.available())
{
uint8_t byte = quookerBus.read();
if(rxIdx < sizeof(rxBuf))
{
rxBuf[rxIdx++] = byte;
}
else
{
rxIdx = 0;
}
// Filter Start-Header (0x01 0x11) and bus init header
if (rxIdx == 1 && !(rxBuf[0] == 0x01 || (rxBuf[0] >= 0x20 && rxBuf[0] < 0x50)))
{
rxIdx = 0; continue;
}
if (rxIdx == 2 && !(rxBuf[1] == 0x11 || rxBuf[1] == 0x05))
{
rxIdx = 0; continue;
}
// Bus init detectie (xx 05 FA 10 CS)
if (rxIdx >= 4 && rxBuf~[rxIdx - 3] == 0x05 && rxBuf~[rxIdx - 2] == 0xFA && rxBuf~[rxIdx - 1] == 0x10) {
rxIdx = 0;
Serial.println("gustav10");
sendDataWithDelay(initFrame10, 10);
continue;
}
if (rxIdx >= 4 && rxBuf~[rxIdx - 3] == 0x05 && rxBuf~[rxIdx - 2] == 0xFA && rxBuf~[rxIdx - 1] == 0x40) {
rxIdx = 0;
Serial.println("gustav12");
sendDataWithDelay(initFrame40, 12);
continue;
}
// Volledig Master Request (17 Bytes) van Boiler ontvangen
if (rxIdx == 17) {
rxIdx = 0;
// Reageer direct met Kraan Statusbericht (16 Bytes)
sendDataWithDelay(kraanFrame, 16);
// Flush eigen echo van de 1-wire lijn
while (quookerBus.available() > 0) quookerBus.read();
}
}
// 2. SERIËLE MONITOR BEDIENING
if (Serial.available()) {
char cmd = Serial.read();
if (cmd == 'k') { setWaterType("KOKEND"); Serial.println(F("-> KOKEND WATER")); }
if (cmd == 'c') { setWaterType("GEKOELD"); Serial.println(F("-> GEKOELD WATER")); }
if (cmd == 'b') { setWaterType("BRUIS"); Serial.println(F("-> BRUISWATER")); }
if (cmd == 's') { setWaterType("IDLE"); Serial.println(F("-> RUSTSTAND (IDLE)")); }
}
} |
The rest of my changes is just adding init and some delay since we were answering way to fast.
This is where your code goes sideways:
1
2
3
4
5
6
7
8
9
| // Header filter (Master Request starts with 0x01 0x11)
if (rxIdx == 1 && rxBuf[0] != 0x01) { rxIdx = 0; continue; }
if (rxIdx == 2 && rxBuf[1] != 0x11) { rxIdx = 0; continue; }
// Heartbeat / Bus Reset Frame (xx 05 FA 10 CS)
if (rxIdx >= 4 && rxBuf~~~[rxIdx - 3] == 0x05 && rxBuf~~~[rxIdx - 2] == 0xFA && rxBuf~~~[rxIdx - 1] == 0x10) {
rxIdx = 0;
continue;
} |
With the code you did most of the work already, it just needed some tweaking!
Nice work!intercook schreef op dinsdag 28 juli 2026 @ 16:13:
[...]
As you can see, I removed the led logic, as this is most likely done by the microcontroler in the faucet via its ring input and only in case of boiler heating via the bus information. So this is something that was not really important in this test.
The rest of my changes is just adding init and some delay since we were answering way to fast.
but removing the LED's because it's controlled by the faucet?
you mean you have the faucet connected together with the arduino? that cant be right..
thank you for the working code!With the code you did most of the work already, it just needed some tweaking!
so, what is next?
in the mean while i made a fast model of a nice 3D printed faucet add on to house the new button and if you like a tiny color oled screen.
/f/image/SR8wGDgs66uTLMyLzlIDY7Og.png?f=fotoalbum_large)
No, sorry. I meant normally, with just the Quooker system and no modifications, the faucet controls its leds on its own and does not tell the other devices (reservoir, cube) about it via the data bus. Therefore, controling leds was not important in this test, since we can implement that how ever we want. For example, we add 3 buttons to the arduino. One for each function. To control a led we can simply get the state of the buttons. We do not need the communications for that.JazekerXX schreef op dinsdag 28 juli 2026 @ 20:31:
[...]
Nice work!
but removing the LED's because it's controlled by the faucet?
The only thing, where we have to get data from the bus to light a led, is to turn it on when the reservoir is heating. And that should be easy to implement.
No, i had the faucet disconnected. I controlled the reservoir and cube with the arduino. So to say, the arduino replaced the faucet.you mean you have the faucet connected together with the arduino? that cant be right..
No problem. But I saw some strange "~" symbols appear after I posted it. Those are not part of the code, but I can not figure out what makes them appear when I post to this forum.thank you for the working code!
I do not know. I need to fix my cube next. It is leaking water. The fitting on the pump broke, and I am waiting for replacement parts to arrive. After that I will probably hook up my Q0 faucet to an arduino and make it able to dispense sparkling water. Maybe I'll just add some buttons, as my Q0 only gives me two resistance readings. One for normal and one for rotate. When I push / hold it, it just reads the same as when it is untouched. Might be somewhat broken, it was in use for so many years...so, what is next?
[ Voor 9% gewijzigd door intercook op 28-07-2026 21:13 ]
on line 97 and 104? how should it be?intercook schreef op dinsdag 28 juli 2026 @ 21:10:
[...]
No problem. But I saw some strange "~" symbols appear after I posted it. Those are not part of the code, but I can not figure out what makes them appear when I post to this forum.
i bought my cube like that, leaking. it's an easy fix.[...]
I do not know. I need to fix my cube next. It is leaking water. The fitting on the pump broke, and I am waiting for replacement parts to arrive. After that I will probably hook up my Q0 faucet to an arduino and make it able to dispense sparkling water. Maybe I'll just add some buttons, as my Q0 only gives me two resistance readings. One for normal and one for rotate. When I push / hold it, it just reads the same as when it is untouched. Might be somewhat broken, it was in use for so many years...
using a Q0 with cube is a cool idea, which is possible now. you only need an analog input and a known pull up resistor..
:strip_exif()/f/image/x6zs2UjpDNPp9aME6YM7E62M.jpg?f=fotoalbum_large)
i also opened a Q0 once and it's the same story with all of those, the platich housing cracks, water seeps in and disturbs the resistance value or rots down something and it looses connection. i think mine had the same issue as yours. als half of he leds did not work anymore.
but this entire ring is poored in resin, so to get to the pcb you need to grind everything away, mine had a lot of crack so there was a lot of damage on the pcb. after grinding al damaged parts away there was not much left to use. in my opinion it's best to just copy the design and order some new pcb's from JLCPCB. as well as for the plastic enclosure, just copy and print it in some transparant resin.
this is the scematic:
en was nog wat vergeten te vertellen. je ziet de kraan in het lichtgrijs en het 3D model in het donker grijs. de kraan schuift dus eigenlijk in de 3D geprinte koker. met de kraan moer onder het aanrechtblad klem je het geheel zodat het vast komt te zitten. het witte stuk tussen de knop en het schermpje kan eventueel uit semitransparant PETG geprint worden om RGB doorheen te laten schijnen.
/f/image/7xJqzefzg93zN2Fr8E5FQEdP.png?f=fotoalbum_large)
:strip_exif()/f/image/wRrDcP9I9RcfEKg1DEmHgrBC.png?f=user_large)
en dan kan de draairing (voor druk draai) op 2 manieren het simpelste is met een rotary encoder maar voor een luxere feel kan het ook met een grote ball bearing en een stalen kogel met veer die over ribbeltjes heen gaat voor het klik effect en een hall effect sensor die een roterend magnetisch veld kan meten. en RGB kan tussen de ring uit schijnen en een leuk 0,66" color oled schermpje is misschien ook wel leuk.
werking kan dan op 2 manieren.
bijvoorbeeld draai naar gewenste stand (kokend, gekoeld of bruisend) dan met een lange druk totdat je los laat tappen (de standaard methode)
of met een korte druk krijg je een tweede menu met ml en kun je daar uit enkele presets kiezen en dan nog een korte druk om te starten. (de ml methode)
dit lijkt me een mooie aanpassing als je een defecte kraan hebt.
wat denken jullie hier van?
Ik heb wel interesse hierin. heb je er nog liggen?juliantje15 schreef op dinsdag 17 februari 2026 @ 21:35:
Ik heb nu trouwens een hele zak met magneten besteld vanwege de minimale bestelwaarde...
Mocht je nog magneetjes nodig hebben, doe mij dan een berichtje, gewoon tegen de inkoopprijs, 7 euro voor 20 magneten + postzegel.
:strip_exif()/f/image/xyR5XvQxGxUpxfrbsV0WaUxu.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/stzamttNnCs1N1kKDso3y7go.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/bT0vzJMbPzIvrGMKSTG7P9Py.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/O6ck6QLxidSle6qe8L56wXDq.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/59AtJPmYnWhM9niBQoU9T7JO.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/eKR13l8kcsNWWjybo1B5Cnn8.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/ZzfQvjw3qgdCrUOTjD9EAwAe.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/7ZaNGqHAunJhAUMRCREZk83M.jpg?f=fotoalbum_large)
:strip_exif()/f/image/WO5z6k7irJmHm81L7W6cS6yR.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/RiLYrXHeNrXarv4Cq88MlBRK.jpg?f=fotoalbum_tile)
:strip_exif()/f/image/0PryNIaPn32f8LTHyu66Z7Bq.jpg?f=fotoalbum_large)