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.