RS-485 component for some Delta Solivia G3/G4 solar inverters

I’ve implemented a component for reading the data off some models of the Delta Solivia solar inverter.

The component (WIP) and instructions can be found here: my-esphome-components/components/delta_solivia at v2 · robertklep/my-esphome-components · GitHub

There are already various implementations for reading Delta Solivia inverter data over RS-485 (example), but there are dozens of Solivia models and about 10 different protocol variants.

My component supports the following models:

  • SOLIVIA 2.5 EU G3
  • SOLIVIA 3.0 EU G3
  • SOLIVIA 3.3 EU G3
  • SOLIVIA 3.6 EU G3
  • SOLIVIA 2.5 NA G4
  • SOLIVIA 3.0 NA G4
  • SOLIVIA 3.3 NA G4
  • SOLIVIA 3.6 NA G4
  • SOLIVIA 4.4 NA G4
  • SOLIVIA 5.0 NA G4
  • SOLIVIA 2.5 AP G3
  • SOLIVIA 3.0 AP G3
  • SOLIVIA 3.3 AP G3
  • SOLIVIA 3.6 AP G3

Support for the following models is implemented but (as of yet) untested:

  • RPI H3A
  • RPI H4A
  • RPI H5A
  • RPI M6A
  • RPI M8A
  • RPI M10A
  • PRI M50A
  • RPI M30A
  • RPI M15A
  • RPI M20A
  • RPI H3

This implementation is based on the document “Public Solar Inverter Communication Protocol (Version 1.2)”, published by Delta Energy Systems (Germany) GmbH, which documents all the different variants.

At the moment the component exposes 14 data fields (out of a total of 46), including DC voltage/current, AC voltage/current, grid voltage/current, current power output and total energy generated. See screenshot below.

It supports multiple inverters (I have two SOLIVIA 2.5 EU G3’s).

At the moment it relies on a Solivia Gateway to request updates from the inverter(s), but this requirement will hopefully be removed in the upcoming days, which means you’ll only need an ESP32 with an RS-485 board to read the inverter data.

It can run fully standalone, no Solivia gateway required.

1 Like

Sorry for the noob question, but do you have a guide on how to get it to run on an ESP32? I got an ESP32 board up and running with esphome, but I have no idea of how to install your software on it.

@EeyoreDK ESPHome works with configuration files (in YAML format) that are used to load external components like mine.

I don’t know how exactly you’re installing ESPHome on the ESP32 so I cannot offer specific help, but the README provides the necessary parts specific to my module. I also included a full example file.

Also, aside from an ESP32 you need an RS-485-to-TTL board before this can work.

1 Like

@robertklep I found the error. I was using the long ID strings of the inverters as address instead of just 1 and 2 (in my case). It seems to be working fine, now I just need some sun :smile: . Thanks for your work on this, it is much appreciated.

1 Like

Glad to hear you got it working :smiley:

1 Like

Hi Robert, I may have found a bug. I do not know if it is caused by your software or by HA energy. The accumulated energy from the previous day is not always reset and gets added to the following day.


Same happens for me occassionally:

The value is read directly from the inverters, but in my example YAML I filter them so the sensor goes unavailable after two hours:

      today_energy:
        name: 'Inverter#1 Today Energy'
        filters:
          - timeout: 2h

I think you use the same filter? If so, you may want to try removing it. The difference will be that the sensor will keep the last value of the day until it starts again the next day.

I forgot to update HA energy when I moved from the scraper-based setup to this new setup, but I’m using the total energy sensors for that, not the today ones.

Yes, I use the same filter, I will try to play around with it.
My first thought was also to use the total energy, to avoid the issue with daily reset, but my total energy reading is not very detailed. Is there some interval setting that I can edit for this?

No, I think the inverter only updates the value towards the end of the day (probably when it notices that the input power is decreasing significantly).

Perhaps it’s possible to use another filter to prevent the peaks at the start: Sensor Component — ESPHome

That was what I was thinking too. I will see if removing the filter makes any changes. If not I will take a look at the sensor component. If I find a solution, I will let you know. Thanks for your help :slight_smile:

1 Like

Hi Robert,
I tried to understand which hardware you used and how to connect it to my network / homeassistant computer.
I found a RS485 device but it is not clear to me how to connect all te different wires.

My situation, I have 2 inverters on 2nd floor that are both right now connected via a single solivia gateway on a network switch on the second floor.
My homaassistant computer is connected somewere else to another network switch. I understand that I need to disconnect the existing gateway, but how do i connect the inverters to my Home assistant ?

Can you point me in the right direction ? (maybe you have a connection scheme ?)

Tnx in advance.

King regards,

G van Rooy
Netherlands

I have a similar situation: two inverters that are daisy-chained together with the gateway (one cable going from inverter 1 to inverter 2, then a cable from inverter 2 to the gateway).

I removed the cable between inverter 2 and the gateway, and connected the RS485-module to inverter 1 (the RS485 ports are set up as a bus so it doesn’t matter which inverter you use to connect the module to, and which port you use also shouldn’t matter). The inverters do need to be connected to each other as well so you only need a single ESP32/RS485-module to read them both.

Something like this:

ESP32 <—> RS485 module <—> INVERTER1 <—> INVERTER2

As for wiring, please see the README for the component. The inverter (or at least mine) has two regular RJ45 (“Ethernet”) ports that are used to connect to the RS485 module, but the exact wiring depends on the inverter model.

Also, be aware that my component only works with the inverter models that are listed in the README.

Hello Robert,

Tnx for your explanation.
If I am correct a esp32 is a wireless module ,that connects to the rs485 module ?
I am preferring a wired solution. Do you know this is possible ?

The ESP32’s usually come as a wireless module, although there are also wired boards available, like the WT32-ETH01 boards (I don’t have any experience with those in combination with the Solivia component though).

The connection between the RS475 and ESP32 modules is wired.

Ok. I will give it a try.
I have the SOLIVIA 3.6 EU G3 inverter.

So if I understand it correctly, accoring to your post, I shoul connect it as follows :

ESP32 to RS485 :

GPIO4 → DI
GPIO3 → DO
GPIO2 → RE

RS485 to inverter :

A → TX_A
B → RX_B

What about the Flow control ?
That I don’t understand

The flow control pin on the ESP32 should be connected to both RE and DE (or you can solder a bridge between those pins on the RS485 module and connect either one or the other to the ESP32).

FWIW, it’s not mandatory to use the same ESP32 pins as mentioned in the README, you can use most other ESP32 pins for each purpose if that’s more convenient. You do have to modify the YAML configuration if you choose other pins.

I wonder why would anyone choose to use gpio4 and gpio3 for UART.
Gpio3 is rx pin for uart0 (USB).

I suggest to go with uart2 for normal Esp32
tx_pin: GPIO17
rx_pin: GPIO16

Not on the boards that I use :man_shrugging:t3:

I wrote “for normal Esp32” :wink:

@robertklep - This was awesome to see.
I’ve looked at my inverter for 10 years and thought how good it would be to get data out of it, but never took it much further.

On my summer (Melbourne, Aus) holidays, I decided to give HomeAssistant another go and whilst adding devices thought I’d do a cheeky server for the Inverter and found your post.

After a few purchases, I’ve got a jerry rig running system. I couldn’t believe that I got it first go too. Great instructions… I thought I was going to be a little lost with all of the C code, but eventually realised I only needed the Yaml to get it going.

Thanks again…

1 Like