Skip to main content
Selora Homes Selora Homes
Recipe · v1.0.0 · Released Jul 8, 2026

LG Fridge: Vacation Mode

Creates a Fridge vacation toggle. Flip it on before you travel and Selora AI eases your LG fridge and freezer setpoints up to an energy-saving level and switches rapid cooling off. Flip it back and everything returns to exactly what it was.

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:

  1. Open the dashboard, then Edit dashboard (top-right pencil) and + Add card.
  2. Choose the Entity or Button card.
  3. Set the entity to input_boolean.fridge_vacation.
  4. 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.

Type to search across cities, counties, and installers

↑↓ navigate open
⌘K search