Netatmo thermostat boost mode

Hello there, I have a Netatmo smart thermostat that controls my heating system and one thing that I found lacking is a Boost mode. Most of the times I just want the heating running for X minutes rather that setting the thermostat to a higher value and making the ambient too hot.
Thus, I hope this will help somebody.

I’ll try to do a newbie step by step guide, as I would have hoped to find.

Last but not least, this is almost entirely based on the scripts from Nest Thermostat - Boost Mode Script & Automation by @apmillen. Thank you.

The end result will look like this:

I would like to thank my family for their support and … oh wait, this is not a book.
.
.

Heating Boost script
This is the main script that activates the boost.
Go to Configuration → Entities → Search for “Netatmo Cloud” and get its entity ID.

Go to Configuration → Scripts → Add script → Select “Edit in YAML” on the top right dialog.
Paste (and update) the following:

# !! Replace "netatmo.sufra" with your netatmo entity ID you got earlier.

alias: Heating Boost
sequence:
    # Save the current schedule temperature as previous target temperature.
    # Not used in my version but kept just in case you decide to.
  - service: input_number.set_value
    data_template:
      entity_id: input_number.previous_target
      value: '{{ states.climate.netatmo_sufra.attributes.temperature }}'   # <--------

    # Save the new boost temp based on current Room temp + 1.
  - service: input_number.set_value
    data_template:
      entity_id: input_number.boost_target
      value: >-
        {{ states.climate.netatmo_sufra.attributes.current_temperature | float +
        1 }}    
# <-------------^^^

# This is just for example purposes - I have a "normally on" motor valve for the hot water cylinder
# that will close the circuit via a Shelly relay so that only radiators heat up.
#  - type: turn_on
#    device_id: 00348ac0a3d91cf5118effef74bc5a3e
#    entity_id: switch.shelly1_valve_hw
#    domain: switch

    # Set the thermostat to match boost target.
  - service: climate.set_temperature
    data_template:
      hvac_mode: heat
      temperature: '{{ states(''input_number.boost_target'') }}'
    entity_id: climate.netatmo_sufra    #<-------

    # Turn on boost active boolean.
  - service: input_boolean.turn_on
    data:
      entity_id: input_boolean.boost_active

   # Wait for whatever amount of minutes you selected in the slider.
  - delay:
      minutes: '{{ states(''input_number.boost_duration'') | int }}'
mode: single

.
.
Heating Boost Finish script
This turns off the boost once the duration expires.
Go to Configuration → Entities → Search for “Heating Boost” and get its entity ID.

Go to Configuration → Automations → Add automation ->Select “Edit in YAML” on the top right dialog.
Paste (and update) the following:

alias: Heating Boost Finish
# Stop the Heating Boost script when its time is up.
trigger:
  - platform: state
# ! Replace this with the entity ID you got above for the Heating Boost script
    entity_id: script.1625783840608    # <--------------------
    from: 'on'
    to: 'off'
condition:
  - condition: state
    entity_id: input_boolean.boost_active
    state: 'on'

# Set the Netatmo thermostat back to Schedule mode.
# The device_id needs to be replaced, see below how to
action:
  - service: climate.set_preset_mode
    data:
      preset_mode: Schedule
    target:
      device_id: DELETE_THIS     # <---------------- see below how to replace
  - delay: '00:00:02'

# The hot water example I was talking about earlier
#  - type: turn_off
#    device_id: 00348ac0a3d91cf5118effef74bc5a3e
#    entity_id: switch.shelly1_valve_hw
#    domain: switch

# Turn off the Boost active status.
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.boost_active
mode: single

In the above code you need to replace device_id with your own.
After you paste it, switch to the “Visual editor” in upper right corner. Under the Actions section, in Targets, delete the device with the “DELETE_THIS” name, click on “Pick device” (the blue icon), and pick your Netatmo. Now you can save the automation.
.
.

Heating Boost Cancelation script
This will cancel the script if the thermostat changes after the Boost was turned on (by canceling the new temperature directly from the Netatmo app for example).
Go to Configuration → Automations → Add automation → Select “Edit in YAML” on the top right dialog.
Paste (and update) the following:

alias: Heating Boost Cancelation
# Activates if Thermostat preset changes from Manual to Schedule
trigger:
  - platform: state
    entity_id: climate.netatmo_sufra     #<--------
    attribute: preset_mode
    from: manual
    to: Schedule
# only if the Heating Boost script was running
condition:
  - condition: state
    entity_id: input_boolean.boost_active
    state: 'on'

# Turns off the Heating Boost script.
# ! Replace this with the entity ID you got above for the Heating Boost script
action:
  - service: script.turn_off
    data:
      entity_id: script.1625783840608   #<------------
  - delay: '00:00:02'

# Resets the boost_active status
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.boost_active
mode: single

.
.

Lovelace button
Go to your Dashboard → Select “Edit Dashboard” on the top right dialog → Select “Add Card” → Select “Button” → Click “Show code editor”.
NOTE: I use the following custom Lovelace addon: GitHub - benct/lovelace-multiple-entity-row: Show multiple entity states and attributes on entity rows in Home Assistant's Lovelace UI, so some options below will not do anything if you don’t have this (i.e. the confirmation part).
Paste (and update) the following:

type: entities
show_header_toggle: false
state_color: true
title: Heating Boost
entities:
# Boost duration slider
  - entity: input_number.boost_duration

# Ask for confirmation before running the script.
# ! Replace this with the entity ID you got above for the Heating Boost script
  - entity: script.1625783840608       #<----------
    tap_action:
      action: toggle
      confirmation:
        text: Confirmation required
    action_name: .
    name: Run Heating Boost

# Show the old temp target if you want. I don't use it anymore.
  - entity: input_number.previous_target
    type: 'custom:multiple-entity-row'

# Show the new temp target
  - entity: input_number.boost_target
    type: 'custom:multiple-entity-row'

# Show the boost status
  - entity: input_boolean.boost_active
    type: 'custom:multiple-entity-row'
    state_color: true
    show_state: false

.
.

One last thing left.
SSH to your Home Assistant instance and open up configuration.yaml.
Add the following:

input_boolean:
  boost_active:
    name: Boost Active
    icon: mdi:fire

#  These register the temp values and duration.
input_number:
  boost_target:
    name: Boost Target Temperature
    min: 16.0
    max: 25.0
    step: 0.5
    unit_of_measurement: '°C'
    mode: box

  previous_target:
    name: Previous Target Temperature
    min: 16.0
    max: 25.0
    step: 0.5
    unit_of_measurement: '°C'
    mode: box

  boost_duration:
    name: Boost Duration
    min: 5
    max: 30
    step: 5
    unit_of_measurement: 'mins'

That should be it (in case I didn’t forget anything).
Have fun.

5 Likes

Hi, i am trying to follow this along but getting very confused as to why the Boost Temp is then set to current temp +1?

I probably wrongly took it as the input_number.boost_target would be set by UI?

Hi, Boost temp is supposed to be dynamically set by taking the current environment temperature (not the schedule temperature) and just incrementing it by 1. You can increment it by whatever amount you like but the idea is not to cook yourself in case things go wrong :smiley:

1 Like

Ah perfect thank you, makes sense.
Actually using a Nest Thermostat on the new integration and amazed how dumb it is. This boost for time period instead of specific temp is a great feature its missing by default.
Thanks again for explaining.

1 Like

Sorry, this is coming on well for me. However if i turn off the input_boolean.boost_active i want to stop the script.
I thought i understood the automations enough but clearly i don’t as my boolen triggers no change. Can you help point me to where i should be adding this?

hi @bighead85, setting input_boolean.boost_active to off manually will not do anything because you don’t have any automations to handle that (and will actually break the existing two automations).

input_boolean.boost_active is just used as a condition for these two automations, “Heating Boost Cancelation” and “Heating Boost Finish”.

In order to stop the heating boost you would run the “Heating Boost Finish” automation, and if you want a button for it you would add something like this in your lovelace card:

image

#add this to the main card that has the run heating boost, duration, etc
#replace entity name with your automation name for boost finish
#this one requires the multiple-entity-row plugin
      - entity: automation.heating_boost_finish
        type: 'custom:multiple-entity-row'
        tap_action:
          action: call-service
          service: automation.trigger
          target:
            entity_id: automation.heating_boost_finish
        icon: 'mdi:stop'
        name: Stop Heating Boost
        show_state: false

Or as a new, dedicated button:

image

type: button
tap_action:
  action: call-service
  service: automation.trigger
  service_data: {}
  target:
    entity_id: automation.heating_boost_finish
icon: 'mdi:stop'
name: Stop Heating Boost
show_state: false
show_icon: true

Play around with it and adjust according to your liking.

1 Like

Very Impressive Automation for Netatmo , thanks but…

i can’t find the device_id of the netatmo thermostat in your ‘heating boost finish script’
where you set preset_mode to schedule ?

is it possible to use the entity_id: climate.netatmo_sufra ? if yes, how to code it ?

Is it possible to access to the details of planning ? maybe via webhook or else

Many thanks (sorry for my poor english)

Hi @Jcarlier, yes this one is a bit tricky. I realize now that my instructions for this one are not the best.
So you start by creating the new automation, and paste this:

alias: Heating Boost Finish
# Stop the Heating Boost script when its time is up.
trigger:
  - platform: state
# ! Replace this with the entity ID you got above for the Heating Boost script
    entity_id: script.1625783840608
    from: 'on'
    to: 'off'
condition:
  - condition: state
    entity_id: input_boolean.boost_active
    state: 'on'

# Set the Netatmo thermostat back to Schedule mode.
# The device_id needs to be replaced, see below how to
action:
  - service: climate.set_preset_mode
    data:
      preset_mode: Schedule
    target:
      device_id: DELETE_THIS
  - delay: '00:00:02'

# The hot water example I was talking about earlier
#  - type: turn_off
#    device_id: 00348ac0a3d91cf5118effef74bc5a3e
#    entity_id: switch.shelly1_valve_hw
#    domain: switch

# Turn off the Boost active status.
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.boost_active
mode: single

Now switch the editor to “Visual editor” in upper right corner.
And in Targets, delete the device with the “DELETE_THIS” name, click on Pick device (the blue icon), and pick your Netatmo.
Like this:

Now you can save it and you should be good to go.

@gfrhg4r3 i just discovered this thread today. Made some slight tweaks (as I have a split heating system so I have 2 Nest thermostats; one upstairs and one downstairs) and used Helpers rather than hard coding the input_numbers and this has worked brilliantly. Thanks for your time and effort writing this up.

I wonder if it is possible to add another field that has a countdown timer so the user knows how long the boost has left to run?

1 Like

Hi, really glad you found this useful.

Re. timer, sure:

Gotta love HA :smiley:

Need to do the following:

  1. in the UI, go to Configuration → Automations → Helpers → Add Helper → Timer
    Name: heating_boost_timer
    Press create.
  2. go to Configuration → Automations → Scripts → Edit the Heating Boost script → Go to YAML mode and just before the line - service: input_boolean.turn_on add the following:
  - service: timer.start
    data_template:
      entity_id: timer.heating_boost_timer
      duration: 00:{{ states.input_number.boost_duration.state | int }}:00

Caveat: above works only if your duration range is in minutes, I don’t think it will work if your slider allows hour ranges. But you can experiment further as I only allow max 30 minutes in mine.

  1. go to Configuration → Automations → Heating Boost Finish → Go to YAML mode and at the end add:
  - service: timer.finish
    data:
      entity_id: timer.heating_boost_timer
  1. go to your Lovelace Dashboard and add to your list of entities:
  - entity: timer.heating_boost_timer
2 Likes

This is working like a charm, but I have notice that if I have some valvles in boost active, when the boost is over all the valvles are set to “Schedule”. I would like to set to schedule only the one who has finished the boost timer.
This is my finish automation yml:

alias: Heating Boost Finish Edu
description: ""
trigger:
  - platform: state
    entity_id: script.heating_boost_con_grados
    from: "on"
    to: "off"
condition:
  - condition: state
    entity_id: input_boolean.boost_active_edu
    state: "on"
action:
  - device_id: climate.cuarto_edu
    domain: climate
    entity_id: climate.cuarto_edu
    type: set_preset_mode
    preset_mode: Schedule
    enabled: true
  - delay: "00:00:02"
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.boost_active_edu
mode: single

Sorry about my english :slight_smile: I hope u can understand what I mean.

Hi, by “valves” do you mean you have multiple thermostats? Can you show what else is set to “Schedule”?

I have 1 main thermostat and 1 radiator valvle. Both of them are set to Schedule when the boost ends.

Thx for the quick reply!!

Did you create boost scripts for both climate.general_casa and climate.cuarto_edu or do you have just one script calling both climates?

I have created separated scripts, one for each Identity.

@azarpar I’m not sure how this could be happening, can you share the finish script for the other valve as well?

@gfrhg4r3 Of course!

alias: Heating boost finish casa
description: ""
trigger:
  - platform: state
    entity_id: script.heating_boost_con_grados_casa
    from: "on"
    to: "off"
condition:
  - condition: state
    entity_id: input_boolean.boost_active_casa
    state: "on"
action:
  - device_id: 067829f17bf28d60ea6d7d286b8690f4
    domain: climate
    entity_id: climate.general_casa
    type: set_preset_mode
    preset_mode: Schedule
    enabled: true
  - service: climate.set_preset_mode
    data:
      preset_mode: Schedule
    target:
      device_id: climate.general_casa
    enabled: false
  - delay: "00:00:02"
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.boost_active_casa
mode: single

@azarpar so what is happening is you are using the same trigger for both scripts:

trigger:
  - platform: state
    entity_id: script.heating_boost_con_grados
    from: "on"
    to: "off"

I can imagine if both climates are boosted at the same time, they will be set to Schedule because the condition input_boolean.boost_active for both casa and edu will be true.

Is script.heating_boost_con_grados_casa controlling both climates? You previously answered you have separate ones, in which case you should update the trigger so that it is unique to the climate being controlled.