diy solar

diy solar

Solis S5: Various issues

peufeu

New Member
Joined
Sep 3, 2022
Messages
203
Hello everyone!

This is in France. The house has three phase power for the heat pump.

I installed a Solis S5 hybrid inverter (S5-EH1P-6K-L) with two Pylontech US5000 and of course solar panels. It's a single phase inverter, I don't need three phase backup. My main reason for choosing this one is it works with 48V batteries, I didn't want HV batteries?

So far everything works fine except RS485 communication with the smartmeter, which is why I'm asking for help...

IMG_20221221_165147.jpg

The meter is Eastron SDM630 Modbus V2, which is listed as compatible in Solis manual...

IMG_20221221_171542.jpg

It is connected with Cat5e cable (about 20m) to the Solis' RS485-Meter port, polarity looks correct...

IMG_20221221_165115.jpg

Closeup of wires in case I made a mistake:

IMG_20221221_171525.jpg

Meter settings:

meter.jpg

Solis settings:

solis.jpg
 
I probed the RS485 wires with an oscilloscope, and I see the Solis inverter talking. I probed at the meter terminals, so I know the signals sent by the inverter reach the meter. However it is not responding.

Bits sent by the Solis seem to last for about 100µs, so I guess it is transmitting at 9600bps.

Anyone got an idea to make it work? Thanks!
 
Last edited:
If the Solis is the Master, should the slave address you set on the Eastron (002) not match the slave address the solis sends to (001) ?
 
Hehe. You're right, it works now.

The address option in the Solis menus is so far away from the meter settings that I thought it was about its address on the control port or something, not the meter port. A bit like the backup mode that is on even when it's not set to backup mode, took me a while to figure this one out!

Operation nuke my electricity bill is go

1671642338982.jpg
 
... but you may need a few more ??? if your house load is 5.4kW ;)

The heat pump is running, so it's pretty high. I don't intend to power it with solar, but since the batteries were fully charged, why not use that "free" energy. I set 50% battery charge threshold on the Solis backup supply that powers the freezer, so it should not discharge below that (hopefully).

Since that smartmeter works I will couple it with an ESP32 and make some graphs then hunt for stuff that uses too much power in the house.

As for the heating bill, I'm in the process of insulating the house, that'll be much more effective than adding batteries.

In fact, since fiberglass is made with Russian gas, I have purchased all the materials in advance, it's all in storage. Price has gone up 25% since I bought it :eek:
 
Merry christmas everyone!

This morning I went to check the Solis, I'm having trouble configuring this thing!

What I want to do:

1. Inject PV power into grid to compensate power used by the house, but not more (zero export).

2. If available PV power exceeds power used by the house, store in batteries.

3. At night, use batteries to compensate power used by the house, but not more (zero export). Don't discharge batteries below 30%, in case there is a blackout.

Right now, Backup mode is off, Self use is on. The smartmeter is working properly.

If I set "optimum income" to "OFF" then point 1 works. However, point 2 does not work, because I know there's enough sun to produce more than 450W, so it's not using all the PV power.

IMG_20221225_092410.jpg

If I set "Optimum income" to "ON" and set it to charge during the day (00:00-23:00) then point 2 works, but point 1 doesn't work. PV power increases to what it available, and it is stored in batteries, but it is no longer powering the house.

IMG_20221225_092445.jpg

What I want to is pretty much the basic stuff a hybrid inverter is intended for, so there's probably a way to make it work, but these menus are really obscure!

Right now there's a bit more sun:

- "optimum income" to "ON": PV power about 1100W used for charging, but it does not compensate for power used by house.
- "optimum income" to "OFF": PV power drops to about 450W, compensates for power used by house, but no charging.


Got a configuration that works?
 
Last edited:
This post helped!

Removing the charge time slot in the schedule did fix the first issue: now points 1 and 2 above function properly.

1671970146916.png

This means... on to the next problem! lol

I have another solar installation on the house, with a Fronius Primo 3kW that is set to export as much as it wants, which at the moment is about 700W. It is not connected to the smartmeter.

When there are enough loads to absorb all the power produced by the Fronius inverter, the Solis is happy and produces the above screen. This is currently the case because the water heater is running. However, when the water heater stops, the Fronius produces more than the house uses, so the house becomes a net exporter. This seems to bother the Solis, because it simply shuts down and even stops charging the battery from the panels connected to it:

1671970339152.png

hmmm...
 
I've been able to extract modbus data from the link between inverter and smartmeter. That works fine. I will use it to route excess power to the water heater.

I can talk to the inverter using the COM port and query various registers, but it looks like the register map I have is not the correct one. Some registers like date and time return correct values, but I would like to query battery charge among other things, and to control it via modbus.

It would be really helpful if someone could share a register map for this S5-EH1P inverter? @SeaGal, any idea?
 
Génial! Are you able to read all this data from the RS485 link between inverter and the Acrel grid meter? Or are you using one of the documented hacks that gets the data from the Solis wifi dongle port?
 
I am using Eastron SDM630 three phase meter. I chose this one because
1) It does not have current transformers, which fits my electrical panel better, it would have been difficult to install with CTs
2) The docs contain a lot more English and less Chinglish than Acrel, so I was more confident :ROFLMAO:

I used an isolated USB-RS485 interface to spy on the traffic between Solis and SDM630 meter. No issue with this, Solis requests most registers, so I can get all the data by just listening. It works fine. In fact, only issue was finding a modbus library that allows listening, which I did not find, but it is only a few lines of python code to listen to a serial port and dump modbus traffic... If I had done this before, perhaps I would have made two MODBUS-WiFi bridges with ESP32 and not taken a whole day crawling to pull that damn modbus cable between the inverter and my electrical panel!

I intend to MITM the protocol with another RS485 to control power export with two inverters.

On the Solis COM port side, I have used the same RS485-USB interface to issue commands to the Solis. This requires a special snowflake 4-pin connector for the COM port. The inverter replies, and registers mentioned in the above document are available, like battery voltage and everything. Basically it works fine. Problem was getting the document with the register map.

It is possible to use only one RS485 dongle, just on the Solis COM port, because the Solis also makes meter info available this way, with about one second delay. So if you connect RS485 to the Solis COM port, you can get all information (battery, PV, house, export)*(voltage current power) etc plus meter information without an extra RS485 just to talk to the meter.

If you have ACREL meter it will probably work the same: on the COM port, Solis reports meter data no matter what meter you use.

Solis RS485 is quite responsive and uses "broadband" 38400bps for that special 1990's high performance dial up flavor ???
 
Last edited:
Alright!

Here's what I'm getting.

Code:
run
MachineBase: Solis (solis) configured with 363 registers
4 33000                            product_model 12549 
4 33001                     dsp_software_version 55 
4 33002                     lcd_software_version 61 
4 33003                protocol_software_version 1 
4 33004                    machine_serial_number [] 
4 33022                         system_time_year 23 Year
4 33023                        system_time_month 1 Month
4 33024                          system_time_day 2 Day
4 33025                         system_time_hour 20 Hour
4 33026                       system_time_minute 2 Minute
4 33027                       system_time_second 22 Second
4 33029          inverter_energy_generated_total 115 kWh
4 33031  inverter_energy_generated_current_month 17 kWh
4 33033     inverter_energy_generated_last_month 98 kWh
4 33035          inverter_energy_generated_today 1.8 kWh
4 33036      inverter_energy_generated_yesterday 15.4 kWh
4 33037   inverter_energy_generated_current_year 17 kWh
4 33049                             dc_voltage_1 10.9 V
4 33050                             dc_current_1 0.0 A
4 33051                             dc_voltage_2 11.8 V
4 33052                             dc_current_2 0.0 A
4 33053                             dc_voltage_3 0.0 V
4 33054                             dc_current_3 0.0 A
4 33055                             dc_voltage_4 0.0 V
4 33056                             dc_current_4 0.0 A
4 33057                    total_dc_output_power 0 W
4 33071                           dc_bus_voltage 389.90000000000003 V
4 33072                      dc_bus_half_voltage 0.0 V
4 33073          ab_line_voltage_phase_a_voltage 238.20000000000002 V
4 33074          bc_line_voltage_phase_b_voltage 0.0 V
4 33075          ca_line_voltage_c_phase_voltage 0.0 V
4 33076                          phase_a_current 2.4000000000000004 A
4 33077                          phase_b_current 0.0 A
4 33078                          phase_c_current 0.0 A
4 33081                           reactive_power 0 VAr
4 33083                           apparent_power 0 VA
4 33091                    standard_working_mode 3 
4 33092                   national_standard_read 36 
4 33093                     inverter_temperature 26.3 °C
4 33094                           grid_frequency 49.97 Hz
4 33095            current_state_of_the_inverter 3 
4 33100 limited_active_power_adjustment_rated_power_output_value 0 W
4 33102 reactive_power_regulation_rated_power_output_value 0 VAr
4 33104                       actual_power_limit 10000 %
4 33105     actual_power_factor_adjustment_value 10.0 
4 33106           reactive_power_setting_percent 0 %
4 33115                         set_the_flag_bit 2 
4 33116                            fault_code_01 0 
4 33117                            fault_code_02 0 
4 33118                            fault_code_03 0 
4 33119                            fault_code_04 0 
4 33120                            fault_code_05 0 
4 33121                           working_status 1793 
4 33126     meter_active_energy_generation_total 324.58 kWh
4 33128                            meter_voltage 238.3 V
4 33129                            meter_current 7.7 A
4 33130                       meter_active_power -448 W
4 33132       energy_storage_control_switch_read 35 
4 33133                          battery_voltage 49.1 V
4 33134                          battery_current 0.0 A
4 33135                battery_current_direction 0 
4 33136                           llcbus_voltage 1.1 V
4 33137                        bypass_ac_voltage 238.20000000000002 V
4 33138                        bypass_ac_current 2.4000000000000004 A
4 33139                 bms_battery_capacity_soc 20 %
4 33140                   bms_battery_health_soh 100 %
4 33141                      bms_battery_voltage 49.03 V
4 33142                      bms_battery_current 0.0 A
4 33143         bms_battery_charge_current_limit 160.0 A
4 33144      bms_battery_discharge_current_limit 160.0 A
4 33145       bms_battery_failure_information_01 0 
4 33146       bms_battery_failure_information_02 0 
4 33147                         house_load_power 338 W
4 33148                        bypass_load_power 0 W
4 33149                            battery_power 0 W
4 33161                     total_battery_charge 73 kWh
4 33163                     battery_charge_today 0.30000000000000004 kWh
4 33164                 battery_charge_yesterday 8.700000000000001 kWh
4 33165                  total_battery_discharge 81 kWh
4 33167                            battery_gauge 1.8 kWh
4 33168              battery_discharge_yesterday 6.800000000000001 kWh
4 33169                 total_imported_from_grid 265 kWh
4 33171                 imported_from_grid_today 15.3 kWh
4 33172             imported_from_grid_yesterday 10.600000000000001 kWh
4 33173                   total_exported_to_grid 58 kWh
4 33175                   exported_to_grid_today 2.3000000000000003 kWh
4 33176               exported_to_grid_yesterday 11.3 kWh
4 33177                         total_house_load 300 kWh
4 33179                         house_load_today 16.1 kWh
4 33180                     house_load_yesterday 13.3 kWh
4 33250                          meter_placement 50 
4 33251                       meter_ac_voltage_a 238.3 V
4 33252                       meter_ac_current_a 0.77 A
4 33253                       meter_ac_voltage_b 236.3 V
4 33254                       meter_ac_current_b 1.8 A
4 33255                       meter_ac_voltage_c 239.9 V
4 33256                       meter_ac_current_c 1.7 A
4 33257                     meter_active_power_a -58 W
4 33259                     meter_active_power_b -197 W
4 33261                     meter_active_power_c -192 W
4 33263                 meter_total_active_power -448 W
4 33265                   meter_reactive_power_a 119 VAr
4 33267                   meter_reactive_power_b 346 VAr
4 33269                   meter_reactive_power_c 355 VAr
4 33271               meter_total_reactive_power 814 VAr
4 33273                   meter_apparent_power_a 132 VA
4 33275                   meter_apparent_power_b 398 VA
4 33277                   meter_apparent_power_c 404 VA
4 33281                       meter_power_factor -44 
4 33282                     meter_grid_frequency 49.88 Hz
4 33283 meter_total_active_energy_imported_from_grid 265.93 kWh
3 43000                     real_time_clock_year 23 Year
3 43001                    real_time_clock_month 1 Month
3 43002                      real_time_clock_day 2 Day
3 43003                     real_time_clock_hour 20 Hour
3 43004                   real_time_clock_minute 2 Minute
3 43005                  real_time_clock_seconds 23 Second
3 43006                    slave_address_setting 1 
3 43007                             power_on_off 190 
3 43051             reactive_power_limit_setting 0 %
3 43052                      power_limit_setting 100.0 
3 43053                     power_factor_setting 10.0 
3 43054                  power_factor_setting_02 10.0 
3 43056 calibrate_inverter_energy_generated_total 115 kWh
3 43058 calibrate_inverter_energy_generated_current_month 17 kWh
3 43060 calibrate_inverter_energy_generated_last_month 98 kWh
3 43062 calibrate_inverter_energy_generated_today 1.8 kWh
3 43063 calibrate_inverter_energy_generated_yesterday 15.4 kWh
3 43064 calibrate_inverter_energy_generated_current_year 17 
3 43066 calibrate_inverter_energy_generated_last_year 98 
3 43068                     national_standard_rw 36 
3 43070                       power_limit_switch 0 
3 43071                    reactive_power_switch 2 
3 43072                              lvrt_switch 0 
3 43106                    power_on_startup_time 70 s
3 43107                    failure_recovery_time 70 s
3 43110         energy_storage_control_switch_rw 35 
3 43111              bypass_power_enable_setting 1 
3 43112 bypass_power_supply_reference_voltage_setting 225.0 V
3 43113 bypass_power_supply_reference_frequency_setting 50.0 Hz
3 43114 battery_charge_and_discharge_enable_setting 1 
3 43115 battery_charge_and_discharge_direction_setting 0 
3 43116 battery_charge_and_discharge_current_setting 0.0 A
3 43117   battery_charge_current_maximum_setting 100.0 A
3 43118 battery_discharge_current_maximum_setting 100.0 A
3 43119  battery_undervoltage_protection_setting 42.0 V
3 43120            battery_float_voltage_setting 53.5 V
3 43121           battery_charge_voltage_setting 55.0 V
3 43122   battery_overvoltage_protection_setting 60.0 V
3 43123                    overload_buck_setting 0 
3 43141                     timed_charge_current 100.0 A
3 43142                  timed_discharge_current 20.0 A
3 43143                  timed_charge_start_hour 0 Hour
3 43144                timed_charge_start_minute 0 Minute
3 43145                    timed_charge_end_hour 0 Hour
3 43146                  timed_charge_end_minute 0 Minute
3 43147               timed_discharge_start_hour 0 Hour
3 43148             timed_discharge_start_minute 0 Minute
3 43149                 timed_discharge_end_hour 0 Hour
3 43150               timed_discharge_end_minute 0 Minute
3 43250                           data_logger_sn 0 
3 43255                   data_logger_ip_address 0 
3 43257              data_logger_signal_strength 0 
3 43258                data_logger_status_word_1 0
 
Most of the values seem to be correct, except import/export energy reported by the meter. I installed it as recommended by its manual (with power from the grid coming on top) and it displays correct values, but Solis thinks it's wired in reverse, and normal zero export mode only works if I set "CT" to "reverse" in "Meter CT direction" menu in order to, uhm, reverse it again so it's straight. Maybe this what screws up "meter_active_energy_generation_total".

The rest seems OK, but there were some errors between "import" and "export" in the register list, so I'm not 100% sure. I guess I'll have to run it to see what it does...

I'll polish the code a little bit and post it on github, if you're interested.
 
Writing to registers seems to work.

At night, even if the batteries are below the state of charge where it is allowed to use them, the inverter stays on burning power doing basically nothing. So I used the on/off register to power it off. It seems to work as the DC bus voltage falls from 390V to 120V, which means the high power circuits indeed shut down. It doesn't power off the GUI or the modbus port though, so it is possible to power it up again via modbus, and then it starts normally. Even when off, it keeps querying the smartmeter for data, so all registers stay up to date.

Unfortunately when it's off, the backup port also shuts down instead of just being a bypass, so any loads connected to it will also shut down.

Tomorrow I will check if it wakes up automatically from this power down mode when PV voltage rises in the morning.

Besides that, there aren't many useful writable registers. I'll investigate...

@SeaGal I saw one of your posts where you mentioned using CAN bus to control the inverter, does it also have that feature? How does that work?
 
Now obviously all these "Reserved" registers look so tempting...

I wrote a python script that grabs all the registers and stores them in postgresql. Then, I used the GUI to set "export power" to 2000W [run script] 2100 [run script] 2200 [run script] 2000 [run script]. Since it's in 100W increments I expected a register to go through 20, 21, 22, 20 as I did that. A little bit of SQL later... one undocumented register discovered :ROFLMAO:

It is writable and it does change the setting in the inverter, the display does not refresh immediately (have to exit the page then come back to it) but it works.

1672700788218.png
 
I found a new document RS485_MODBUS (ESINV-33000ID) energy storage inverter protocol referenced on github which seems be a more recent version of the register file. So I've got pretty much all the read-only registers now. There seem to be a few mistakes/bugs, for example battery current is always positive whether it is charging or discharging, while the document says it should be a signed value. I will try the next register which says it contains the sign.
1672776936303.png
However, still no luck on the writable registers to control the inverter.

I have a hunch that there is an internal Export Manager algo which writes values to the registers that control the inverters. Since they are readable, they should be detectable. I am dumping the whole register range every few seconds in a database and will try a correlation algo once it has accumulated a few days worth of data...
 
Writing to registers seems to work.

At night, even if the batteries are below the state of charge where it is allowed to use them, the inverter stays on burning power doing basically nothing. So I used the on/off register to power it off. It seems to work as the DC bus voltage falls from 390V to 120V, which means the high power circuits indeed shut down. It doesn't power off the GUI or the modbus port though, so it is possible to power it up again via modbus, and then it starts normally. Even when off, it keeps querying the smartmeter for data, so all registers stay up to date.

Unfortunately when it's off, the backup port also shuts down instead of just being a bypass, so any loads connected to it will also shut down.

Tomorrow I will check if it wakes up automatically from this power down mode when PV voltage rises in the morning.

Besides that, there aren't many useful writable registers. I'll investigate...

@SeaGal I saw one of your posts where you mentioned using CAN bus to control the inverter, does it also have that feature? How does that work?
All good detective work. Let us know if it powers up automatically when get PV again. Also, have you measured how much battery consumption reduces by when you put it in sleep mode? Our RHI 3.6kW uses about 30W when the overdischarge limit is reached with just the battery powering the inverter overnight ?.

Regarding CANBus... I used code that @sijones2010 posted to send CANBus messages to the inverter from my DIY battery. You can't do a lot, just battery related things, like change charge and discharge currents and send the inverter the battery SOC. By setting SOC to a low value you can trigger the inverter to perform a force charge. Code is detailed in this thread...

 
P.S. This may be of interest to you... It's long, so I didn't listen to it all though...

 
have you measured how much battery consumption reduces by when you put it in sleep mode?
Power measurements reported by Solis are accurate to something like 1-2% of full scale, so 50-100W error, which is OK, but not usable to get idle current. I ordered an "aliexpress precision" shunt.

Regarding CANBus... I used code that @sijones2010 posted to send CANBus messages to the inverter from my DIY battery.
OK! I'll see what I can find on the RS485 side.

The youtube video says he's using the timed charge/discharge registers to control the inverter.
 
Back
Top