FoundryNet / Canonical Data Model / SunSpec

ENERGY · SUNSPEC MODBUS

Canonical Data Model for SunSpec Inverters

2,461 mappings·1,027-field schema·ISA-95 categorized·deterministic

SunSpec is already a standard, which is exactly why the gaps in it are dangerous: the register names are fixed, the scale factors are not applied for you.

Try it on your tags →See pricing →

The problem

A standard that still needs interpreting.

SunSpec fixes register names, so AC_Power means the same thing on a Fronius and an SMA. What it does not fix is scale: a raw register carries an integer and a separate scale-factor register carries the exponent. Read the value without the factor and you are off by a power of ten, silently, with a plausible-looking number.

The second trap is AC versus DC. On a storage device, A is battery current and genuinely DC, while ACCurrent on the same device is AC line current. Tags that differ by three characters describe opposite sides of the inverter, and a data model that collapses them produces confident nonsense.


The canonical data model

Registers in, canonical fields out: scaled.

Every scale factor applied is reported in the response, with the exponent and which register supplied it, so a 100x correction is reviewable rather than an unexplained number change.

Raw vendor tagCanonical fieldISA-95 category
AC_Power→inverter_output_kwenergy_consumption
ACCurrent→line_current_aelectrical_measurement
DCA→dc_current_aelectrical_measurement
DCV→dc_voltage_velectrical_measurement
AC_Frequency→grid_frequency_hzelectrical_measurement
AC_Energy_WH→energy_delivered_kwhenergy_consumption
TmpCab→inverter_cabinet_temp_cequipment_condition

Every row above is produced by the shipping engine, not written by hand. This page fails to build if any of them stops resolving to the field shown.


How it works

Deterministic resolution, in layers, with the answer shown.

Resolution is a lookup, not an inference. A tag is matched against a curated corpus of 2,461 confirmed vendor mappings; only if that misses does it fall to weaker layers: a normalized fold that strips unit suffixes and separators, then a signal classifier that reads structure and unit evidence. Each layer carries a lower confidence, and the layer that answered is named in the response. A mapping you disagree with is visible rather than buried.

Below a confidence threshold the engine abstains. An evidence gate refuses a match it cannot justify and reports the tag unresolved, by name, with the score and the reasons, because a wrong field at high confidence is far more expensive than an honest miss. Six read-time validators then check what survives: sentinel detection, physics bounds, stuck sensors, dropout, operating mode and correlation.

Units are converted to SI where the source unit is known, and every conversion is reported with its factor. A value that fails a physics bound is nulled with the bound it violated attached, not silently dropped.


Limits

What it will not do.

It does not invent fields. A tag outside the corpus that the signal layer cannot justify comes back unresolved and counted, and those names feed the roadmap for the next pack rather than a plausible guess in your data. It is a translation layer, not a historian: it holds no time series and replaces no SCADA system. And the container is a sandbox: it ships the deterministic layers and the canonical schema, not the production embedding, research and corpus-learning layers.


The proof

Pull the container. Send your own tags.

No key, no account, no sales call. The sandbox runs locally and answers with the same canonical schema production does.

docker pull ghcr.io/foundrynet/forge-sandbox

The energy vertical resolves at 100% coverage on SunSpec payloads. Send a raw Model 103 block with its scale factors and check the arithmetic yourself.

1,027-field schema
2,461vendor mappings
47vendor packs
12protocols

Next

Check our scaling against yours.

Every conversion is shown, not asserted. See platform licensing for embedding the canonical data model in your own product, or pricing for usage-based API access.

Try it on your tags →See pricing →

Related

Other canonical data model pages

Energy & BESS
ISA-95
Unified Namespace
Equipment fleets
Why does a cross-vendor canonical data model matter? The Machine Agent breaks it down weekly. Read it →
Get the thesis behind this infrastructure: The Machine Agent, weekly.