ID.nl logo
Zo maak je je eigen bewegingssensor
© Gorodenkoff Productions OU
Huis

Zo maak je je eigen bewegingssensor

BTHome is een nieuwe open standaard voor sensors en knoppen die data via bluetooth doorsturen, ontstaan via het opensource-project Home Assistant. Elk apparaat dat het BTHome-protocol implementeert, wordt automatisch door Home Assistant herkend. Dat is handig als je zelf een bluetooth-sensor wilt maken.

In dit artikel leggen we uit hoe BTHome werkt en programmeren we in CircuitPython een sensorbordje dat detecteert wanneer het beweegt en zijn toestand via bluetooth aan Home Assistant doorstuurt.

Lijkt dit je interessant, maar weet je nog maar weinig van Home Assistant, lees dan eerst dit artikel: Maak je huis slim met Home Assistant

Code downloaden In dit artikel worden best lange voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code beter downloaden en daarna bekijken of kopiëren. Zie het bestand code-bthome.txt voor de code-snippets die in dit artikel genoemd worden. De volledige code van dit project vind je op GitHub.

Heel wat goedkope sensors sturen via bluetooth low-energy data rond naar iedereen in de buurt die het maar wil oppikken. Dat heet broadcasting. Zo’n sensor doet een meting, stuurt de data rond, gaat even in slaap, wordt wakker en stuurt dan de volgende meting door.

Een domoticacontroller zoals Home Assistant kan die bluetooth-pakketjes oppikken via de bluetooth-chip in bijvoorbeeld de Raspberry Pi waarop je de software draait. Maar met alleen het datapakketje ben je nog nergens: je hebt nog een decoder nodig die het formaat van de data kent en er de nuttige sensorwaarden uit haalt. Omdat elke fabrikant zijn eigen formaat gebruikt, heb je daardoor allerlei integraties nodig in Home Assistant: voor Xiaomi, ThermoPro, Inkbird, Govee, Qingping enzovoort. 

Eén standaard voor alle sensors

De makers van Home Assistant besloten daarom om een formaat te bedenken dat allerlei soorten sensors ondersteunt: BTHome. Apparaten die bluetooth-data uitsturen volgens dit formaat, worden dan automatisch door Home Assistant herkend aan de hand van de BTHome-integratie.

Het BTHome-formaat waarmee compatibele apparaten hun data uitzenden, is uitgebreid gedocumenteerd. Dit kun je raadplegen als je in je eigen apparaten van BTHome wilt gebruikmaken. Hiervoor kun je de programmeertaal van jouw keuze voor jouw hardware gebruiken, zolang je maar BLE-advertisements kunt uitsturen.

BTHome is een open standaard voor bluetooth-sensors. Klik op de afbeeldingen voor een grotere weergave.

Bluetooth in Home Assistant inschakelen

Voor je met BTHome aan de slag gaat, dien je eerst na te gaan of je bluetooth-adapter door Home Assistant wordt herkend. Heb je een ingebouwde bluetooth-adapter, bijvoorbeeld op je Raspberry Pi, dan wordt die normaal gesproken al herkend op de pagina Instellingen / Apparaten & Diensten / Integraties. Zo niet, bijvoorbeeld als je een externe bluetooth-adapter via usb aansluit, klik dan rechts onderaan op die pagina op Integratie toevoegen en kies Bluetooth. Bevestig met Opslaan dat je de herkende adapter wilt toevoegen.

Als dit werkt, zul je in de integraties doorgaans al allerlei bluetooth-apparaten herkend zien worden. Dat is dankzij de integraties voor Xiaomi, ThermoBeacon, Qingping, ThermoPro, RuuviTag en vele andere die standaard al ingeschakeld zijn. De ondersteuning voor BTHome dien je nog expliciet in te schakelen, maar daarvoor hebben we eerst een werkend BTHome-apparaat nodig.

Zorg dat Home Assistant je bluetooth-adapter herkent.

Energiezuinig bluetooth-bordje

Voor bluetooth alleen hebben we geen ESP32-microcontrollerbordje of een Raspberry Pi Pico nodig, die immers ook een wifi-chip hebben en daardoor meer energie verbruiken. Daarom kiezen we voor een microcontrollerbordje gebaseerd op de nRF52840, een populaire bluetooth-chip van Nordic Semiconductor. Dit soort bordjes zijn energiezuinig en worden door talloze programmeeromgevingen ondersteund.

In dit artikel gebruiken we als sensorbordje een XIAO nRF52840 Sense van Seeed Studio. Het is een uiterst compact bordje (21 bij 17,5 mm) waarin een microfoon, accelerometer en gyroscoop zijn ingebouwd. Met die twee laatste kun je detecteren wanneer het bordje beweegt. Kies je een ander bordje, dan zul je de instructies in dit artikel wellicht hier en daar moeten veranderen, maar de aanpak blijft hetzelfde.

De Seeed XIAO nRF52840 Sense is een uiterst compact microcontrollerbordje met bluetooth en sensors.

CircuitPython op de Seeed XIAO nRF52840 Sense

Eerst dienen we CircuitPython op het bordje te installeren, een op Python gebaseerde programmeertaal voor microcontrollers. Download op de website van CircuitPython het firmwarebestand voor je bordje, in ons geval CircuitPython 8.0.2 voor de Seeed Studio XIAO nRF52840 (Sense). Het bordje bestaat ook in een versie zonder de sensors maar met dezelfde firmware, maar voor dit artikel hebben we de Sense-versie met sensors nodig.

Sluit daarna het bordje via usb aan op je computer en druk twee keer snel na elkaar op het minuscule resetknopje (aangeduid met RST) naast de usb-aansluiting.

Op je computer verschijnt nu een schijf met de naam XIAO-SENSE. Sleep het gedownloade bestand adafruit-circuitpython-Seeed_XIAO_nRF52840_Sense-nl-8.0.2.uf2 naar de schijf. Daarna koppelt je computer de schijf af en koppelt hij een nieuwe schijf met de naam CIRCUITPY aan. Je bordje is nu klaar om te programmeren.

©Seeed Studio

Druk twee keer snel na elkaar op het minuscule resetknopje naast de usb-aansluiting.

Mu-editor

De eenvoudigste manier om je bordje in CircuitPython te programmeren, is met de code-editor Mu, die zowel voor Windows als voor macOS en Linux beschikbaar is. Start Mu op, klik bovenaan links op Mode, kies CircuitPython uit de lijst en klik op OK. Doorgaans wordt nu je aangesloten bordje herkend. Klik bovenaan op Serial om dit te controleren. Dit opent onderaan een tekstveld van de REPL (read–eval–print-loop). Druk je daarin op Enter, dan krijg je de CircuitPython-versie te zien die je bordje draait, samen met de naam van het bordje.

In het grotere tekstveld bovenaan kun je nu je code typen die je op je bordje wilt uitvoeren. Om te testen of de hardware werkt, typ je daarin de volgende code die de ingebouwde led doet knipperen:

De code kun je overnemen vanuit dit bestand.

Klik bovenaan op Save, selecteer code.py en bevestig dat je dit bestand wilt overschrijven. Als je nu in de REPL op Ctrl+D drukt om het bordje te herstarten, draait je CircuitPython-code en knippert de led.

Met de code-editor Mu programmeer je je microcontrollerbordje in CircuitPython.

Te ingewikkeld?

Een bewegingsmelder kopen hoeft ook niet duur te zijn

Sensordata uitlezen

Door de led te laten knipperen, weten we dat je bordje werkt. Maar we willen de sensordata uitlezen. We gebruiken de IMU (Inertial Measurement Unit), die een accelerometer en gyroscoop bevat. Deze wordt ondersteund door een bibliotheek van Adafruit. Download dus de CircuitPython-bibliotheken, met name de bundel voor CircuitPython 8.x. Pak het zip-bestand uit en kopieer de mappen adafruit_bus_device, adafruit_lsm6ds en adafruit_register naar de map lib van de drive genaamd CIRCUITPY. Die map bevat nu dus drie mappen.

Schrijf nu in het bestand code.py het volgende programma:

De code kun je overnemen vanuit dit bestand.

Deze code schakelt de IMU in, wacht 50 ms tot de sensor is ingeschakeld, stelt de I2C-bus in en initialiseert dan de IMU. Daarna lezen we elke seconde de versnelling en hoeksnelheid over de drie assen in en tonen deze. Sla je dit bestand op met Ctrl+S, dan krijg je in de REPL de sensorwaardes te zien. Als je wat zwaait met het bordje, zie je onmiddellijk het effect op de metingen.

We lezen de versnelling van de accelerometer en hoeksnelheid van de gyroscoop in.

Bewegingsdetectie

Dan moeten we nu uit deze data, die continu veranderen, beweging detecteren. We willen een eenvoudig signaal: het bordje beweegt of het bordje beweegt niet. Dat kun je op allerlei geavanceerde manieren doen, met de accelerometer, gyroscoop of een combinatie van de twee. Voor de eenvoud gebruiken we hier gewoon de gyroscoopwaardes. We kwadrateren elk van de drie componenten en tellen ze op, en we beschouwen het resultaat als beweging wanneer dit groter is dan 0,01.

Onze while-lus wordt dan eenvoudig:

De code kun je overnemen vanuit dit bestand.

We verminderen het slaapinterval tot 100 ms om een snellere reactie te krijgen. Elke keer dat je nu het bordje beweegt, krijg je “Moving” te zien in de REPL. Pas indien nodig de drempelwaarde 0.01 aan.

Apparaten die BTHome ondersteunen Grote fabrikanten blijven hun eigen formaat gebruiken, maar er bestaan wel diverse opensource-projecten die ondertussen BTHome ondersteunen. Het bekendste is ATC_MiThermometer, alternatieve firmware voor sommige bluetooth-thermometers van Xiaomi. Als je deze firmware op een apparaat hebt geïnstalleerd, kun je instellen dat deze de temperatuur in BTHome-formaat uitstuurt.

Ook de b-parasite, een grondvochtigheidssensor waarvan het ontwerp van de hardware én de firmware opensource is, kan zijn data in BTHome-formaat uitsturen.

©Raphael Baron

De opensource-grondvochtigheidssensor b-parasite ondersteunt het BTHome-formaat om zijn sensordata via bluetooth uit te sturen.

Bluetooth-advertenties

Ons bordje detecteert nu beweging en toont dat in de REPL, maar nu willen we dit signaal via bluetooth uitsturen. Daarvoor dienen we eerst in de specificatie van het BTHome-formaat te duiken. In bluetooth kunnen we via een advertentie data uitsturen naar iedereen in de buurt. Zo’n advertentie bestaat uit meerdere elementen en elk element op zijn beurt uit een aantal bytes: eerst de lengte van het element (dit lengtebyte uitgezonderd), dan het type element en daarna data waarvan de betekenis van het element afhangt.

Een advertentie die door BTHome wordt begrepen, kan uit drie elementen bestaan. Eén element is verplicht: Service Data (16bit-UUID). Hierin komen de sensordata te staan. Een element Flags is sterk aangeraden. En optioneel is een element Local Name, waarmee het apparaat zijn naam adverteert.

De website van BTHome legt het formaat van de bluetooth-advertenties byte voor byte uit.

Structuur BTHome-advertentie

Laten we dus eens byte voor byte de advertentie samenstellen, met deze drie elementen. Eerst nemen we de flags op en die bytes zijn altijd hetzelfde voor BTHome: [0x02, 0x01, 0x06]. We gebruiken hier de Python-notatie voor een lijst (met rechte haken rond de elementen van de lijst) en de hexadecimale notatie van de bytes, elk voorafgegaan dor 0x. De 2 staat voor de lengte van het element (het aantal bytes erna), de 1 duidt aan dat het element van het type Flags is en 6 betekent LE General Discoverable Mode en BR/EDR Not Supported. Samengevat: dit is een apparaat met alleen bluetooth low-energy dat algemeen te vinden moet zijn.

Daarna komt een element met de eigenlijke sensordata. De lengte weten we nog niet, dus die laten we even open. Het type is 0x16, wat betekent dat het om service data met een 16bit-UUID gaat.

Daarna komen de data zelf. Die beginnen met het UUID en dat zijn altijd de bytes [0xD2, 0xFC]: het UUID van Allterco Robotics (de maker van Shelly-apparaten), dat gebruikers een licentie geeft om dit UUID te gebruiken voor BTHome.

Daarna komt een byte met apparaatinformatie. Als het om versie twee van het BTHome-formaat zonder encryptie gaat, is dit byte altijd 0x40.

Dan komen nog twee bytes: één met het type data (beweging wordt voorgesteld door 0x22) en één met de data zelf: 0 voor geen beweging, 1 voor wel beweging.

En nu kunnen we dus de bytes voor de sensordata aanmaken: [0x06, 0x16, 0xD2, 0xFC, 0x40, 0x22, 0x01]. Het eerste byte is 6, omdat het de lengte is van de bytes erna.

Tot slot voegen we nog een element met de naam van het apparaat toe, bestaande uit de lengte, 0x09 voor het type en dan de bytes van de naam.

Klasse voor BTHome-advertentie

Om dit wat overzichtelijker te maken, definiëren we een klasse in onze CircuitPython-code die deze elementen samenneemt en ze daarna eenvoudig naar de bytes omzet die we in de bluetooth-advertentie kunnen uitsturen. De code ziet er als volgt uit:

De code kun je overnemen vanuit dit bestand.

Je ziet hier dat we de elementen voor de flags en service data definiëren. In de methode __init__ (die een object van de klasse aanmaakt) zetten we de naam die je aan het object doorgeeft om naar een element voor de local name. Op het moment dat we de bewegingstoestand van de sensor willen adverteren, kunnen we dan eenvoudigweg de methode adv_data van het object roepen met als argument 1 voor beweging en 0 voor geen beweging. Die methode plakt al die reeksen bytes op de juiste manier aan elkaar en vervangt het laatste byte van de service data door de bewegingstoestand.

Beweging adverteren

Dan komt nu de laatste stap, de bewegingsdetectie via bluetooth adverteren. Daarvoor importeren we in het begin van de code eerst de adapter van de module _bleio):

from _bleio import adapter

We maken dan op het einde van onze code een object van de klasse BTHomeAdvertisement met de naam van ons apparaat, en de while-lus breiden we uit om de bewegingstoestand telkens te adverteren:

De code kun je overnemen vanuit dit bestand.

Bij beweging vragen we aan het object bthome de advertentiedata voor beweging op en anders de advertentiedata voor geen beweging. We tonen de data in de REPL en adverteren ze via de bluetooth-adapter. Na 100 ms stoppen we met adverteren en doen we weer een meting. Daarna adverteren we weer met de nieuwe data en zo blijft dat aan de gang. Zoals eerder gezegd vind je op GitHub de volledige code.

Integratie in Home Assistant

Dan nu de test: detecteert Home Assistant onze sensor? Ga in het dashboard van Home Assistant naar Instellingen / Apparaten en Diensten / Integraties. Klik rechts onderaan op Integratie toevoegen en kies BTHome. Als je bordje aan het adverteren is, wordt het hier al onmiddellijk herkend. Klik op Opslaan, ken het eventueel aan een ruimte toe en klik dan op Voltooien. Daarna kun je het apparaat bekijken en de bewegingssensor erin toevoegen aan je dashboard of automatisaties.

Onze BTHome-bewegingssensor wordt automatisch herkend in Home Assistant.

Flexibel formaat

We hebben in dit artikel een eenvoudig voorbeeld gemaakt van een sensor die één type data uitstuurt: 1 of 0 voor wel of geen beweging. Maar het BTHome-formaat ondersteunt tientallen datatypes, waaronder temperatuur, luchtvochtigheid, batterijpercentage, stroom en snelheid.

BTHome is ook een flexibel formaat: je kunt de data van meerdere sensors tegelijk in één advertentie uitsturen. Stel dat we op onze XIAO nRF52840 Sense na de beweging ook de temperatuur willen uitsturen, dan voegen we aan de service data gewoon 0x02 voor de temperatuur toe en dan twee bytes die de temperatuur in honderdsten van een graad Celsius voorstellen. En we kunnen er ook nog 0x01 voor het batterijpercentage aan toevoegen en dan een byte met een waarde van 0 tot 100. De BTHome-integratie van Home Assistant pikt al die types en bijbehorende data op. Als je dus ooit een eigen bluetooth-sensor wilt maken, probeer dan BTHome eens uit.

13 Een greep uit de types sensors die BTHome ondersteunt.

 

Sensordata versleutelen Het BTHome-formaat dat we in dit artikel hebben gebruikt, stuurt alle sensordata onversleuteld uit. Iedereen in de buurt met een bluetooth-ontvanger kan deze data dus meelezen. Heb je dat liever niet, dan moet je gebruikmaken van de versleuteling in BTHome. De service data bevatten dan na de formaataanduiding 0x41 (BTHome v2 met versleuteling) versleutelde data, een teller en een Message Integrity Check (MIC). Alleen wie de sleutel heeft waarmee de data zijn versleuteld, kan de oorspronkelijke sensordata uit deze geadverteerde data reconstrueren. De BTHome-integratie in Home Assistant vraagt je om de sleutel in te voeren als je een BTHome-apparaat met encryptie wilt toevoegen.

BTHome ondersteunt ook versleuteling om pottenkijkers tegen te houden.

▼ Volgende artikel
Zo deel je je keuken handig en logisch in
© Andy Dean Photography
Huis

Zo deel je je keuken handig en logisch in

Of je nu graag uitgebreid kookt of elke avond snel klaar wilt zijn: een slimme keukenindeling maakt het verschil. Alles moet logisch op zijn plek staan, zodat je moeiteloos overal bij kunt en na afloop ook weinig tijd kwijt bent aan opruimen.

Je keuken slim indelen? Wij hebben tips voor:
  • Vaatwasser, gootsteen en vuilnisbak
  • Werkblad en kookplaat
  • Koelkast
  • Neem de keuken-driehoek als uitgangspunt
  • Kies de optimale werkhoogte
  • Opbergruimte

Lees ook: Fornuis op maat: kies het aantal pitten dat bij je past

Vaatwasser, gootsteen en vuilnisbak

Heb je plannen voor een nieuwe keuken? Denk dan nu al na over welke slimme keuzes je kunt maken met de indeling. Plaats bijvoorbeeld de vaatwasser, de spoelbak en de afvalemmer dicht bij elkaar. Je hoeft dan nooit ver te lopen met vieze borden en je kunt ze makkelijk leegschrapen, eventueel afspoelen en direct inruimen. Staat de afvalbak in een kastje direct naast de vaatwasser? Let er dan op dat je het deurtje nog goed kunt openen als de deur van de vaatwasser omlaag staat. Dat werkt makkelijker bij het inruimen. Plaats verder de vaatwasser niet direct tegen een zijmuur. Tijdens het inruimen loop je dan sneller kans op spetters tegen de muur.

Werkblad en kookplaat

Het werkblad is meer dan alleen een plek om iets op te zetten. Je gebruikt het om te snijden, te mixen, spullen neer te leggen en borden op te scheppen. Zorg daarom dat je voldoende vrije werkruimte overhoudt – dus niet alles volbouwen met apparatuur. Plaats de spoelbak of kookplaat liever niet op een hoek. Je hebt aan beide kanten plek nodig, zodat je je handen vrij kunt houden en spetters opvangt. Reken aan weerszijden minimaal veertig centimeter. Dat oogt niet alleen rustiger, het werkt ook prettiger. Handig om te weten: bij je keukenspecialist wordt hiervoor vaak de term aflegruimte gebruikt. En nog even over de kookplaat: plaats die bij voorkeur niet pal naast de koelkast of een hoge kast; dat geeft weinig bewegingsvrijheid en maakt het lastig om met meerdere mensen tegelijk in de keuken te staan.

©Olga Yastremska and Leonid Yastremskiy

Koelkast

Een koelkast gebruik je vaker dan je denkt – gemiddeld zo'n 35 keer per dag. Zet 'm daarom op een plek waar je er makkelijk bij kunt, ook als je vanuit de woonkamer even snel iets wilt pakken. Zet de koelkast liever niet helemaal achterin of op een plek waar je niet vanzelf langsloopt; dat is al snel onhandig in het dagelijks gebruik. Let ook op de temperatuur rondom de koelkast. Zet hem niet naast een oven, radiator of op een plek waar veel zonlicht komt. Kan het echt niet anders, zorg dan voor een isolerende tussenplaat en houd minstens drie centimeter ruimte vrij tussen warmtebron en koelkast.

Gebruik de keuken-driehoek

In de basis draait een keuken om drie functies: koken, spoelen en koelen. Je fornuis, gootsteen en koelkast vormen samen een denkbeeldige driehoek. Als de afstanden tussen deze drie goed gekozen zijn, werk je prettiger. Staan ze te ver van elkaar, dan loop je onnodig veel. Staan ze te dicht bij elkaar, dan dan wordt het al snel krap en onhandig. Een keukenspecialist kan helpen bij het vinden van een goede verhouding, maar je merkt het zelf vaak ook al als iets net niet lekker werkt.

Optimale werkhoogte

Ook de hoogte van je werkplekken telt mee. Een oven op armhoogte is een stuk prettiger dan op kniehoogte, zeker als je vaak bakt. Het voorkomt bukken. Heb je een kleine keuken? Kies dan voor een compacte oven of voor een fornuis met geïntegreerde oven. Datzelfde geldt voor de vaatwasser: als je die wat hoger plaatst, spaar je je rug en knieën. Voor de kookplaat geldt een andere regel: meet de afstand van je onderarm tot het werkblad. Is die ongeveer twaalf centimeter, dan zit je goed qua houding en belast je je schouders niet onnodig.

Apparatuur wat hoger plaatsen (als dat kan) heeft nog een voordeel. Wanneer je kleine kinderen hebt rondlopen, kunnen die er minder makkelijk bij. Wel zo veilig!

©lev dolgachov

Opbergruimte

Tot slot: denk na over hoe je spullen opbergt. Onderkastjes bieden veel ruimte, maar vragen vaak veel van je rug. Bovenkastjes kunnen juist weer te hoog zijn. Een buffetkast biedt uitkomst: wat je dagelijks gebruikt zet je op ooghoogte, wat minder vaak nodig is kan best wat lager of juist hoger.

Slim indelen = een fijnere keuken!

Een goede keuken draait niet alleen om de juiste apparatuur, maar vooral ook om slimme keuzes die het koken makkelijker maken. Denk na over looproutes, werkhoogtes en voldoende bewegingsruimte. Positioneer alles op logische plekken, zorg voor een werkblad met voldoende vrije ruimte en let op kleine details zoals de draairichting van kastdeurtjes. Daarmee wordt de keuken (nog meer) het hart van je huis!

▼ Volgende artikel
Cool artikel: zelf ijskoffie en ijsthee maken
© xMarshall
Huis

Cool artikel: zelf ijskoffie en ijsthee maken

Warm! Dorst! Hoog tijd dus voor ijskoffie en ijsthee. Je hoeft er niet eens voor naar de winkel: je kunt het binnen een paar minuten zelf maken, vaak gewoon met wat je al in huis hebt. Lekker verfrissend, en meestal ook gezonder én goedkoper dan wat je in de supermarkt vindt. In dit artikel lees je precies hoe je dat doet. Proost!

🧊 ➕ ☕ 🟰 😋
  • Zelf ijskoffie maken
    • Koud zetten
    • Met warme koffie
  • Extra luxe: affogato
  • Zelf ijsthee maken
  • 5x varieertips voor ijskoffie
  • 5x varieertips voor ijsthee

Lees ook: Geen ijsmachine, toch zelf ijs maken? Natuurlijk kan dat! 

Wie van koffie houdt, kan met ijskoffie alle kanten op. Je kunt koffie koud zetten (cold brew), of juist warme koffie gebruiken en die laten afkoelen.

In beide gevallen begint het met sterke koffie. Hoe sterker, hoe beter, want ijsblokjes verdunnen de smaak. Zet bijvoorbeeld een dubbele espresso of gebruik een koffiemachine op de hoogste intensiteit. Laat de koffie afkoelen, giet 'm over een glas vol ijsblokjes en voeg melk of plantaardige drink (haver, amandel of soja) toe als je dat lekker vindt.

Liever iets milders? Dan is cold brew een goed alternatief. Meng grofgemalen koffie met koud water in een kan of fles. Je moet er wel de tijd voor nemen, want je moet het daarna zo'n twaalf uur in de koelkast laten trekken. Daarna filter je het koffiedik eruit met een zeef of koffiefilter. Het resultaat is een zachte, cafeïnerijke drank die minder bitter is dan je zou verwachten – ideaal voor wie gewone zwarte koffie te scherp vindt. Verdun het naar smaak met melk, water of siroop, bijvoorbeeld vanillesiroop of hazelnootsiroop. Tip: je kunt ook wat meer maken dan je nodig hebt en dat in de koelkast bewaren (maximaal drie dagen). Heb je op een later tijdstip dan trek in ijskoffie, dan hoef je niet eerst twaalf uur te wachten.

Gebruik je een espressomachine, dan heb je meer controle over de smaak. Voor een krachtige ijskoffie kies een Arabica/Robusta-blend. Door de Robusta-bonen in deze melanges krijg je een pittige smaak en een stevige crèmelaag – ook lekker in ijskoffie.

Liever iets zachters of fruitigers? Ga dan voor 100% Arabica-bonen. Die zijn milder en hebben vaak meer nuance. Zulke bonen geven je ijskoffie een verfijnde smaak, soms met citrus- of bloemtonen.

Ook decafé werkt prima, bijvoorbeeld als je 's avonds nog iets kouds wilt drinken zonder daarna klaarwakker te liggen.

©annapustynnikova

IJskoffie of dessert? Wat maakt het uit: affogato ☝🏼is altijd lekker!

Traditionele ijskoffie maak je met ijsblokjes. Heb je zin in een luxe update? Dan is affogato echt iets voor jou. Schenk hiervoor een warme espresso over een bolletje vanille-ijs. Het ijs smelt deels, de koffie wordt iets zachter van smaak en samen vormen ze een combinatie om je vingers bij af te likken. Je serveert affogato in een glas of klein schaaltje, eventueel met wat geraspte pure chocolade, amandelschaafsel of een scheutje likeur erbij.

IJsthee: verkoelende dorstlesser

Ook ijsthee maak je in een paar simpele stappen. Gebruik losse thee of gewone theezakjes, maar zet het sterker dan je normaal zou doen. De thee wordt namelijk verdund zodra je er ijs aan toevoegt. Zwarte thee is een klassieker, maar groene thee, kruidenmengsels of gearomatiseerde soorten werken net zo goed. Let wel op: groene thee en kruideninfusies zijn gevoeliger voor een bittere nasmaak als je ze te lang laat trekken. Hou de trektijd dus korter dan bij zwarte thee. Hieronder lees je welke watertemperatuur je moet gebruiken en hoe lang je het mengsel moet laten trekken.

Zwarte thee: 95–100 °C, 4–5 minuten
Groene thee: 70–80 °C, 2–3 minuten
Kruideninfusies/rooibos: 95–100 °C, 5–6 minuten

©shersor

Laat de thee eerst een beetje afkoelen, of gebruik niet te veel ijs in één keer. Zo blijft de smaak in balans en voorkom je dat je thee bitter of waterig wordt. Je kunt de thee ook helemaal laten afkoelen op het aanrecht en daarna in de koelkast zetten – dan krijg je een heldere, frisse ijsthee zonder smaakverlies.

Voeg daarna eventueel smaakmakers toe zoals schijfjes citroen, munt of een beetje honing. Suiker los je het best op in de thee als die nog warm is, anders blijft het onder in je glas liggen. Houd je liever van minder zoet, dan kun je het ook bij een paar druppels citroen of een scheutje appelsap houden. Gebruik je verse vruchten zoals perzik of sinaasappel, snijd die dan in dunne plakjes en laat ze even meetrekken.

Gooi je ijsthee niet direct vol ijs, zeker niet als je hem lang wilt bewaren. Door de ijsklontjes vlak voor het serveren toe te voegen, blijft de smaak beter behouden. En als je slim bent, vries je wat van de thee zelf in als ijsklontjes. Zo wordt je drankje koud, zonder dat het verwatert.

Tot slot: experimenteren en bewaren

Het fijne aan zelf ijskoffie of ijsthee maken, is dat je eindeloos kunt variëren. Wissel af met kruiden, citrus, melksoorten of zoetmakers. Probeer eens een koude espresso met gecondenseerde melk of een groene ijsthee met gember en limoen. Hieronder hebben we zowel voor ijskoffie als ijsthee vijf smaakvariaties voor je verzameld.

Maak in één keer een grotere hoeveelheid en bewaar die in een afsluitbare fles in de koelkast. Zo heb je altijd iets klaarstaan als je behoefte hebt aan iets verfrissends én lekkers te drinken. Let er wel op dat vers gemaakte ijsthee en cold brew koffie maar een paar dagen houdbaar zijn. Drink het binnen drie dagen op, dan is de smaak op z'n best.  

©vikakurylo81 - stock.adobe.com

5 bijzondere ijskoffievariaties

Kokos-kardemom: kokosmelk, gemalen kardemom, honing
Sinaasappel-kaneel: geraspte sinaasappelschil, kaneelpoeder, ahornsiroop
Hazelnoot-salted caramel: hazelnotenmelk, karamelsiroop, snufje zeezout
Chocolade-chili: cacaopoeder, cayennepeper, bruine suiker
Rozemarijn-citroen: verse rozemarijn, citroensap, agavesiroop

5 bijzondere ijstheevariaties

Watermeloen-munt: watermeloensap, verse munt, limoen
Perzik-basilicum: verse perzik, basilicumblaadjes, honing
Hibiscus-granaatappel: hibiscusbloemen, granaatappelsap, stevia
Komkommer-dille: komkommer, verse dille, snufje zeezout
Ananas-tijm: ananasblokjes, tijmblaadjes, kokoswater

Smaakvariaties: hoe & wat

Tijdens het trekken (in de hete koffie/thee):

• Kruiden zoals kardemom, kaneel, rozemarijn, basilicum, dille, tijm
• Citrusschil (sinaasappel)
• Hibiscusbloemen

Na het afkoelen toevoegen:

• Verse sappen (watermeloen, granaatappel, citroensap)
• Verse stukjes fruit (perzik, ananas, komkommer)
• Melksoorten (kokosmelk, hazelnotenmelk, amandelmelk)
• Zoetmakers (honing, stroop, stevia)
• Verse kruiden die snel bitter worden (munt)

Extra smaakmakers:

• Cacaopoeder: eerst mengen met beetje heet water, dan toevoegen
• Zeezout: altijd op het laatst, naar smaak

Maak je ijskoffie

nóg lekkerder met een scheutje koffiesiroop