CleverTech bouwde de volledige keten van meterkast tot gevalideerde meetwaarde: camera in de kast, beeld naar de server, beeldherkenning op de foto, gevalideerde stand in de database. Deze case beschrijft uitsluitend die meetketen — het huurdersportaal waarin de standen landen (energiedashboard, alerts, jaarrapport en tariefinstellingen) is de afnemer van deze data en staat in een aparte case beschreven.
Het meetpunt is een ESP32-S3-microcontroller met een OV2640-camera van 2 megapixel (1600x1200), 8 MB PSRAM en een microSD-kaart, gevoed uit het stopcontact in de meterkast — geen batterijwissels, geen bedrading naar de meter zelf. De firmware is in C++ geschreven en gebouwd met PlatformIO.
De keuze voor de ESP32-S3 met camera in plaats van een sensor op de meter is bewust: het tellerwerk hoeft niets te ondersteunen. Wat de installateur ziet, ziet de camera ook. Daarmee valt de hele voorraad oudere tussenmeters binnen bereik van dezelfde oplossing.
Op een instelbaar interval — via de configuratie op de SD-kaart, in de huidige opzet elke 15 tot 30 minuten — komt het kastje uit deep sleep en doorloopt het een vaste cyclus:
- Configuratie inlezen van de SD-kaart — instellingen zitten niet in de firmware gebakken, zodat een kast opnieuw ingericht kan worden zonder nieuwe build.
- Wifi-verbinding opzetten en de klok gelijkzetten via NTP in de tijdzone Europe/Amsterdam, zodat elke aflezing een kloppende tijdstempel krijgt.
- Een JPEG-foto maken met flits — een meterkast is donker, en zonder eigen licht is er geen leesbaar tellerwerk.
- De foto uploaden naar een API-endpoint, geauthenticeerd met een API-key.
- Terug in deep sleep tot de volgende cyclus.
Voor de aangesloten meters vervangt dat de handmatige ronde langs de meterkasten door een automatische aflezing per kwartier tot half uur.
Een meterkast is geen serverruimte: er kijkt niemand naar, en een kastje dat na een wifi-storing stil blijft is een gat in de meetreeks. Twee mechanismen vangen dat af.
Retry-queue op de SD-kaart. Mislukt de upload, dan bewaart de firmware de foto lokaal in een wachtrij van maximaal 100 bestanden en biedt die later opnieuw aan. Een netwerkstoring van een dag kost daarmee geen metingen.
Over-the-air updates met duale partities. Ongeveer dagelijks controleert het apparaat op nieuwe firmware. De update wordt naar een tweede OTA-partitie geschreven, zodat er altijd een werkende versie op het apparaat staat om op terug te vallen. Onderhoud vergt geen bezoek aan de meterkast.
De kern van het ontwerp lost het kostenprobleem uit de uitdaging op. In plaats van een camera per meter groepeert een MeterCabinet-model alle meters van één fysieke kast. Die kast heeft een referentiefoto en een eigen API-key; elke meter binnen de kast heeft een cropRegion in procentcoördinaten — relatief, zodat de uitsnede blijft kloppen los van de resolutie van de opname.
Eén gedeelde camera fotografeert dus de hele kast. De server snijdt vervolgens in-memory met sharp per meter de bijbehorende uitsnede uit die ene foto en zet daar aparte OCR-jobs op. Uit één opname komen zo meerdere meterstanden. Voor het instellen van die uitsnedes is er een bounding-box-editor in het portaal, zodat een nieuwe meter aanwijzen geen codewijziging is.
Dit meterkast-ontwerp is vastgelegd in een specificatie die in april 2026 is goedgekeurd; het beschrijft de gekozen architectuur, geen na oplevering gemeten schaalcijfers.
Op elke uitsnede draait Claude Vision (Anthropic API) als OCR- en computer-vision-laag. Het model leest de tellerstand uit de foto: elektriciteit in kWh, gas in m³, inclusief de decimalen achter de komma — bij veel analoge meters het rode cijfer, precies het deel dat generieke OCR-software het vaakst mist.
Belangrijker dan wat het model leest, is wat het doet als het niets kan lezen. Elke aflezing komt terug als een waarde met een confidence-score. Is de foto onleesbaar — beslagen glas, tegenlicht van de flits, een deels afgedekte teller — dan geeft de pijplijn expliciet null terug met confidence 0. Het systeem gokt niet. Een ontbrekende meting is zichtbaar en herstelbaar; een verzonnen meting verdwijnt ongemerkt in de afrekening.
“
Ontwerpdoel van deze keten: een analoge meter zonder digitale interface dezelfde datastroom laten leveren als een slimme meter, met een expliciet betrouwbaarheidsoordeel per aflezing. Dat is het gestelde ontwerpdoel — er zijn geen na de oplevering gemeten besparings- of tijdwinstcijfers.
Dezelfde beeldherkenningsaanpak vormt de basis onder onze dienst voor OCR en documentverwerking: een model dat een document of tellerwerk interpreteert in plaats van een sjabloon dat op vaste posities moet matchen.
Niet elke meter hoeft via beeld. Naast de camera-route bestaat een P1-endpoint voor slimme meters die hun telegram wél digitaal aanbieden. Beide routes voeden dezelfde datapijplijn en dezelfde meterhistorie, zodat een gemengd pand — oude tussenmeters naast moderne slimme meters — één consistente meetreeks per huurder oplevert.
Wat er daarna met die reeks gebeurt, ligt bij het portaal: verbruiksgrafieken per huurder, alerts met afhandeldialoog, tariefinstellingen, een jaarrapport met export, een meter-health-indicator die stille kastjes zichtbaar maakt, en handmatige aflezing als vangnet wanneer een meter tijdelijk niet gelezen kan worden.