Skip to content

Diagnostics File Reference

Manuel edited this page Sep 2, 2026 · 3 revisions

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.

config and options

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.

detected_models

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 and raw_blocks

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.

model_filters

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

scanned_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.

latest_values

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.

plausibility_filter

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.

recent_errors

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.

consecutive_failures

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.

standby

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

raw_captures

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.

versions

Home Assistant, the embedded pysunspec2 base version, and the integration version. Always quote the last one in a report.

Clone this wiki locally