Troubleshooting

Sorted by what you see, not by what the code calls it.

Troubleshooting

Crashes on startup under Proxmox

Symptom: segmentation fault immediately at startup.

Cause: the VM is using the kvm64 generic CPU type, which hides the AVX and SSE4.2 instructions that the prebuilt numpy and pandas wheels need.

Fix: stop the VM, set Hardware › Processor › CPU Type from kvm64 to host, restart. This is safe and recommended for any Proxmox VM running containerised workloads.

"No such file or directory" for the CBC solver

Symptom: the built-in optimizer fails with FileNotFoundError: [Errno 2] No such file or directory pointing at solverdir/cbc/linux/i64/cbc — a file that is plainly there.

Cause: on x86_64 the CBC binary shipped inside pulp is dynamically linked against glibc, and the Home Assistant OS add-on images are Alpine-based (musl) with no glibc loader. Linux reports the missing loader as a missing file. aarch64 is unaffected.

Fix: update to the latest add-on version, which installs a statically linked CBC of its own. EOS Connect now verifies the solver by running it at startup and logs which binary it chose.

This one is often confused with the Proxmox problem above. A segfault is a CPU issue; a FileNotFoundError naming cbc is this one.

Self-signed certificates

EOS Connect validates TLS certificates when talking to Home Assistant or OpenHAB. With a private CA you can turn that off in Settings › Data Source › SSL Ignore (expert, needs a restart). Only do this on a network path you control — custom root CAs are not supported yet.

Settings revert after an update

Almost always the missing ./data:/app/data volume — see the Docker section. Add the mount, then reconfigure once.

A sensor reads nothing

Use the Test button next to the field. It fetches the entity and shows the current value, which distinguishes a wrong entity name from a connection or token problem. The log also names any sensor that fell back to a built-in default.

The battery stops updating after a sensor drops out

Symptom: SOC, battery temperature and the dynamic charge power all freeze at their last values and never move again, while the rest of EOS Connect keeps running. A restart fixes it until the next time.

Cause: an entity that goes unavailable reports an empty state. Reading it crashed the background thread that refreshes the battery, and nothing restarts that thread.

Fix: update EOS Connect. An unreadable reading is now treated like any other failed fetch — the last known value is kept and the log says which sensor it was:

[BATTERY-IF] HOMEASSISTANT - Error fetching battery SOC:
  sensor returned an empty state. Failure count: 1/5. Using last known SOC = 42%.

After five failures in a row the SOC falls back to 5 % so the optimizer works from a safe assumption rather than a stale one. If the message repeats, the entity itself is the problem — check it in Home Assistant or OpenHAB.

Home Assistant history times out on startup

On a large recorder database — MariaDB with years of history is the usual case — building the load profile could flood Home Assistant with requests until they timed out:

[LOAD-IF] Request failed after 5 attempts for
  http://homeassistant:8123/api/history/period/2026-09-12T00:00:00
[LOAD-IF] DATA ERROR household load smaller than controllables
[BATTERY-IF] HOMEASSISTANT - Error fetching battery SOC: Request timed out.

The load profile is built from four fixed days of history — the same weekday one and two weeks back, plus the following day — so it only changes at midnight. It is now built once per day and held, instead of being rebuilt on every optimizer run, and each sensor's history is fetched once for the whole day instead of once per hourly slot. In the log you should see [LOAD-IF] creating load profile for weekdays … once a day, not every few minutes.

Nothing to configure. If you still see the messages above, the recorder itself is the bottleneck — check its purge settings.

Older days come back empty

Home Assistant's recorder purges detailed state history after purge_keep_days (10 by default), while the load profile looks back 14 days. For days whose history is gone, EOS Connect falls back to recorder statistics, which are kept indefinitely.

That fallback calls the recorder.get_statistics action, so the long-lived access token needs permission to call services. On a Home Assistant too old to offer it, the log says so once and the profile simply uses the days it can still read.

Reading the log

Set log_level: debug (or EOS_LOG_LEVEL=debug) and watch the startup sequence: it reports the selected optimizer backend, the solver binary, every interface it constructed, and every configured sensor it could not read. The web UI exposes the same log, with alerts filtered separately.

Still stuck

Turn the log level up first — the startup sequence names the optimizer backend, the solver binary, every interface it built and every configured sensor it could not read, which is usually the answer on its own.

  • Discussions — ask a question.
  • Issues — report a bug. Menu › Bug Report in the web UI collects the version, the configuration and the recent log for you.