When the house is empty for a week, your fridge does not need to work as hard. There is no door opening every hour, no
warm groceries going in, and often far less food to keep cold. This recipe gives you a single toggle, Fridge vacation, that eases your LG fridge and freezer up to an energy-saving temperature while you are away and puts them
back exactly as they were the moment you return.
LG fridges expose a power-saving indicator, but it is read-only in Home Assistant: you can see it, you cannot flip it. So rather than pretend to toggle a setting we cannot control, this recipe saves energy the way you actually can, by gently raising the setpoints a couple of degrees and switching rapid cooling off, which is where most of the idle compressor runtime goes.
How it works
Selora AI creates a Fridge vacation toggle (a Home Assistant input_boolean helper). When you turn it on, the
recipe saves your current fridge and freezer setpoints, then raises them to the energy-saving values you chose at
install and turns off rapid cooling if you selected that switch. When you turn it off, it restores those saved
values, so your fridge returns to precisely the temperatures it held before, not a guess.
The saved setpoints live in persistent Home Assistant helpers, not a temporary snapshot, so the restore still works even if Home Assistant restarts partway through a long trip. And if a control happens to be offline when you enable vacation mode, the recipe leaves it alone rather than saving a placeholder, so it will never restore a made-up temperature later.
Keep the energy-saving setpoints sensible. A few degrees warmer is plenty to cut runtime while an empty fridge still stays comfortably food-safe. The defaults, a slightly warmer fridge and freezer, are a conservative starting point you can tune during install.
You enter these setpoints in Fahrenheit by default, and there is a unit selector if you would rather use Celsius. Either way, the recipe converts the value to whatever unit your LG control actually uses and keeps it within the control’s own limits, so the fridge never gets a mismatched or out of range number by mistake.
Adding the toggle to your dashboard
During install, the recipe offers to drop a tap-to-toggle Fridge vacation button straight onto a dashboard. Pick
which dashboard, or skip and add it yourself later. To add it by hand:
- Open the dashboard, then Edit dashboard (top-right pencil) and + Add card.
- Choose the Entity or Button card.
- Set the entity to
input_boolean.fridge_vacation. - Save. Tapping the card now flips vacation mode on and off.
Wiring it to your Away mode
Prefer it hands-free? Point your existing “Away” automation at this toggle. If you already flip an away helper, arm an
alarm, or trigger a location-based scene when you leave, add a single action that turns input_boolean.fridge_vacation
on, and one that turns it off when you get back. The fridge then follows the rest of the house into vacation mode with
nothing extra to remember.
Files Selora AI's pipeline reads to install this recipe. The manifest declares roles, inputs, and integrations; the package files are Jinja-templated YAML applied to Home Assistant.
# Fridge Vacation Mode — one toggle eases the LG fridge/freezer setpoints
# up to an energy-saving level while the home is empty, then restores the
# exact previous setpoints on return.
#
# LG's "Power saving mode" is a read-only sensor in HA, so the recipe can't
# flip it. Instead it saves energy the controllable way: it raises the
# ``number`` temperature setpoints a few degrees and turns rapid cooling
# (the ``switch`` "Express mode") off.
#
# The recipe's toggle is ``input_boolean.fridge_vacation``. Turning it on
# captures the current setpoints (and Express mode) into persistent input
# helpers, then applies the eco values; turning it off restores them so
# nothing is guessed on the way back. Persistent helpers, not a dynamic
# scene: a multi-day vacation can span an HA restart, which would drop a
# scene.create snapshot and strand the fridge at the eco setpoints.
slug: fridge-vacation-mode
version: 1.0.0
title: "LG Fridge: Vacation Mode"
tagline: Flip one toggle before you travel and your LG fridge eases up to an energy-saving temperature; flip it back and it returns to exactly what it was.
description: >-
Creates a Fridge vacation toggle. Turning it on snapshots your current
fridge and freezer setpoints, raises them to the energy-saving values you
chose, and switches rapid cooling off; turning it off restores the
snapshot exactly. LG's power-saving mode is read-only, so the recipe
saves energy through the setpoints instead. Built around the LG ThinQ
integration.
author: Selora AI
released: "2026-07-08"
min_integration_version: "0.12.0"
tags: [kitchen, fridge, lg-thinq, energy]
roles:
# Fridge temperature setpoint — the LG ThinQ "fridge temperature" number.
# Single-select and required: it's the setpoint the recipe raises for the
# bulk of the energy saving, and restores on return.
- id: fridge_temp
title: Fridge temperature control
kind: number
integration: lg_thinq
min_count: 1
max_count: 1
selection: required
description: >-
The fridge compartment temperature control. On an LG fridge this is
the "fridge temperature" number the ThinQ integration exposes.
# Freezer temperature setpoint — optional. Not every install wants to ease
# the freezer (frozen food is less forgiving of a warmer hold), so
# min_count 0. When selected it's snapshotted and eased alongside the
# fridge.
- id: freezer_temp
title: Freezer temperature control
kind: number
integration: lg_thinq
min_count: 0
max_count: 1
selection: required
description: >-
Optional. The freezer temperature control (LG's "freezer
temperature" number). Select it to ease the freezer too; leave empty
to move the fridge setpoint only.
# Express / rapid cooling switch — optional. LG's "Express mode" switch.
# Rapid cooling is the opposite of an energy-saving hold, so vacation mode
# turns it off. min_count 0 for fridges that don't expose it.
- id: express_mode
title: Express / rapid cooling switch
kind: switch
integration: lg_thinq
min_count: 0
max_count: 1
selection: required
description: >-
Optional. The rapid-cooling switch (LG's "Express mode"). Vacation
mode turns it off to stop it fighting the energy-saving hold. Leave
empty if your fridge doesn't expose it.
inputs:
# Unit the eco setpoints below are entered in. Defaults to Fahrenheit.
# The automation normalises from this unit to whatever unit the LG
# control actually reports, so the two need not match. A select (not a
# free string) so the value is always one the template can compare.
- id: temp_unit
type: select
label: Temperature unit
description: >-
The unit the vacation temperatures below are entered in. The recipe
converts to whatever unit your LG control uses, so this is just about
how you prefer to type them.
default: "°F"
choices:
- "°F"
- "°C"
# Energy-saving fridge setpoint applied while away, in the unit chosen
# above (default Fahrenheit). 43°F ≈ 6°C: a few degrees warmer than a
# typical hold, cutting compressor runtime while an empty fridge stays
# food-safe. Normalised to the control's own unit at runtime.
- id: eco_fridge_temp
type: number
label: Vacation fridge temperature
description: >-
The fridge temperature to hold while away, in the unit selected
above. The default (43) is a mild Fahrenheit hold, a few degrees
warmer than normal, that saves energy while the fridge stays
food-safe.
default: 43
# Energy-saving freezer setpoint, in the chosen unit (default Fahrenheit).
# 3°F ≈ -16°C, a modest ease from a typical hold. Only used when the
# freezer control is selected.
- id: eco_freezer_temp
type: number
label: Vacation freezer temperature
description: >-
The freezer temperature to hold while away, in the unit selected
above. The default (3) is a mild Fahrenheit hold. Only applies when a
freezer control is selected.
default: 3
package_files:
- package/helpers/fridge_vacation.yaml.j2
- package/automations/vacation_on.yaml.j2
- package/automations/vacation_off.yaml.j2
# The recipe's control surface is the helper it creates, so the install
# drops a tap-to-toggle button for it onto a dashboard rather than leaving
# the homeowner to add a card by hand. The wizard lets them pick which
# dashboard or skip; ``default`` targets the default one. No placeholders —
# the helper id is fixed by the recipe.
dashboard:
card:
type: button
entity: input_boolean.fridge_vacation
name: Fridge vacation
icon: mdi:fridge-off
show_state: true
tap_action:
action: toggle
target: default
view: 0
{# Vacation OFF. When the Fridge vacation toggle flips off, restore each
setpoint that was genuinely captured at entry, from the persistent
helpers. A control is only restored when its ``captured`` flag is on,
which entry sets solely when the setpoint read a real number. So a
control that was unavailable at entry (never captured, never eased) is
left untouched rather than being written a fabricated value, and because
the helpers persist, this all holds across a Home Assistant restart.
Templated values stay on a single quoted line so trim_blocks can't
swallow following YAML at an end-of-line tag. #}
automation:
- id: selora_recipe_{{ slug | replace('-', '_') }}_vacation_off
alias: "LG Fridge Vacation Mode — restore"
description: >-
On return, restore each fridge/freezer setpoint that was captured
when vacation began, plus the prior rapid-cooling state.
mode: single
trigger:
- platform: state
entity_id: input_boolean.fridge_vacation
to: "off"
action:
- if:
- condition: state
entity_id: input_boolean.fridge_vacation_fridge_captured
state: "on"
then:
- service: number.set_value
target:
entity_id: {{ roles.fridge_temp[0] }}
data:
value: "{% raw %}{{ states('input_number.fridge_vacation_fridge_prev') | float }}{% endraw %}"
{% if roles.freezer_temp %}
- if:
- condition: state
entity_id: input_boolean.fridge_vacation_freezer_captured
state: "on"
then:
- service: number.set_value
target:
entity_id: {{ roles.freezer_temp[0] }}
data:
value: "{% raw %}{{ states('input_number.fridge_vacation_freezer_prev') | float }}{% endraw %}"
{% endif %}
{% if roles.express_mode %}
# Restore rapid cooling to its prior state, but only if it was
# captured at entry. If the switch was unavailable then (never
# captured, never forced off), leave it untouched.
- if:
- condition: state
entity_id: input_boolean.fridge_vacation_express_captured
state: "on"
then:
- if:
- condition: state
entity_id: input_boolean.fridge_vacation_express_prev
state: "on"
then:
- service: switch.turn_on
target:
entity_id: {{ roles.express_mode[0] }}
else:
- service: switch.turn_off
target:
entity_id: {{ roles.express_mode[0] }}
{% endif %}
{# Vacation ON. When the Fridge vacation toggle flips on, capture the
current setpoints (and rapid-cooling state) into persistent helpers so
exit can restore them exactly, then raise the setpoints to the
energy-saving values and switch rapid cooling off.
Capture is gated on the control reading a real number. If the control is
unknown/unavailable at entry (e.g. a ThinQ/cloud outage), we skip both
the capture and the ease and clear the control's ``captured`` flag, so
exit never restores a fabricated fallback as if it were the real prior
setpoint. The flags and saved values are persistent input helpers, so
the whole snapshot also survives a Home Assistant restart mid-vacation.
The eco inputs are entered in the configured ``temp_unit`` (Fahrenheit
by default). Each is normalised from that unit to whatever unit the
target control reports, so neither a °C nor a °F control gets a
mismatched value, then clamped to the control's min/max and snapped to
its step. Optional roles (freezer, Express mode) are guarded with
{% if %}. mode: single because the toggle only flips once per trip.
Templated values stay on a single quoted line so trim_blocks can't
swallow following YAML at an end-of-line tag. #}
automation:
- id: selora_recipe_{{ slug | replace('-', '_') }}_vacation_on
alias: "LG Fridge Vacation Mode — enter eco"
description: >-
Capture the current fridge/freezer setpoints into persistent helpers
when they read a real value, then ease them to the energy-saving
values and turn rapid cooling off.
mode: single
trigger:
- platform: state
entity_id: input_boolean.fridge_vacation
to: "on"
action:
# Fridge: only capture and ease when the setpoint reads a real number.
# Otherwise clear the captured flag so exit leaves the (never-eased)
# control alone.
- if:
- condition: template
value_template: "{% raw %}{{ states('{% endraw %}{{ roles.fridge_temp[0] }}{% raw %}') | is_number }}{% endraw %}"
then:
- service: input_number.set_value
target:
entity_id: input_number.fridge_vacation_fridge_prev
data:
value: "{% raw %}{{ states('{% endraw %}{{ roles.fridge_temp[0] }}{% raw %}') | float }}{% endraw %}"
- service: input_boolean.turn_on
target:
entity_id: input_boolean.fridge_vacation_fridge_captured
# Ease the fridge up to its energy-saving hold, converting the eco
# input from its unit to the control's unit, clamped and stepped.
- service: number.set_value
target:
entity_id: {{ roles.fridge_temp[0] }}
data:
value: "{% raw %}{% set e = '{% endraw %}{{ roles.fridge_temp[0] }}{% raw %}' %}{% set x = {% endraw %}{{ inputs.eco_fridge_temp }}{% raw %} %}{% set inu = '{% endraw %}{{ inputs.temp_unit }}{% raw %}' %}{% set dev = state_attr(e, 'unit_of_measurement') %}{% set c = ((x - 32) * 5 / 9) if inu == '°F' else x %}{% set v = x if dev not in ['°C', '°F'] else ((c * 9 / 5 + 32) if dev == '°F' else c) %}{% set lo = state_attr(e, 'min') | float(v) %}{% set hi = state_attr(e, 'max') | float(v) %}{% set st = state_attr(e, 'step') | float(1) %}{% set v = [[v, lo] | max, hi] | min %}{{ ((v / st) | round(0) * st) }}{% endraw %}"
else:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.fridge_vacation_fridge_captured
{% if roles.freezer_temp %}
# Freezer: same numeric guard and unit-aware ease.
- if:
- condition: template
value_template: "{% raw %}{{ states('{% endraw %}{{ roles.freezer_temp[0] }}{% raw %}') | is_number }}{% endraw %}"
then:
- service: input_number.set_value
target:
entity_id: input_number.fridge_vacation_freezer_prev
data:
value: "{% raw %}{{ states('{% endraw %}{{ roles.freezer_temp[0] }}{% raw %}') | float }}{% endraw %}"
- service: input_boolean.turn_on
target:
entity_id: input_boolean.fridge_vacation_freezer_captured
- service: number.set_value
target:
entity_id: {{ roles.freezer_temp[0] }}
data:
value: "{% raw %}{% set e = '{% endraw %}{{ roles.freezer_temp[0] }}{% raw %}' %}{% set x = {% endraw %}{{ inputs.eco_freezer_temp }}{% raw %} %}{% set inu = '{% endraw %}{{ inputs.temp_unit }}{% raw %}' %}{% set dev = state_attr(e, 'unit_of_measurement') %}{% set c = ((x - 32) * 5 / 9) if inu == '°F' else x %}{% set v = x if dev not in ['°C', '°F'] else ((c * 9 / 5 + 32) if dev == '°F' else c) %}{% set lo = state_attr(e, 'min') | float(v) %}{% set hi = state_attr(e, 'max') | float(v) %}{% set st = state_attr(e, 'step') | float(1) %}{% set v = [[v, lo] | max, hi] | min %}{{ ((v / st) | round(0) * st) }}{% endraw %}"
else:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.fridge_vacation_freezer_captured
{% endif %}
{% if roles.express_mode %}
# Rapid cooling: only capture and turn off when the switch reads a
# real on/off. If it's unknown/unavailable at entry, clear the
# captured flag and leave it alone, so exit won't force it off and
# lose its actual prior state.
- if:
- condition: template
value_template: "{% raw %}{{ states('{% endraw %}{{ roles.express_mode[0] }}{% raw %}') in ['on', 'off'] }}{% endraw %}"
then:
# Record whether it was on, so exit restores that exact state.
- if:
- condition: state
entity_id: {{ roles.express_mode[0] }}
state: "on"
then:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.fridge_vacation_express_prev
else:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.fridge_vacation_express_prev
- service: input_boolean.turn_on
target:
entity_id: input_boolean.fridge_vacation_express_captured
# Rapid cooling is the opposite of an energy-saving hold, so off.
- service: switch.turn_off
target:
entity_id: {{ roles.express_mode[0] }}
else:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.fridge_vacation_express_captured
{% endif %}
{# Helpers the vacation recipe owns.
input_boolean.fridge_vacation is the toggle, driven from a dashboard
card, a voice assistant, or the home's existing Away automation.
The remaining helpers hold the setpoints (and rapid-cooling state)
captured when vacation began, so exit can restore them exactly. They are
persistent helpers rather than a dynamically created scene on purpose: a
multi-day vacation can easily span a Home Assistant restart, and dynamic
scenes are lost on restart while input helpers restore their last value.
None of the input_number helpers set ``initial`` for that reason, setting
it would reset the saved value to the initial on every boot. #}
input_boolean:
fridge_vacation:
name: Fridge vacation
icon: mdi:fridge-off
# Set only when a real (numeric) fridge setpoint was captured at entry.
# Exit restores the saved setpoint only if this is on, so a value saved
# during a ThinQ/cloud outage is never restored as a real temperature.
fridge_vacation_fridge_captured:
name: Fridge vacation fridge setpoint captured
icon: mdi:content-save-check
{% if roles.freezer_temp %}
fridge_vacation_freezer_captured:
name: Fridge vacation freezer setpoint captured
icon: mdi:content-save-check
{% endif %}
{% if roles.express_mode %}
# Remembers whether rapid cooling was on when vacation began, and whether
# it was actually captured (only set when the switch read a real on/off
# at entry, so an outage doesn't record a bogus off that exit restores).
fridge_vacation_express_prev:
name: Fridge vacation saved rapid cooling state
icon: mdi:snowflake
fridge_vacation_express_captured:
name: Fridge vacation rapid cooling state captured
icon: mdi:content-save-check
{% endif %}
input_number:
# Saved fridge setpoint captured at vacation entry. Range is wide enough
# to hold either a Celsius or Fahrenheit value.
fridge_vacation_fridge_prev:
name: Fridge vacation saved fridge setpoint
min: -100
max: 200
step: 0.1
mode: box
{% if roles.freezer_temp %}
fridge_vacation_freezer_prev:
name: Fridge vacation saved freezer setpoint
min: -100
max: 200
step: 0.1
mode: box
{% endif %}
Author-maintained release notes. Each release of the recipe lists what changed.
Changelog
v1.0.0 - 2026-07-08
Initial release.
- Creates a Fridge vacation toggle (an input_boolean helper) and drops a tap-to-toggle button onto a dashboard.
- Turning it on snapshots the current fridge and freezer setpoints, raises them to the energy-saving values you chose, and turns rapid cooling off.
- Turning it off restores the snapshot exactly, so the fridge returns to the temperatures it held before.
- Stores the snapshot in persistent input helpers rather than a dynamic scene, so the restore still works if Home Assistant restarts during a multi-day vacation.
- Eco setpoints are entered in Fahrenheit by default, with a unit selector for Celsius. Whatever unit you pick, the value is converted to the unit the LG control actually reports and clamped to its limits, so the fridge is never sent a mismatched or out of range value.
- Captures a control’s setpoint only when it reads a real number at entry, and the rapid-cooling switch only when it reads a real on/off. If a control or the switch is unavailable (for example during a ThinQ outage) it is left untouched, so a fallback value is never saved and later restored as if it were the real prior state.
- Saves energy through the temperature setpoints because LG’s power-saving mode is read-only in Home Assistant.
- Built around the LG ThinQ integration.