Energiemonitor werkplek
Mijn zakelijke laptop, een HP EliteBook 860 G10, gaat onderweg na twee uur al naar 15% accu. Thuis draait hij aan een HP USB-C Dock G5 met drie 4K-monitoren. Ik wilde objectief weten hoeveel stroom deze werkplek gebruikt. Het verbruik van laptop, dock en monitoren moest apart te analyseren zijn, en de data moest automatisch en continu worden verzameld in een eigen database en dashboard.
Doelstellingen
- Continu en automatisch het stroomverbruik meten, minimaal tijdens gebruik.
- Laptop en dock apart inzichtelijk maken, met de monitoren optioneel daarbij.
- Opslag in MySQL voor analyse.
- Visualisatie op een privé-dashboard op deurmatproducties.nl.
- Geen inkomende poorten naar het thuisnetwerk openzetten.
Architectuur
De oplossing heeft drie lagen.
Meetlaag. Shelly Plug M Gen3-stekkers meten het vermogen van het dock en, optioneel, van de drie monitoren. Ze worden lokaal uitgelezen via hun RPC-API. Het laptopverbruik wordt indirect bepaald: via de subtractiemethode en via de WMI-accusensor van Windows.
Opslaglaag. Een Mac mini die altijd aanstaat draait MySQL met de database power_monitor. Daarin staan de tabel readings, waarin elke meting een source-label krijgt, en de tabel baselines voor de nullast van het dock. Beheer gebeurt met MySQL Workbench.
Presentatielaag. Een push-script stuurt nieuwe metingen elke 5 minuten via HTTPS naar een eigen REST-endpoint in WordPress, beveiligd met een geheime header en gebouwd met een Code Snippet. WordPress toont de grafieken via een shortcode op een pagina die alleen beheerders kunnen zien.
Hardware
- HP EliteBook 860 G10: het apparaat dat gemeten wordt; draait ook het WMI-accuscript.
- HP USB-C Dock G5 + 3× 4K-monitor: de werkplek; het dock is het hoofdmeetpunt.
- Shelly Plug M Gen3 (4-pack, ± €38): vermogensmeting voor dock en monitoren, met lokale API.
- Mac mini: altijd-aan server voor de collectors en MySQL.
- FNIRSI FNB58 (onderzocht, afgevallen): USB-C-meter, ongeschikt voor continu gebruik bij een dock met beeldsignaal.
Software en techniek
- Python 3 met requests en mysql-connector-python voor de collectors op de Mac mini, en met wmi en pywin32 voor het accuscript op Windows.
- MySQL 8 en MySQL Workbench voor opslag en beheer.
- launchd voor het automatisch starten van de scripts op macOS, en Windows Taakplanner voor het accuscript op de laptop.
- WordPress met de plugin Code Snippets voor het REST-endpoint, de opslag en het dashboard.
- Scripts: shelly_collector.py, calibrate_baseline.py, derive_laptop_estimate.py, wp_push_collector.py en windows_battery_monitor.py.
Uitdagingen en oplossingen
USB-C-meter verstoort de beeldsignalen. De kabel tussen dock en laptop draagt naast stroom ook DisplayPort Alt Mode-signalen. Betaalbare USB-C-testers geven alleen stroom en USB 2.0 door, waardoor de monitoren zwart blijven. De oplossing was om het laptopverbruik indirect te bepalen met twee methodes, die naast elkaar op het dashboard staan.
Leverbaarheid van hardware. De Shelly Plus Plug S was nergens op voorraad. Het project is tijdelijk omgezet naar de TP-Link Tapo P110 en daarna teruggezet naar de Shelly Plug M Gen3. Omdat de opzet bronnen generiek labelt, bleef de impact beperkt tot één collector-script.
Beperking van de accusensor. De WMI-sensor meet alleen het vermogen dat in of uit de accu gaat. Met een volle accu aan de lader geeft hij 0 W, terwijl het systeem nog stroom gebruikt. Deze bron wordt daarom ingezet voor het accugedrag en ter vergelijking, niet als totaalmeting.
Hosting laat geen externe databaseverbindingen toe. In een eerder project bleek dat Strato geen directe externe MySQL-verbindingen toestaat, en inkomende verbindingen naar huis gaven gedoe met IPv6 en firewalls. Daarom koos ik voor een push-architectuur: de Mac mini stuurt de data naar buiten via HTTPS. Er staan geen poorten open naar het thuisnetwerk.
Betrouwbare kalibratie en datahygiëne. De nullast moet gemeten worden met het echte dock en de randapparatuur aangesloten, niet met een testlader. Testdata ruim je op met DELETE in plaats van TRUNCATE, omdat de scripts hun voortgang bijhouden op basis van ID’s. En MySQL en macOS moeten dezelfde tijdzone gebruiken.
Resultaten
Kan heel uitgebreid resultaten benoemen maar klik hieronder om naar het dashboard te gaan. Dat geeft een veel beter beeld!
Wat ik ervan geleerd heb
- Check de hardware tegen de echte gebruikssituatie voordat je bestelt.
- Een generiek datamodel met een source-label maakt hardware uitwisselbaar.
- Een indirecte meting is prima bruikbaar, zolang je de beperkingen kent en benoemt.
- Een push-architectuur is eenvoudiger en veiliger dan je thuisnetwerk openzetten.
Vervolgstappen: de analyse van werkdagpatronen en piekbelasting, de subtractiemethode periodiek opnieuw kalibreren, en een openbare, geanonimiseerde versie van het dashboard voor de website.