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.
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:
⚠ 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 %