First, the screenshot of the final product:
Now, how did I do it?
First I purchased a few smart plugs. I got 3 Kasa KP115, which are very reasonably priced.
Then I set the smart plugs up on my network like normal using the app (and upgraded the firmware, which will cause a brief outage when it resets).
After that, it was time to get to hackin’!
I found a good scraping tool at https://github.com/Zibby/tplink-exporter/ which has a Docker image and is compatible with my plugs (it is compatible with a few different kinds of TP-Link plugs). Then I wrote a helm chart to deploy that image via my already existing Flux installation. Then I made a HelmRelease (a Flux Custom Resource Definition) to add values to point the chart at my plugs.
Finally I built some dashboards. This part I did manually so there’s no code to look at, but here’s the NRQL from the “Watts used by plugs” chart:
FROM Metric SELECT average(kasa_power) as 'Watts' FACET deploymentName TIMESERIES 2 minutes since 4 hours ago
Note the 2 minutes there; I’m not sure why but it actually takes 60 seconds for tplink-exporter to return data (even though the smartphone app updates about once every 2 seconds). It doesn’t really bother me as I don’t need 1 minute granularity so I just relaxed the timeouts.
And that’s it! It took longer than it seems, mostly because I got stuck with the Prometheus stuff (timeouts, how to get Open Metrics to scrape the deployment).