Skip to main content

reTerminal E1004

Overview

The reTerminal E1004 is a 13.3" 6-colour (Spectra 6) e-paper display mounted in the kuchyň (kitchen). It is the household's central family dashboard: a colour calendar/agenda on the left, and a stacked column of live information on the right (weather, home & outdoor climate, upcoming family celebrations, waste-collection schedule, solar/car batteries, and a weekly temperature chart).

It is the colour companion to the E1001 (mono weather display in the living room) and shares the same icon language, footer style, and refresh philosophy.

Property Value
Model Seeed reTerminal E1004 (13.3" Spectra 6 colour e-paper)
Resolution 1200 × 1600, portrait
Colours Black, white, red, green, blue, yellow (6-colour palette)
Panel model (ESPHome) Seeed-reTerminal-E1004
MCU ESP32-S3 with 8 MB PSRAM (octal, 80 MHz)
Power Permanently powered (deep sleep disabled)
Location Kuchyň (kitchen)
Firmware ESPHome
Flashing Wireless (OTA)

Data flow

drawing-1-1787169129.png

What it displays

Header

  • Full Czech day name + date (e.g. "Pondělí 17.08.2026")
  • Today's Czech name-day (svátek) on the right

Left column – Agenda

  • Upcoming calendar events grouped by day (Czech day labels: Po, Út, St…)
  • Event titles colour-coded by calendar: green = Family, red = Naďa a Pavel
  • Time or "Celý den" (all-day) below each event
  • Multi-day events show "· do DD.MM"
  • Long titles are truncated with "…" so they don't overflow into the right column

Right column (top to bottom)

  1. Blíží se – next 3 upcoming family celebrations (birthdays with age, and name-days). Red = birthday, green = name-day. Twins Daniel & Dominik are combined onto one birthday line.
  2. Svoz odpadu – next collection date per waste type: BIO (leaf), Papír (newspaper), Plast (bottle), Směsný (bin) — each with a coloured icon.
  3. Baterie – FVE (home solar) % with a house icon, Tesla % with a car icon.
  4. Doma / Venku – indoor and outdoor temperature + humidity, with thermometer and droplet icons.
  5. Počasí – 6-day forecast with colour weather icons (red sun, blue rain, clouds) and high/low temps.
  6. Týden – a 6-day high-temperature bar chart, bars colour-coded (red ≥ 28°, blue ≤ 18°, black otherwise).
  • Aktualizováno HH:MM – last refresh time
  • WiFi signal strength bars

Home Assistant sensors that power it

These are custom template sensors built in configuration.yaml:

Sensor Purpose
sensor.svatek_dnes Today's Czech name-day, from an embedded 366-day table
sensor.rodina_oslavy Family birthdays + name-days; state = today's celebrations, upcoming attribute = next celebrations (JSON)
sensor.svoz_odpadu Scans both calendars for BIO/PAPÍR/PLAST/SMĚSNÝ keywords; attributes bio,papir,plast,smesny hold the next date per type
sensor.forecast_day_0..5_* Per-day condition / temp / templow
sensor.forecast_week Weekly highs as a pipe-separated string (`Po:26
sensor.e1004_event_1..10 Per-event agenda data (title, day label, time, colour)
Ecowitt climate sensors Indoor/outdoor temperature & humidity
sensor.solax_battery_capacity_2 FVE battery %
sensor.tesla_model_y_battery Tesla battery %

Refresh behaviour

flowchart TD
    A["Calendar event changes"] -->|instant, debounced 8s| R["request_redraw script"]
    B["5-minute interval"] --> D["Display refresh"]
    C["Manual button in HA"] --> D
    R --> D
    D --> S["Redraw e-paper"]
  • Every 5 minutes – scheduled refresh (keeps weather, climate, batteries current)
  • Calendar event change – triggers the debounced redraw (new events appear promptly)
  • Manual button – button.reterminal_e1004_e1004_refresh_display
  • Temperature/weather changes do not trigger refreshes directly (they ride the 5-minute interval), to avoid constant flashing.

Key lessons learned (build history)

  • String vs float sensors: several HA-attribute sensors return strings (e.g. "17.8.", family lines). These must be defined as text_sensor in ESPHome, not numeric sensor. Mixing them up caused compile errors (.c_str() on a float) and a firmware that never built — so the device kept running old firmware.
  • to_json spacing: an early approach passed data as JSON attributes and parsed it on-device; HA's to_json adds spaces after colons ("d": 17), which broke a strict parser. Solved by switching to simple pre-formatted string attributes (bio, papir, …) instead of JSON.
  • Entity name typos: forecast_dayN vs forecast_day_N (missing underscore) and run__state (double underscore, unrelated washer bug) both caused silent failures. Lesson: verify entity IDs against Developer Tools → States.
  • MDI codepoints: several icon glyphs were initially wrong (cake, party-popper, night) and rendered as empty boxes — codepoints must be verified against the actual font.
  • Yellow on white is unreadable on e-paper: the "sunny" icon was switched from yellow to red for contrast.
  • Refresh discipline: the display only redraws on meaningful changes + a 5-minute interval, because colour e-paper refresh is slow and visually distracting.

Configuration reference

Sanitised. The real config contains an API encryption key, an OTA password, and WiFi credentials. These secrets are NOT included here — see the password manager. Full config stored at [link to your config location].

# ── reTerminal E1004 (excerpt, secrets removed) ──
esphome:
  name: reterminal-e1004

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

psram:
  mode: octal
  speed: 80MHz

spi:
  clk_pin: GPIO7
  mosi_pin: GPIO9

# Secrets removed – see password manager:
#   api / ota / wifi

display:
  - platform: epaper_spi
    model: Seeed-reTerminal-E1004
    update_interval: never       # driven by interval + triggers instead
    rotation: 0
    # lambda: two-column layout (agenda left, info column right)

interval:
  - interval: 5min
    then:
      - component.update: epaper_display

button:
  - platform: template
    name: "E1004 Refresh Display"
    on_press:
      then:
        - component.update: epaper_display