Home Assistant and the API
Home Assistant knows what your home is doing. Eneralo knows what it costs on your bill: spot plus margin, tax, transfer, VAT and the power tariff’s peak fee, two to ten times the spot price depending on the hour. Connect them and your automations run on the bill price, your meter’s hours are priced the same day, and the month’s cost, projection and findings sit on your dashboard. Three afternoons of 11 kW car charging in a Sollentuna peak window cost about 1 100 kr extra. A spot sensor never shows it. Eneralo’s does.
What a device is
A device is a program at home with its own Eneralo token: a Home Assistant installation, a meter reader with network firmware, or a script you run yourself. The token is issued in the app under Settings → Devices and can be revoked there. The electricity meter itself is not a device. A meter reader is a device that reads the meter’s customer interface and keeps a kWh total; it, or Home Assistant, talks to Eneralo.
In Sweden the interface is the P1 or HAN port on the meter; the grid company enables it on request. Readers: HomeWizard P1, Slimmelezer, Tibber Pulse. Home Assistant reads them through the DSMR or HomeWizard Energy integration.
What a device can do with the token
- Upload meter readings. The device posts the meter’s hourly kWh, read from the meter’s customer interface. Eneralo has the home’s consumption within hours instead of the grid company’s one-to-two-day file delay, and no file is uploaded by hand. The analysis, findings and month forecast run on the posted hours.
- Read hourly prices. Every hour of today and tomorrow, priced as this home’s bill prices them: contract, grid tariff, VAT, and the power tariff’s peak windows flagged. A Home Assistant automation can shift a charge or a heat pump cycle on the figure the bill will show, not on the spot price alone.
- Read the month summary. Cost so far, projected cost with its band, kWh and open findings for the current month, for a dashboard or a notification.
- Read the readings. Up to 31 days of hours with kWh, quality and cost.
Home Assistant does all four through the Eneralo integration. A meter reader or a script typically does only 1, with the API below.
Home Assistant: install
- Pair. In the app: Settings → Devices → Home Assistant → Pair a device. Copy the token. Settings → Devices (login)
- Install. Download the integration from the app’s Devices page. Unpack so that custom_components/eneralo/ is in the Home Assistant config directory, beside configuration.yaml. Restart Home Assistant. Download (login)
- Connect. Settings → Devices & services → Add integration → Eneralo. Token: the one from step 1. URL:
https://app.eneralo.com
Home Assistant: entities and statistics
| Entity | Content | Update |
|---|---|---|
| Price now | SEK/kWh for the current hour, VAT included. Attribute hours: the day’s 24 hours with spot, supplier, tax, transfer and peak-window flag. | On the hour |
| Price tomorrow | Mean SEK/kWh and the hours. Unavailable until the day-ahead prices are published, about 13:15. | 30 min |
| Month cost so far / projected | SEK, VAT included. Attributes low and high: the projection’s band. | 30 min |
| Month kWh | kWh since the first of the month. | 30 min |
| Findings | Count. Attribute findings: the sentences. | 30 min |
| Readings through | Timestamp of the last hour on file. | 30 min |
Every 6 hours the integration writes two external statistics to the recorder: eneralo:<site>_consumption (kWh), eneralo:<site>_cost. Energy dashboard → Grid consumption: select the consumption statistic; cost: the cost statistic. Values lag the clock by the grid company’s file delay, typically one to two days. The first run imports 31 days.
Home Assistant: upload from the meter reader
Options → Upload sensor: an entity with device_class energy and state_class total_increasing that measures the whole home. Interval 1, 6, 12 or 24 h. Each run posts the hourly change statistics of the last 25 hours; the server discards hours it already has. Not set: nothing is sent.
configuration.yaml, alternative to step 3; the entry moves to .storage on first start:
eneralo:
- token: "<token>"
url: "https://app.eneralo.com" # default
upload_entity: sensor.p1_energy_import # optional
upload_interval: 6 # 1 | 6 | 12 | 24
API
All requests: Authorization: Bearer <token>. Responses: JSON. Timestamps: ISO 8601 UTC. Money: the home’s currency, VAT included. Rate limits: 300 reads per hour per device, 50 upload batches per day, 1 000 intervals per batch.
| Method, path | Parameters | Returns |
|---|---|---|
GET /api/site/prices |
day=today | tomorrow | YYYY-MM-DD |
24 hours: start, end, spot_ore, supplier_ore, tax_ore, transfer_ore, ore_ex_vat, kr_per_kwh, label, peak_window, peak_kr_per_kw. Day: zone, currency, vat, supplier_pricing, label. |
GET /api/site/summary |
— | month (kwh_so_far, kr_so_far, kwh_projected, kr_projected, kr_low, kr_high, label), findings[], readings.through, device.last_upload_through. |
GET /api/site/readings |
from, to (dates, at most 31 days; default the last 7) |
Hours with kwh, quality (measured | estimated | spread), kr_per_kwh, kr. |
POST /api/device/readings |
body below | 202: accepted, new, revised, unchanged, skipped. |
Request body, one of:
{"intervals": [{"s": "2026-10-01T00:00:00Z", "e": "2026-10-01T01:00:00Z", "kwh": 0.512}]}
{"counters": [{"t": "2026-10-01T00:00:00Z", "kwh_total": 48213.4}]}
Errors: 401 unknown or revoked token. 404 not_published prices not yet available. 413 more than 1 000 intervals. 422 bad date or range. 429 rate limit.
Labels: published (price list or spot), invoice (from a received invoice), estimated (month price not yet known).
