E3DC in Energy Dashboard

Hello, I need some help from you experts. I have an E3DC home power station and I would like to include that in the energy dashboard. For this I have set the following reference in the configuration.yaml: modbus: !include services/e3dc.yaml
In the file itself, I’d like to include the below, but HA keeps giving me errors when doing a configuration check.

modbus:
name: e3dc
type: tcp
host: xxx.xxx.xxx.xxx
port: 502

sensor:

  • platform: template
    sensors:
    e3dc_netzeinspeisung:
    friendly_name: e3dc Netzeinspeisung
    unique_id: e3dc_netzeinspeisung
    unit_of_measurement: ‘W’
    value_template: >
    {% if states(“sensor.e3dc_net_power”) | int < 0 -%}
    {{ states(“sensor.e3dc_net_power”) | int}}
    {%- else -%}
    0
    {%- endif %}
    e3dc_netzbezug:
    friendly_name: e3dc Netzeinspeisung
    unique_id: e3dc_netzbezug
    unit_of_measurement: ‘W’
    value_template: >
    {% if states(“sensor.e3dc_net_power”) | int > 0 -%}
    {{ states(“sensor.e3dc_net_power”) | int}}
    {%- else -%}
    0
    {%- endif %}
    e3dc_emergency_power:
    unique_id: e3dc_emergency_power
    value_template: >
    {% set eep = states(‘sensor.e3dc_emergency_power_modb’) %}
    {% if eep == ‘0’ %}
    nicht unterstützt
    {% elif eep == ‘1’ %}
    aktiv
    {% elif eep == ‘2’ %}
    inaktiv
    {% elif eep == ‘3’ %}
    nicht verfügbar
    {% elif eep == ‘4’ %}
    falsche Position 1K04
    {% else %}
    unbekannt
    {% endif %}
  • platform: modbus
    scan_interval: 60
    registers:
    • name: E3DC EMS State
      register: 40084
      data_type: uint
      hub: e3dc
    • name: E3DC S10 ModBus ID
      register: 40000
      data_type: uint
      hub: e3dc
    • name: E3DC PV1 Power
      unit_of_measurement: ‘W’
      register: 40067
      count: 2
      reverse_order: true
      hub: e3dc
      #data_type: custom
      #structure: “>l”
    • name: E3DC PV2 Power
      unit_of_measurement: ‘W’
      register: 40075
      count: 2
      reverse_order: true
      scale: -1
      hub: e3dc
      #data_type: custom
      #structure: “>l”
    • name: E3DC House Power
      unit_of_measurement: ‘W’
      register: 40071
      count: 2
      reverse_order: true
      hub: e3dc
      #data_type: custom
      #structure: “>l”
    • name: E3DC Net Power
      unit_of_measurement: ‘W’
      register: 40073
      count: 2
      reverse_order: true
      hub: e3dc
      #data_type: custom
      #structure: “>l”
    • name: E3DC Battery Power
      unit_of_measurement: ‘W’
      register: 40069
      count: 2
      reverse_order: true
      hub: e3dc
      #data_type: custom
      #structure: “>l”
    • name: E3DC Battery Percent
      unit_of_measurement: ‘%’
      register: 40082
      data_type: uint
      hub: e3dc
    • name: E3DC Selfpower
      unit_of_measurement: ‘%’
      register: 40081
      data_type: custom
      structure: “xB”
      hub: e3dc
    • name: E3DC Autarki
      unit_of_measurement: ‘%’
      register: 40081
      data_type: custom
      structure: “Bx”
      hub: e3dc
    • name: E3DC Emergency Power MODB
      register: 40083
      data_type: uint
      hub: e3dc
      Error Message:

Invalid config for [modbus]: extra keys not allowed @ data[‘modbus’][0][‘host’]. Got None

extra keys not allowed @ data[‘modbus’][0][‘sensor’]. Got None

not a valid value for dictionary value @ data[‘modbus’][0][‘type’]. Got None

required key not provided @ data[‘modbus’][0][‘baudrate’]. Got None

required key not provided @ data[‘modbus’][0][‘bytesize’]. Got None

required key not provided @ data[‘modbus’][0][‘method’]. Got None

required key not provided @ data[‘modbus’][0][‘parity’]. Got None

required key not provided @ data[‘modbus’][0][‘stopbits’]. Got None. (See /config/configuration.yaml, line 28).

Can someone help me to adjust this so that it works? Or maybe give me tips on how best to customize E3DC over Modbus to correctly map the desired HA Engie dashboard values (grid consumption, back to grid, solar production via two solar arrays, battery in and out).

thank you very much

Welcome to HA!

Take a look at packages if you want multiple configs (modbus, sensor, switch, …) in one yaml file.
For example i use:

homeassistant:
  ...
  # Packages
  packages: !include_dir_named packages

now you can use every *.yaml file in /config/packages, also in sub folders.

modbus:
  type: tcp
  host: 192.168.77.58
  port: 502
  sensors:
    - name: E3DC EMS State
      address: 40084
      data_type: uint16

binary_sensor:
  - platform: template
    sensors:
      e3dc_battery_loading_blocked:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(1) > 0 }}"
      e3dc_battery_unloading_blocked:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(2) > 0 }}"
      e3dc_emergency_power_available:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(4) > 0 }}"
      e3dc_weather_based_loading:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(8) > 0 }}"
      e3dc_power_limiter:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(16) > 0 }}"
      e3dc_smartcharge_loading_blocked:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(32) > 0 }}"
      e3dc_smartcharge_unloading_blocked:
        value_template: "{{ states('sensor.e3dc_ems_state')|int(0)|bitwise_and(64) > 0 }}"

...

And please take a look here, how to format code when posting. :slightly_smiling_face:

Hi, Have look to this post:

e3dc setup

I guess you have 2 errors:

  1. You have integrated “yaml: modbus: !include services/e3dc.yaml” and your file startes with modbus: ==> You have modbus: twice. Delete the starting “modbus:” in your e3dc.yaml.
  2. I am afraid, that there was a change in the integration. The new file (see link) uses address: 40067 instead of register: 40067
1 Like

Hi, everyone,
First of all, thank you VDRainer for the support and sorry for the bad formatting, I want to improve myself :wink: And thank you Joern_lem for the link - that’s exactly what I need. I’m getting further, but not far enough. I did the following:

in my configuration.yaml → packages: !include_dir_named packages

in the packages folder:

  1. Binary_Sensor.yaml
binary_sensor:
  - platform: template
    sensors:
      e3dc_emergency_power_possible:
        friendly_name: "E3DC Emergency Power possible"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(4) > 0 }}"
      e3dc_battery_loading_blocked:
        friendly_name: "E3DC Battery loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(1) > 0 }}"
      e3dc_battery_unloading_blocked:
        friendly_name: "E3DC Battery unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(2) > 0 }}"
      e3dc_weather_based_loading:
        friendly_name: "E3DC weather based loading limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(8) > 0 }}"
      e3dc_power_limiter:
        friendly_name: "E3DC power limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(16) > 0 }}"
      e3dc_smartcharge_loading_blocked:
        friendly_name: "E3DC SmartCharge loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(32) > 0 }}"
      e3dc_smartcharge_unloading_blocked:
        friendly_name: "E3DC SmartCharge unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(64) > 0 }}"
      e3dc_emergency_power_active:
        friendly_name: "E3DC Emergency Power Mode Active"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') }}"
      e3dc_emergency_power_available:
        friendly_name: "E3DC Emergency Power Available"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') or is_state('sensor.e3dc_emergency_power_state', '2') }}"
        device_class: "power"`
  1. e3dc.yaml
modbus:
- name: e3dc
  type: tcp
  host: 192.168.2.39
  port: 502
- platform: template
  sensors:
    - name: E3DC solar power
      unit_of_measurement: W
      address: 40067
      device_class: power
    - name: E3DC battery power
      unit_of_measurement: W
      address: 40069
      device_class: power
    - name: E3DC battery soc
      unit_of_measurement: '%'
      address: 40082
      data_type: uint
      device_class: battery
    - name: E3DC power consumption
      unit_of_measurement: W
      address: 40071
      device_class: power
    - name: E3DC grid power
      unit_of_measurement: W
      address: 40073
      device_class: power
    - name: E3DC emergency power state
      data_type: uint
      address: 40083
    - name: E3DC EMS state
      data_type: uint
      address: 40084
    - name: E3DC autarky and consumption
      data_type: uint
      address: 40081
    - name: E3DC string 1 power
      data_type: uint
      address: 40101
      device_class: power
      unit_of_measurement: W
    - name: E3DC string 2 power
      data_type: uint
      address: 40102
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L1
      data_type: int
      address: 40105
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L2
      data_type: int
      address: 40106
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L3
      data_type: int
      address: 40107
      device_class: power
      unit_of_measurement: W
  1. sensor.yaml
- platform: template
  sensors:
    e3dc_autarky:
      friendly_name: 'E3DC Autarky'
      unit_of_measurement: '%'
      value_template: "{{ (states('sensor.e3dc_autarky_and_consumption')|int / 256)|round(0,'floor') }}"
    e3dc_own_consumption:
      friendly_name: 'E3DC Own Consumption ratio'
      unit_of_measurement: '%'
      value_template: "{{ ((states('sensor.e3dc_autarky_and_consumption')|int / 256 - states('sensor.e3dc_autarky')|int) * 256)|round(0,'floor') }}"
    # Grid out
    e3dc_grid_power_out:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_grid_power') | int > 0 %}
          0
        {% else -%}
          {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
        {% endif %}      
    # Grid in
    e3dc_grid_power_in:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_grid_power') | int > 0 %}
          {{ states('sensor.e3dc_grid_power') | int }}
        {% else -%}
          0
        {% endif %}
    # Battery out
    e3dc_battery_power_out:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_battery_power') | int > 0 %}
          0
        {% else -%}
          {{ (states('sensor.e3dc_battery_power') | int) | abs }} 
        {% endif %}
    # Battery in
    e3dc_battery_power_in:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_battery_power') | int > 0 %}
          {{ states('sensor.e3dc_battery_power') | int }}
        {% else -%}
          0
        {% endif %}

- platform: integration
  source: sensor.e3dc_battery_power_out
  name: energy_battery_discharge
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_battery_power_in
  name: energy_battery_charge
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_solar_power
  name: energy_solar_production
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_power_consumption
  name: energy_consumption
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_grid_power_in
  name: energy_grid_usage
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_grid_power_out
  name: energy_grid_feed_in
  unit_prefix: k
  round: 2

The Configuration-Check brings following error:
expected a dictionary for dictionary value @ data[‘packages’][‘sensor’]

I think I’m close, it’s probably just a small thing - like always. Can you help me again?

Thank you very much.

if you import your yaml like you currently do, you need to move all the content in your sensor.yaml below a sensor: package namespace, so

sensor:
  - platform: templates
    sensors:
      e3dc_...

Hello, thanks again for the support. I’ve adjusted the sensor.yaml accordingly, but I still get an error message.
Here the Sensor.yaml

sensor:
    - platform: template
      sensors:
        e3dc_autarky:
          friendly_name: 'E3DC Autarky'
          unit_of_measurement: '%'
          value_template: "{{ (states('sensor.e3dc_autarky_and_consumption')|int / 256)|round(0,'floor') }}"
        e3dc_own_consumption:
          friendly_name: 'E3DC Own Consumption ratio'
          unit_of_measurement: '%'
          value_template: "{{ ((states('sensor.e3dc_autarky_and_consumption')|int / 256 - states('sensor.e3dc_autarky')|int) * 256)|round(0,'floor') }}"
        # Grid out
        e3dc_grid_power_out:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int > 0 %}
              0
            {% else -%}
              {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
            {% endif %}      
        # Grid in
        e3dc_grid_power_in:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int > 0 %}
              {{ states('sensor.e3dc_grid_power') | int }}
            {% else -%}
              0
            {% endif %}
        # Battery out
        e3dc_battery_power_out:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_battery_power') | int > 0 %}
              0
            {% else -%}
              {{ (states('sensor.e3dc_battery_power') | int) | abs }} 
            {% endif %}
        # Battery in
        e3dc_battery_power_in:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_battery_power') | int > 0 %}
              {{ states('sensor.e3dc_battery_power') | int }}
            {% else -%}
              0
            {% endif %}
    
    - platform: integration
      source: sensor.e3dc_battery_power_out
      name: energy_battery_discharge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_battery_power_in
      name: energy_battery_charge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_solar_power
      name: energy_solar_production
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_power_consumption
      name: energy_consumption
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_power_in
      name: energy_grid_usage
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_power_out
      name: energy_grid_feed_in
      unit_prefix: k
      round: 2

und hier die Fehlermeldung aus dem Log:

Logger: homeassistant.config
Source: components/modbus/validators.py:236
First occurred: 19:25:02 (1 occurrences)
Last logged: 19:25:02

Unknown error calling modbus CONFIG_SCHEMA
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config.py", line 842, in async_process_component_config
    return component.CONFIG_SCHEMA(config)  # type: ignore
  File "/usr/local/lib/python3.9/site-packages/voluptuous/schema_builder.py", line 272, in __call__
    return self._compiled([], data)
  File "/usr/local/lib/python3.9/site-packages/voluptuous/schema_builder.py", line 594, in validate_dict
    return base_validate(path, iteritems(data), out)
  File "/usr/local/lib/python3.9/site-packages/voluptuous/schema_builder.py", line 386, in validate_mapping
    cval = cvalue(key_path, value)
  File "/usr/local/lib/python3.9/site-packages/voluptuous/validators.py", line 215, in _run
    return self._exec(self._compiled, value, path)
  File "/usr/local/lib/python3.9/site-packages/voluptuous/validators.py", line 339, in _exec
    v = func(path, v)
  File "/usr/local/lib/python3.9/site-packages/voluptuous/schema_builder.py", line 817, in validate_callable
    return schema(data)
  File "/usr/src/homeassistant/homeassistant/components/modbus/validators.py", line 236, in duplicate_modbus_validator
    if hub[CONF_TYPE] == SERIAL:
KeyError: 'type'

Unfortunately, my knowledge is not sufficient for troubleshooting, I am not yet at home with yaml programming. Thank you for your support.

remove - platform: template from your e3dc.yaml config and try again

1 Like

Thank you, that’s it. Now the system starts again without errors. Unfortunately, the correct sensors are not offered to me in the energy dashboard. It may be that the values are in W instead of kWh and the values are therefore converted using Riemann integration. Battery in and out as well as grid in and out are not offered, the solar power sensor reports statistics_not_defined.

Thanks for further support

Hi Volker,

you would need to specify these sensors as energy or power on the device class.
Modbus

# Grid Power in Watt
    - name:                E3DC Grid Power
      unit_of_measurement: W
      address:             40073
      device_class:        power

Grid Power you need to split into Negative and Positive or Import/Export .
Battery Power as well.

# Generate Negative and Positive Watt Values (Grid -/+, Battery -/+)
# Grid
# Postive Value above or equal Zero
    e3dc_grid_positive_power:
      unique_id: e3dc_grid_positive_power
      friendly_name: E3DC Grid Positive (Import) Power
      unit_of_measurement: W
      value_template: >
        {% if states('sensor.e3dc_grid_power') | int >= 0 %}
          {{ states('sensor.e3dc_grid_power') }}
        {% endif %}  
# Negative Value below or equal Zero
    e3dc_grid_negative_power:
      unique_id: e3dc_grid_negative_power
      friendly_name: E3DC Grid Negative (Export) Power
      unit_of_measurement: W
      value_template: >
        {% if states('sensor.e3dc_grid_power') | int <= 0 %}
          {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
        {% endif %}   

customize_global.yaml

# Customize Global YAML 
# Customize entities matching a pattern

# General customization for energy sensors
# Set class to energy and enable statistic
"sensor.*_energy":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: energy
   state_class: measurement

# General customization for power sensors
# Set class to power and enable statistic
"sensor.*_power":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: power
   state_class: measurement

cuatomize.,yaml for better naming

# Customize YAML 
# Customize single entries

# E3DC
# Friendly Names for Integration Sensors
# Solar
sensor.e3dc_solar_energy:
  friendly_name: E3DC Solar Energy
 # House  
sensor.e3dc_house_energy:
  friendly_name: E3DC House Energy
# Grid Positive
sensor.e3dc_grid_positive_energy:
  friendly_name: E3DC Grid Positive (Import) Energy
# Grid Negative
sensor.e3dc_grid_negative_energy:
  friendly_name: E3DC Grid Negative (Export) Energy
# Battery Positive Energy
sensor.e3dc_battery_positive_energy:
  friendly_name: E3DC Battery Positive (Charge) Energy
# Battery Negative Energy
sensor.e3dc_battery_negative_energy:
  friendly_name: E3DC Battery Negative (Discharge) Energy

load these customizations into the configuration.yaml

# Home Assistant customization for Energy Sensors
homeassistant:
  customize_glob: !include customize_global.yaml
  customize: !include customize.yaml

Restart HA.
Now they should appear on the energy tab.

PS: Pay attention on formatting. Depending on your file structure is it different. Mine is as a kind of package split into single files for better overview and organization. if you keep all in one file it does look different.

Hi, thanks for the support, but unfortunately it doesn’t quite work yet. Hopefully I entered everything as you told me. The configuration also shows an error. But I can’t see the required sensors on the Energy Dashboard. Here are my configurations again.

In my configuration.yaml

homeassistant:
  customize: !include customize.yaml
  packages: !include_dir_named packages
  customize_glob: !include customize_global.yaml

In my customize.yaml

# Customize YAML 
# Customize single entries

# E3DC
# Friendly Names for Integration Sensors
# Solar
sensor.e3dc_solar_energy:
  friendly_name: E3DC Solar Energy
 # House  
sensor.e3dc_house_energy:
  friendly_name: E3DC House Energy
# Grid Positive
sensor.e3dc_grid_positive_energy:
  friendly_name: E3DC Grid Positive (Import) Energy
# Grid Negative
sensor.e3dc_grid_negative_energy:
  friendly_name: E3DC Grid Negative (Export) Energy
# Battery Positive Energy
sensor.e3dc_battery_positive_energy:
  friendly_name: E3DC Battery Positive (Charge) Energy
# Battery Negative Energy
sensor.e3dc_battery_negative_energy:
  friendly_name: E3DC Battery Negative (Discharge) Energy

in my customize_global.yaml

# Customize Global YAML 
# Customize entities matching a pattern

# General customization for energy sensors
# Set class to energy and enable statistic
"sensor.*_energy":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: energy
   state_class: measurement

# General customization for power sensors
# Set class to power and enable statistic
"sensor.*_power":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: power
   state_class: measurement

in my /packages/binary_sensor.yaml

binary_sensor:
  - platform: template
    sensors:
      e3dc_emergency_power_possible:
        friendly_name: "E3DC Emergency Power possible"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(4) > 0 }}"
      e3dc_battery_loading_blocked:
        friendly_name: "E3DC Battery loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(1) > 0 }}"
      e3dc_battery_unloading_blocked:
        friendly_name: "E3DC Battery unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(2) > 0 }}"
      e3dc_weather_based_loading:
        friendly_name: "E3DC weather based loading limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(8) > 0 }}"
      e3dc_power_limiter:
        friendly_name: "E3DC power limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(16) > 0 }}"
      e3dc_smartcharge_loading_blocked:
        friendly_name: "E3DC SmartCharge loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(32) > 0 }}"
      e3dc_smartcharge_unloading_blocked:
        friendly_name: "E3DC SmartCharge unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(64) > 0 }}"
      e3dc_emergency_power_active:
        friendly_name: "E3DC Emergency Power Mode Active"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') }}"
      e3dc_emergency_power_available:
        friendly_name: "E3DC Emergency Power Available"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') or is_state('sensor.e3dc_emergency_power_state', '2') }}"
        device_class: "power"

in my /packages/e3dc.yaml

modbus:
- name: e3dc
  type: tcp
  host: 192.168.x.x
  port: 502
  sensors:
    - name: E3DC solar power
      unit_of_measurement: W
      address: 40067
      device_class: power
    - name: E3DC battery power
      unit_of_measurement: W
      address: 40069
      device_class: power
    - name: E3DC battery soc
      unit_of_measurement: '%'
      address: 40082
      data_type: uint
      device_class: battery
    - name: E3DC power consumption
      unit_of_measurement: W
      address: 40071
      device_class: power
    - name: E3DC grid power
      unit_of_measurement: W
      address: 40073
      device_class: power
    - name: E3DC emergency power state
      data_type: uint
      address: 40083
    - name: E3DC EMS state
      data_type: uint
      address: 40084
    - name: E3DC autarky and consumption
      data_type: uint
      address: 40081
    - name: E3DC string 1 power
      data_type: uint
      address: 40101
      device_class: power
      unit_of_measurement: W
    - name: E3DC string 2 power
      data_type: uint
      address: 40102
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L1
      data_type: int
      address: 40105
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L2
      data_type: int
      address: 40106
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L3
      data_type: int
      address: 40107
      device_class: power
      unit_of_measurement: W

in my /packages/sensor.yaml

sensor:
    - platform: template
      sensors:
        e3dc_autarky:
          friendly_name: 'E3DC Autarky'
          unit_of_measurement: '%'
          value_template: "{{ (states('sensor.e3dc_autarky_and_consumption')|int / 256)|round(0,'floor') }}"
        e3dc_own_consumption:
          friendly_name: 'E3DC Own Consumption ratio'
          unit_of_measurement: '%'
          value_template: "{{ ((states('sensor.e3dc_autarky_and_consumption')|int / 256 - states('sensor.e3dc_autarky')|int) * 256)|round(0,'floor') }}"
        # Grid out
        e3dc_grid_negative_power:
          unique_id: e3dc_grid_negative_power
          friendly_name: E3DC Grid Negative (Export) Power
          unit_of_measurement: W
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int <= 0 %}
              {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
            {% endif %}   
        # Grid in
        e3dc_grid_positive_power:
          unique_id: e3dc_grid_positive_power
          friendly_name: E3DC Grid Positive (Import) Power
          unit_of_measurement: W
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int >= 0 %}
              {{ states('sensor.e3dc_grid_power') }}
            {% endif %}  
        # Battery out
        e3dc_battery_power_out:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_battery_power') | int <= 0 %}
              {{ (states('sensor.e3dc_battery_power') | int) | abs }} 
            {% endif %}   
        # Battery in
        e3dc_battery_power_in:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
                {% if states('sensor.e3dc_battery_power') | int >= 0 %}
                  {{ states('sensor.e3dc_battery_power') }}
                {% endif %}  
    
    - platform: integration
      source: sensor.e3dc_battery_power_out
      name: energy_battery_discharge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_battery_power_in
      name: energy_battery_charge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_solar_power
      name: energy_solar_production
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_power_consumption
      name: energy_consumption
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_power_in
      name: energy_grid_usage
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_power_out
      name: energy_grid_feed_in
      unit_prefix: k
      round: 2

Can someone help me to find the error. Or maybe someone can also post their complete configuration for including E3DC in the energy dashboard - in case I’ve taken wrong turns here too many times. thank you very much :grinning:

Check these _in / _out namings. Move the in/out in between the sensor names so the ending is always power or energy.
With this ending your global customization should work and declare the sensors right.

# General customization for energy sensors
# Set class to energy and enable statistic
"sensor.*_energy":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: energy
   state_class: measurement

# General customization for power sensors
# Set class to power and enable statistic
"sensor.*_power":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: power
   state_class: measurement

The global customization does look for *_energy or *_power on the end of the names. With your _in /_out it will skip them.

cheers armin

I put in/out in the sonsor name from the end in the name. Unfortunately, that hasn’t helped me get more sensors to choose from in the energy dashboard. Unfortunately, there must still be another error.

Here my changes:

sensor:
    - platform: template
      sensors:
        e3dc_autarky:
          friendly_name: 'E3DC Autarky'
          unit_of_measurement: '%'
          value_template: "{{ (states('sensor.e3dc_autarky_and_consumption')|int / 256)|round(0,'floor') }}"
        e3dc_own_consumption:
          friendly_name: 'E3DC Own Consumption ratio'
          unit_of_measurement: '%'
          value_template: "{{ ((states('sensor.e3dc_autarky_and_consumption')|int / 256 - states('sensor.e3dc_autarky')|int) * 256)|round(0,'floor') }}"
        # Grid out
        e3dc_grid_negative_power:
          unique_id: e3dc_grid_negative_power
          friendly_name: E3DC Grid Negative (Export) Power
          unit_of_measurement: W
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int <= 0 %}
              {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
            {% endif %}   
        # Grid in
        e3dc_grid_positive_power:
          unique_id: e3dc_grid_positive_power
          friendly_name: E3DC Grid Positive (Import) Power
          unit_of_measurement: W
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int >= 0 %}
              {{ states('sensor.e3dc_grid_power') }}
            {% endif %}  
        # Battery out
        e3dc_battery_out_power:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_battery_power') | int <= 0 %}
              {{ (states('sensor.e3dc_battery_power') | int) | abs }} 
            {% endif %}   
        # Battery in
        e3dc_battery_in_power:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
                {% if states('sensor.e3dc_battery_power') | int >= 0 %}
                  {{ states('sensor.e3dc_battery_power') }}
                {% endif %}  
    
    - platform: integration
      source: sensor.e3dc_battery_out_power
      name: energy_battery_discharge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_battery_in_power
      name: energy_battery_charge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_solar_power
      name: energy_solar_production
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_consumption_power
      name: energy_consumption
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_in_power
      name: energy_grid_usage
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_out_power
      name: energy_grid_feed_in
      unit_prefix: k
      round: 2

I hope for further support. Maybe it would be really helpful if you published your configuration for the E3DC integration here.

Thank you. Best regards

Hello, so - I found a few more steps to the solution (and actually don’t know exactly why) only I’m missing the values of the solar collectors. Can someone help me here, here is my current configuration again:

Configuration.yaml

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

  # Name of the location where Home Assistant is running
  name: Home
  # Location required to calculate the time the sun rises and sets
  latitude: 48.306766
  longitude: 11.200741
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 510
  # metric for Metric, imperial for Imperial
  unit_system: metric
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: Europe/Berlin
  
# Text to speech
tts:
  - platform: google_translate
  
homeassistant:
  customize: !include customize.yaml
  packages: !include_dir_named packages/
  customize_glob: !include customize_global.yaml

#  group: !include groups.yaml
#  automation: !include automations.yaml
#  script: !include scripts.yaml
#  scene: !include scenes.yaml
homematic: !include services/homematic.yaml
# modbus: !include services/e3dc.yaml

customize.yaml

# Customize YAML 
# Customize single entries

# E3DC
# Friendly Names for Integration Sensors
# Solar
sensor.e3dc_solar_energy:
  friendly_name: E3DC Solar Energy
 # House  
sensor.e3dc_house_energy:
  friendly_name: E3DC House Energy
# Grid Positive
sensor.e3dc_grid_positive_energy:
  friendly_name: E3DC Grid Positive (Import) Energy
# Grid Negative
sensor.e3dc_grid_negative_energy:
  friendly_name: E3DC Grid Negative (Export) Energy
# Battery Positive Energy
sensor.e3dc_battery_positive_energy:
  friendly_name: E3DC Battery Positive (Charge) Energy
# Battery Negative Energy
sensor.e3dc_battery_negative_energy:
  friendly_name: E3DC Battery Negative (Discharge) Energy

customize_global.yaml

# Customize Global YAML 
# Customize entities matching a pattern

# General customization for energy sensors
# Set class to energy and enable statistic
"sensor.*_energy":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: energy
   state_class: measurement

# General customization for power sensors
# Set class to power and enable statistic
"sensor.*_power":
   last_reset: '1970-01-01T00:00:00+00:00'
   device_class: power
   state_class: measurement

packages/binary_sensor.yaml

binary_sensor:
  - platform: template
    sensors:
      e3dc_emergency_power_possible:
        friendly_name: "E3DC Emergency Power possible"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(4) > 0 }}"
      e3dc_battery_loading_blocked:
        friendly_name: "E3DC Battery loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(1) > 0 }}"
      e3dc_battery_unloading_blocked:
        friendly_name: "E3DC Battery unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(2) > 0 }}"
      e3dc_weather_based_loading:
        friendly_name: "E3DC weather based loading limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(8) > 0 }}"
      e3dc_power_limiter:
        friendly_name: "E3DC power limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(16) > 0 }}"
      e3dc_smartcharge_loading_blocked:
        friendly_name: "E3DC SmartCharge loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(32) > 0 }}"
      e3dc_smartcharge_unloading_blocked:
        friendly_name: "E3DC SmartCharge unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(64) > 0 }}"
      e3dc_emergency_power_active:
        friendly_name: "E3DC Emergency Power Mode Active"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') }}"
      e3dc_emergency_power_available:
        friendly_name: "E3DC Emergency Power Available"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') or is_state('sensor.e3dc_emergency_power_state', '2') }}"
        device_class: "power"

packages/e3dc.yaml

modbus:
- name: e3dc
  type: tcp
  host: 192.168.2.39
  port: 502
  sensors:
    - name: E3DC_solar_power
      unit_of_measurement: W
      address: 40067
      device_class: power
    - name: E3DC_battery_power
      unit_of_measurement: W
      address: 40069
      device_class: power
    - name: E3DC battery soc
      unit_of_measurement: '%'
      address: 40082
      data_type: uint
      device_class: battery
    - name: E3DC_power_consumption
      unit_of_measurement: W
      address: 40071
      device_class: power
    - name: E3DC_grid_power
      unit_of_measurement: W
      address: 40073
      device_class: power
    - name: E3DC emergency power state
      data_type: uint
      address: 40083
    - name: E3DC EMS state
      data_type: uint
      address: 40084
    - name: E3DC autarky and consumption
      data_type: uint
      address: 40081
    - name: E3DC string 1 power
      data_type: uint
      address: 40101
      device_class: power
      unit_of_measurement: W
    - name: E3DC string 2 power
      data_type: uint
      address: 40102
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L1
      data_type: int
      address: 40105
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L2
      data_type: int
      address: 40106
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L3
      data_type: int
      address: 40107
      device_class: power
      unit_of_measurement: W

packages/sensor.yaml

sensor:
- platform: template
  sensors:
    e3dc_autarky:
      friendly_name: 'E3DC Autarky'
      unit_of_measurement: '%'
      value_template: "{{ (states('sensor.e3dc_autarky_and_consumption')|int / 256)|round(0,'floor') }}"
    e3dc_own_consumption:
      friendly_name: 'E3DC Own Consumption ratio'
      unit_of_measurement: '%'
      value_template: "{{ ((states('sensor.e3dc_autarky_and_consumption')|int / 256 - states('sensor.e3dc_autarky')|int) * 256)|round(0,'floor') }}"
    # Grid out
    e3dc_grid_out_power:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_grid_power') | int > 0 %}
          0
        {% else -%}
          {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
        {% endif %}      
    # Grid in
    e3dc_grid_in_power:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_grid_power') | int > 0 %}
          {{ states('sensor.e3dc_grid_power') | int }}
        {% else -%}
          0
        {% endif %}
    # Battery out
    e3dc_battery_out_power:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_battery_power') | int > 0 %}
          0
        {% else -%}
          {{ (states('sensor.e3dc_battery_power') | int) | abs }} 
        {% endif %}
    # Battery in
    e3dc_battery_in_power:
      unit_of_measurement: 'W'
      device_class: power
      value_template: >
        {% if states('sensor.e3dc_battery_power') | int > 0 %}
          {{ states('sensor.e3dc_battery_power') | int }}
        {% else -%}
          0
        {% endif %}
        
- platform: integration
  source: sensor.e3dc_battery_out_power
  name: energy_battery_discharge
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_battery_in_power
  name: energy_battery_charge
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_solar_power
  name: energy_solar_production
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_power_consumption
  name: energy_consumption
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_grid_in_power
  name: energy_grid_in
  unit_prefix: k
  round: 2
- platform: integration
  source: sensor.e3dc_grid_out_power
  name: energy_grid_out
  unit_prefix: k
  round: 2

It would be nice if someone could help me to troubleshoot, somehow I’m stuck. Many thanks and best regards

I just compared again and unfortunately the values do not match after all. Here the screenshots:

I’m afraid that’s a bigger mistake in my configuration, only which one. I hope for help. thank you

You are comparing “Äpfel mit Birnen” (apples with pears, W wit kWh).
If you want to compare the E3DC values with HA, go to the portal and open ‘Leistungswerte’.

Also keep in mind that the E3DC calculates every second, the modbus integration by default every 30 seconds (not sure in that point).
So when a Water heater runs for 20 seconds in that 30 seconds period, modbus will never grab it.

You get a little closer if you use the method: left in the riemann integration.

The Energy dashboard is nice for an overview, but if you need exact values for the tax office, go to the E3DC portal.

oh my god, I didn’t follow the “think before you post” order. Sorry for the now self-explanatory stupid question. :pensive:

But can someone still explain to me why I can’t select the solar power?

Hi, everyone,

I was able to solve my problems. After the system got a bit confused during my exercises, I set it up again with the following configuration and it works. Important, patience: the values are only displayed after approx. 2 hours. And also important: the configuration of the energy dashboard has moved from settings to settings → dashboard.

configuration.yaml

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

  # Name of the location where Home Assistant is running
  name: Home
  # Location required to calculate the time the sun rises and sets
  latitude: 48.306766
  longitude: 11.200741
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 510
  # metric for Metric, imperial for Imperial
  unit_system: metric
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: Europe/Berlin

# Text to speech
tts:
  - platform: google_translate

homeassistant:
  packages: !include_dir_named packages/

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
homematic: !include services/homematic.yaml

# Auslagern der Sensordaten in ein Datenbank auf einem NAS (MariaDB)
recorder:
  db_url: mysql://hassio:[email protected]:3307/Homeassistant?charset=utf8mb4

/config/packages/binary_sensor.yaml

binary_sensor:
  - platform: template
    sensors:
      e3dc_emergency_power_possible:
        friendly_name: "E3DC Emergency Power possible"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(4) > 0 }}"
      e3dc_battery_loading_blocked:
        friendly_name: "E3DC Battery loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(1) > 0 }}"
      e3dc_battery_unloading_blocked:
        friendly_name: "E3DC Battery unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(2) > 0 }}"
      e3dc_weather_based_loading:
        friendly_name: "E3DC weather based loading limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(8) > 0 }}"
      e3dc_power_limiter:
        friendly_name: "E3DC power limiter"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(16) > 0 }}"
      e3dc_smartcharge_loading_blocked:
        friendly_name: "E3DC SmartCharge loading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(32) > 0 }}"
      e3dc_smartcharge_unloading_blocked:
        friendly_name: "E3DC SmartCharge unloading blocked"
        value_template: "{{ states('sensor.e3dc_ems_state')|int|bitwise_and(64) > 0 }}"
      e3dc_emergency_power_active:
        friendly_name: "E3DC Emergency Power Mode Active"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') }}"
      e3dc_emergency_power_available:
        friendly_name: "E3DC Emergency Power Available"
        value_template: "{{ is_state('sensor.e3dc_emergency_power_state', '1') or is_state('sensor.e3dc_emergency_power_state', '2') }}"
        device_class: "power"

/config/packages/e3dc.yaml

modbus:
- name: e3dc
  type: tcp
  host: 192.168.2.39
  port: 502
  sensors:
    - name: E3DC solar power
      data_type: int16
      unit_of_measurement: W
      address: 40067
      device_class: power
      state_class: measurement
    - name: E3DC battery power
      data_type: int16
      unit_of_measurement: W
      address: 40069
      device_class: power
      state_class: measurement
    - name: E3DC battery soc
      unit_of_measurement: '%'
      address: 40082
      data_type: uint16
      device_class: battery
    - name: E3DC power consumption
      data_type: int16
      unit_of_measurement: W
      address: 40071
      device_class: power
      state_class: measurement
    - name: E3DC grid power
      data_type: int16
      unit_of_measurement: W
      address: 40073
      device_class: power
      state_class: measurement
    - name: E3DC emergency power state
      address: 40083
      data_type: uint16
    - name: E3DC EMS state
      address: 40084
      data_type: uint16
    - name: E3DC autarky and consumption
      data_type: uint16
      address: 40081
    - name: E3DC string 1 power
      data_type: uint16
      address: 40101
      device_class: power
      unit_of_measurement: W
      state_class: measurement
    - name: E3DC string 2 power
      data_type: uint16
      address: 40102
      device_class: power
      unit_of_measurement: W
      state_class: measurement
    - name: E3DC powermeter 1 L1
      data_type: int16
      address: 40105
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L2
      data_type: int16
      address: 40106
      device_class: power
      unit_of_measurement: W
    - name: E3DC powermeter 1 L3
      data_type: int16
      address: 40107
      device_class: power
      unit_of_measurement: W

/config/packages/sensor.yaml

sensor:
    - platform: template
      sensors:
        e3dc_autarky:
          friendly_name: 'E3DC Autarky'
          unit_of_measurement: '%'
          value_template: "{{ (states('sensor.e3dc_autarky_and_consumption')|int / 256)|round(0,'floor') }}"
        e3dc_own_consumption:
          friendly_name: 'E3DC Own Consumption ratio'
          unit_of_measurement: '%'
          value_template: "{{ ((states('sensor.e3dc_autarky_and_consumption')|int / 256 - states('sensor.e3dc_autarky')|int) * 256)|round(0,'floor') }}"
        # Grid out
        e3dc_grid_power_out:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int > 0 %}
              0
            {% else -%}
              {{ (states('sensor.e3dc_grid_power') | int) | abs }} 
            {% endif %}      
        # Grid in
        e3dc_grid_power_in:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_grid_power') | int > 0 %}
              {{ states('sensor.e3dc_grid_power') | int }}
            {% else -%}
              0
            {% endif %}
        # Battery out
        e3dc_battery_power_out:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_battery_power') | int > 0 %}
              0
            {% else -%}
              {{ (states('sensor.e3dc_battery_power') | int) | abs }} 
            {% endif %}
        # Battery in
        e3dc_battery_power_in:
          unit_of_measurement: 'W'
          device_class: power
          value_template: >
            {% if states('sensor.e3dc_battery_power') | int > 0 %}
              {{ states('sensor.e3dc_battery_power') | int }}
            {% else -%}
              0
            {% endif %}
    
    - platform: integration
      source: sensor.e3dc_battery_power_out
      name: energy_battery_discharge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_battery_power_in
      name: energy_battery_charge
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_solar_power
      name: energy_solar_production
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_string_1_power
      name: energy_solar_production1
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_string_2_power
      name: energy_solar_production2
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_powermeter_1_L1
      name: energy_solar_powermeter1
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_powermeter_1_L2
      name: energy_solar_powermeter2
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_power_consumption
      name: energy_consumption
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_power_in
      name: energy_grid_usage
      unit_prefix: k
      round: 2
    - platform: integration
      source: sensor.e3dc_grid_power_out
      name: energy_grid_feed_in
      unit_prefix: k
      round: 2

This is how it currently works for me. I would like to thank all the “supporters”, especially da-anda, without whom I would never have been able to do this.

Best regards
Volker

2 Likes

Hi
Really great work! Very much appreciated. I got this running for me as well.
But I´m curious if this setup also incl the power consumption of the E3DC system itself.
Any idea?
Thanks a lot!
Cheers Christoph

Hi, I have an e3dc s10 Power Plant and I read it ba openhab3 - but now I am installing Home Assistant and am interested in this theme - how did you integrated e3dc? do I have to install modbus first?

Welcome to HA! :slight_smile:
All you need is in this topic, just read it.