2022-12-02

Monitoring E3DC with PRTG

 Monitoring E3DC with PRTG

Introduction

So you have an E3DC home power system and want to monitor its key values with the PRTG Monitoring software. If you don't, this text is probably not for you...

I assume you have your PRTG already installed - there is lot of other info on setting up PRTG around the internet.

To monitor your solar production, house usage and battery state, all you need now is a PRTG sensor that can talk to E3DC. Fortunately, there is a custom Modbus sensor type in PRTG, that can read the values from your E3DC, so PRTG can store the time series, monitor and graph the values.

However, the Mobus sensor comes with a few pitfalls, marked with  in the following text.

Setup in E3DC

Of course, your E3DC needs to be on your local network. You need to know its IP (available on the E3DC Display in Network Settings). In the Smart Home settings, you need to enable the Modbus. When the setting is green, the Modbus TCP is available.
You can change the Modbus TCP Settings with the ">" button, but the default values will be fine:
it defaults to TCP Port 502 and Unit ID 1.

Preparation in PRTG

Create a Device in PRTG with the IP of your E3DC and add a standard Ping sensor to monitor uptime and ensure that your E3DC is reachable from your monitoring PC. Your E3DC and PRTG Server need to be on the same local network. The Modbus TCP is unsecured and should not be exposed to a public network, even though E3DC allows only to read values.

Adding the Sensor in PRTG

Under your E3DC Device in PRTG, add a sensor and search for "modbus". You should find the "Modbus TCP Custom" Sensor:

You need to specify the Port and Unit ID if you changed it on your E3D Modbus Settings. If you didn't manually change, you can leave the default values (port 502, id 1). 
  It is essential to pick the non-standard Byte Order Little-endian byte swap (CD AB)Modbus is a very low level protocol, essentially allowing to read a bunch of consecutive 16 bit words. The Byte Order setting defines in which order 32 bits are to be interpreted. If this is set wrong, negative numbers in E3DC turn into ridiculously large numbers in the sensor values.


Setting Channels within the Modbus TCP Sensor

The #1 Channel in each PRTG Sensor represents its "main" value, so set the first channel to the value you want to display most prominently. In my case, this the solar production.

For each channel, you need to set the following:
  • a name for the channel, e.g. "solar"
  • pick the Register Type "Holding Register"
  • choose the correct Register Number (400xx) as defined by E3DC Modbus documentation, but  subtract 1 from the address as documented by E3DC ⚠. See the table below.
  • leave the Value Type as Absolute
  • set the Data Type to the correct type for the given address; for the power measurements this is 32-bit integer, whereas the battery stage of charge percentage is an Unsigned 16-bit integer.
  • provide the Unit to be displayed ("W", "%")
solar power

More channels can be added by picking the Enable radio box and adding the same values (name, Holding Register, Register Number, Absolute, 32-bit integer, unit).

house power

  Double-check all your values before creating the sensor. Most channel values (including name and unit) can no longer be changed after the Sensor has been created! To change the name of a channel, the entire Sensor has to be recreated again.

battery power

Here are the most important E3DC channels that Modbus TCP can read:


grid power

Unfortunately, I did not yet find a way to correctly read the E3DC Autarky and Self-Usage Percentage values, as they use an unofficial format (two byte values squashed together into one Modbus unsigned 16 bit value), which is not supported by the PRTG Modbus Sensor data format.

external generator power

wallbox power

battery state of charge %