ESPHome · Home Assistant

Your board in Home Assistant

Install ESPHome from this page and Crescent City becomes a Home Assistant device: battery level, USB power, the BOOT button and the RGB LED show up as entities, plus indoor temperature and humidity with an optional Qwiic sensor (not included). The OLED keeps showing the time, the temperature and the battery.

Installing from this page needs Chrome or Edge on a computer. You can still set it up with ESPHome Builder — see Using ESPHome Builder below. Installing needs a secure (https) connection to this page. View the YAML ↗

You need: Chrome or Edge on a computer · a data USB‑C cable · a 2.4 GHz Wi‑Fi network

Config 1.1.1 · ESPHome 2026.10+ · Home Assistant · board V1.0 and V2.0

14:32 Sun 04 Oct INDOOR OUTDOOR 74°F 47% 81°F
Clock page · press BOOT for status

Install

Install in three steps

About two minutes, with nothing but a browser.

  1. Plug in and click Install ESPHome

    Connect the board to your computer with a data USB‑C cable, open this page in Chrome or Edge and click Install ESPHome. Pick the board’s USB port, confirm, and leave the box ticked to erase the board on a first install. Installing takes about a minute.

    This replaces the Weather Clock. You can put the Weather Clock back at any time — see Help.

  2. Connect it to your Wi‑Fi

    When the install finishes, choose Connect to Wi‑Fi and enter your network and password.

    No computer at hand later? With no saved network the board opens a setup hotspot called Crescent City. Join it from your phone and pick your network on the page that opens. Use a 2.4 GHz network.

  3. Add it in Home Assistant

    Home Assistant finds the board by itself: go to Settings → Devices & services, look for Crescent City followed by six characters under Discovered and click Add. The clock on the OLED starts as soon as Home Assistant is connected.

    Not listed after a minute? Click Add integration, choose ESPHome and enter the IP address from the board’s status page (press BOOT). Leave the port at 6053.

Using ESPHome Builder

Take over a board you installed from this page

To change the configuration or update over Wi‑Fi, open ESPHome Builder: the board appears as Discovered. Click Adopt, then Install. Builder keeps your copy linked to the published configuration.

Or set it up from ESPHome Builder instead of this page

  1. In ESPHome Builder click New device, give it a name, choose ESP32‑S3, and skip the first install. Open Edit and replace everything except the api: block with:
    substitutions:
      name: crescent-city
      friendly_name: Crescent City
    
    packages:
      hwdesigns.crescent-city: github://HW-DESIGNS-LLC/docs/esp32-s3/firmware/esphome/crescent-city.yaml@main
    
    esphome:
      name: ${name}
      name_add_mac_suffix: false
    
    wifi:
      ssid: !secret wifi_ssid
      password: !secret wifi_password
  2. Click Install and choose the USB option. After that, updates go over Wi‑Fi. Then add the device in Home Assistant as in step 3. If the port doesn’t appear, hold the BOOT button while plugging the board in.

What you get

In Home Assistant and on the screen

  • Battery voltage and level
  • Charging state and USB power
  • BOOT button and RGB LED, for your own automations
  • Indoor temperature and humidity with a Qwiic SHT4x sensor on the side connector (sensor not included)
  • Clock and status pages on the OLED — press BOOT to switch
14:32 Sun 04 Oct INDOOR OUTDOOR 74°F 47% 81°F
Clock. Time from Home Assistant, indoor temperature and humidity, outdoor temperature from your Home Assistant weather.
All entities
EntityWhat it does
Indoor temperature, Indoor humidityFrom a Qwiic SHT4x sensor on the side connector (not included), every 30 s. Plug the sensor in before powering up.
Battery voltageVoltage at the battery connector, a 30‑second median reported every 30 s. With no battery connected it shows the charger output, about 4.1 V.
Battery levelCharge left before the low-battery shutdown, in %, from a table measured on a V2.0 board. While USB is plugged in it keeps its last value, and reads 100 % when a charge finishes (Full). With a battery that was already full (Not charging) it keeps its last value.
ChargingOn battery, or with USB plugged in Charging, Topping off or Full, worked out from the battery reading. Not charging means the charger has been idle for 20 minutes: the battery was already full, or no battery is fitted.
Battery lowTurns on when the battery needs charging (below 3.45 V). You can use it in your own Home Assistant automations.
USB powerOn while the board is powered from USB‑C.
BOOT buttonOn while the button is pressed. Each press also switches the OLED between the clock and status pages.
RGB LEDA colour light you can control. Turn the Status LED switch off first so the board doesn’t use it for status.
Status LED (switch)Lets the RGB LED show connection and battery status (see Status LED colours below).
Low-battery shutdown (switch)On by default. See Battery.
Battery offset (setting)Correction added to the battery reading, 0.070 V by default. To fine-tune a board, measure the battery connector with a meter while on battery and adjust until Battery voltage matches.
Wi‑Fi signal, IP address, UptimeDiagnostics.
Restart, Factory resetButtons. Factory reset is hidden by default; it clears saved Wi‑Fi and settings.
The other OLED screens
STATUS WiFi -61 dBm 192.168.1.42 HA connected Batt 3.92 V 60% On battery
Status. Press BOOT to switch. Shows the setup hotspot name when Wi‑Fi isn’t connected.
Battery low charge me 3.27 V
Battery low. Shown for 10 s before the board goes to sleep.
Status LED colours
Red blinkBattery low — plug in USB
Blue blinkNot on Wi‑Fi yet, or the setup hotspot is open
AmberOn Wi‑Fi, waiting for Home Assistant
OffAll good

Battery

Running on a battery

While USB is plugged in, none of this applies.

Battery life with ESPHome
≈14 hper 1000 mAhMeasured on a V2.0 board: 26.5 hours on a 1.9 Ah cell at about 70 mA. Home Assistant needs the board to stay connected, so Wi‑Fi stays on; the Weather Clock gets about 24 h because it switches Wi‑Fi off between updates.
Low-battery shutdown
Checkedon V2.0The warning, the shutdown about 30 minutes later, the wake on USB and the return to sleep after a short plug-in all worked as described below (ESPHome 1.1.1).

How the configuration protects the battery (the same settings as the Weather Clock):

Nearly empty
3.45 VwarningThe battery icon blinks with LOW, the status LED blinks red and Battery low turns on in Home Assistant.
Empty
3.30 Vshutdown“Battery low — charge me” for 10 s, then Wi‑Fi, the LED and the screen switch off and the board goes into deep sleep.
Back on
USB‑Cplug it inThe board wakes, starts normally and charges. To keep running on battery after a shutdown it needs 3.50 V.
Threshold details

All voltages are at the battery connector. The decision uses a 30‑second median, so a short dip during a Wi‑Fi burst can’t trigger it.

In deep sleep the board also wakes for a moment every 10 minutes to check for USB, as a backup for the USB wake. The Weather Clock measures 0.78 mA in this state.

After a shutdown the board keeps running on battery only once the battery is back above 3.50 V, so a short plug-in, or RESET on a still-empty battery, just shows the message again.

Turning the Low-battery shutdown switch off disables the warning and the shutdown — not recommended on a battery.

The battery icon while charging

While USB is plugged in, the battery icon shows the charging phase: bars run while charging, three bars with the fourth blinking while the charger tops off, four bars when it stops, or after 20 minutes if the charger stays idle (battery already full, or none fitted).

Customize

Make it yours

Adopt the board in ESPHome Builder (see Using ESPHome Builder under Install), then add a substitutions: block to your copy of the configuration and install.

Settings you can change
temp_unit"F" or "C" — OLED only; match your Home Assistant unit setting
outdoor_weather_entityweather.forecast_home — the weather entity for the outdoor temperature
friendly_nameCrescent City — the device name in Home Assistant
vbat_warn / vbat_cutoff3.45 / 3.30 — battery thresholds in volts (advanced)
substitutions:
  temp_unit: "C"
  outdoor_weather_entity: weather.home
Free pins for your own sensors

Free header pins for your own sensors and outputs: GPIO 1, 5, 6, 7, 13, 15, 16, 21, 35, 36, 37 and 39 — see the pinout. The Qwiic port takes more I²C sensors on the same bus.

Help

Common questions

The Install button doesn’t find the board

Use a data-capable USB‑C cable and Chrome or Edge on a computer. If the port still doesn’t appear, hold the BOOT button while plugging the board in, release it, and click Install again.

The clock shows --:--

The board takes the time and time zone from Home Assistant. It appears once the device is added in Home Assistant (status page: HA connected).

Outdoor temperature shows --

The board reads the temperature of weather.forecast_home, the weather entity Home Assistant creates for your home. If yours has a different name, set outdoor_weather_entity (see Customize).

Indoor temperature is unavailable

Indoor temperature and humidity need a Qwiic SHT4x sensor, which is not included with the board. Plug the sensor into the side connector and restart the board — ESPHome looks for the sensor at power-up.

How do I get the weather clock back?

Upload the weather clock sketch from the Arduino IDE, as in the getting-started guide. Its source is in the firmware folder.

Does it need Home Assistant?

For the clock and the outdoor temperature, yes. Everything else — sensors, battery, the setup hotspot — works on the board itself, and ESPHome devices can also be used without Home Assistant.