Heidelberg Wallbox via Waveshare Modbus in Home Assistant

Hallo zusammen,

ich möchte meine Heidelberg Energy Control Wallbox via Modbus mit meinem HA verbinden.

Hierfür habe ich mir das Waveshare RS485 TO POE ETH gekauft.

Leider bekomme ich keine Verbindung zu meiner Wallbox. Ich habe jetzt schon viel gelesen, aber nichts hat geholfen.

Die LINK-LED am Waveshare bleibt grün, was wohl auf ein Problem zwischen meinem HA und dem Waveshare hindeutet.

Die Oberfläche des Waveshare erreiche ich über die IP, aber weiter komme ich nicht.

So sieht meine Config im Waveshare aus:

Und hier der Eintrag in HA, ich habe die modbus.yaml ausgelagert, daher “fehlt” der Eintrag modbus.

image

Die Baudrate etc. habe ich aus der Heidelberg-Anbleitung übernommen und in der Wallbox habe ich die Bus-ID 1 (S4 / 4on) eingestellt.

Ebenso habe ich an der Wallbox den Abschlusswiderstand aktiviert und an dem Waveshare auch einen 120Ohm Widerstand zwischen A und B angeschlossen.

Nachtrag:
Da ich aktuell noch iobroker benutze und gerade umsteige habe ich die Wallbox mal in eine Modbus-Instanz von iobroker aufgenommen und dort funktioniert alles. Die Wallbox hört auf blau zu blinken, der link des Waveshare wird blau und ich kann sowohl Register auslesen als auch schreiben.

Im HA klappt es weiter nicht, sobald ich die Instanz im iobroker abschalte meldet die Wallbox wieder einen Kommunikationsfehler und das Waveshare leuchtet nur noch grün und nicht blau.

Also irgendwie scheint meine HA-Konfig nicht zu passen, aber ich habe keine Ahnung an was es liegt. Mir werden auch keine entsprechenden Entitäten gemäß dem modbus.yaml angelegt.

Ich habe auch schon meine Wärmepumpe per Modbus integriert, da funktioniert in HA alles einwandfrei

So sieht es im iobroker aus:

Nachtrag 2:
OMG, ich habe den Fehler gefunden… Ich lasse den Post mal so stehen, vielleicht hilft es dem ein / oder anderen. Ich hatte tatsächlich die include modbus.yaml in der configuration.yaml auskommentiert da ich was getestet habe.

Nachdem ich die # entfernt habe funktioniert es jetzt :man_facepalming:

Hey Gimli, kannst Du deine Wallbox-Datenpunkte als code teilen?

Hi,

was meinst du mit Datenpunkte als Code? Die komplette modus.yaml?

Ja, genau das meine ich.
Die Register die ich habe, sind eher so halbgar.
Deine sind vor allem ordentlich definiert…

Gruß,
Matthias

Hi Matthias,

klar kein Problem.

Hier die yaml, musst nur beachten dass ich eine extra Datei für modbus habe, wenn du alles in der configuration.yaml hast musst modbus halt noch voranstellen.

LG Denny

#Heidelberg Wallbox
- name: wallbox_carport
  type: tcp
  host: 192.168.178.63
  port: 502
  sensors:
    - name: "wallbox_cp_charging_state"
      data_type: "uint16"
      unique_id: "c082f930-b467-42d9-bf70-384bfaa4b0bf"
      input_type: "input"
      slave: 1
      address: 5
      scan_interval: 60
    - name: "wallbox_cp_current_l1"
      data_type: "uint16"
      unique_id: "00e7dab4-a82e-4d0f-b822-f9254ed02006"
      device_class: "current"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 6
      scan_interval: 60
    - name: "wallbox_cp_current_l2"
      data_type: "uint16"
      unique_id: "00f773f9-4439-498c-b97a-a8a3c6062579"
      device_class: "current"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 7
      scan_interval: 60
    - name: "wallbox_cp_current_l3"
      data_type: "uint16"
      unique_id: "e10a77ab-5140-461e-ba41-942b088479ba"
      device_class: "current"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 8
      scan_interval: 60
    - name: "wallbox_cp_temperature_pcb"
      data_type: "int16"
      unique_id: "dcd9138d-23bf-40d5-a4b5-8d9b03b16989"
      device_class: "temperature"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "°C"
      slave: 1
      address: 9
      scan_interval: 60
    - name: "wallbox_cp_voltage_l1"
      data_type: "uint16"
      unique_id: "090e6ab5-8f57-4a9c-8ee9-728344c39bc0"
      device_class: "voltage"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "V"
      slave: 1
      address: 10
      scan_interval: 60
    - name: "wallbox_cp_voltage_l2"
      data_type: "uint16"
      unique_id: "3d2f8034-93ee-4ca8-bcb2-5ee98bad7533"
      device_class: "voltage"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "V"
      slave: 1
      address: 11
      scan_interval: 60
    - name: "wallbox_cp_voltage_l3"
      data_type: "uint16"
      unique_id: "f91b5be1-e0ba-49ec-a657-cd0e3589a4c6"
      device_class: "voltage"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "V"
      slave: 1
      address: 12
      scan_interval: 60
    - name: "wallbox_cp_extern_lock_state"
      data_type: "uint16"
      unique_id: "3c5d2d4d-051d-4a0b-a024-2425187bebba"
      input_type: "input"
      slave: 1
      address: 13
      scan_interval: 60
    - name: "wallbox_cp_power"
      data_type: "uint16"
      unique_id: "83889b97-90ef-4f75-aa48-4beb08c7182a"
      device_class: "power"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "W"
      slave: 1
      address: 14
    - name: "wallbox_cp_energy_since_power_on_high_byte"
      data_type: "uint16"
      unique_id: "2c8250ed-2930-4391-a739-3407faf1aa30"
      device_class: "energy"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "Wh"
      slave: 1
      address: 15
      scan_interval: 60
    - name: "wallbox_cp_energy_since_power_on_low_byte"
      data_type: "uint16"
      unique_id: "1dda32e4-5d19-4061-8ef2-571122d70849"
      device_class: "energy"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "Wh"
      slave: 1
      address: 16
      scan_interval: 60
    - name: "wallbox_cp_energy_since_installation_high_byte"
      data_type: "uint16"
      unique_id: "bb2a8b14-d4c2-405d-bca9-3f9b1f7d52ee"
      device_class: "energy"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "Wh"
      slave: 1
      address: 17
      scan_interval: 60
    - name: "wallbox_cp_energy_since_installation_low_byte"
      data_type: "uint16"
      unique_id: "ddbb596b-2197-4a62-9652-194dea99518d"
      device_class: "energy"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "Wh"
      slave: 1
      address: 18
      scan_interval: 60
    - name: "wallbox_cp_remote_lock"
      data_type: "uint16"
      unique_id: "ca7bf59f-4895-4a74-b733-4edc51f29c3f"
      input_type: "holding"
      slave: 1
      address: 259
      scan_interval: 60
    - name: "wallbox_cp_hardware_config_max_current"
      data_type: "uint16"
      unique_id: "14d67e98-89d3-4aaf-89e0-48516185a00d"
      device_class: "current"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 100
      scan_interval: 60
    - name: "wallbox_cp_hardware_config_min_current"
      data_type: "uint16"
      unique_id: "c98dfb96-f3de-4803-9dc4-0cd294af0df9"
      device_class: "current"
      input_type: "input"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 101
      scan_interval: 60
    - name: "wallbox_cp_standby_function_control"
      data_type: "uint16"
      unique_id: "c4e6a8ef-69bf-4e17-86ce-25d968013b90"
      input_type: "holding"
      slave: 1
      address: 258
      scan_interval: 60
    - name: "wallbox_cp_maximal_current_command"
      data_type: "uint16"
      unique_id: "28670150-9c06-4221-b267-11e22a4536bd"
      device_class: "current"
      input_type: "holding"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 261
      scan_interval: 60
    - name: "wallbox_cp_failsafe_current"
      data_type: "uint16"
      unique_id: "`Vorformatierter Text`7e55b0a6-3189-4a72-bebc-b09d3107eacf"
      device_class: "current"
      input_type: "holding"
      state_class: "measurement"
      unit_of_measurement: "A"
      slave: 1
      address: 262
      scan_interval: 60
1 „Gefällt mir“

Vielen Dank!
Ja - werde ich machen - ich habe aktuell noch Kram von meiner Wärmepumpe drinstehen, aber das ist ein großer Durcheinander, daher lager ich die Modbus-Sachen alle aus, wie du auch!

Anscheinend eine gute Alternative zu wbec:

wbec setze ich schon länger mit der Heidelberg Wallbox EC in HA ein. Es soll auch den konformen Betrieb zu §14a EnWG ermöglichen.

Dann werfe ich noch die Heidelbridge in den Ring:

Also: Erst einmal danke für den zusätzlichen Input.
Aber ich habe bereits seit 1,5 Jahren den gleichen Waveshare-Adapter an der Wallbox.
Und ich habe nicht sehr viel Lust den Klump nochmal umzubauen.

@gimli: Du hast übrigens einen kleinen Fehler - wenn auch vollkommen unspannend.
Deine PCB-Temp wird dir mit dem Faktor 10 multipliziert ausgelesen. Ich habe noch ein “scale: 0.1” hinzugefügt, jetzt passt der Wert.

Das ist tatsächlich Absicht. Ich rechne die Raw-Werte dann mit Helfern um, so habe ich mehr Kontrolle darüber wie die Werte gerundet werden.

Verstehe - ergibt dann natürlich Sinn!

Was anderes: Hast Du auch ein Template für den Status der Wallbox?
Ich könnte das schreiben - aber wenn du es fertig hast… :wink:

Nee, hab ich nicht.

LG Denny

1 „Gefällt mir“

Falls du magst, hier:
Hat mich ca. 1h gekostet. Ich habe nämlich das sensor davor vergessen und mich dann dabei auch fast :stuck_out_tongue:

  - name: "Wallbox Heidelberg Status Text:"
    state: >-
          {% if is_state('sensor.wallbox_heidelberg_charging_state', '2') %}
            Kein Fahrzeug angeschlossen, Aufladen n. erlaubt
          {% elif is_state('sensor.wallbox_heidelberg_charging_state', '3') %}
            Kein Fahrzeug angeschlossen, Aufladen erlaubt
          {% elif is_state('sensor.wallbox_heidelberg_charging_state', '4') %}
            Fahrzeug o. Ladeanfrage eingesteckt, Laden nicht erlaubt
          {% elif is_state('sensor.wallbox_heidelberg_charging_state', '5') %}
            Fahrzeug o. Ladeanfrage eingesteckt, Laden erlaubt
          {% elif is_state('sensor.wallbox_heidelberg_charging_state', '6') %}
            Fahrzeug mit Ladeanfrage eingesteckt, Laden nicht erlaubt
          {% elif is_state('sensor.wallbox_heidelberg_charging_state', '7') %}
            Fahrzeug mit Ladeanfrage eingesteckt, Laden erlaubt
          {% elif is_state('sensor.wallbox_heidelberg_charging_state', '10') %}
            Fahrzeug eingesteckt, verriegelt - Aufladen n. erlaubt
          {% endif %}

Voll gut, vielen Dank!

1 „Gefällt mir“

Die Anleitung ist schonmal super! Ich hab auch eine Heidelberg und wollte sie schon ablösen weil ich seit einigen Monaten HA und jetzt auch EVCC nutze. Mit der Anleitung bin ich jetzt am überlegen die Heidelberg doch für PV Überschuss zu nutzen. Eine Phasenumschaltung geht aber meiner Meinung nach nicht oder?
Wenn ich das richtig verstanden habe, brauche ich diesen Adapter und könnte dann direkt in die Fritzbox via Ethernet? Anhand der Ip erreiche ich dann Weboberfläche und setze deine Einstellungen?

Falls ich mich entschließe das nachzubauen, bräuchte ich zum Thema yaml und auslagern support. Das habe ich bisher noch nicht verstanden. Brauche ich zusätzlich noch eine Modbus Integration?
Bisher schreibe ich alles in die configuration.yaml und evcc.yaml

Ich habe meine Heidelberg inzwischen rudimentär mit heidelbridge laufen. Geht sehr gut.
Zusätzlich gibt’s noch: https://steff393.github.io/wbec-site//wbec-site/

heidelbridge wäre auch eine alternative und spart zusätzlich den Token.
Braucht der ESP ein Netzteil oder woher zieht er seine Spannung? Könnte ich theoretisch ja auch direkt in der Box verbauen oder?

Theoretisch kann man das direkt in der Box machen. Auf der GitHub Seite hat das auch einer gemacht und direkt an den Led abgezapft.
Ich habe verschwenderisch ein cat5 Kabel gelegt wovon 2 Adern für den Modbus gebraucht werden.
Vermutlich würde auch verdrillter Klingeldraht gehen, die Doku der Wallbox sagt 500m glaub ich.
Für mich der klare Vorteil: wenn ich ein anderes Modul nehme oder was ganz anderes, ich hab den Modbus drinnen und kann beliebig rumfummeln ohne jedes Mal die Box aufzumachen.

Mein Tipp: leg ein (Netzwerk) Kabel von der Box nach drinnen.

Alles klar, wie hast du die Spannungsversorgung realisiert? Der ESP braucht doch bestimmt irgendwo Strom her?

Altes Handy Netzteil.
Nimm da mich nicht als leuchtendes Vorbild, ich habe es derzeit noch als fliegenden Aufbau im Keller hängen.

Ganz elegant macht man das in einer kleinen Unterverteilung mit Hutschiene Netzteil usw. Da bin ich noch in der Denkphase.