tasmota-dash
Aggregates five Tasmota smart plugs into a Homepage dashboard: live power, per-day and lifetime energy, and what it costs in euro.
Homepage's customapi widget can render JSON but cannot do arithmetic, so
this proxy sits between the plugs and the dashboard, applies the tariff, sums
across plugs and records a daily history that the plugs themselves do not keep.
Stdlib Python, no dependencies, one file.
Features
- Per-plug and aggregate readings on one endpoint each
- Cost in euro at two tariffs: marginal (consumption quota) and all-in (total bill / total kWh)
- Daily kWh history in SQLite, with rolling 7 and 30 day figures
- A bar-chart page for the last 30 days
- An offline plug is reported, not silently counted as zero
Endpoints
| Path | Returns |
|---|---|
/<name> |
One plug: power, today/yesterday/lifetime kWh, cost |
/total |
Sum across plugs, plus rolling 7/30 day figures |
/history |
Per-day kWh, last 30 days, JSON |
/graph |
HTML bar chart of the last 30 days |
/ |
Plug list and available paths |
Install
Runs on the machine hosting Homepage, listening on 127.0.0.1:8099.
install -Dm755 tasmota_proxy.py /opt/tasmota-proxy/tasmota_proxy.py
install -Dm644 tasmota-proxy.service /etc/systemd/system/tasmota-proxy.service
# edit the unit: plug addresses and tariff rates
systemctl daemon-reload && systemctl enable --now tasmota-proxy
curl -s localhost:8099/total
Then merge homepage-services.yaml into Homepage's services.yaml and the
layout: block from homepage-settings.yaml into its settings.yaml, and
restart Homepage.
Configuration
Environment variables, set in the unit file:
| Variable | Default | Meaning |
|---|---|---|
TASMOTA_PLUGS |
five LAN addresses | name=host,name=host,... — also defines the URL paths |
PORT |
8099 |
Listen port, bound to localhost |
RATE_MARGINAL |
0.17598 |
€/kWh, consumption quota only |
RATE_ALLIN |
0.2754 |
€/kWh, total bill divided by total kWh |
HISTORY_DB |
/var/lib/tasmota-proxy/history.db |
Daily history |
History
Tasmota keeps only today, yesterday and a lifetime total. Each poll records yesterday's finished kWh per plug, keyed by day so repeated polls overwrite rather than accumulate. History therefore starts from first run, and only covers days the proxy was running for. Today is excluded from rolling sums because it is unfinished.
Tests
python3 test_proxy.py
Fakes the plugs, so it needs no LAN access. Prints ok.
License
GPLv2. See LICENSE.
Development Approach
This project is developed using AI-assisted tools. Code is generated with the help of AI based on human-provided specifications, design decisions, and iterative feedback.
All contributions are reviewed, tested, and curated by the maintainer before being included in the codebase. AI is used as a productivity and exploration tool, while human oversight remains central to all decisions.
The goal is to combine the flexibility of AI-assisted development with standard open-source practices such as transparency, review, and accountability.
