> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Fronius Solar API (local)

> Client-mode REST API connector for the local Fronius Solar API V1 on GEN24, Tauro, Verto inverters and the Datamanager: power flow, inverter, smart meter, battery and Ohmpilot realtime data, device lists and status, Datamanager archive data

Technical Preview

## Overview

Fronius inverters (GEN24 Plus, Tauro, Verto) and the Fronius Datamanager 2.0 / Hybridmanager (SnapINverter, Symo Hybrid) serve the **Fronius Solar API V1**: a read-only JSON API on the plant LAN at `http://<device-ip>/solar_api/v1/`. It is documented in the [Fronius Solar API V1 operating instructions](https://www.fronius.com/en/help-center/solar-energy/products/monitoring-control/solutions/open-interfaces/fronius-solar-api-json-) and Fronius ships an OpenAPI 3.0 file for GEN24 / Tauro / Verto.

The **FroniusSolarApi** connector maps 17 MQTT topics onto that API. Typical uses are putting live PV, grid, load and battery power on the broker every few seconds, feeding smart-meter values into energy dashboards and load control, and alarming on inverter status and error codes, all without the Solar.web cloud. Each event publishes the device reply on `<topic>/response`.

| Event | Topic | Request | Platforms | Use |
| - | - | - | - | - |
| `GetApiVersion` | `energy/fronius/api-version/get` | `GET /solar_api/GetAPIVersion.cgi` | Datamanager, Hybrid, GEN24/Tauro/Verto | Highest API version, BaseURL and CompatibilityRange; use as a reachability check |
| `GetInverterRealtimeSystem` | `energy/fronius/inverter-realtime/system/get` | `GET /solar_api/v1/GetInverterRealtimeData.cgi?Scope=System` | Datamanager, Hybrid, GEN24/Tauro/Verto | Whole system (CumulationInverterData): PAC, DAY / YEAR / TOTAL\_ENERGY per inverter |
| `GetInverterRealtimeDevice` | `energy/fronius/inverter-realtime/device/get` | `GET /solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId={device_id}&DataCollection={collection}` | Datamanager, Hybrid, GEN24/Tauro/Verto | One inverter: CommonInverterData (PAC, UAC, IAC, FAC, UDC, IDC, energies, DeviceStatus), CumulationInverterData, 3PInverterData (per phase), MinMaxInverterData (not Hybrid / GEN24) |
| `GetInverterInfo` | `energy/fronius/inverter-info/get` | `GET /solar_api/v1/GetInverterInfo.cgi` | Datamanager, Hybrid, GEN24/Tauro/Verto | All inverters: device type, PV power, custom name, serial, StatusCode, ErrorCode, Show |
| `GetActiveDeviceInfo` | `energy/fronius/active-device/get` | `GET /solar_api/v1/GetActiveDeviceInfo.cgi?DeviceClass={device_class}` | Datamanager, Hybrid, GEN24/Tauro/Verto | Devices currently online for a class: Inverter, Storage, Ohmpilot, SensorCard, StringControl, Meter or System (all classes) |
| `GetPowerFlowRealtime` | `energy/fronius/power-flow/get` | `GET /solar_api/v1/GetPowerFlowRealtimeData.fcgi` | Datamanager, Hybrid, GEN24/Tauro/Verto | Site power flow: P\_PV, P\_Grid (+ import / - export), P\_Load, P\_Akku, SOC, rel\_Autonomy, rel\_SelfConsumption, energy counters, Mode |
| `GetMeterRealtimeSystem` | `energy/fronius/meter-realtime/system/get` | `GET /solar_api/v1/GetMeterRealtimeData.cgi?Scope=System` | Datamanager, Hybrid, GEN24/Tauro/Verto | All smart meters: per-phase voltage, current, active / reactive / apparent power, power factor, frequency, import / export energy, Meter\_Location\_Current |
| `GetMeterRealtimeDevice` | `energy/fronius/meter-realtime/device/get` | `GET /solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId={device_id}` | Datamanager, Hybrid, GEN24/Tauro/Verto | One smart meter (DeviceId 0 = primary meter on most sites) |
| `GetStorageRealtimeSystem` | `energy/fronius/storage-realtime/system/get` | `GET /solar_api/v1/GetStorageRealtimeData.cgi?Scope=System` | Datamanager, Hybrid, GEN24/Tauro/Verto | All batteries: StateOfCharge\_Relative, Capacity\_Maximum, Current\_DC, Voltage\_DC, Temperature\_Cell, manufacturer / model / serial |
| `GetStorageRealtimeDevice` | `energy/fronius/storage-realtime/device/get` | `GET /solar_api/v1/GetStorageRealtimeData.cgi?Scope=Device&DeviceId={device_id}` | Datamanager, Hybrid, GEN24/Tauro/Verto | One battery (DeviceId from active-device/get with device\_class Storage) |
| `GetOhmPilotRealtimeSystem` | `energy/fronius/ohmpilot-realtime/system/get` | `GET /solar_api/v1/GetOhmPilotRealtimeData.cgi?Scope=System` | Datamanager 3.8.1-4+, Hybrid 1.6.1-4+, GEN24 1.13+ | All Ohmpilots (PV heat diverter): power, consumed energy, temperature, CodeOfState |
| `GetOhmPilotRealtimeDevice` | `energy/fronius/ohmpilot-realtime/device/get` | `GET /solar_api/v1/GetOhmPilotRealtimeData.cgi?Scope=Device&DeviceId={device_id}` | Datamanager 3.8.1-4+, Hybrid 1.6.1-4+, GEN24 1.13+ | One Ohmpilot |
| `GetSensorRealtimeData` | `energy/fronius/sensor-realtime/get` | `GET /solar_api/v1/GetSensorRealtimeData.cgi?Scope=Device&DeviceId={device_id}&DataCollection={collection}` | Datamanager, Hybrid (error on GEN24/Tauro/Verto) | Sensor Card channels (irradiance, module / ambient temperature, digital inputs): NowSensorData or MinMaxSensorData |
| `GetStringRealtimeData` | `energy/fronius/string-realtime/get` | `GET /solar_api/v1/GetStringRealtimeData.cgi?{query}` | Datamanager (NowStringControlData also listed for GEN24, but String Control does not exist there) | String Control currents: query Scope=Device\&DeviceId=\&DataCollection=NowStringControlData / LastErrorStringControlData / CurrentSumStringControlData (+ TimePeriod=Day/Year/Total) |
| `GetLoggerInfo` | `energy/fronius/logger-info/get` | `GET /solar_api/v1/GetLoggerInfo.cgi` | Datamanager, Hybrid (error on GEN24/Tauro/Verto) | Datamanager / Hybridmanager: unique id, product and hardware / software versions, time zone, CO2 and cash factors, UTC offset |
| `GetLoggerLedInfo` | `energy/fronius/logger-led/get` | `GET /solar_api/v1/GetLoggerLEDInfo.cgi` | Datamanager, Hybrid (error on GEN24/Tauro/Verto) | Datamanager LED states (power, solar net, WLAN, solar web) and colors |
| `GetArchiveData` | `energy/fronius/archive/get` | `GET /solar_api/v1/GetArchiveData.cgi?{query}` | Datamanager 3.3.4-5+, Hybrid 1.1.2-16+ (NEVER on GEN24/Tauro/Verto) | Historic logger data: query Scope=System/Device, StartDate, EndDate, Channel (repeatable, e.g. EnergyReal\_WAC\_Sum\_Produced, InverterErrors), SeriesType=Detail/DailySum, DeviceClass + DeviceId for Device scope; one call per 120 s |

Every event is a `GET`. The Solar API has no write operations: to control an inverter (export limits, battery charge) use Modbus TCP (SunSpec) instead.

> [!TIP]
>
> This connector talks to the device directly. For fleet-wide or historic data across sites, use the Fronius Solar.web Query API (cloud) instead.

## Prerequisites

* A Fronius **GEN24 / Tauro / Verto** inverter or a **Datamanager 2.0 / Hybridmanager** reachable from the broker over the plant LAN (default port 80).
* On GEN24 / Tauro / Verto: the Solar API **switched on** in the inverter WebUI under **Communication > Solar API**. New devices (and factory resets) from bundle 1.14.1 ship with it off; a disabled API answers `404` with "Solar API disabled by customer config".
* The device address in `BASE_ADDRESS` (for example `http://192.168.1.50`, no trailing slash). Give the inverter a fixed IP or DHCP reservation.
* The device ids you want (from `active-device/get` with `device_class` `System`): inverter `1` and primary meter `0` on most single-inverter sites.

## Connection and security

* **No authentication.** Anyone on the network can read the Solar API, so keep the inverter on the OT VLAN and do not expose it to the internet.
* **HTTP vs HTTPS.** Private addresses (10/8, 172.16/12, 192.168/16) answer over plain HTTP, so the connector ships with `USE_SSL "false"`. GEN24 / Tauro / Verto from firmware 1.35 also serve HTTPS with a Fronius self-signed certificate and redirect non-private addresses to HTTPS. Switch to an `https://` base and `USE_SSL "true"` only when the broker trusts that certificate.
* **One connector per inverter.** On GEN24 / Tauro / Verto the `System` scope only covers the inverter you call. Copy the connector with another name and base address for each additional inverter.

## Pacing and errors

* At most **2 realtime requests in parallel**, with about **4 seconds** between calls. Archive requests run one at a time, **120 seconds** apart. Poll power flow every 5 to 10 seconds and slower for everything else.
* Realtime data only exists while the devices are awake: expect missing inverter values at night.
* The HTTP status is `200` even when the request fails. Always check `Head.Status.Code` in the response:

| `Head.Status.Code` | Meaning |
| - | - |
| `0` | OK, data valid |
| `1` / `11` | Not implemented / not supported on this device |
| `5` / `8` | Timeout talking to the device |
| `6` | Argument error (missing or wrong `DeviceId`, `DataCollection`, archive parameters) |
| `12` | Device not available (for example an inverter in night standby) |
| `255` | Unknown error (also used for unsupported batteries) |

## Platform support

| Event group | Datamanager / SnapINverter | Symo Hybrid | GEN24 / Tauro / Verto |
| - | - | - | - |
| API version, inverter info, active devices, power flow | yes | yes | yes |
| Inverter realtime | yes | not all collections | not `MinMaxInverterData`; `3PInverterData` on 3-phase only |
| Meter, storage, Ohmpilot realtime | yes (meter from 3.3.4-8, Ohmpilot from 3.8.1-4) | yes | yes (meter from 1.13, Ohmpilot from 1.13) |
| Sensor Card, logger info, logger LED | yes | yes | returns an error |
| String Control | yes | no hardware | does not exist |
| Archive | yes (from 3.3.4-5) | yes (from 1.1.2-16) | never |

## Payload

| Field | Type | Used by | Notes |
| - | - | - | - |
| `device_id` | string | `*Device` events, `GetSensorRealtimeData` | Device index, for example `"1"` (inverter) or `"0"` (meter) |
| `collection` | string | `GetInverterRealtimeDevice`, `GetSensorRealtimeData` | `CommonInverterData`, `CumulationInverterData`, `3PInverterData`, `MinMaxInverterData`, `NowSensorData`, `MinMaxSensorData` |
| `device_class` | string | `GetActiveDeviceInfo` | `System`, `Inverter`, `Meter`, `Storage`, `Ohmpilot`, `SensorCard`, `StringControl` |
| `query` | string | `GetStringRealtimeData`, `GetArchiveData` | Whole pre-encoded query string |

Events without fields accept any payload, for example `{}`.

```json theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
{"device_id":"1","collection":"CommonInverterData"}
{"device_class":"System"}
{"query":"Scope=Device&DeviceId=1&DataCollection=CurrentSumStringControlData&TimePeriod=Day"}
{"query":"Scope=System&StartDate=2026-10-04&EndDate=2026-10-04&SeriesType=DailySum&Channel=EnergyReal_WAC_Sum_Produced"}
```

## Example actions

These actions poll power flow every 10 seconds, the inverter and meters every 30 seconds and the inverter list every 5 minutes, well inside the Solar API pacing rules. No secrets are needed.

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
# Example actions for the FroniusSolarApi route (docs page). Not part of the route template.
# No secrets: the Fronius Solar API is unauthenticated on the plant LAN. Set BASE_ADDRESS in the route first.
# Inline JSON object literals are not supported when publishing to a topic, so device requests use a COLLAPSED
#   model sent with PUBLISH MODEL. Parameterless events accept any payload.
# Pacing: the Solar API allows 2 parallel realtime requests and ~4 s between calls; these actions stay far below.

DEFINE MODEL FroniusDeviceRequest COLLAPSED
    ADD STRING "device_id"
    ADD STRING "collection"

DEFINE ACTION FroniusPowerFlowEvery10Seconds
ON EVERY 10 SECONDS DO
    PUBLISH TOPIC "energy/fronius/power-flow/get" WITH "{}"

DEFINE ACTION FroniusInverterEvery30Seconds
ON EVERY 30 SECONDS DO
    PUBLISH MODEL FroniusDeviceRequest TO "energy/fronius/inverter-realtime/device/get" WITH
        device_id = "1"
        collection = "CommonInverterData"

DEFINE ACTION FroniusMeterEvery30Seconds
ON EVERY 30 SECONDS DO
    PUBLISH TOPIC "energy/fronius/meter-realtime/system/get" WITH "{}"

DEFINE ACTION FroniusInverterInfoEvery5Minutes
ON EVERY 5 MINUTES DO
    PUBLISH TOPIC "energy/fronius/inverter-info/get" WITH "{}"
```

## Deployable connector

Set `BASE_ADDRESS` to your inverter or Datamanager before deploying.

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
# Coreflux REST_API template — Fronius Solar API V1 (local JSON API on the inverter / Datamanager, LAN only):
#   API version, inverter realtime data (system total or one inverter: common, cumulation, 3-phase, min/max),
#   inverter list and status codes, active devices per class, power flow (PV, grid, load, battery, autonomy),
#   smart meter, battery storage and Ohmpilot realtime data, Sensor Card and String Control data, Datamanager
#   logger info and LED state, and historic archive data (Datamanager / Hybridmanager only).
# Hugo catalog #178, Tier 2 (energy). Spec: official Fronius Solar API V1 operating instructions
#   42,0410,2012,EN (rev. 021-15052025) plus the official GEN24 / Tauro / Verto OpenAPI 3.0 file (solarApiv1.json
#   from fronius.com/QR-link/0025), both fetched 2026-10-05 into openapi-cache/.
# Docs: https://docs.coreflux.org/latest/lot-language/routes/rest-api-apps/fronius-solar-api
#
# Host: the Solar API runs on each inverter (GEN24 / Tauro / Verto) or Datamanager 2.0 / Hybridmanager on the
#   plant LAN. Replace BASE_ADDRESS with its address, no trailing slash, for example http://192.168.1.50. Private
#   IPs (10/8, 172.16/12, 192.168/16) answer over plain HTTP (USE_SSL "false"). GEN24 / Tauro / Verto from
#   firmware 1.35 also serve HTTPS with a Fronius self-signed certificate and redirect non-private addresses to
#   HTTPS; use USE_SSL "true" only when the broker trusts that certificate. Use one route per inverter: GEN24 does
#   not aggregate other inverters ("System" scope covers only itself). This is not the Solar.web cloud API.
# Auth: none. The Solar API is read-only and unauthenticated; keep it on the OT network. On GEN24 it can be
#   switched off (WebUI > Communication > Solar API); since bundle 1.14.1 new or factory-reset devices ship with it
#   OFF, and a disabled API answers 404 "Solar API disabled by customer config".
# Pacing: at most 2 realtime requests in parallel and about 4 s between calls; archive requests one at a time,
#   120 s apart. Poll every 5-10 s or slower. Realtime data is only available while the devices are awake (no
#   inverter data at night); Head.Status.Code 0 = OK, 12 = DeviceNotAvailable, 6 = argument error, 255 = unknown.
# Platform gaps: GetSensorRealtimeData, GetLoggerInfo and GetLoggerLEDInfo return an error on GEN24 / Tauro /
#   Verto; GetArchiveData is NEVER available on GEN24 / Tauro / Verto (Datamanager / Hybridmanager only);
#   MinMaxInverterData is not on Hybrid or GEN24; String Control does not exist on GEN24.
#
# Payload fields: device_id (Solar Net / device index as a string), collection (DataCollection name),
#   device_class, query (whole pre-encoded query string). Events without fields accept any payload, e.g. {}.
#     GetInverterRealtimeDevice  device_id = "1", collection = "CommonInverterData"
#                                (or CumulationInverterData, 3PInverterData, MinMaxInverterData)
#     GetActiveDeviceInfo        device_class = "System" (or Inverter, Meter, Storage, Ohmpilot, SensorCard,
#                                StringControl)
#     GetMeterRealtimeDevice     device_id = "0"
#     GetSensorRealtimeData      device_id = "1", collection = "NowSensorData" (or MinMaxSensorData)
#     GetStringRealtimeData      query = "Scope=Device&DeviceId=1&DataCollection=CurrentSumStringControlData&TimePeriod=Day"
#     GetArchiveData             query = "Scope=System&StartDate=2026-10-04&EndDate=2026-10-04&SeriesType=DailySum&Channel=EnergyReal_WAC_Sum_Produced"

DEFINE ROUTE FroniusSolarApi WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "http://192.168.1.50"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "false"
        WITH REQUEST_TIMEOUT '10'
        WITH DEFAULT_CONTENT_TYPE "application/json"
        # Replace BASE_ADDRESS with your inverter / Datamanager (http://<lan-ip>); GEN24 1.35+ HTTPS -> USE_SSL "true".
        # Smoke: GetApiVersion -> GetActiveDeviceInfo (System) -> GetPowerFlowRealtime -> GetInverterRealtimeDevice (1, CommonInverterData) -> GetMeterRealtimeSystem.
    ADD EVENT GetApiVersion
        WITH SOURCE_TOPIC "energy/fronius/api-version/get"
        WITH DESTINATION_TOPIC "energy/fronius/api-version/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/GetAPIVersion.cgi"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetInverterRealtimeSystem
        WITH SOURCE_TOPIC "energy/fronius/inverter-realtime/system/get"
        WITH DESTINATION_TOPIC "energy/fronius/inverter-realtime/system/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetInverterRealtimeDevice
        WITH SOURCE_TOPIC "energy/fronius/inverter-realtime/device/get"
        WITH DESTINATION_TOPIC "energy/fronius/inverter-realtime/device/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId={value.json.device_id}&DataCollection={value.json.collection}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetInverterInfo
        WITH SOURCE_TOPIC "energy/fronius/inverter-info/get"
        WITH DESTINATION_TOPIC "energy/fronius/inverter-info/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetInverterInfo.cgi"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetActiveDeviceInfo
        WITH SOURCE_TOPIC "energy/fronius/active-device/get"
        WITH DESTINATION_TOPIC "energy/fronius/active-device/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetActiveDeviceInfo.cgi?DeviceClass={value.json.device_class}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetPowerFlowRealtime
        WITH SOURCE_TOPIC "energy/fronius/power-flow/get"
        WITH DESTINATION_TOPIC "energy/fronius/power-flow/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetPowerFlowRealtimeData.fcgi"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetMeterRealtimeSystem
        WITH SOURCE_TOPIC "energy/fronius/meter-realtime/system/get"
        WITH DESTINATION_TOPIC "energy/fronius/meter-realtime/system/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetMeterRealtimeDevice
        WITH SOURCE_TOPIC "energy/fronius/meter-realtime/device/get"
        WITH DESTINATION_TOPIC "energy/fronius/meter-realtime/device/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetMeterRealtimeData.cgi?Scope=Device&DeviceId={value.json.device_id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetStorageRealtimeSystem
        WITH SOURCE_TOPIC "energy/fronius/storage-realtime/system/get"
        WITH DESTINATION_TOPIC "energy/fronius/storage-realtime/system/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetStorageRealtimeData.cgi?Scope=System"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetStorageRealtimeDevice
        WITH SOURCE_TOPIC "energy/fronius/storage-realtime/device/get"
        WITH DESTINATION_TOPIC "energy/fronius/storage-realtime/device/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetStorageRealtimeData.cgi?Scope=Device&DeviceId={value.json.device_id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetOhmPilotRealtimeSystem
        WITH SOURCE_TOPIC "energy/fronius/ohmpilot-realtime/system/get"
        WITH DESTINATION_TOPIC "energy/fronius/ohmpilot-realtime/system/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetOhmPilotRealtimeData.cgi?Scope=System"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetOhmPilotRealtimeDevice
        WITH SOURCE_TOPIC "energy/fronius/ohmpilot-realtime/device/get"
        WITH DESTINATION_TOPIC "energy/fronius/ohmpilot-realtime/device/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetOhmPilotRealtimeData.cgi?Scope=Device&DeviceId={value.json.device_id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetSensorRealtimeData
        WITH SOURCE_TOPIC "energy/fronius/sensor-realtime/get"
        WITH DESTINATION_TOPIC "energy/fronius/sensor-realtime/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetSensorRealtimeData.cgi?Scope=Device&DeviceId={value.json.device_id}&DataCollection={value.json.collection}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetStringRealtimeData
        WITH SOURCE_TOPIC "energy/fronius/string-realtime/get"
        WITH DESTINATION_TOPIC "energy/fronius/string-realtime/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetStringRealtimeData.cgi?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetLoggerInfo
        WITH SOURCE_TOPIC "energy/fronius/logger-info/get"
        WITH DESTINATION_TOPIC "energy/fronius/logger-info/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetLoggerInfo.cgi"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetLoggerLedInfo
        WITH SOURCE_TOPIC "energy/fronius/logger-led/get"
        WITH DESTINATION_TOPIC "energy/fronius/logger-led/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetLoggerLEDInfo.cgi"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetArchiveData
        WITH SOURCE_TOPIC "energy/fronius/archive/get"
        WITH DESTINATION_TOPIC "energy/fronius/archive/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/solar_api/v1/GetArchiveData.cgi?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
```

## Testing

See `TEST.md` in the package. Static checks against the Fronius PDF and GEN24 OpenAPI, a local Datamanager-like mock and the error controls all pass. A live run needs a Fronius device on the broker's network: `FRONIUS_BASE=http://<inverter-ip> python3 smoke_fronius.py`.

## Suggested branches

* `feat/rest-api-route-fronius-solar-api`
* `feat/docs-rest-api-fronius-solar-api`

Hugo owns GitHub pushes. Nothing was pushed from the factory.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.