I’ve gone down a different path that seems to be fairly straightforward, in my opinion, and is working flawlessly since I configured it.
I purchased a Protoss-PE11-H RS485 to Wired Ethernet Bridge from AliExpress for £16.
I suspect that the WiFi version would also work, but I prefer wired reliability.
I purchased the famous German RS-485 plug that fits the Solis inverter, which it does, and followed the wiring guide as shown in the listing. I confirmed the 5V and Gnd rails with a multimeter.
I configured the PE11 to modus, 9600 baud, 8 bits, 1 stop, no parity. As well as a TCP server on port 502.
Then in home assistant the following
modbus:
- name: "Solis_Inverter"
type: tcp
host: 192.168.1.24
port: 502
sensors:
- name: Solis_Watts
data_type: uint32
slave: 1
address: 3004
input_type: input
count: 2
unit_of_measurement: W
state_class: measurement
scan_interval: 20
- name: Solis_today_kwh
data_type: uint16
slave: 1
address: 3014
input_type: input
count: 1
unit_of_measurement: kWh
state_class: total_increasing
scan_interval: 60
scale: 0.1
precision: 1
- name: Solis_yesterday_kwh
data_type: uint16
slave: 1
address: 3015
input_type: input
count: 1
unit_of_measurement: kWh
state_class: measurement
scan_interval: 3600
scale: 0.1
precision: 1
- name: Solis_total_energy
data_type: uint32
slave: 1
address: 3008
input_type: input
count: 2
unit_of_measurement: kWh
state_class: total_increasing
scan_interval: 300
- name: Solis_total_energy_this_month
data_type: uint32
slave: 1
address: 3010
input_type: input
count: 2
unit_of_measurement: kWh
state_class: total_increasing
scan_interval: 300
- name: Solis_total_energy_last_month
data_type: uint32
slave: 1
address: 3012
input_type: input
count: 2
unit_of_measurement: kWh
state_class: measurement
scan_interval: 3600
- name: Solis_total_energy_this_year
data_type: uint32
slave: 1
address: 3016
input_type: input
count: 2
unit_of_measurement: kWh
state_class: total_increasing
scan_interval: 300
- name: Solis_temp
data_type: uint16
slave: 1
address: 3041
input_type: input
count: 1
unit_of_measurement: C
state_class: measurement
scan_interval: 120
scale: 0.1
precision: 1
- name: Solis_grid_freq
data_type: uint16
slave: 1
address: 3042
input_type: input
count: 1
unit_of_measurement: Hz
state_class: measurement
scan_interval: 60
scale: 0.01
precision: 2
- name: Solis_grid_current
data_type: uint16
slave: 1
address: 3038
input_type: input
count: 1
unit_of_measurement: A
state_class: measurement
scan_interval: 60
scale: 0.1
precision: 1
- name: Solis_grid_voltage
data_type: uint16
slave: 1
address: 3035
input_type: input
count: 1
unit_of_measurement: V
state_class: measurement
scan_interval: 60
scale: 0.1
precision: 1
I have also written values to the inverter using nodeRed as it is just easier to do that way. Happy to share that example if required.
Using this example, it is cheap only required 1 device with no modification, no python, no coding, no resister fiddling. Most importantly no cloud, and update frequencies that you control. One of the key things was setting the input_type
to input and not holding as that dictates the function
code 3 vs 4 which matters a lot.
Hope this helps someone.