Skip to content

v8.39.4: charge/discharge curve fitter and "Calculate yesterday: No soc_kw_h0 data" warnings firing every cycle; savings_total_* cumulatives stuck #3936

@nikhalton123

Description

@nikhalton123

Describe the bug

After auto-update from v8.39.3 to v8.39.4, every Predbat cycle produces three repeating warnings:

Warn: Cannot find battery charge curve (no full rate charge curve found for battery to full), one of the required settings for soc_kwh, charge_rate, battery_power and predbat.status do not have history, check apps.yaml
Warn: Cannot find battery discharge curve (no full rate discharge curve found for battery to empty), one of the required settings for soc_kwh, discharge_rate, battery_power and predbat.status do not have history, check apps.yaml
Warn: Calculate yesterday: No soc_kw_h0 data for yesterday

Operational consequences:

  • predbat.savings_yesterday_predbat, cost_yesterday, cost_yesterday_car, cost_yesterday_import, cost_yesterday_export all in unavailable state in HA (entity registry restored vs v8.39.3 where they 404'd entirely — partial improvement from v8.39.4 vs v8.39.3, but values never populate).
  • predbat.savings_total_predbat, savings_total_pvbat, savings_total_actual cumulatives no longer increment. Last state-value change: 2026-05-16T17:24 UTC, right around v8.39.4 install time.
  • Forward-projection (cost_today, compare_tariff_*, plan computation) all healthy. Predbat continues to produce plans and control the inverter.
  • binary_sensor.predbat_components_healthy = on, error_count = 0, ha_history = "running" — Predbat's self-monitoring doesn't reflect the cascade failure.

Suspected root cause: the new battery-degradation calculation logic in v8.39.4 (PRs #3926, #3932) appears to require evidence of a clean "charge to full at maximum rate" event in the recent history window for curve derivation. With realistic per-slot Predbat planning (targets driven by cost optimisation — e.g. today's plan target is 71%), the battery is rarely if ever driven from a low SOC to 100% at max rate in real operation, so the curve-fitter rejects valid 8-day history. The same soc_kwh history validation appears to gate Calculate yesterday, cascading into the stuck _yesterday_* family and frozen cumulatives.

Manual addon restart (2026-05-17 14:33 UTC) did NOT clear the warnings.

Expected behaviour

  • predbat.savings_yesterday_predbat and the cost_yesterday_* family populate with values after each midnight roll-up.
  • predbat.savings_total_predbat / savings_total_pvbat / savings_total_actual continue to increment daily.
  • Charge/discharge curve fitter accepts partial-cycle history data when full-cycle data isn't available, or falls back gracefully without warning every cycle.
  • binary_sensor.predbat_components_healthy reflects validation failures (not just connection failures) so the cascade is visible to monitoring automations.

Predbat version

v8.39.4 (verified via predbat.status.version; addon wrapper v1.7.1)

Environment details

  • Inverter and battery setup: GivEnergy ED2248G523 hybrid inverter, 9.52 kWh battery (single inverter, num_inverters: 1); controlled via GivTCP REST API
  • Standard HAOS installer or Docker: HA OS Green (HAOS), HA Core 2026.5.0
  • Anything else:
    • Tariff: Octopus Flux (peak 16:00–19:00 @ 28.15p, off-peak 21.11p)
    • num_cars: 0 — EV (Hyundai IONIQ 5 via Ohme Home Pro) is grid-direct and invisible to the inverter's CT clamp; HA controls Ohme charging independently
    • Predbat mode: Control charge & discharge
    • 8 days of HA recorder history available (recorder.purge_keep_days: 10)
    • Solcast cloud forecast input; no Forecast.Solar
    • Ohme cloud credentials commented out in apps.yaml (ohme_login/ohme_password)
    • predbat_pv_scaling: 0.78, predbat_pv_metric10_weight: 0.30 (non-default — calibrated to local Solcast over-prediction baseline)
    • predbat_set_reserve_min: 4 (95% usable battery, structural Flux choice)

Screenshots

[To attach before posting: predbat HTML plan tile + Predbat config screen + battery SOC chart for past 8 days showing partial-cycle charging pattern]

Log file

[To attach: predbat.log captured after the 2026-05-17 14:33 UTC manual restart — covers multiple cycles all reproducing the three warnings.]

Key log lines from the post-restart cycle at 15:33 BST 2026-05-17:

15:33:02 — Inverter 0 SoC: 5.33kW 56%, current charge rate 3600W, current discharge rate 200W, current battery power -3464W
15:33:02 — Looking for charge curve with sensors sensor.ed2248g523_soc_kwh, number.ed2248g523_battery_charge_rate, predbat.status and sensor.ed2248g523_battery_power
15:33:12 — Looking for charge curve, have found 8.0 days of history data, max days 8
15:33:12 — Warn: Cannot find battery charge curve (no full rate charge curve found for battery to full)…
15:33:18 — Calculating data from yesterday for savings calculation
15:33:18 — Yesterday basic charge window best: [{'start': 0, 'end': 960, 'average': 0.21}, {'start': 1140, 'end': 2370, 'average': 0.21}] charge limit best: [9.52, 9.52] based on max charge slots 1
15:33:18 — Warn: Calculate yesterday: No soc_kw_h0 data for yesterday

REST data path is healthy; HA history path returns 8 days of data but the new validation logic rejects it.

Predbat debug yaml file

[To attach: predbat_debug.yaml captured per the Web UI Dash tab instructions, renamed to predbat_debug.yaml.txt.]

predbat.log

predbat_debug.yaml.txt

Image Image

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions