-
Notifications
You must be signed in to change notification settings - Fork 1
Diagnostics File Reference
Settings -> Devices & Services -> SunSpec Modbus -> three-dot menu -> Download diagnostics produces one JSON file per config entry. This page lists its fields and the question each one answers. Troubleshooting in detail walks through the common cases; come here when you want to know what a particular field is.
The host is redacted. Port and unit ID are kept.
What you entered in the setup flow and in the options form, as stored.
options wins over config for anything present in both. The option
keys are the internal names: scan_interval, models_enabled,
max_ac_power_kw, write_beta_enabled, release_slot,
standby_when_idle, capture_raw_registers, scan_delay, prefix.
An empty models_enabled list is the cause when everything went
unavailable after saving the options.
Every block id the inverter answered to on the last walk of its model chain. This is the field for "does my inverter have block N". It is independent of what you ticked.
vendor is the profile that matched the manufacturer name in block 1,
or null for a device the integration only knows generically. It reads
fronius, fronius_datamanager, solaredge, sma or kostal.
raw_blocks is what those profiles read outside the SunSpec chain,
one entry per block with its decoded fields. A block the device did not
answer is simply absent, which is how a SolarEdge without the battery
registers and a Kostal without a battery look.
Between them these two answer "why do I not have the entities the
vendor page promised": a null vendor means no profile applied, and a
missing block means the profile applied but the device did not serve
those registers.
Three lists that together explain why a block is or is not being read:
| Key | Meaning |
|---|---|
option_model_filter |
The blocks ticked in the options |
write_model_filter |
The control blocks added automatically: 124 whenever the inverter has a battery, 123 and 704 while the export beta is on |
polled_models |
What is actually read each cycle: the union of the two above, intersected with detected_models
|
One object per polled block: id, name, label, how many instances of
the block the device has, and the keys of its points. Built from the
polled data, so a block the device has but you never ticked is missing
here. That is the difference to detected_models, and it has cost
people time before.
The last value read for every point of every polled block, keyed by
block id. Enums and bitfields appear as their numeric value. A point
that failed to decode shows an error object instead of a value.
Nameplate blocks 120 and 121 are usually not polled, so their values are not here. What the plausibility filter learned from them is in the next field.
The state of the ceiling that drops implausible power readings.
| Key | Meaning |
|---|---|
configured_max_ac_power_kw |
The Peak AC power option, null when empty |
detected_max_ac_power_kw |
The nameplate read from block 120 (WRtg) or 121 (WMax) |
detected_max_ac_power_source |
Which of the two it came from |
nameplate_filter_headroom |
The factor applied to the detected nameplate, 1.2 |
effective_peak_power_kw |
What the filter actually uses: the configured value as is, else nameplate times headroom, else null
|
per_quantity_ceiling_w |
The resulting ceiling in watts for active power, apparent power, reactive power and DC power |
enabled |
false when there is no ceiling at all |
When a sensor reads unknown on a bright day, compare the reading in
the log line against per_quantity_ceiling_w.
The last errors by category: transport, protocol, device,
transient. Each entry has a timestamp, the exception class and the
message. The categories decide when a Repairs issue is raised; see
How polling works in depth.
The current run of consecutive failures per category. Reset to zero by the next successful cycle. A transport count of 3 or more is what put "Cannot reach SunSpec inverter" in the Repairs panel.
Whether the integration currently treats the inverter as switched off on purpose.
| Key | Meaning |
|---|---|
last_operating_state |
The numeric operating state from the last successful poll. 1 OFF, 2 SLEEPING, 6 SHUTTING_DOWN, 8 STANDBY are the ones that count |
standby_when_idle_option |
The Inverter powers down when idle option |
downtime_is_expected |
The decision: true means no transport repair is raised while it is unreachable |
Empty unless Capture raw registers is on. Then one entry per Modbus read since the option was switched on: address, register count, and the bytes that came back. This is what makes a decoding problem reproducible in a test.
Home Assistant, the embedded pysunspec2 base version, and the integration version. Always quote the last one in a report.
Recipes
- Energy dashboard and statistics
- Zero export and export limiting
- Battery control
- Alerts and notifications
- Dashboard cards
- n8n workflows
- Node-RED workflows
- Sharing the inverter
Reference
- SunSpec models explained
- Entity names and IDs
- Diagnostics file reference
- Vendor notes
- Hardware reports
- FAQ
Under the hood
In the repository