{"id":14971996,"url":"https://github.com/luizbizzio/solis-inverter-exporter","last_synced_at":"2026-02-21T03:08:14.560Z","repository":{"id":252463750,"uuid":"840520437","full_name":"luizbizzio/solis-inverter-exporter","owner":"luizbizzio","description":"☀️ A Prometheus exporter written in Python to collect and expose metrics from Solis inverters. It helps monitor solar inverter performance by gathering data on power generation, efficiency, and other key parameters.","archived":false,"fork":false,"pushed_at":"2026-02-19T15:20:04.000Z","size":686,"stargazers_count":19,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-19T17:24:00.863Z","etag":null,"topics":["automation","data-visualization","exporter","grafana","grafana-dashboard","homeautomation","inverter","iot","metrics","monitoring","network","open-source","prometheus","prometheus-exporter","python","solar","solar-system","solis","solis-pv-inverters","soliscloud"],"latest_commit_sha":null,"homepage":"https://www.solisinverters.com/global/inverter","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luizbizzio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"luizbizzio"}},"created_at":"2024-08-09T22:49:41.000Z","updated_at":"2026-02-19T15:22:25.000Z","dependencies_parsed_at":"2025-06-05T04:04:47.873Z","dependency_job_id":"990822e3-8d96-44fe-a6a6-782fdda269db","html_url":"https://github.com/luizbizzio/solis-inverter-exporter","commit_stats":{"total_commits":11,"total_committers":1,"mean_commits":11.0,"dds":0.0,"last_synced_commit":"b97aa83a32f9ab1f339ff3e647db032e0075dac7"},"previous_names":["luizbizzio/solis-inverter-exporter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/luizbizzio/solis-inverter-exporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Fsolis-inverter-exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Fsolis-inverter-exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Fsolis-inverter-exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Fsolis-inverter-exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luizbizzio","download_url":"https://codeload.github.com/luizbizzio/solis-inverter-exporter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luizbizzio%2Fsolis-inverter-exporter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29672433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T00:11:43.526Z","status":"online","status_checked_at":"2026-02-21T02:00:07.432Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","data-visualization","exporter","grafana","grafana-dashboard","homeautomation","inverter","iot","metrics","monitoring","network","open-source","prometheus","prometheus-exporter","python","solar","solar-system","solis","solis-pv-inverters","soliscloud"],"created_at":"2024-09-24T13:46:10.443Z","updated_at":"2026-02-21T03:08:14.553Z","avatar_url":"https://github.com/luizbizzio.png","language":"Python","funding_links":["https://github.com/sponsors/luizbizzio"],"categories":[],"sub_categories":[],"readme":"# Solis Inverter Exporter ☀️📈\n\nPrometheus exporter for **Solis inverters** using the local web interface (`/status.html`).\n\nIt polls the inverter on your LAN on an interval and exposes metrics on `/metrics`.  \nPrometheus scraping does **not** trigger extra requests. The exporter serves cached values until the next poll cycle.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/metrics.png\" alt=\"Grafana example\" width=\"800\"/\u003e\n\u003c/p\u003e\n\n## Features 📊\n\n- Metrics on `/metrics`\n- Multi-inverter support\n- Parallel polling (`max_parallel`)\n- Cached values\n- Stale handling for night time offline inverters\n  - after `stale_seconds`, power is forced to `0`\n  - still keeps last energy counters\n- Extra optional info\n  - Network info as labels (SSID, IP, MAC, mode)\n  - Device info as labels (serial, versions)\n- Health and readiness endpoints\n  - `/-/healthy` (or `/healthz`)\n  - `/-/ready` (or `/readyz`)\n\n## Requirements\n\n- Python 3.10+ (3.11 recommended)\n- Or Docker\n- LAN access to the inverter web UI\n- Inverter web credentials (basic auth)\n\n## Install ⚙️\n\nBefore you run the exporter, edit `config.yaml` and set:\n- your inverter `host`, `username`, `password`\n- optional polling settings\n\n## Python 🐍\n\nInstall dependencies:\n\n```bash\npip install -r requirements.txt\n```\n\nRun (it will look for `config.yaml` in the current folder):\n\n```bash\npython solis_inverter_exporter.py\n```\n\nOptional:\n\n```bash\npython solis_inverter_exporter.py --config-file /path/to/config.yaml\n```\n\nTest:\n\n```bash\ncurl http://localhost:8686/metrics\n```\n\n## Docker 🐳 (GHCR)\n\nThe image is published to GitHub Container Registry.\n\nRun (mount your `config.yaml`):\n\n```bash\ndocker run -d \\\n  --name solis-inverter-exporter \\\n  -p 8686:8686 \\\n  -v \"$(pwd)/config.yaml:/config/config.yaml:ro\" \\\n  --restart unless-stopped \\\n  ghcr.io/luizbizzio/solis-inverter-exporter:latest\n```\n\nTest:\n\n```bash\ncurl http://localhost:8686/metrics\n```\n\nNotes:\n- If you change `server.port`, update the `-p` mapping too.\n- The container is stateless. Any config change needs a container restart.\n- The exporter reads config from `/config/config.yaml` by default inside Docker.\n\n## Configuration 🛠️\n\nEdit `config.yaml`:\n\n```yaml\nserver:\n  port: 8686\n  expose_default_metrics: false\n  log_level: INFO\n\nscrape:\n  poll_interval_seconds: 30\n  timeout_seconds: 10\n  retries: 3\n  retry_backoff_seconds: 1\n  max_parallel: 4\n  stale_seconds: 300\n\nfeatures:\n  network_info: true\n  device_info: true\n\nsolis:\n  - name: inverter-1\n    host: \"IP_ADDRESS\"\n    username: \"INVERTER_USERNAME\"\n    password: \"INVERTER_PASSWORD\"\n    scheme: \"http\"\n    path: \"/status.html\"\n```\n\nConfig notes:\n- `stale_seconds: 300` (5 minutes) is a good default for night time offline.\n- `expose_default_metrics: true` will also expose `python_*` and `process_*` metrics.\n- `features.network_info` and `features.device_info` add label-heavy metrics. Disable if you do not want SSID, MAC, IP in Prometheus.\n\n## Endpoints\n\n- Metrics: `/metrics`\n- Health: `/-/healthy` (or `/healthz`)\n- Ready: `/-/ready` (or `/readyz`)\n\n## Prometheus scrape config\n\n```yaml\nscrape_configs:\n  - job_name: \"solis-inverter\"\n    static_configs:\n      - targets: [\"YOUR_EXPORTER_IP:8686\"]\n```\n\n## Metrics\n\nMain metrics:\n\n| Name | Type | Description |\n|---|---|---|\n| `solis_inverter_up` | Gauge | 1 if last poll succeeded, else 0 |\n| `solis_inverter_power_watts` | Gauge | Current AC power (W). Forced to 0 after stale |\n| `solis_inverter_energy_today_kwh` | Gauge | Energy today (kWh) |\n| `solis_inverter_energy_total_kwh` | Gauge | Total energy (kWh) |\n| `solis_inverter_stale` | Gauge | 1 if data is stale, else 0 |\n| `solis_inverter_last_success_age_seconds` | Gauge | Seconds since last success (-1 if never) |\n| `solis_inverter_errors_total` | Counter | Total poll errors |\n| `solis_inverter_scrape_duration_seconds` | Gauge | Duration of last poll |\n| `solis_inverter_last_success_timestamp` | Gauge | Unix timestamp of last success |\n| `solis_inverter_last_attempt_timestamp` | Gauge | Unix timestamp of last attempt |\n\nOptional extra metrics (if available on your inverter page):\n- `solis_inverter_rated_power_watts`\n- `solis_inverter_uptime_seconds`\n- `solis_inverter_alarm_present`\n- `solis_remote_status_a`, `solis_remote_status_b`, `solis_remote_status_c`\n- `solis_sta_rssi_percent`\n\nLabel info metrics (can be disabled in `features`):\n- `solis_inverter_network_info{inverter,wmode,ap_ssid,ap_ip,ap_mac,sta_ssid,sta_ip,sta_mac} 1`\n- `solis_inverter_device_info{inverter,sn,msvn,ssvn,pv_type,cover_mid,cover_ver} 1`\n\n## Troubleshooting 🔍\n\nIf `solis_inverter_up = 0`:\n- Check IP and that the inverter web UI is reachable.\n- Confirm username and password.\n- Try opening `http://INVERTER_IP/status.html` in a browser from the same network.\n- Increase `scrape.timeout_seconds` if your inverter is slow.\n\nIf power becomes `0` at night:\n- That is expected if the inverter goes offline.\n- Power is forced to `0` only after `stale_seconds` since last success.\n\nIf you do not want SSID, MAC, IP in Prometheus:\n- Set `features.network_info: false`\n- Set `features.device_info: false`\n\n## Security notice ⚠️\n\nThis exporter needs inverter web credentials in `config.yaml`. Treat them as secrets.\n\nAlso, `network_info` can expose SSID, IP and MAC addresses as Prometheus labels. Disable it if you do not want that data stored in your monitoring system.\n\n## License\n\nThis project is licensed under the [PolyForm Noncommercial License 1.0.0](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizbizzio%2Fsolis-inverter-exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluizbizzio%2Fsolis-inverter-exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizbizzio%2Fsolis-inverter-exporter/lists"}