Displacement power factor, as a signed ratio. Signed by convention, which matters: sources that report it as an unsigned percentage lose the leading/lagging distinction entirely, so the normalizer keeps the sign and converts percent to ratio rather than the reverse.
Displacement power factor. Signed by convention.
power_factorEach of these is a real tag as the device or controller emits it, taken from the Forge mapping corpus. This is the table that does not exist anywhere else — the reason cross-vendor telemetry is hard is visible in a single column.
| OEM / profile | Raw tag as the device emits it | Confidence |
|---|---|---|
| Schneider | PFPF_AvgPF_TotalPF_sign_totPowerFactorDisplacementPF | 1.00 |
| SunSpec 101 | PFPF_TotalPowerFactor | 1.00 |
| SunSpec 103 | PFPF_TotalPowerFactor | 1.00 |
| SunSpec 201/202 | PFPF_TotalPowerFactor | 1.00 |
| SunSpec 203/204 | PFPF_TotalPowerFactor | 1.00 |
| Fronius | PFPowerFactor | 1.00 |
| SolarEdge (inverter) | I_AC_PF | 1.00 |
| SolarEdge (meter) | M_AC_PF | 1.00 |
| Sungrow | Power factor | 1.00 |
Every row above is an exact match — a deterministic pack entry or a confirmed corpus mapping — so all of them carry confidence 1.00. That is not a rounding: these are the two exact-match layers, and a tag that resolves here never reaches the embedding or LLM layers. Mappings resolved by the LLM layer do carry sub-1.0 confidence, but those are per-tenant and are not published here.
The canonical field is not just a name. It is a contract about units, sign convention and plausible range, enforced on the way in and re-checked at read time.
| SI / canonical unit | ratio |
| Accepted input units | % ratio |
| Converted on ingest | % → ratio |
| Physics bounds | -1.0 to 1.0 ratio |
| Measurement type | instantaneous |
No mapping table to maintain, and no per-vendor branch in your code. The same request shape works for every OEM in the table above.
Read alongside this one.
spindle_speed_rpm spindle_load_pct program_name part_count feed_rate