Reads data from a Fronius Gen24 inverter via Modbus TCP and publishes it to an MQTT broker with Home Assistant auto-discovery. Also allows controlling the inverter (power limiting, battery charge/discharge) via MQTT commands from HA.
Note: this has been tested with Symo Gen24 Plus running 1.38.7-1 software.
- Polls all SunSpec models: inverter AC/DC data, MPPT strings, nameplate, status
- Battery/storage support (charge state, charge/discharge control)
- Home Assistant MQTT Discovery (sensors + controls appear automatically)
- Writable controls: power limiting, power factor, reactive power, storage charge/discharge
- Docker-ready
-
Enable Modbus TCP on your Fronius Gen24 inverter (via the web UI under Communication > Modbus)
-
Configure:
cp .env.example .env # Edit .env with your inverter IP, MQTT broker IP, etc. -
Run with Docker:
docker compose up -d --build
Or run directly:
pip install -r requirements.txt python -m src
-
Entities appear automatically in Home Assistant under the Fronius device.
All settings via environment variables (or .env file):
| Variable | Default | Description |
|---|---|---|
MODBUS_HOST |
192.168.1.100 |
Inverter IP address |
MODBUS_PORT |
502 |
Modbus TCP port |
MODBUS_UNIT_ID |
1 |
Modbus slave ID |
MQTT_HOST |
192.168.1.50 |
MQTT broker address |
MQTT_PORT |
1883 |
MQTT broker port |
MQTT_USERNAME |
MQTT username (optional) | |
MQTT_PASSWORD |
MQTT password (optional) | |
POLL_INTERVAL |
5 |
Seconds between polls |
MQTT_BASE_TOPIC |
fronius |
Base MQTT topic |
HA_DISCOVERY_PREFIX |
homeassistant |
HA discovery prefix |
HAS_STORAGE |
false |
Set true if battery is connected |
- State:
fronius/<model>/state— JSON with all register values for that model - Commands:
fronius/command/<register_name>— send a numeric value to write - Availability:
fronius/status—online/offline
Example: limit power output to 50%:
Topic: fronius/command/w_max_lim_pct
Payload: 50
Topic: fronius/command/w_max_lim_ena
Payload: 1
Example: force battery to charge at 100% rate:
Topic: fronius/command/storage_ctrl_mode
Payload: 1
Topic: fronius/command/storage_in_w_rte
Payload: 100