← Homelab

Energie en verwarming in Grafana

Zonnepanelen, een thuisaccu via Modbus, de slimme meter en de verwarming in Prometheus. Met een eigen build van een tado°-exporter, omdat de bestaande image niet meer kon inloggen.

Wat er binnenkomt

BronHoe
Zonnepanelen (11 micro-omvormers)De lokale API van de gateway, met een eigenaarstoken
Thuisaccu (hybride omvormer)Modbus TCP via de netwerkmodule, input-registers
Slimme meterDe lokale API van de P1-dongle
Verwarming (6 zones)tado°-exporter, eigen build

Telegraf leest de eerste drie uit, Prometheus slaat alles op en Grafana toont het.

Huisverbruik zelf uitrekenen

Geen enkel apparaat meet wat het huis verbruikt. De gateway van de panelen heeft wel een "verbruik"-veld, maar zonder verbruiksklem is dat een kopie van de productie. Het huisverbruik is daarom een som:

verbruik = productie zonnepanelen + netto afname van het net + ontladen accu

De netto afname komt van de slimme meter (positief is afname). Bij de accu zit de valkuil in de richting: het register met het vermogen heeft geen teken. Of de accu laadt of ontlaadt, staat als bit in een ander register. Telegraf kan geen losse bits lezen, dus het teken wordt in PromQL berekend met floor() en modulo.

Nog twee valkuilen bij Modbus: de documentatie telt registers vanaf 1, de bus vanaf 0. En de netwerkmodule verbreekt de verbinding als je te snel achter elkaar leest, dus het interval moet ruim zijn.

Een tado°-exporter die niet meer inlogde

De Prometheus-target van de verwarming stond op up, maar er kwamen nul metrics binnen. Verwarrend, want "up" zegt alleen dat de exporter antwoordt.

De oorzaak: het gangbare image op Docker Hub was jaren oud en logde in met gebruikersnaam en wachtwoord op een authenticatieserver die tado° had uitgezet. De broncode upstream ondersteunde de nieuwe device-code-flow wel, maar zonder release, zonder image, en met het token alleen in het geheugen. Na elke herstart moest je opnieuw inloggen.

Mijn oplossing:

  • Een kleine patch die het refresh-token in een bestand (0600) bewaart en opnieuw probeert in plaats van te stoppen. Geen wachtwoord meer in de configuratie.
  • Bouwen op de monitoring-VM zelf, tijdens de deploy. Een eigen registry is niet nodig. De Rust-build piekt rond 1,1 GB en duurt ~2,5 minuut op twee cores. Daarvoor zette ik ballooning op die VM uit; de gast zag maar 1,8 van de 4 GB.
  • Een alert TadoNoData als de exporter wel antwoordt maar geen data levert, met in het runbook de stap om opnieuw te koppelen.

Wat het oplevert

Een dashboard met productie, verbruik, accu en het net per kwartier, de temperatuur en de verwarmingsvraag per kamer. En alerts als iets stopt met meten, bijvoorbeeld een token dat binnenkort verloopt.