Skip to content

Ohme: without ohme_control Predbat plans its own car charge that nothing carries out; take the plan from Ohme instead #5399

Description

@springfall2008

Summary

With ohme_automatic: true, ohme_control off and a tariff that is not Octopus Intelligent, Predbat builds its own car charging plan and models it as load, but nothing carries that plan out: Ohme keeps charging to its own schedule. The plan Predbat shows can be completely different from what the charger will do.

When Predbat is not controlling the charger, the car plan should come from Ohme. Today there is no configuration that does this without also treating the slots as Octopus Intelligent dispatches.

What happens

OhmeAPI.automatic_config() sets:

  • car_charging_planned → binary_sensor.predbat_ohme_connected (on whenever a car is plugged in and wants charge)
  • car_charging_soc → sensor.predbat_ohme_battery_percent

octopus_intelligent_slot is only pointed at binary_sensor.predbat_ohme_slot_active when octopus_intelligent_wanted() is true (Intelligent tariff detected, or ohme_automatic_octopus_intelligent: true). Otherwise fetch_sensor_data_car_planning() takes the elif self.car_charging_planned[car_n] or self.car_charging_now[car_n] branch and calls plan_car_charging().

So on any other tariff, plugging the car in makes Predbat plan a charge from the Ohme SoC to the limit, starting in the first available low-rate window. With ohme_control off, that plan is never sent to the charger.

Example (one install, 5 Oct 2026, Cosy-style three-rate tariff, v9.3.x)

Ohme's own session, as published on binary_sensor.predbat_ohme_slot_active:

planned_dispatches: [{start: 2026-10-05T01:18:17+0100, end: 2026-10-05T08:37:28+0100, energy: -56.22, location: AT_HOME}]
sensor.predbat_ohme_status = plugged_in, sensor.predbat_ohme_mode = max_charge, sensor.predbat_ohme_power_watts = 0

Predbat's plan at 08:10 the same morning:

Car 0 plan charging from 28.0kWh to 100.0% (100.0kWh), with slots [...], ready by 07:00:00
Car 0 charging plan is: [{'start': 490, 'end': 780, 'kwh': 35.767, 'average': 31.56, 'cost': 1128.8, 'octopus': False},
                         {'start': 780, 'end': 960, 'kwh': 22.2, 'average': 15.48, 'cost': 343.66, 'octopus': False},
                         {'start': 1140, 'end': 1305, 'kwh': 20.295, 'average': 31.56, 'cost': 640.5, 'octopus': False}]

That is 78 kWh and about £21 of car charging in the plan, with "hold for car" on most of the day's slots, while the charger is drawing 0 W and Ohme's own session ends at 08:37. The plan re-forms every cycle for as long as the car stays plugged in.

Two things make it worse, though neither is the cause:

  • car_charging_battery_size was left at the 100 kWh default, so 28 % was read as 72 kWh to add.
  • The Ohme battery percent is an estimate. On this install it sat at exactly 19 for six days, and read 28 the morning after a 21 kWh session.

Why the existing options do not cover it

Proposal

When ohme_automatic is on, ohme_control is off and the Intelligent wiring is not in use, take the car charging slots from Ohme's session (planned_dispatches on binary_sensor.predbat_ohme_slot_active) as car load only, with no change to import rates, instead of calling plan_car_charging().

This could be the default for that combination, or sit behind a new option (for example ohme_automatic_plan: true) if changing the default is too risky. Either way the docs for ohme_automatic should say which plan the user is looking at.

If Ohme has no session slots, Predbat should plan no car charge, and leave a car that is charging anyway to the existing dynamic load handling.

Related

Code references checked against main at ee401ec: apps/predbat/ohme.py (automatic_config, octopus_intelligent_wanted, control_charge), apps/predbat/fetch.py (fetch_sensor_data_car_planning), apps/predbat/plan.py (plan_car_charging).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BOT_TRIAGEDHas been through the triage botenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions