{"id":35240891,"url":"https://github.com/robertklep/esphome-delta-solivia","last_synced_at":"2026-04-07T15:31:05.932Z","repository":{"id":279184975,"uuid":"937965799","full_name":"robertklep/esphome-delta-solivia","owner":"robertklep","description":"ESPHome support for (some) Delta Solivia solar inverters","archived":false,"fork":false,"pushed_at":"2025-10-23T12:14:26.000Z","size":3054,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-02T10:33:08.779Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robertklep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-24T07:53:22.000Z","updated_at":"2025-10-23T12:14:28.000Z","dependencies_parsed_at":"2025-02-24T09:23:08.545Z","dependency_job_id":"201eb4d0-b72b-42af-ab2d-ef75db47d264","html_url":"https://github.com/robertklep/esphome-delta-solivia","commit_stats":null,"previous_names":["robertklep/esphome-delta-solivia"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/robertklep/esphome-delta-solivia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fesphome-delta-solivia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fesphome-delta-solivia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fesphome-delta-solivia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fesphome-delta-solivia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertklep","download_url":"https://codeload.github.com/robertklep/esphome-delta-solivia/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertklep%2Fesphome-delta-solivia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31518389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2025-12-30T05:01:12.836Z","updated_at":"2026-04-07T15:31:05.922Z","avatar_url":"https://github.com/robertklep.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Delta Solivia RS485 component for ESPHome\n\nThis component for ESPHome can be used to directly read measurement/statistics data from the RS485 port of _some_ Delta Solivia inverters. It does not require having a Solivia Gateway device, but will work if you have one.\n\n## Requirements\n\n* An ESP32\n* An RS-485 module\n* An ESPHome setup\n\nFor more information on the hardware requirements, see [\"Hardware\"](#hardware) below.\n\n## Supported models\n\nThere are dozens of Solivia models, and about 10 different protocol variants. The document [\"Public Solar Inverter Communication Protocol (Version 1.2)\"](assets/Public%20RS485%20Protocol%201V2.pdf), from Delta Energy Systems (Germany) GmbH, documents the protocol that the inverters use over their RS485 port. The document can be found by DuckDuckGo'ing for its title.\n\nOnly a limited number of models is supported by this component at the moment ([see below](#compatibility-table)).\n\nThe component does not perform any checks to see if it's talking to a supported inverter, but just assumes it does, so using it for a different type of inverter will probably cause the component to either crash or to provide incorrect data. Nothing bad will happen with your inverter if you do try this.\n\nBecause not all models provide the same data fields, the exact component configuration for each model is different. [See below](#sensor-fields) for the fields that are available for each variant. There is no validation to check if a configured field applies to the protocol variant of your inverter, but it's not a problem if you configure a field that isn't supported by your inverter.\n\n## HARDWARE\n\n### MCU\n\nThe component should work on most ESP32 boards, and probably also ESP8266 boards, although I have only tested with ESP32-C3 \"SuperMini\" boards.\n\n### RS-485 modules\n\n#### MAX485-based RS-485-to-TTL modules\n\nThese modules are cheap and easy to get. They require explicit flow control (see below, \"ESPHome setup\") for the component to be able to write to the RS485 bus.\n\n##### Pinout\n\nIt's not a requirement to use these exact GPIO pins on the ESP32, you can use others if convenient. Just make sure you change the YAML configuration to reflect the different pins.\n\n\n| ESP32 | RS485 module | Purpose      |\n|-------|--------------|--------------|\n| GPIO4 | DI           | TX           |\n| GPIO3 | RO           | RX           |\n| GPIO2 | RE + DE      | Flow control |\n\n#### Modules with automatic flow control\n\nRS485 boards that have automatic flow control will take care of the correct signalling automatically.\n\n### Connecting to the inverter\n\nThe inverter should have one or more ports that accept RJ45 (\"Ethernet\") connectors. The pinout depends on the inverter model (G3 or G4):\n\n![pinout](assets/pinout.png)\n\nThe TX_A and RX_B pins should connect to the A and B pins on the RS-485 module, respectively. The RS-485 GND pin isn't used.\n\nIf you don't have the necessary tools to crimp Ethernet cables, or you just want a quick solution, cut off a length of Ethernet cable with connector already attached and connect the TX_A and RX_B wires to the RS-485 module.\n\n## ESPHome setup\n\n```\n# Set the correct build flags\nesphome:\n  ...\n  platformio_options:\n    build_unflags: '-std=c++11 -std=gnu++11'\n    build_flags: '-std=c++17 -std=gnu++17'\n\n# Load as external component\nexternal_components:\n  - source: github://robertklep/esphome-delta-solivia@v3.6.0\n    components: [ delta_solivia ]\n\n# UART setup (change tx_pin/rx_pin if required, leave the rest as-is)\nuart:\n  tx_pin: GPIO4\n  rx_pin: GPIO3\n  id: solivia_uart\n  rx_buffer_size: 512\n  baud_rate: 19200\n  parity: NONE\n  stop_bits: 1\n\n# component setup\ndelta_solivia:\n  # The UART configured above\n  uart_id: solivia_uart\n\n  # See below\n  update_interval: 10s\n\n  # See below\n  has_gateway: false\n\n  # Optional flow control pin, only configure this if your board doesn't have automatic flow control.\n  # (before writing to the bus, the pin will be pulled up to assume control over the bus)\n  flow_control_pin: GPIOX\n\n  # Here you can configure multiple inverters.\n  #\n  # Each inverter has a unique address, usually starting with \"1\" for the first inverter, \"2\" for the second, etc.\n  #\n  # You need to specify the \"variant\" used for each inverter. See the compatibility table.\n  #\n  # As explained in the README, the different sensors that can be configured depend on the variant. Look below for the Sensor Fields documentation to see which fields are available for each variant.\n  # If you're not interested in a specific sensor, just leave it out, they're all optional.\n  #\n  # You can run the component with debug logging in ESPHome enabled, which will log information on the packets it receives, including the address from which the packet originated.\n\n  inverters:\n    - address: 1\n      variant: 15\n      throttle: 10s # see below\n      part_number:\n        name: 'Inverter#1 Part Number'\n      serial_number:\n        name: 'Inverter#1 Serial Number'\n      ac_power:\n        name: 'Inverter#1 Current Power'\n      supplied_ac_energy_total:\n        name: 'Inverter#1 Total Energy'\n      supplied_ac_energy_today:\n        name: 'Inverter#1 Today Energy'\n      dc_voltage:\n        name: 'Inverter#1 DC Voltage'\n      dc_current:\n        name: 'Inverter#1 DC Current'\n      ac_voltage:\n        name: 'Inverter#1 AC Voltage'\n      ac_current:\n        name: 'Inverter#1 AC Current'\n      ac_frequency:\n        name: 'Inverter#1 AC Frequency'\n      grid_voltage:\n        name: 'Inverter#1 Grid Voltage'\n      grid_frequency:\n        name: 'Inverter#1 Grid Frequency'\n      runtime_total:\n        name: 'Inverter#1 Runtime Total'\n      runtime_today:\n        name: 'Inverter#1 Runtime Today'\n      max_ac_power_today:\n        name: 'Inverter#1 AC Power Today'\n      max_solar_input_power:\n        name: 'Inverter#1 Solar Input Power'\n    - address: 2\n      variant: 15\n      part_number:\n        name: 'Inverter#2 Part Number'\n      serial_number:\n        name: 'Inverter#2 Serial Number'\n      ac_power:\n        name: 'Inverter#2 Current Power'\n      supplied_ac_energy_total:\n        name: 'Inverter#2 Total Energy'\n      supplied_ac_energy_today:\n        name: 'Inverter#2 Today Energy'\n      dc_voltage:\n        name: 'Inverter#2 DC Voltage'\n      dc_current:\n        name: 'Inverter#2 DC Current'\n      ac_voltage:\n        name: 'Inverter#2 AC Voltage'\n      ac_current:\n        name: 'Inverter#2 AC Current'\n      ac_frequency:\n        name: 'Inverter#2 AC Frequency'\n      grid_voltage:\n        name: 'Inverter#2 Grid Voltage'\n      grid_frequency:\n        name: 'Inverter#2 Grid Frequency'\n      runtime_total:\n        name: 'Inverter#2 Runtime Total'\n      runtime_today:\n        name: 'Inverter#2 Runtime Today'\n      max_ac_power_today:\n        name: 'Inverter#2 AC Power Today'\n      max_solar_input_power:\n        name: 'Inverter#2 Solar Input Power'\n```\n\nThere's also a full example YAML file [here](esphome-example-configuration.yaml).\n\n#### With or without gateway\n\nIf you have a Solivia gateway, you need to set the `has_gateway` to `true`. It will let the component leave requesting updates to the gateway, to prevent having two primaries active on the bus. Note: even though the component will be passive (not writing) when combined with a gateway, you still need to configure the flow control pin if your board requires manual flow control. This is to make sure the pin is set to LOW during component setup, to prevent locking up the bus.\n\nThe `update_interval` option of the component serves different purposes depending on whether you have a gateway or not. With a gateway, it will automatically be set to a low value (0.5s) to prevent missing updates sent by the inverters. Without a gateway, it will be the interval at which the component will request a single inverter (in a round-robin fashion) to send an update. The default of 10 seconds should be sufficient, although you can decrease it if you want faster updates or if you have more than one inverter.\n\nThe `throttle` option for each inverter will limit the amount of state updates sent back to HA. This is only relevant if you have a gateway, since a gateway will request updates for each inverter about every second (remember that each state update will also be stored in HA's database). The default throttle interval is 10 seconds. Internally, this is implemented using a [`throttle_average`](https://esphome.io/components/sensor/#throttle-average) filter. When not using a gateway this setting is ignored.\n\n## Commands\n\nThe component supports a limited number of commands to execute against each inverter.\n\n#### `set_power_limit(uint8_t percentage, uint8_t address = 0xff)`\n\nThis command can be used to limit the output power of the inverter with address `address` (use `0xff`, the default, to limit the power of _all_ inverters on the bus). It can be useful in situations where exporting too much to the grid costs you money.\n\nIt can be used, for instance, with a template switch setup:\n```\ndelta_solivia:\n  id: my_delta_solivia   # references in the switch setup below\n  uart_id: solivia_uart\n  ...\n\nswitch:\n  - platform: template\n    name: \"Limit all inverters to 30%\"\n    id: set_power_limit_30\n    optimistic: true\n    assumed_state: true\n    turn_on_action:\n      lambda: |-\n        id(my_delta_solivia).set_power_limit(30, 0xff);\n    turn_off_action:\n      lambda: |-\n        id(my_delta_solivia).set_power_limit(100, 0xff);\n```\n\n## Compatibility table\n\n| Variant | Model Name| Supported? | Parser |\n|--------|----------------------------|-----------|--------|\n| 1      | SI 2500                   | ❌        |        |\n| 3      | SI 3300                   | ❌        |        |\n| 4      | SI 5000                   | ✅        | Variant4 |\n| 9      | SOLIVIA 2.0 EU G3         | ❌        |        |\n| 11     | SI 11kW (3 phases module of CM/CS) | ❌ |        |\n| 14     | SOLIVIA 5.0 EU G3         | ✅        | Variant4 |\n| 15     | SOLIVIA 2.5 EU G3         | ✅        | Variant15 |\n| 18     | SOLIVIA 3.0 EU G3         | ✅        | \" |\n| 19     | SOLIVIA 3.3 EU G3         | ✅        | \" |\n| 20     | SOLIVIA 3.6 EU G3         | ✅        | \" |\n| 27     | SOLIVIA 15 EU TL          | ✅        | Variant27 |\n| 28     | SOLIVIA 20 EU TL          | ✅        | \"       |\n| 31     | SOLIVIA 2.5 NA G4         | ✅        | Variant15 |\n| 34     | SOLIVIA 3.0 NA G4         | ✅        | \" |\n| 35     | SOLIVIA 3.3 NA G4         | ✅        | \" |\n| 36     | SOLIVIA 3.6 NA G4         | ✅        | \" |\n| 38     | SOLIVIA 4.4 NA G4         | ✅        | \" |\n| 39     | SOLIVIA 5.0 NA G4         | ✅        | \" |\n| 43     | SOLIVIA 15 EU TL G4       | ✅        | Variant27 |\n| 44     | SOLIVIA 20 EU TL G4       | ✅        | \"       |\n| 55     | SOLIVIA 2.5 AP G3         | ✅        | Variant15 |\n| 58     | SOLIVIA 3.0 AP G3         | ✅        | \" |\n| 59     | SOLIVIA 3.3 AP G3         | ✅        | \" |\n| 60     | SOLIVIA 3.6 AP G3         | ✅        | \" |\n| 63     | SOLIVIA 5.0 AP G3         | ✅        | Variant4 |\n| 85     | SOLIVIA 3.0 EU T4 TL      | ❌        |        |\n| 88     | SOLIVIA 5.0 EU T4 TL      | ❌        |        |\n| 89     | SOLIVIA 6.0 EU T4 TL      | ✅        | Variant27 |\n| 90     | SOLIVIA 8.0 EU T4 TL      | ✅        | \"       |\n| 91     | SOLIVIA 10 EU T4 TL       | ✅        | \"       |\n| 93     | SOLIVIA 12 EU T4 TL       | ✅        | \"       |\n| 95     | SOLIVIA 30 EU T4 TL       | ✅        | \"       |\n| 99     | SOLIVIA CS                | ❌        |        |\n| 100    | SOLIVIA CM                | ❌        |        |\n| 102    | SOLIVIA 2.0 EU G4 TR      | ✅        | Variant53 |\n| 103    | SOLIVIA 2.5 EU G4 TR      | ✅        | \"      |\n| 105    | SOLIVIA 3.0 EU G4 TR      | ✅        | \"      |\n| 106    | SOLIVIA 3.3 EU G4 TR      | ✅        | \"      |\n| 107    | SOLIVIA 3.6 EU G4 TR      | ✅        | \"      |\n| 109    | SOLIVIA 4.4 EU G4 TR      | ✅        | \"      |\n| 110    | SOLIVIA 5.0 EU G4 TR      | ✅        | \"      |\n| 111    | SOLIVIA 10 EU G4 TR (EVR) | ✅        | \"      |\n| 113    | SOLIVIA 11 EU G4 TR       | ✅        | \"      |\n| 114    | SOLIVIA 11 EU G4 TR (EVR) | ✅        | \"      |\n| 120    | SOLIVIA 3.0 NA G4 TL      | ✅        | \"      |\n| 121    | SOLIVIA 3.8 NA G4 TL      | ✅        | \"      |\n| 122    | SOLIVIA 5.0 NA G4 TL      | ✅        | \"      |\n| 123    | SOLIVIA 7.6 NA G4 TL      | ✅        | \"      |\n| 124    | SOLIVIA 5.2 NA G4 TL      | ✅        | \"      |\n| 125    | SOLIVIA 6.6 NA G4 TL      | ✅        | \"      |\n| 158    | DELTA 20 TL               | ✅        | \"      |\n| 159    | DELTA 15 TL               | ✅        | \"      |\n| 160    | DELTA 28 TL               | ✅        | \"      |\n| 161    | DELTA 24 TL               | ✅        | \"      |\n| 200    | RPI M6                    | ✅        | Variant27       |\n| 201    | RPI M8                    | ✅        | \"       |\n| 202    | RPI M10                   | ✅        | \"      |\n| 203    | RPI M12                   | ✅        | \"       |\n| 204    | RPI M15A                  | ✅        | \"        |\n| 205    | RPI M20A                  | ✅        | \"        |\n| 206    | RPI M30                   | ✅        | \"       |\n| 207    | RPI H3                    | ❌        |        |\n| 208    | RPI H5                    | ❌        |        |\n| 209    | RPI H3A                   | ❌        |        |\n| 210    | RPI H4A                   | ❌        |        |\n| 211    | RPI H5A                   | ❌        |        |\n| 212    | RPI H3A                   | ✅        | Variant 212 |\n| 213    | RPI H4A                   | ✅        | \"      |\n| 214    | RPI H5A                   | ✅        | \"      |\n| 215    | RPI M6A                   | ✅        | \"      |\n| 216    | RPI M8A                   | ✅        | \"      |\n| 217    | RPI M10A                  | ✅        | \"      |\n| 218    | PRI M50A                  | ✅        | \"      |\n| 219    | RPI M30A                  | ✅        | \"      |\n| 220    | RPI M15A                  | ✅        | \"      |\n| 221    | RPI M20A                  | ✅        | \"      |\n| 222    | RPI H3                    | ✅        | \"      |\n\n## Sensor Fields\n\nThese fields can be configured for each variant.\n\n### Variant 15\n\n```\npart_number\nserial_number\nsolar_voltage_input_1\nsolar_current_input_1\nsolar_isolation_resistance_input_1\ntemperature_ntc_dc\nsolar_input_mov_resistance\nac_current\nac_voltage\nac_power\nac_frequency\ntemperature_ntc_ac\nsc_grid_voltage\nsc_grid_frequency\nsc_grid_dc_injection_current\nac_grid_voltage\nac_grid_frequency\nac_grid_dc_injection_current\nsupplied_ac_energy_today\nruntime_today\nmax_ac_current_today\nmin_ac_voltage_today\nmax_ac_voltage_today\nmax_ac_power_today\nmin_ac_frequency_today\nmax_ac_frequency_today\nsupplied_ac_energy_total\nruntime_total\nmax_solar_current_input_1\nmax_solar_voltage_input_1\nmax_solar_power_input_1\nmin_solar_isolation_resistance_input_1\nmax_solar_isolation_resistance_input_1\ninverter_alarms_status\ninverter_dc_input_status\ninverter_dc_input_limits\ninverter_ac_output_status\ninverter_ac_output_limits\ninverter_warnings\ninverter_dc_hardware_failures\ninverter_ac_hardware_failures\ninverter_sc_hardware_failures\ninverter_bulk_failures\ninverter_comms_failures\ninverter_ac_hardware_disturbance\ninverter_dc_hardware_stage_errors\ninverter_calibration_status\ninverter_neutral_errors\n```\n\n### Variant 53\n\n```\npart_number\nserial_number\nSAP_date_code\nSAP_revision\nSoftware_rev_sc_major\nSoftware_rev_sc_minor\nSoftware_rev_sc_bugfix\nsolar_power_input_1\nsolar_power_input_2\nsolar_power_input_3\nsolar_voltage_input_1\nsolar_voltage_input_2\nsolar_voltage_input_3\nsolar_current_input_1\nsolar_current_input_2\nsolar_current_input_3\nac_current_phase_1\nac_current_phase_2\nac_current_phase_3\nac_voltage_phase_1\nac_voltage_phase_2\nac_voltage_phase_3\nac_frequency_phase_1\nac_frequency_phase_2\nac_frequency_phase_3\nac_power_phase_1\nac_power_phase_2\nac_power_phase_3\nac_reactive_power_phase_1\nac_reactive_power_phase_2\nac_reactive_power_phase_3\nmin_solar_isolation_resistance_input_1\nmax_solar_isolation_resistance_input_1\nsupplied_ac_energy_total\nsupplied_ac_energy_today\nruntime_total\nruntime_today\ninverter_status\n```\n\n### Variants 27 and 212\n\n```\npart_number\nserial_number\nac_voltage_phase_1\nac_current_phase_1\nac_power_phase_1\nac_frequency_phase_1\nac_voltage_phase_2\nac_current_phase_2\nac_power_phase_2\nac_frequency_phase_2\nac_voltage_phase_3\nac_current_phase_3\nac_power_phase_3\nac_frequency_phase_3\nsolar_voltage_input_1\nsolar_current_input_1\nsolar_power_input_1\nsolar_voltage_input_3\nsolar_current_input_3\nsolar_power_input_3\nac_power\nruntime_today\nruntime_total\nsupplied_ac_energy_today\nsupplied_ac_energy_total\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertklep%2Fesphome-delta-solivia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertklep%2Fesphome-delta-solivia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertklep%2Fesphome-delta-solivia/lists"}