Brings your Exceleron MyUsage prepaid utility account into Home Assistant: current balance, estimated days of service left, daily energy usage and charge, and a month of daily cost history in the Energy dashboard.
Developed against Cleveland Utilities (utility code TNCLE). MyUsage is a
white-label platform used by a lot of small US utilities and co-ops, so it
should work for other MyUsage prepaid accounts — see
Other utilities if yours reports something different.
| Entity | Unit | Notes |
|---|---|---|
| Account balance | USD | Your prepay balance. Attributes: date last updated, account number |
| Unpaid balance | USD | Only created if your account has one |
| Estimated days left | days | The portal's own estimate at current usage |
| Last daily energy usage | kWh | Most recent completed day |
| Energy rate | ¢/kWh | The rate your usage is billed at |
| Last daily charge | USD | Most recent completed day |
| Average daily charge | USD | Portal's rolling average |
| Average daily utility charge | USD | Excludes fees |
| Last payment | USD | Attribute: date posted |
| Meter status | — | e.g. Active |
| Last reading date | date | The day the figures above describe |
| Reading day high / low temperature | °F | Supplied with the charge chart. Disabled by default |
Entities are only created for figures your account actually publishes, so you won't get a row of permanently unknown sensors for features your utility doesn't offer.
The summary page embeds the last thirty days of daily charge, which this
integration imports into long-term statistics as
myutilities:daily_energy_charge. So the Energy dashboard shows a month of
daily cost bars as soon as you finish setup, rather than starting from empty.
To use it: Settings → Dashboards → Energy → Add consumption, and pick the MyUtilities daily energy charge statistic as a cost.
- HACS → ⋮ → Custom repositories
- Add
https://github.com/Zixxorb/MyUtilities, category Integration - Search for MyUtilities, download, restart Home Assistant
Copy custom_components/myutilities/ into your Home Assistant
config/custom_components/ directory and restart.
Settings → Devices & Services → Add Integration → MyUtilities
- Email address and password — the same ones you use at myusage.com
- Utility code — leave blank. Only needed if one login covers several utilities, in which case the portal asks you to choose and this setting picks for you
Polling interval is configurable afterwards under Configure (1–24 hours). The portal recalculates once a day in the morning, so the 6-hour default is already more often than the data changes.
- Home Assistant 2026.9 or newer
- A MyUsage prepaid account with online access
There is no API here. The integration signs in to the portal the same way a
browser does, which means Home Assistant stores your utility account password
in .storage/core.config_entries in plain text. That is how all
username/password integrations work, but it's worth knowing before you type it
in, particularly since this account can take payments.
If that bothers you, don't install this.
The integration also reads your account terms differently from a person clicking around: it polls on a schedule. Exceleron's terms of service are worth a look before you rely on it. The default interval is deliberately gentle; please don't shorten it for a shared release.
If the integration installs but some sensors don't appear, your utility's portal probably lays out or labels those panels differently. You don't need to capture anything by hand:
- Settings → Devices & Services → MyUtilities → ⋮ → Download diagnostics
- Open a new issue and attach the JSON
The diagnostics report says which figures parsed, which didn't, and includes the portal markup with emails, account numbers, phone numbers and street addresses stripped. That's enough to add support for your utility. Skim it before attaching, as always.
Known: the Cleveland Utilities portal publishes no water data — the prepaid page is electric only — so there is no water sensor. If your utility does expose water, a diagnostics report is all it takes to add it.
Turn on debug logging first:
logger:
default: warning
logs:
custom_components.myutilities: debug| Symptom | Likely cause |
|---|---|
Config entry not ready |
The log line beneath it says why. Usually a portal outage or a network problem |
| Re-authentication prompt | Password changed, or the portal invalidated the session. Enter the current password |
login failed: Invalid Email or Password |
Credentials are wrong. Confirm them by signing in at myusage.com |
returned no redirect_url |
The portal's login response changed shape. Please open an issue |
found neither a balance nor any chart history |
Login worked but the page layout doesn't match. Send diagnostics |
This integration has no control over the portal. If MyUsage is down or redesigned, sensors go unavailable and the log says so — by design, rather than reporting stale or zero values.
python -m pytest tests/ -vThe test suite runs the parser against a captured summary page with personal details replaced. A portal redesign fails CI instead of quietly blanking everyone's sensors. If you're adding support for another utility, add a fixture from your own diagnostics report alongside it.
scrub_har.py strips credentials, cookies and personal data out of a HAR
capture, if you need to share raw traffic rather than a diagnostics report.
Changes are recorded in CHANGELOG.md.
Version 1.x was written with AI assistance from Gemini against guessed
endpoints and never worked. Version 2.0 was rewritten with Claude against a
captured browser session; the login flow and page structure documented in
api.py and parser.py came from real traffic.
Not affiliated with, endorsed by, or supported by Exceleron Software or Cleveland Utilities.
MIT — see LICENSE.