Octopus Energy - Intelligent Tariff

@joelblogs I went onto IO today and have added the IO integration (@megakid thank you for the hard work) however when I add the automation I get ‘0p/kWh’ in the notification. I believe it is due to this above sensor and not having it. Any pointers as to what the sensor is/how it was created? And what should be used instead?

Hi all. Shoutout to @megakid for this great software.
I admit it, I use node-red for everything, I tried HA but I prefer the pain which node-red provides in spades.
I’ve nicked ideas from this code and cobbled a working solution together in node-red. My plan is to switch my zappi into Eco+ mode outside the charging windows, to allow Solar based charging, and to avoid the few minutes of charging whenever you plug in.
Will I get shot by Octopus for this?
Do they remove the tariff if you are seen to be controlling things?

Has anyone had a problem with the initial set up? Entering the API key and account ID just results in the setup wizard restarting with empty fields?

Edit: Just to update, this is the error on the most recent version of HA. Also logged on Github

Unexpected exception
Traceback (most recent call last):
  File "/config/custom_components/octopus_intelligent/config_flow.py", line 61, in async_step_user
    await self.hass.async_add_executor_job(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 587, in async_add_executor_job
    task = self.loop.run_in_executor(None, target, *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 818, in run_in_executor
    self._check_callback(func, 'run_in_executor')
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 773, in _check_callback
    raise TypeError(
TypeError: coroutines cannot be used with run_in_executor()

Thanks for the template for the planned slots.

I saw a couple comments about no multi-line support and note your use of the clock emoji.

Unsure if this is a recent thing, but I’ve added your template as a markdown card within a vertical stack and do get the multi line for the planned slots. Might be useful for others, I also added “{{”\n"}}" having read that this is a new line notation.

I’ve also added the amount of charge expected in each slot (for my own curiosity).

4 Likes

I found that Octopus wouldn’t get my charging schedule if the Zappi was set to anything other than the “dumb” Fast mode.
I put a toggle to switch “solar charging” and then an automation to turn off Octopus Smart Charging, set the mode of the Zappi and then to toggle disable / enable scheduled charging on my Tesla.
With setting the scheduled charging on my car Octopus goes and gets the charging schedule without drawing any power from the Zappi and only starts charging after the scheduled charging time – I’d assume something like this is also available for non teslas.
Octopus won’t be mad as it’s “Smart Charging” is disabled before the Zappi mode is changed.
I’m still relatively new to all this and this is my first comment so others may have a much more eloquent solution.

guys, sorry if anyone has already mentioned this, but I have this question:

My setup is following (equipment wise):

  • Growatt Inverter
  • PodPoint home charger
  • Tesla vehicle
  • IO

Can anyone guide me toward the right direction how to create an automation (or maybe even have done themselves) that:

IF → IO slots allocated
THEN → set Growatt to “Battery first” setting for that slot.

THEN

IF → IO slots expired
THEN → Revert Growatt to “Load First”

Sorry for necroposting this thread @Dave888, what integration are you using to control the PW, I moved from the Tesla Energy Plan yesterday to Intelligent Octopus and would like to tinker with the PW, cheers Neil

`

{% if state_attr('binary_sensor.octopus_intelligent_slot', 'plannedDispatches') | length > 0 %}
{% for dispatch in state_attr('binary_sensor.octopus_intelligent_slot', 'plannedDispatches') -%}
⏰ {{ (dispatch.startDtUtc | as_datetime | as_local).strftime('%H:%M') }} to {{ (dispatch.endDtUtc | as_datetime | as_local).strftime('%H:%M') }}
{{ "\n" }}
{%- endfor %}
{%- else -%}
⏰ None
{%- endif %}

1 Like

do you mean you get cheap tariff outside of the 2330-530 for the house consumption even if the car doesnt charge?

I hope you have the bill now, could you please let us know what rate you were charged for the house consumption between 9.30am and 11am on that day? Thank you

I’m getting really thrown by this.

At the moment the car is not plugged in, and the intelligent and planned discharge flags have both turned on.

However earlier in the day when I was plugged in and the Ohme charger decided to charge (and earlier in the week as well) these haven’t registered.

Obviously the delay to when i actually get a bill and can check the rates is a little concerning here - is anyone else seeing these behave peculiarly?
Fortunately they’ve been at times when I can manually stop the home battery draining into the car (and can in fact charge it), and the charging has all been at times of very high renewables on the grid, so I can well imagine that they are actually intelligent slots - but without them showing as such it is quite hard to set up appropriate automations.

I have my home battery set to charge overnight in the regular off-peak times in any case.
I think I have understood the documentation such that I can use a transition of octopus_intelligent_planned_dispatch_slot to on to start charging my home battery? (and this is only outside the standard off-peak slot?)
…and the transition to ‘off’ to stop charging.

I think charging (which is easier than disabling the battery in my integration, anyway), is probably better given the feed in rate is below the off-peak rate in any case!

“you always get cheap rate from 23:30 to 05:30. If it shows charging slots outside of this core time, you get those on the cheap rate too” That is absolutely correct! Unfortunately the SMETS2 and “Glow” IHD do not support dynamic tariff rates. On my IHD it is just set to 10p/kWh

  • Intelligent Octopus gives 23:30-05:30 as cheap rate EVERY NIGHT (Whole House) and during EV Charging (Whole House).
  • In the Octopus app you configure your car or charger, but not both. In my case I have a dumb charger and a Tesla, so Octopus have the Tesla account token configured. When you plug in the car Octopus determine the charging times and then control the car charging. All you configure (in the Octopus App) is the time you want the car ready by and the charge percentage that you want by that time. Octopus do the rest. If you configure an impossible charge schedule the app will tell you that the desired charge has not been reached. It also tells you if thre car charge limit is set lower than the in the Octopus App.
  • Right now only one car is supported (we have two Teslas) so the other car (My Model S) just uses 23:30-05:30, but that’s not a problem as it has lifetime free Supercharging in any case.
  • The car charging schedule gives the WHOLE HOUSE cheap rates during those times.

What I want to do is two things:

  1. Switch the PowerWall to charging at the variable off-peak times so the car charging does not drain the PowerWall
  2. Switch on my heat pump to charge the thermal energy store at these times
  3. Switch the Model S to charging (but there is no longer an official Tesla HA integration)

A switch that detects Octopus Intelligent cheap rate would be perfect. Unfortunatly the SMETS2 SMART Meter does not do this, it just provides the fixed tariff times. Glow does not suport variable tariff times, I use this for the HA integration. Even the standing charge is manually configured at Glow.

I had one idea of how to detect cheap rate: A KNX current transformer on the supply to the car charger (easy as I have one spare) to detect charging, but that is a bit of a work-round, perhaps it can be done via the Octopus API, but I’ve not investigated this yet.

In Bromley (UK Power Networks) the current IO tariff is 7.5p/kWh (off-peak) and 31p/kWh (peak)

How long does it take for the planned and completed dispatches data to populate on the Octopus APIs?

I’m trying to create some automation (in python not HA at the moment), that would want to know if a low tariff point is active

But it seems that the planned is not populating, and the completed has quite a long delay

Any thoughts?

What you are describing is exactly what I have done. I use the Octopus Intelligent integration in this thread to trigger charging of my Tesla Powerwall (using the unofficial Tesla integration in HACS). Then I also have my heat pump configured to heat water and heat the house in the cheap overnight period (unfortunately no Home Assistant integration for it yet).

If the EV is plugged in and a cheap rate is available during the day I set the powerwall to charge until the slot ends - that way I can charge at 7.5p and export any surplus later in the evening for 15p. If there are no cheap slots during the day then the battery just about covers household consumption so I can stay mostly off grid during the peak rate period.

I’m also planning to control washing machine, dishwasher and tumble dryer, delaying their start until a cheap rate is in effect, but for that I have to train my family a bit first :slight_smile:

1 Like

Hi Simon,

I have the Octopus Intelligent integration working now. Works really well!

As you say, similar here. Reading the Heat Pump (in my case Mitsubishi Ecodan 2010 FTC2) has three contacts: Heating Call, Hot Water Call and FTC Boost (overrides the FTC) and calls fixed (configured) flow temperature of 42°C. The radiators are an Rehau underfloor system with 11 zones. There are 4 additional zones; 1 electric towel radiator for each bathroom. In some cases the bathroom thermostats are configured as dual heating sources with a differential of about 1.5°C

The house is all KNX and I have two KNX binary actuators (switches) configured; one to call Hot Water and to call the FTC Boost temperature. The Rehau Zone valves (11) are actuated from a Theben HMT12. Room thermostats are Gira TS3+ controllers with the exception of two bathrooms that have Zennio colour touch screens with presence detection to switch on the mirror lights. Heating call is from the HMT 12 contacts, actuated if any underfloor zones call heat.

Hot water is called each morning at 02:00 on a fixed schedule and switches off at 03:15 or when the target temperature is reached. The FTC2 manages the immersion legionella protection every 15 cycles. Hot Water call is defeated if the lower (250l) tank sensor is above 40°C. This prevents the heat pump heating the tank overnight should there have been adequate solar gain from the solar thermal system.

The solar controller is 2010 Rehau and I have the DL/2 Data logger that interfaces via the LAN to Home Assistant.

So, the heating runs during IO cheap rates, all the zones trigger the “Comfort” thermostat mode, during peak rate the zones go to “frost protect” mode. Having underfloor with insulated concrete beam and block floors upstairs and down means there is adequate thermal capacity to keep the house warm all day (storage heater effect). I’ve not introduced the FTC Boost 42°C mode yet, the idea is to add more heat the the floors if the temperature differential between the set points and actual temperatures meets a certain criteria, for instance predicted weather.

Washing machines/dishwasher is just set to run overnight on their built-in timers. My wife is well used to that! She knows the cheap rate times as it is her Model 3 that’s on the IO. My Model S has free supercharging, so I don’t charge it at home so often. She also unplugs her car if pre-conditioning is needed at peak rate times.

PowerWall charges whenever there is an off-peak slot.

On a sunny day the solar PV helps a lot too. I send virtually nothing to the grid with my old 2.2kWp system.

I’m envious of your underfloor heating setup, I am reliant to heating using radiators to ~21C overnight, and hoping the thermal loss is low enough to keep the house above 18C through to the next off peak slot. Once I can control the heat pump using Home Assistant I’ll be able to top up the heat on some days, but that will depend how generous Octopus are feeling…

The integration here is key to making it all work, so lots of kudos to @megakid !

Absolutely kudos to @megakid!

With radiators you can always add a water or gel heat store on the primary circuit. I was impressed with this solution, about 4 x the capacity per litre of space when compared with water.

https://sunamp.com/en-gb/

Just a quick tip for anyone who might struggle as I did when installing this integration.
The mandatory Account ID you need to supply is not the username you use when logging into the Octopus website, it’s the 10-character account id you will find just under your name on the “My Account” page of the website - mine starts “A-10…” That string doesn’t actually appear anywhere on the API Access page that the integration documentation directs you to for getting your API key.