Sådan regner vi

Metode

Hver eneste bryg fra de to Eversys-maskiner på 2. og 3. sal logges i Eversys Telemetry API. Vi henter dem hvert femte sekund og oversætter dem til en CO₂-værdi ved hjælp af to faktorer:

co₂(bryg) = bønner (g) × 1,24  +  mælk (ml) × 1,4

1,24 g CO₂eq pr. g bønner kommer fra vores kaffeleverandør ØNSK kaffe og er deres opgjorte aftryk for de specifikke bønner, vi bruger. Det er usædvanligt lavt sammenlignet med ikke-certificeret kaffe (typisk 15–17 g/g). 1,4 g CO₂eq pr. ml mælk er en standardværdi for økologisk komælk fra nordeuropæiske LCA-studier. Begge tal kan ændres i config.json.

Hvad er ikke regnet med

Elektricitet til maskinen, vand, emballage og logistik er bevidst udeladt. Bønner og mælk er de dominerende bidrag for kaffemaskinen som helhed; resten ville støje uden at flytte rangordenen mellem espresso og latte. Det er den vægtning, der gør det meningsfuldt at sammenligne en sort kaffe (≈13 g CO₂) med en cappuccino (≈210 g) — det er mælken, ikke elspareren, der gør forskellen.

Bønner pr. bryg

API'et fortæller os ikke direkte, hvor mange gram bønner der gik i hver enkelt kop. Vi slår op i en lille tabel (beansByProduct) på navnet for den knap, der blev trykket — fx Espresso = 7 g, Dbl. Latte = 14 g, Strong Coffee = 8 g, White tea 80° = 0 g.

Hver knap-værdi skaleres derefter med en kalibrerings-faktor k, som vi regelmæssigt justerer, så den samlede sum af vores estimater matcher maskinens fysiske bønne-tæller. Lige nu er k ≈ 1,5 på begge maskiner; det betyder, at en espresso reelt får ~10,5 g bønner i estimatet. Tallet for et enkelt bryg kan være let unøjagtigt, men de daglige og månedlige totaler er præcise til et kg.

Mælk pr. bryg

Eversys logger et tal i et felt der hedder milk.consumption, men det er ikke i millilitre — det er en intern pumpetælling. Vi har kalibreret det mod en konkret Milk for Choco-portion på ~175 ml, hvor API'et rapporterede consumption = 14. Det giver

mælk (ml) = consumption × 12,5

For enkelt-bryg holder det vand: en Cappuccino ender på ~150 ml, en Latte på ~140 ml, en Cortado på ~60 ml. For dobbelte drikke (Dbl. Latte, Dbl. Cappuccino o.l.) rapporterer API'et samme consumption som det enkelte alternativ — et kendt aftryk fra Eversys-firmwaren. I de tilfælde overskriver vi med en fast værdi pr. produkt i milkByProduct.

Navne på drikke

Eversys' API bruger to forskellige indekser for det samme produkt: /product-parameters giver navne efter productId, men brygge-historikken refererer til knappen via keyId = productId + 1. Vi forskyder derfor opslaget, så et bryg med keyId = 16 viser Milk for Choco (productId 15) og ikke Green Tea 85°. API'ets indbyggede drink_type-felt ignorerer vi — det er firmwarens egen klassifikation og ikke til at stole på (en Latte registreres som CAPPUCCINO, en Espresso som MILK_COFFEE osv.).

Skvæt-mælk og opfølgnings-bryg

Når man dispenserer et lille skvæt ekstra mælk efter en kop kaffe, logger Eversys det som en ny separat bryg. Vi sammenlægger den med den foregående kop, hvis den kommer inden for fem minutter og kun indeholder mælk eller varmt vand. På den måde står Cappuccino + ekstra mælk som én kop, ikke to.

Kildekode & data

Hele projektet ligger på github.com/NielsOerbaek/kaffe-skam. Den fulde specifikation, beslutninger og afvejninger findes under docs/superpowers/specs/. API-dokumentationen for Eversys-telemetri er på developers.eversys-telemetry.com.

Live
Tallene dækker kun kaffebønner og komælk  ·  maskinerne understøtter kun komælk  ·  elektricitet, vand og emballage er ikke regnet med