Ohme car charger integration

Dan,
Sorry dont think I replied. Can you share your automation?

This is what I’m trying to achieve, i’m sure its a stupid syntax error, any ideas?

Its supposed to be setting number.ohme_target_percent =number.ohme_target_percent - sensor.polestar_battery_charge_level

Thanks

action: number.set_value
metadata: {}
data:
  value: "{{number.ohme_target_percent - sensor.polestar_battery_charge_level}}"
target:
  entity_id: number.ohme_target_percent

I have been using this integration for quite some time and it is great.

We have just had a second Ohme Charger Installed that is registered to a different e-mail address/account.

Is it possible to add a second instance of a charger to the Integration? When I try it comes up with a message “already_configured”

I’m in the process of rewriting mine - I’ll drop it here when I get a change (hopefully tonight)

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.

Thanks Dan!

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?

Update: I just tried deleting the charger and adding back in again and it appears to have worked

Sorry, spoke too soon, seems it didn’t add the second charger, but overwrote the original one, so have two duplicate new chargers

I signed into ohme with Google. It doesn’t seem to link with home assistant. Is there another way to link it?

@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

CT clamp readings are shown if your device supports it. From my Home Pro:

image

Yes! Thank you have found that one now. Any way to get it linked with Consumed energy?

Basically wanted to avoid having an extra CT clamp on my main as the Ohme already has one!

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:

  1. 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)
  2. 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 :slight_smile:

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.

1 Like

I was able to use Title – Ohme to add a password for email sign-in and did not even need to touch the google id method for the app.

1 Like

congrats @dan-r As a fellow maintainer, I share your pain on the coding standards, but it’s a big achievement.

1 Like

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.

1 Like

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:

wait_for_trigger:
  - minutes: /30
    trigger: time_pattern
continue_on_timeout: false

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 %}

See Octopus cheap rate 30 minute binary sensor · Issue #59 · dan-r/HomeAssistant-Ohme · GitHub for more details