Make and ESP32 act as modbus server, for emulating a SDM630 smart meter

Hi guys :slight_smile:
I have an ESP32 connected to my Growatt Mod inverter, I have no problems reading data out of it. But another TTL->RS485 is connected to the Smart meter input, how can I make the ESP answer the requests? I have already passed the values from HA to the ESP, I just need it to communicate with the Modbus, I know what the Inverter requests:


------- Growatt inverter polls ---------
02 04 00 00 00 12 70 34 => reg [00..16]
02 04 00 12 00 12 D0 31 => reg [18..34]
02 04 00 34 00 0C B1 F2 => reg [52..62]
02 04 00 46 00 0C 11 E9 => reg [70..80]
02 04 00 C8 00 06 F1 C5 => reg [200..204]
02 04 01 56 00 04 10 16 => reg [342..344]

------- SDM 630 real world values ------
Address, value, info just for my self.
0 230.008759 'phase_1_line_to_neutral_volts'
2 230.043762 'phase_2_line_to_neutral_volts'
4 227.713760 'phase_3_line_to_neutral_volts'
6 0.000000 'phase_1_current'
8 0.000000 'phase_2_current'
10 0.229646 'phase_3_current'
12 0.000000 'phase_1_power'
14 0.000000 'phase_2_power'
16 51.771564 'phase_3_power'

18 0.000000 'phase_1_volt_amps'
20 0.000000 'phase_2_volt_amps'
22 52.379429 'phase_3_volt_amps'
24 0.000000 'phase_1_reactive_power'
26 0.000000 'phase_2_reactive_power'
28 -7.029959 'phase_3_reactive_power'
30 1.000000 'phase_1_power_factor'
32 1.000000 'phase_2_power_factor'
34 0.990953 'phase_3_power_factor'

52 51.792999 'total_power'
54 0.000000
56 53.269367 'total_volt_amps'
58 0.000000
60 -7.801102 'total_var'
62 0.989728 'total_power_factor'

70 49.971806 'frequency'
72 0.034000 'total_import_kwh'
74 0.000000 'total_export_kwh'
76 0.000000 'total_import_kvarh'
78 0.000000 'total_export_kvarh'
80 0.034000 'total_kvah'

200 398.413330 'line_1_to_line_2_volts'
202 396.458252 'line_2_to_line_3_volts'
204 396.623444 'line_3_to_line_1_volts'

342 0.034000 'total_kwh'
344 0.000000 'total_kvarh'

Have anyone done anything like it?

Kind regards
Juel

I am trying to do the same….

Using ESPHome, esp8266 + serial to modbus converter…. To send grid power (already known by HA) to the inverter meter port for export limiting within the inverter…

We’re you able to get this working?

Not exactly esphome and 3 phases.
But can manage inverter to do export limit.

For everybody who likes to try it.
I got it working, but…
It is very difficult to make it fast enough, although in my case the data is renewed every second, the Growatt inverter needs even faster data to make a stable control possible.
I can compare because I had already a working sdm630 connected.
The ESP option I made as a project.
The (power) data goes every second from an other SDM630 to HA.
Then it goes every 400ms by wifi to the ESP.
The ESP is giving the data with 10ms delay to the inverter.
A lot of the other (other then power) registers I filled with fixed data, because you need to have all registers from above list available for the Growatt inverter to make it work.

Hi
Any more info on this?

What you want to know?
I know it is probably not what you want to hear but faking a sdm 630 is not the smart way to go.
If you don’t want to (or can’t ) install a real sdm 630 and still want to regulate a Growatt inverter.
Then it is better to get access to the inverter via modbus via de comms port. (not the same as the one the sdm630 should be connected to)
And regulate the output via holding register 3.
With the esp PID controller you can make a stable control of the inverter on the basis of the smart meter output. To make it work on several types of Growatt inverters you need to ask for a software update. It works for me on a MTL, a MTL-S and a MIN.