I think this is a really simple fix. Can you try out v1.1.0-beta.1 please? If you’re using HACS you can just go into HACS, find the integration and click redownload.
I have just installed the beta and tried adding a second account/charger and interestingly is comes up with the message “Unknown error occurred”, but when I click OK it has added the charger, but it seems to be a duplicate of the first one, rather than the new charger (checking the serial numbers).
Let me know if there is anything I can do to help diagnose the problem?
@dan-r Loving the intergration. Only thing I’ve been able to find that will allow me to control with HA but one question, have you worked out a way to use the CT Clamp data from the Ohme Pro? Would love to use that with my HA as we have a clamp on our incomes
So it would be possible, yes, but there are a couple of steps to go through to get it working. The CT only provides current (A) and you need voltage to give you a power reading (kW), then need to add time to get that into an energy reading (kWh).
Annoyingly the voltage reading from Ohme only comes when you are charging, but we can just use a static value of 240 for this.
If I was doing this, from Devices and Services > Helpers:
Make a new Template sensor called Ohme CT Power, with the content {{ states("sensor.ohme_home_pro_ct_current") | float * 240 }} (Make sure the entity name matches your setup). Unit of measurement set to W (Watt)
Create an Integral sensor called Ohme CT Energy, with Ohme CT Power as the input. Time unit needs to be hours, scale unit as kilo.
Then you should be able to add the Ohme CT Energy entity to the energy dashboard. I’ve done a test in my Home Assistant and it seems to work as above. Not sure how accurate it will be as there are a few places inaccuracies can come from:
Base CT reading is only accurate to 1 d.p
Voltage is assumed so this could skew the readings slightly
The CT reading is only updated every minute (I think), so particularly spiky loads might not reflect well.
The ‘Integration method’ option from step 2 may be worth tweaking. My maths isn’t good enough to evaluate the suitability of each of these
I’m also currently working on contributing the Ohme integration as a core Home Assistant integration. The integration has been very heavily reworked to match the coding standards and requirements of Home Assistant so I expect it’ll take a while to catch up with the custom integration (PR), but should already be more stable and robust.
Users of the custom integration will see no difference as the custom version will override the core one, but the custom integration will be retired when core starts to approach feature parity.
Just saw the news that this integration is being added as an official one in 2025.1, congrats @dan-r! I really appreciate all the hard work you’ve put into this.
I moved from the HACS integration to the core integration but quickly moved back as the core integration is missing several entities related to charge slots that I use in automations.
I think I’ll stay with the HACS integration for now.
Does anyone know if it’s possible to setup/configure Predbat with no PV or battery storage? I want to be able to use it for the the peak/off peak electric setting of HA functionality, specifically for when additional slots become available while using an Ohme charger (not car integrated) and those slots end/start outside of the 0/30 minute times. I have tried to do automations based on Charge Slot Active however if a slot starts at :15 mins past the hour HA is recording electric consumption at peak for the first 15 minutes. Vice versa, if a slot ends at :30 minutes, because the recorded time of end of charge slot active turns of a few seconds after the half hour mark HA automation keeps electric at off peak. My trigger to electric back to peak did have the following trigger which just doesn’t work:
Think I have created a new sensor in HA directly (instead of using Predbat) to allow other automations to control peak/off peak especially when a new charge slot starts/ends mid way through a half hour slot. With help from AI (which I know a lot of people are against) I have the following code. In the link I have given more details and debugging code to check various scenarios but to summarise:
Core Features
Processes time slots from Ohme EV charger integration
Converts time slots to rounded half-hour boundaries
Handles multiple slots per day
Manages overnight periods
Graceful handling of unavailable/unknown states
Time Rounding Rules
Start Times:
Before :30 → rounds down to :00 (e.g., 16:25 → 16:00)
After :30 → rounds to :30 (e.g., 16:45 → 16:30)
End Times:
Before :30 → rounds to :30 (e.g., 22:15 → 22:30)
After :30 → rounds up to next hour (e.g., 22:35 → 23:00)
Error Handling
Manages unavailable sensor states
Handles unknown states
Validates time slot formats
Manages overnight period edge cases
template:
- binary_sensor:
- name: "EV Charging Active Period Rounded"
unique_id: ev_charging_active_period_rounded
state: >-
{% set slots = states('sensor.ohme_home_go_charge_slots') %}
{% if slots == 'unavailable' or slots == 'unknown' %}
{{ false }}
{% else %}
{% set now_time = now().strftime('%H:%M') %}
{% set ns = namespace(is_active=false) %}
{% for slot in slots.split(', ') %}
{% set start_time, end_time = slot.split('-') %}
{# Round start time down to hour if before :30, else round to :30 #}
{% set start_hour = start_time.split(':')[0]|int %}
{% set start_minute = start_time.split(':')[1]|int %}
{% if start_minute < 30 %}
{% set rounded_start = '%02d:00' % start_hour %}
{% else %}
{% set rounded_start = '%02d:30' % start_hour %}
{% endif %}
{# Round end time up to next hour if after :30, else round to :30 #}
{% set end_hour = end_time.split(':')[0]|int %}
{% set end_minute = end_time.split(':')[1]|int %}
{% if end_minute > 30 %}
{% set rounded_end = '%02d:00' % ((end_hour + 1) % 24) %}
{% else %}
{% set rounded_end = '%02d:30' % end_hour %}
{% endif %}
{# Convert all times to minutes for comparison #}
{% set current_minutes = now_time.split(':')[0]|int * 60 + now_time.split(':')[1]|int %}
{% set start_minutes = rounded_start.split(':')[0]|int * 60 + rounded_start.split(':')[1]|int %}
{% set end_minutes = rounded_end.split(':')[0]|int * 60 + rounded_end.split(':')[1]|int %}
{% if start_minutes > end_minutes %}
{% if current_minutes >= start_minutes or current_minutes <= end_minutes %}
{% set ns.is_active = true %}
{% endif %}
{% else %}
{% if current_minutes >= start_minutes and current_minutes <= end_minutes %}
{% set ns.is_active = true %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.is_active }}
{% endif %}
attributes:
current_time: "{{ now().strftime('%H:%M') }}"
slots: "{{ states('sensor.ohme_home_go_charge_slots') }}"
sensor_state: >-
{% if states('sensor.ohme_home_go_charge_slots') in ['unavailable', 'unknown'] %}
{{ states('sensor.ohme_home_go_charge_slots') }}
{% else %}
valid
{% endif %}