Skip to content

gilbertorconde/libre-oven

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Libre Oven Card for Home Assistant

libre-oven-card is a custom Lovelace card that provides full control and monitoring of the Libre Oven — an open-source ESP32-S3 smart oven controller running ESPHome.

Required firmware: This card is designed for the Libre Oven ESPHome firmware. Flash the ESP32-S3 firmware from project/esp32/ before using this card.

Key features at a glance:

  • Live oven status — state label with color coding (Idle / Waiting / Preheating / Ready / Cooking), current temperature, target temperature, and countdown timer.
  • SVG oven visualization — real-time element states: gray (off), white (selected), yellow (armed/active), red (heating).
  • Temperature control — slider/input for target temperature.
  • Timer controls — cook duration and start delay inputs.
  • Element toggles — independently control Top, Bottom, Grill, and Fan elements beyond the original 6-mode limitation.
  • Program actions — Apply Program (start/update) and Cancel Program buttons.
  • Food probe support — optional NTC 10K probe for food temperature monitoring with auto-stop when target reached. UI elements only appear when probe is connected.
  • Device auto-discovery — pass any entity from the oven device and the card discovers all others automatically.
  • Zero external dependencies — single vanilla-JS file.

Credits

Author: gil — 2026


Installation

Option A — HACS (recommended)

  1. In Home Assistant, open HACS → Frontend.
  2. Click the three-dot menu (⋮) in the top-right and choose Custom repositories.
  3. Paste https://github.com/gilbertorconde/libre-oven and select Dashboard as the category.
  4. Click Add, then search for Libre Oven Card and install it.
  5. Reload your browser / clear the cache.

Add to HACS

Option B — Manual

  1. Download libre-oven-card.js from the latest release.
  2. Copy it to /config/www/libre-oven/libre-oven-card.js.
  3. Add the following under Settings → Dashboards → Resources:
resources:
  - url: /local/libre-oven/libre-oven-card.js
    type: module

Add the card to your dashboard

Base name (recommended): Pass the device base name; the card auto-discovers all entities:

type: custom:libre-oven-card
base_name: libre_oven

The base name is the ESPHome device name with hyphens replaced by underscores (e.g. libre-ovenlibre_oven). All sensors, numbers, switches, and buttons are derived automatically. Override specific entities if needed:

type: custom:libre-oven-card
base_name: libre_oven
entities:
  set_temperature: number.custom_temp_entity  # override just this one

Explicit entities: For custom setups, paste the full entity map:

type: custom:libre-oven-card
title: Libre Oven
entities:
  oven_temperature: sensor.libre_oven_oven_temperature
  active_temperature: sensor.libre_oven_active_temperature
  timer_state: sensor.libre_oven_timer_state
  timer_state_code: sensor.libre_oven_timer_state_code
  active_countdown: sensor.libre_oven_active_countdown
  delay_remaining: sensor.libre_oven_delay_remaining
  cook_remaining: sensor.libre_oven_cook_remaining
  active_cook_total: sensor.libre_oven_active_cook_total
  active_delay_total: sensor.libre_oven_active_delay_total
  set_temperature: number.libre_oven_set_temperature
  cook_duration: number.libre_oven_cook_duration
  start_delay: number.libre_oven_start_delay
  top_element_selected: switch.libre_oven_top_element_selected
  bottom_element_selected: switch.libre_oven_bottom_element_selected
  grill_element_selected: switch.libre_oven_grill_element_selected
  fan_selected: switch.libre_oven_fan_selected
  apply_program: button.libre_oven_apply_program
  cancel_program: button.libre_oven_cancel_program
  start_cooking: button.libre_oven_start_cooking
  # Element visual-state sensors (0=off, 1=selected, 2=armed/active, 3=heating)
  top_element_state: sensor.libre_oven_top_element_state
  bottom_element_state: sensor.libre_oven_bottom_element_state
  grill_element_state: sensor.libre_oven_grill_element_state
  fan_element_state: sensor.libre_oven_fan_element_state
  frame_state: sensor.libre_oven_oven_frame_state
  # Active element flags (for draft-change detection)
  active_top_element: binary_sensor.libre_oven_active_top_element
  active_bottom_element: binary_sensor.libre_oven_active_bottom_element
  active_grill_element: binary_sensor.libre_oven_active_grill_element
  active_fan_element: binary_sensor.libre_oven_active_fan_element
  # Food probe (optional — only active when probe is physically connected)
  food_probe_temperature: sensor.libre_oven_food_probe_temperature
  food_probe_connected: binary_sensor.libre_oven_food_probe_connected
  food_target_temperature: number.libre_oven_food_target_temperature
  cook_mode: number.libre_oven_cook_mode

If your device name differs from libre_oven, use base_name: your_device_name or update the entity IDs in the explicit config.


Card Layout

The card is divided into three sections:

Top Section — Live Status (read-only from ESP32)

Mirrors the physical oven display:

  • State label with color coding:
    • Idle: white
    • Waiting: yellow (#e5c000)
    • Preheating: red (#e01e00)
    • Ready: green (#4caf50)
    • Cooking: green (#4caf50)
  • Current oven temperature
  • Target temperature (active when program running, draft when idle)
  • Oven graphic with SVG element visualization:
    • Gray: off
    • White: selected in draft
    • Yellow: armed/active (program running, SSR cycling)
    • Red: actively heating (SSR on)

Middle Section — Tiles & Controls

Four tiles in a 2×2 grid, each opening a bottom-sheet for editing:

  • Timer tile: Cook remaining countdown during COOKING, "Preheating"/"Oven ready" during those states, set cook total when WAITING. Shows the applied set value beneath.
  • Start Delay tile: Delay remaining countdown during WAITING, "Done" once delay has passed. Shows the applied set value beneath.
  • Elements tile: Active element summary (Top + Bottom + Grill + Fan).
  • Temperature tile: Current temperature, set temperature, and food probe temperature (when connected) side by side.

Controls in the sheets:

  • Temperature: draggable arc thermostat with +/− 5°C buttons
  • Cook duration: +/−1 and +/−10 minute buttons with numeric input; cook mode toggle (Timer / Probe) and food target temperature when probe is connected
  • Start delay: +/−1 and +/−10 minute buttons with numeric input
  • Element toggles: Top, Bottom, Grill, Fan pill buttons

Draft-Change Feedback

When a program is running, any change to draft values (temperature, duration, delay, or elements) is shown inline on the tiles:

  • Temperature: old value with strikethrough → new value in accent color
  • Timer / Delay: old set time with strikethrough → new time in accent color
  • Elements: added elements in green, removed elements in red with strikethrough
  • A pulsing "DRAFT CHANGES — Press Update to apply" hint appears above the action buttons

Bottom Section — Actions

  • Apply Program: Starts or updates the active program (equivalent to pressing the timer encoder button on the physical interface).
  • Cancel Program: Stops the current program and clears the ESP32 draft.

Timer State Codes

The card reads the timer_state_code sensor (numeric) for logic and the timer_state sensor (text) for display:

Code Text Card Display Color
0 IDLE Idle White
1 WAITING Waiting Yellow
2 PREHEATING Preheating Red
3 READY Ready Green
4 COOKING Cooking Green

Required Entities

Entity Key Type Description
oven_temperature sensor Current oven temperature
active_temperature sensor Active target temperature
timer_state sensor Timer state text
timer_state_code sensor Timer state numeric code (0-4)
active_countdown sensor Formatted countdown (HH:MM:SS)
delay_remaining sensor Delay remaining countdown
cook_remaining sensor Cook remaining countdown
active_cook_total sensor Active program cook total (min)
active_delay_total sensor Active program delay total (min)
set_temperature number Draft temperature control
cook_duration number Draft cook duration (minutes)
start_delay number Draft start delay (minutes)
top_element_selected switch Top element toggle
bottom_element_selected switch Bottom element toggle
grill_element_selected switch Grill element toggle
fan_selected switch Fan toggle
apply_program button Apply/start program
cancel_program button Cancel program
start_cooking button Resume from READY to COOKING

Optional food probe entities (only active when NTC probe connected)

Entity Key Type Description
food_probe_temperature sensor Current food probe temperature (NTC 10K)
food_probe_connected binary_sensor Whether the food probe jack is plugged in
food_target_temperature number Target food temperature for probe-mode auto-stop
cook_mode number 0 = timer mode, 1 = probe mode

Optional state sensors (for visual element feedback)

Entity Key Type Description
top_element_state sensor 0=off, 1=selected, 2=armed, 3=heating
bottom_element_state sensor 0=off, 1=selected, 2=armed, 3=heating
grill_element_state sensor 0=off, 1=selected, 2=armed, 3=heating
fan_element_state sensor 0=off, 1=selected, 2=active
frame_state sensor 0=off, 1=selected, 2=active

Requirements

  • Home Assistant 2023.4 or newer
  • The Libre Oven ESPHome firmware flashed and connected
  • No additional HACS frontend cards required

Hardware Build Guide

For the full hardware build guide (ESP32-S3 wiring, PCB, 3D-printed parts, oven reference), see project/README.md.

For firmware details (state machine, PID tuning, ESPHome configuration), see project/esp32/README.md.

About

Open-source smart oven controller built with ESP32-S3 and ESPHome. Replaces mechanical oven controls with PID temperature regulation, TFT display with rotary encoders, and full Home Assistant integration via a custom Lovelace card with live SVG visualization. Includes firmware, custom PCB, 3D-printable parts, and wiring guide.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors