This integration will interface with the E3DC Storage systems supprting the RCSP protocol. It is based on python-e3dc. This repository delivers the latest features via HACS. You can use it for testing until I can get the integration accepted to HA core (no timeline for that, sorry).
If you encounter problems, please file an issue at the integrations issue tracker. If possible, add a diagnostics dump always. This is important also for enhancements if they target new data or information to be retrieved from the unit to see what it has to offer. Always check that dump if you want to further redact information in it. The MACs and the units serial number are redacted already, but check for yourself! If you find information in the dump that you consider private, please file a bug request so that I can update the anonymizing code.
This integration is provided without any warranty or support by E3DC (unfortunately). I do not take responsibility for any problems it may cause in all cases. Use it at your own risk.
The recommend way to install this extension is using HACS. If you want more control, use the manual installation method.
https://github.com/torbennehmer/hacs-e3dc.git
as repository name for
the category Integrationsconfiguration.yaml
).custom_components
directory (folder) there, you need
to create it.custom_components
directory (folder) create a new folder called
e3dc_rscp
.custom_components/e3dc_rscp/
directory
(folder) in this repository.Once you add the integration, you'll be asked to authenticate yourself for a local connection to your E3DC.
Right now, the integration will use the default configuration provided by pye3dc. Additional PVIs, powermeters, wallboxes or batteries not covered yet by an option flow. You can find details about these options at the pye3dc readme. I will plan to add options to configure this in the long run. Please file an issue if you need changes here, as I will need ral life examples to get these things running.
Based from my current experience, there may be a various problems when connecting to an E3DC unit. Please be aware that it is not an exthaustive list, also different E3DC types may behave slightly differently. I'll try to collect the information I can deduce here and - if possible - forward them to the pye3dc base lib where sensible.
According to bug reports, the usable characters of an RSCP key seem to be limited. A user had problems when using a dot as a key element. If you get strange authentication problems, try to start with a simple alphanumeric ASCII based RSCP key, this is known to work in all cases.
E3DC units seem to listen only for connections on the same TCP/IP subnet. Access from the outside must be proxied by a host on the local net. Connections from other IP addresses will be blocked, even if, for example, you connect through an VPN coming from other private networks.
A temporary solution, e.g. for testing, could be a simple SSH forward. However, if you need a permanent solution, I would recommend using a Traefik Reverse Proxy on the E3DC net to act as an intermediate. It will allow for a more detailed security setup.
A sample setup for Traefik might look like this (without any warranty), I use this for my VPN setup:
# Static config
entryPoints:
e3dc.rscp:
# External Port reachable through Traefik
address: "10.11.12.10:5033/tcp"
# Dynamic config
tcp:
routers:
e3dc.rscp:
entrypoints:
- e3dc.rscp
service: e3dc.rscp
rule: "ClientIP(`10.0.0.0/8`)"
services:
e3dc.rscp:
loadbalancer:
servers:
# E3DC Target IP
- address: "10.11.12.15:5033"
Currently, the following features of pye3dc are not supported:
The integration currently provides these actions to initiate more complex commands to the E3DC unit:
Use the action set_power_limits
to limit the maximum charging or discharging
rates of the battery system. Both values can be controlled individually, each
call replaces the settings made by the last. It will not allow you to change the
system defined minimum discharge rate at the moment, as I am not sure if this is
actually a sensible thing to do.
clear_power_limits
will drop any active power limit. It will not emit an error
if none has been set. Prefer this to use set_power_limits
and setting the
values to the system defined maximum.
The action manual_charge
will start charging the specified amount of energy
into the battery, taking it from the grid if neccessary. The idea behind this is
to take advantage of dynamic electricity providers like Tibber. Charge your
battery when electricity is cheap even if you have no solar power available, for
example in windy winter nights/days.
Read the following before using this functionality on your own risk:
To stress this once more: Use this feature at your own risk.
The action set_wallbox_charging_current
will set the maximum charging current
of the given Wallbox in Amps. 16A is typical for a 11kW Wallbox, 32A is typical
for a 22kW Wallbox.
Read the following before using this functionality on your own risk:
The extension is based on Python E3DC library from @fsantini. The general considerations mentioned in his project do apply to this integration.