Get your fleet streaming
Voltwell is an operations console for distributed energy assets. It ingests telemetry from your inverters, meters, batteries and chargers, normalises every signal into one tag model, and gives your operators a single place to watch availability, chase alarms and report on production. This guide takes you from an empty workspace to your first live site.
How Voltwell fits together
There are three moving parts, and it helps to hold the whole picture before you start:
- The edge collector runs on-site — a small hardened agent on an industrial PC or VM. It polls your devices on the local network, buffers to disk, and streams to Voltwell over an outbound TLS connection. Nothing inbound is exposed.
- The ingest tier receives that stream, decodes each device against its driver, and writes normalised signals into the time-series store. This is where raw registers become named tags like
ac.power.kw. - The console is what your operators use — the fleet map, the asset tree, alarms, dashboards and reports, all served from
console.voltwell.app(or your VPC).
You configure sites and assets in the console; the collector picks up its polling plan from there. You never hand-edit config files on the box.
Connect your first site
From the console, open Sites → New site and give it a name, a timezone and a point of interconnection. A site maps to one metered facility — see the asset tree for how everything below the meter is organised.
Next, add a connection. Voltwell auto-discovers Modbus devices on the collector's subnet, but you can also add one by hand:
# register a Modbus TCP device on the site's collector
voltwell devices add \
--site mesa-verde-2 \
--driver sunspec-inverter \
--transport modbus-tcp \
--host 10.20.4.11 --port 502 --unit 1
# dry-run: read a few tags without committing
voltwell devices probe --site mesa-verde-2 --host 10.20.4.11
If the probe returns live values, commit the device and it will appear in the asset tree within a few seconds. Repeat for each inverter, meter or battery controller — or point the collector at your SCADA front-end and let it enumerate the fleet.
Install the edge collector
The collector ships as a single static binary and a container image. On a Linux host with outbound 443 open:
# pull and start the collector, bound to your workspace
docker run -d --name voltwell-collector \
--restart unless-stopped \
-e VOLTWELL_ENROLL_TOKEN=$TOKEN \
-v /var/lib/voltwell:/data \
registry.voltwell.app/collector:stable
The enrolment token is one-time and site-scoped; you generate it under Settings → Collectors. Once the collector checks in, it downloads its polling plan and begins buffering to /data. If the WAN link drops, it keeps sampling locally for up to 30 days and backfills the gap on reconnect — your history stays continuous.
Invite your team
Under Settings → Members, invite operators by email and assign a role — viewer, operator or admin. On Scale and above you can wire up SSO (SAML or OIDC) and map groups to roles so on-call rotations inherit the right access automatically.
Sites & the asset tree
Everything in Voltwell hangs off a five-level tree, and every level rolls its children's telemetry up automatically:
Portfolio
└─ Site # one point of interconnection
└─ Block # a combiner group, feeder or PCS
└─ Asset # inverter, meter, battery rack, charger
└─ Signal # a single measured tag
Because roll-ups are computed at every level, the same performance-ratio chart works whether you're looking at one string or an entire portfolio — you're just changing which node you've selected.
Telemetry & the tag model
Raw devices expose registers with vendor-specific names and units. The driver's job is to map those into Voltwell's canonical tag model, so a signal means the same thing across every make of hardware. A handful of the common tags:
ac.power.kw— real power, positive for export, negative for import (batteries charging).dc.voltage.v,dc.current.a— per-string DC on the array side.bess.soc.pct— battery state of charge, 0–100.meter.energy.kwh— cumulative revenue-meter register.status.state— a normalised enum:online,derated,fault,offline.
Query any tag through the console or the API. Every response carries the tag, the asset path, the value and a source timestamp:
GET /v1/query?site=mesa-verde-2&tag=ac.power.kw&window=24h&step=1m
Authorization: Bearer $API_KEY
Alarms & thresholds
An alarm rule watches one tag (or a roll-up) and fires when a condition holds for a debounce window. Three rule types cover most of what operators need:
- Threshold — value crosses a bound, e.g.
bess.soc.pct < 10for 5 minutes. - Rate of change — a signal moves too fast or too slow, useful for catching a ramp fault before a hard trip.
- Stale signal — a tag stops updating, which usually means a dead device or a comms drop, not a real zero.
Alarms deduplicate across the asset tree, respect maintenance windows you schedule, and route to the on-call operator by email, SMS or webhook. Median time from a threshold being crossed to a notification landing is about 18 seconds.
Curtailment & performance
Voltwell separates "the site didn't produce" from "the site couldn't produce". By comparing expected output — from irradiance, setpoints and clear-sky models — against metered generation, it attributes lost energy to curtailment, downtime, derating or weather, and totals the revenue impact against your PPA. Performance ratio, availability and specific yield are computed per asset and rolled up per site, so you can rank inverters and find the soiled row or the clipping unit without exporting anything.
Retention & rollups
Raw samples are kept at full resolution for the retention window on your plan — 13 months on Operate, 5 years on Scale, custom on Enterprise. Beyond that, Voltwell keeps 1-minute, 15-minute and 1-hour rollups indefinitely, so long-range trend and degradation analysis never disappears even after the raw 1-second data ages out. Queries automatically pick the coarsest rollup that satisfies the requested step, which is why a five-year chart loads as fast as a one-hour one.