Heidelberg Energy Control Modbus RTU

Hallo zusammen,

ich melde mich dann auch nochmal zurück-
Zu den Dip-Schaltern kann ich nicht viel sagen, ohne sie aufzuschrauben, aber dazu sollte sich im Netz und der Doku etwas finden lassen - wichtig könnte sein, die Wallbox nochmal stromlos zu nehmen, nachdem man etwas geändert hat (falls man sie überhaupt mit Strom drauf aufmacht).

Ich habe EVCC bei mir mittlerweile wieder komplett deaktiviert, weil es für mich keinen wirklichen Nutzen hat.
Was ich mit meinen lokalen Regeln nutzen kann, um den Ladevorgang zu steuern (teilweise fest in der Automation eingetragen):

  • Preisgrenze, unterhalb der geladen wird
  • Dass während den günstigsten Stunden des Tages geladen wird
  • Dass unter 17% SoC immer geladen wird, um die Akku-Alterung einzugrenzen
  • Wenn das Auto vorklimatisiert soll geladen werden
  • Ladestrom, mit dem geladen wird (um über längere Zeit anteilig viel über Balkonsolar zu laden)

Folgende Komponenten in HA nutze ich mittlerweile:
configuration.yaml

input_number:
  charging_amps:
    name: charging_amps
    min: 6
    max: 16
    step: 1
    mode: slider
  charging_price_limit:
    name: charging_price_limit
    min: -10
    max: 350
    step: 1

input_boolean:
  charging_enabled:
    name: charging_enabled
    icon: mdi:light-switch

modbus:
  - name: heidelberg_wallbox
    type: serial
    method: rtu
    port: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 # Path to your RS485 adapter
    baudrate: 19200
    stopbits: 1
    bytesize: 8
    parity: E
    delay: 0
    message_wait_milliseconds: 30
    timeout: 5
    sensors:
      # Read the raw charging status
      - name: Wallbox_Charging_Status_Raw
        address: 5 # Register for charging status
        input_type: input
        data_type: uint16

      # Read the power of L1, L2, and L3 combined (in watts)
      - name: Wallbox_L1_L2_L3_Power
        address: 14 # Register for L1 L2 L3 Power
        input_type: input
        unit_of_measurement: W
        data_type: uint16
        precision: 0 # No decimals

      # Read the total energy consumption (in kWh)
      - name: Wallbox_KWH_Total_Energie
        address: 17 # Register for total energy
        input_type: input
        unit_of_measurement: kWh
        data_type: uint32
        scale: 0.001 # Multiply by 0.001 to convert to kWh
        precision: 3 # 3 decimal places

automation Enable Wallbox

alias: Enable Wallbox
description: ""
triggers:
  - minutes: /5
    trigger: time_pattern
  - minutes: "1"
    trigger: time_pattern
conditions: []
actions:
  - choose:
      - conditions:
          - condition: or
            conditions:
              - condition: template
                value_template: >
                  {% set avg_price =
                  state_attr('sensor.strompreis',
                  'avg_price') | float %} {% set min_price =
                  state_attr('sensor.strompreis',
                  'min_price') | float %} {% set threshold = ( 2 * avg_price
                  + 4 * min_price) / 6 %} {{
                  states('sensor.strompreis') |
                  float < threshold }}
              - condition: template
                value_template: >
                  {{ states('sensor.strompreis') |
                  float <= ((states('input_number.charging_price_limit') | float
                  / 1000) )  }}
                enabled: true
                  - type: is_battery_level
                    condition: device
                    device_id: cf1f4b4010e3c3f9xxx
                    entity_id: 51dcc69e590362ff3xxx
                    domain: sensor
                    below: 17
              - condition: state
                entity_id: switch.ms_apollo_electric_climatisation
                state: "on"
        sequence:
          - action: input_boolean.turn_on
            target:
              entity_id: input_boolean.charging_enabled
            data: {}
    default:
      - action: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.charging_enabled
mode: single

Automation Update Charging Current

alias: Update Charging Current
description: ""
triggers:
  - entity_id: input_number.charging_amps
    trigger: state
  - trigger: state
    entity_id:
      - input_boolean.charging_enabled
    to: null
conditions: []
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_boolean.charging_enabled
            state: "on"
        sequence:
          - action: script.set_charging_current
            metadata: {}
            data: {}
    default:
      - action: script.disable_charging_current
        metadata: {}
        data: {}

Script set_charging_current

sequence:
  - data:
      hub: heidelberg_wallbox
      unit: 1
      address: 261
      value: "{{ states('input_number.charging_amps') | int * 10 }}"
    action: modbus.write_register
alias: Set Charging Current
description: ""

Script disable_charging_current

sequence:
  - data:
      hub: heidelberg_wallbox
      unit: 1
      address: 261
      value: 0
    action: modbus.write_register
alias: Disable charging current
description: ""

Vielleicht nützt es ja jemandem.

Viele Grüße
manuskript