Erste Schritte mit EOS, HomeAssistant und EOS connect

Hallo alle zusammen,

ich bin neu hier und versuche gerade seit einigen Tagen, EOS mit Home Assistant zum Laufen zu bekommen. Nach dem das Ganze grundsätzlich zu Laufen scheint, komme ich jetzt nicht mehr weiter.

Das Setup:

  • aktuelles EOS in Docker (akkudoktor/eos:latest)
  • aktuelles Home Assistant 2025.10.1
  • aktuelles EOS connect 0.1.23
  • MQTT als Addon in Home Assistant

Ich gehe davon aus, dass die “Load”, die an EOS übertragen wird, der Gesamtverbrauch des Haushaltes in W ist. Hierfür habe ich meinen Sensor sensor.hausverbrauch in der Config von EOS connect eingetragen. Für den Sensor sind über drei Monate Statistik Daten gespeichert:

load:
source: homeassistant
url: http://ha.wuff.net:8123
access_token: ...
load_sensor: sensor.hausverbrauch
car_charge_load_sensor: ""
additional_load_1_sensor: sensor.zahler_warmepumpe_momentan
additional_load_1_runtime: 0
additional_load_1_consumption: 0

Die Leistung liegt im Mittel um ca. 800W, da inzwischen wieder die Wärmepumpe regelmäßig läuft.

In der hübschen Grafik, die EOS connect anzeigt, wird die Load nur mit ca. 400W im Mittel eingezeichnet. Damit sind meiner Meinung nach die Voraussagen für den Energieverbrauch viel zu optimistisch:

Was mache ich falsch?

Meine EOS.config.json ist minimalistisch, da die Load, der PV-Forcast, Strompreis und die Batterie in EOS connect konfiguriert wird. Ich vermute daher, da dies in der EOS.config.json unnötig ist.

EOS.config.json:

{
"general": {
"data_folder_path": null,
"data_output_subpath": "output",
"latitude": 49.78512582,
"longitude": 9.95794565000001,
"timezone": "Europe/Berlin"
},
"cache": {
"subpath": "cache",
"cleanup_interval": 300.0
},
"ems": {
"startup_delay": 5.0,
"interval": 300.0
},
"logging": {
"level": "INFO"
},
"devices": {
},
"measurement": {
"load0_name": "Hausverbrauch",
"load1_name": "LWP",
"load2_name": null,
"load3_name": null,
"load4_name": null
},
"optimization": {
"hours": 48,
"penalty": 10
},
"prediction": {
"hours": 48,
"historic_hours": 48
},
"elecprice": {
},
"load": {
},
"pvforecast": {
},
"weather": {
},
"server": {
"host": "192.168.8.2",
"port": 8503,
"verbose": false,
"startup_eosdash": true,
"eosdash_host": "0.0.0.0",
"eosdash_port": 8504
},
"utils": {}
}

Viele Grüße aus Würzburg,
Gerhard

Ich würde mir nochmal genau die Werte von dem Hausverbrauch-Sensor ansehen. Ich kenn zwar deine Lebensumstände nicht aber mir kommt der Verbrauch insgesamt sehr niedrig vor.

Grundsätzlich hab ich exakt das gleiche Setup wie du und bei mir passen die Verbrauchswerte ziemlich gut. Nachts haben wir so ca. 350-400W “Grundlast” und im EOS sehe ich dann auch entsprechend ca. 0,39kWh Verbrauch.

Dein Sensor misst aber in Watt, ja? Sprich: Die Leistung und nicht die Energie in kWh? EOS summiert das selbstständig auf. Außerdem muss er die tatsächliche Last abbilden. Sprich: Wenn du Eigenverbrauch durch PV oder aus dem Akku hast, dann muss das in der Hauslast mit drin sein damit EOS den tatsächlichen Gesamtbedarf kennt.

Wenn das alles passt bin ich auch erstmal ratlos…

Bzgl der angepassten Vorhersage scheint hier EOS noch nicht konsistent zu laufen. Ich hab das auch versucht überein zu bringen, es passt aber nicht. Der etwas längere Thread dazu ist hier.

Einmal gibt es die Diskrepanz zwischen Wh und kWh und dann zum Zweiten ist die angepasste Vorhersage auf einmal viel zu niedrig, sobald man EOS mit Messwerten füttert.

So schaut das bei mir gestern aus. Jährlicher Verbrauch 7600kWh und daraus runtergerechnet auf die Stunde etwa 0,86kWh. Die nicht angepasste, vorhergesagte Last (Load Pred not adjusted) passt dazu zumindest in der Größenordnung, aber nicht in der Verteilung über den Tag. Die angepasste, vorhergesagte Last (Load Pred) spiegelt zwar eher wieder, dass bei mir eher früh morgens hohe Last ist, also die Verteilung über den Tag ist besser, aber die Größenordnung stimmt irgendwie überhaupt nicht, weil meistens bei nahe Null.

Hallo Stefan,

mein Sensor für den Hausverbrauch ist korrekt und er misst in W. Er wird über einen Template-Sensor aus dem Netzbezug + PV-Leistung + Batterie-Entladen - Batterie-Laden berechnet:

    - name: "Hausverbrauch"
      unique_id: Hausverbrauch
      unit_of_measurement: "W"
      state_class: "measurement"
      icon: mdi:flash
      state: >
      {% set hausverbrauch = (float(states('sensor.sma_pconsume'), 0) + float(states('sensor.tripower_dermeasureac_active_power'), 0) + float(states('sensor.sn_3019810617_battery_power_discharge_total'), 0) - float(states('sensor.sn_3019810617_battery_power_charge_total'), 0) - float(states('sensor.sma_psupply'), 0))|round(0)|float %}
{{ hausverbrauch }}

Die Prognose in ca. Faktor zwei zu niedrig.

Die Frage ist allerdings, ob das Laden der Batterie in der Load für EOS erfasst sein muss oder nicht.Meiner Meinung nach nicht, da es kein Verbrauch im Haus ist.

Liebe Grüße,
Gerhard

Hi kleini,

vielen Dank, ich werde mir den Thead durchlesen und ggf. dort antworten.

Liebe Grüße,
Gerhard

Hi,

inzwischen hat sich das Problem der Load von selbst gelöst und die Prognose von EOS sieht brauchbar aus.

Die Ursache war das Hochsetzen von purge_keep_days auf 15. EOS connect benötigt die detaillierten Daten von 14 Tagen und es dauert einfach ein paar Tage, bis die Load 14 Tage lang detailliert gespeichert ist.

Auch dieser Fehler, der im Log auftrat, ist jetzt weg:

2025-10-10 19:43:47 ERROR [LOAD-IF] Error processing energy ('sensor.hausverbrauch') data at index 687: {'state': '1014', 'last_updated': '2025-10-04T16:49:35.235748+00:00'} (next: {'state': 'unknown', 'last_updated': '2025-10-04T16:50:06.011234+00:00'}) - could not convert string to float: 'unknown' (check: http://ha.wuff.net:8123/history?entity_id=sensor.hausverbrauch&start_date=2025-10-04T14%3A49%3A35.235748%2B00%3A00&end_date=2025-10-04T18%3A49%3A35.235748%2B00%3A00)

Ich steuere jetzt mit einer Automation und einer Entität von EOS connect das Laden und Entladen meiner Batterie. Das klappt seit einem Tag sehr gut.

Viele Grüße aus Würzburg,
Gerhard

1 „Gefällt mir“

Ich will einen kurzen Zwischenstand geben.

Aktuell läuft bei mir EOS v0.1.0+dev in auf einem Server in Docker produktiv. Zur Integration in Home Assistant verwende ich EOS connect 0.2.24. Wer es einfacher mag, verwendet statt Docker das “EOS add-on” direkt in Home Assistant.

Ich steuere über eine Home Assistant Automation das Laden und Entladen meiner Batterien mit 22 kWh an einem Sunny Boy Storage 5.0.

Das funktioniert stabil und das Ergebnis ist fast immer korrekt. Ich kann diese Lösung sehr empfehlen und bedanke mich herzlich bei allen Entwicklern, die diese netzdienliche Lösung ermöglicht haben.

Aktuell habe ich nur mit der Abfrage der PV-Prognose über Solcast Probleme. Aber das wird sich noch lösen lassen.

2 „Gefällt mir“

Ja, mit EOS v0.1.0 hat es geklappt, mit der v0.2.0+dev schmeißt bei mir der EOS Connect einen Fehler:

2025-11-12 22:44:50 INFO [EOS] OPTIMIZE request optimization with: http://192.168.76.61:8503/optimize?start_hour=22 - and with timeout: 180
2025-11-12 22:44:50 INFO [EOS] OPTIMIZE response retrieved successfully in 0 min 0.00 sec for current run
2025-11-12 22:44:50 ERROR [EOS] OPTIMIZE Request failed: 422 Client Error: Unprocessable Entity for url: http://192.168.76.61:8503/optimize?start_hour=22
2025-11-12 22:44:50 ERROR [EOS] OPTIMIZE Response status: 422
2025-11-12 22:44:50 ERROR [OPT] No control data in optimized response
Exception in thread Thread-6 (__update_state_optimization_loop):
Traceback (most recent call last):
  File "/usr/lib/python3.12/threading.py", line 1075, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.12/threading.py", line 1012, in run
    self._target(*self._args, **self._kwargs)
  File "/app/src/eos_connect.py", line 765, in __update_state_optimization_loop
    next_eval = eos_interface.calculate_next_run_time(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/src/interfaces/optimization_interface.py", line 227, in calculate_next_run_time
    min_gap_seconds = max((update_interval + avg_runtime) * 0.7, 30)
                           ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

Leider kann ich auf meinem Unraid System das alte Docker Image nicht mehr pullen, da Unraid mit einem sha256 digest nicht klar kommt und eine konkrete Version, latest, v0.2.0, etc. verlangt.