Skip to content

How Data Updates

Varitras edited this page Nov 3, 2026 · 3 revisions

How Data Updates

The polls

Poll Default Range What it reads
Modbus every 10 s from 5 s The inverter, its smart meters and the battery, over the SunSpec models the integration found at setup.
Grid meter power off 1 - 60 s The total power of the primary meter alone (W, with the phase powers in the same read), for a battery control that follows feed-in and draw. Every other value stays on the Modbus poll.
Web API every 60 s 5 - 3600 s Without a login: the inverter's component endpoint, its active events (the event log every 5 minutes) and, with a battery, the battery's identity. With a login also the battery settings, the Modbus service settings, the Solar API switch and the export limit.

Set them under Configure (see Installation and Setup). The polls run independently: a slow or unreachable Web API does not hold up the Modbus entities, and the web values keep updating while Modbus is down. A value from both, such as the throttle reason, follows the web poll and can trail a change by up to the web interval.

With the grid meter power poll on, the primary meter's Power sensor shows the fast poll's reading; its entity id and history stay. The interval has to be shorter than the update interval. When a fast read fails, it shows the Modbus poll's reading, and it is unavailable only when the Modbus poll could not read the meter. Load and grid status stay on the Modbus poll, since they combine the meter with the inverter of the same poll. Every change of the sensor is recorded, so at 1 s it grows the database noticeably; to keep it out of the history, exclude it in the recorder settings.

Finding the register map

At setup the integration walks the SunSpec model chain from register 40000 and builds its entities from the models it finds: 1 (common), 101 or 103 (single- or three-phase inverter), 120 to 124 (nameplate, settings, status, controls, storage), 160 (MPPT) and 201 to 204 on each meter unit. The battery entities exist only with model 124; a meter's phase count follows from its model.

The integration reloads its entry on its own when:

  • the chain changes, for example after a firmware update moved a model;
  • a part that did not answer at the first poll, such as a meter or the MPPT model, answers for the first time, so its entities are built;
  • a PV string that was dark at setup, for example at night, sends its first value, so its MPPT module sensors are built;
  • the inverter answers again after an outage and reports a new firmware version, for the inverter or a meter, so the device page and the Solar API repair notice follow the update;
  • the list of smart meters could not be read at setup and a later web poll reads it, so the meters, their locations and the primary meter are applied.

Values that could not be read

  • A value that could not be read shows as unavailable or unknown, except an energy total, which keeps its last value.
  • Each part - the inverter, a meter, the battery, the Web API - is logged once when it stops answering and once when it answers again.
  • After three Modbus timeouts in a row the connection is closed and opened again.
  • An energy total ignores a drop and an implausible jump, but accepts a genuine counter reset, such as a replaced meter, after three readings that agree.

Writes

  • A control set to the value the inverter already holds writes nothing, over Modbus and over the Web API. The comparison is made against a fresh read, so a value another controller changed in between is still written.
  • The storage controls check a value against the registers the inverter holds right now before writing (see Battery Control).
  • A new value for an active AC limit or power factor is applied by switching the control off and on around the write, as the inverter requires; if the write fails, the control is switched back on. Setting AC limit rate first and then enabling AC limit enable avoids that the limit the inverter still holds applies for a moment.
  • After a battery setting written over the Web API the inverter's Modbus can stop answering for a short while (observed, not documented by Fronius). For 30 seconds after such a write a failed Modbus poll keeps the last values instead of turning the entities unavailable.
  • The inverter keeps what was written over Modbus with no timeout, also when Home Assistant stops. Undo the controls before removing the integration (see Installation and Setup).

The shared connection

The integration does not open a Modbus connection of its own. It asks Home Assistant's built-in modbus integration for a unit on a shared connection, so it can run beside other integrations that talk to the same inverter.

Derived values

  • Load is the household's net demand, from the primary smart meter: for a meter at the feed-in point the meter's power plus the inverter's AC power, for a meter in the consumption path that meter's power. The meter is read right after the inverter, and an update in which the two reads lie more than half a second apart has no load. Generation behind the meter that the inverter does not see, such as a balcony inverter or an AC-coupled battery, is not in it: the value is the consumption minus that generation, and negative while that generation exports. It needs the meter's location, which the inverter reports without a login, and is unknown without it.
  • Grid status comes from the meter and the inverter frequency: on_grid_operating with both within 50 ± 0.2 Hz; off_grid_operating with the meter outside that band while the inverter runs at 45 to 55 Hz (in backup operation about 53 Hz was observed); on_grid while the inverter stands still (below 1 Hz) and the meter sees the grid; off_grid with both below 1 Hz. Any other combination is unknown.
  • Throttle reason see Events and Throttling.

Clone this wiki locally