Prometheus exporter for Hoymiles WiFi inverters using hoymiles-wifi.
uv sync
uv run hoymiles-wifi-exporterdocker run -d \
--name hoymiles-exporter \
-p 9099:9099 \
-e DTU_HOST=192.168.1.100 \
ghcr.io/lucavb/hoymiles-wifi-exporter:latestservices:
hoymiles-exporter:
image: ghcr.io/lucavb/hoymiles-wifi-exporter:latest
ports:
- "9099:9099"
environment:
- DTU_HOST=192.168.1.100
restart: unless-stopped| Variable | Default | Description |
|---|---|---|
DTU_HOST |
required | IP address of the inverter/DTU |
METRICS_PORT |
9099 |
Port for Prometheus metrics endpoint |
SCRAPE_INTERVAL |
35 |
Seconds between data fetches (≥35s recommended) |
STALE_AFTER_FAILURES |
3 |
Reset power metrics to 0 after N consecutive failures (0 = disable) |
DEBUG |
false |
Enable debug logging |
hoymiles_pv_power_watts- PV power in wattshoymiles_pv_voltage_volts- PV voltage in voltshoymiles_pv_current_amps- PV current in ampshoymiles_pv_energy_total_wh- Total PV energy in watt-hourshoymiles_pv_energy_daily_wh- Daily PV energy in watt-hours
hoymiles_grid_voltage_volts- Grid voltage in voltshoymiles_grid_frequency_hz- Grid frequency in Hzhoymiles_grid_power_watts- Grid power in wattshoymiles_grid_reactive_power_var- Grid reactive power in varhoymiles_grid_current_amps- Grid current in ampshoymiles_grid_energy_total_wh- Total grid energy in watt-hourshoymiles_grid_energy_daily_wh- Daily grid energy in watt-hours
hoymiles_inverter_power_factor- Power factorhoymiles_inverter_temperature_celsius- Temperature in celsiushoymiles_inverter_operating_status- Operating status codehoymiles_inverter_info- Inverter information labels
hoymiles_dtu_up- Connection status (1 = up, 0 = down)hoymiles_dtu_data_age_seconds- Age of data from DTU
scrape_configs:
- job_name: 'hoymiles'
static_configs:
- targets: ['localhost:9099']
scrape_interval: 35sTested with HMS-800W-2T. Should work with other Hoymiles WiFi inverters and DTUs supported by hoymiles-wifi.
The scrape interval is set to 35 seconds by default. According to the hoymiles-wifi documentation, intervals below ~32 seconds may disable cloud functionality. Setting to 1-2 seconds may disrupt app connections.
uv sync --dev
uv run ruff check .
uv run ruff format .
uv run pyrightMIT