# Customize ESPHome

> Preserve an adopted controller's identity and credentials, generate optional ESPHome features, and install and verify the new configuration over Wi-Fi.

Source: https://serin-labs.com/controller/customize-esphome.html
Last updated: 2026-10-27

The [YAML generator](https://serin-labs.com/esphome/generate-yaml.html) creates a complete replacement configuration with your selected features. It runs locally in your browser.

## Before you start

- Complete [ESPHome setup](https://serin-labs.com/esphome/setup.html), including adoption and installation of the personalized configuration. Confirm Home Assistant controls the indoor unit over Wi-Fi.
- Back up the device's current YAML from the ESPHome dashboard. Keep any referenced secrets available in your ESPHome installation.

The generator supports the M5Stack NanoC6 and Atom S3 Lite. Other ESP32 boards require manual board configuration and compilation; see [supported boards and DIY parts](https://serin-labs.com/parts.html).

## Keep the controller connected when replacing its configuration

Preserve the device name, API encryption key and OTA password so wireless updates and Home Assistant keep working.

1. Open the [YAML generator](https://serin-labs.com/esphome/generate-yaml.html) and expand **Existing ESPHome device**, or select **Import an existing configuration** below the preview.
2. Paste the controller's complete YAML into **Current ESPHome YAML**. Review the import report and confirm the board and names under **Device details**. Enter any missing credentials. Existing `!secret` references need matching entries in your ESPHome installation.
3. Select your features again, including any room sensor or Serin Link; importing does not restore those selections. Keep **ESPHome web server** enabled for browser controls.
4. Review **Your configuration**, then select **Copy configuration** or **Download .yaml**. On a phone, open **Preview and download** first.

Replace the old file's contents; do not append the generated YAML or add the Serin package again.

Compare the result with your backup. The generator does not merge custom YAML. Its report flags missing top-level sections, but you must also check custom entries inside sections such as `sensor:` or `switch:`. Restore any packages, sensors, automations and settings you still need.

Confirm `wifi_ssid` and `wifi_password` in `secrets.yaml`, or edit the generated Wi-Fi settings. Restore custom settings such as a static IP address before uploading.

## Install and verify

1. Open the adopted controller in the ESPHome dashboard and replace its YAML with the reviewed configuration.
2. Select **Install** and install wirelessly. Leave the controller powered while the firmware compiles, uploads, and restarts.
3. Check that Home Assistant reconnects and the new controls appear. Send a mode or temperature command and confirm the indoor unit responds.

For compilation errors, check the build output and selected options. For upload failures, see [ESPHome update troubleshooting](https://serin-labs.com/troubleshooting.html#ota-fails).

## Choose optional features

Defaults: NanoC6, vertical vane control and the web server enabled; other features off. Select only features your indoor unit supports.

Scroll sideways to read all columns.

| Option | Purpose and limits |
| --- | --- |
| Home Assistant temperature sensor | Feeds a Home Assistant temperature entity to the heat pump. Enter its entity ID and displayed unit; omitting the ID leaves the sensor out. With Serin Link temperature support also enabled, select · **Home Assistant** · as the source to use it. See · [room sensor setup](https://serin-labs.com/controller/room-sensors.html#esphome-home-assistant) · . |
| Connect a Serin Link | Enable to retain Serin Link support from the standard configuration. Adds Pair Serin Link and Forget All Links buttons. Serin Link 1 reports Connected, MAC, Last Seen and Firmware, with bindings for selected vane controls. See · [Serin Link pairing](https://serin-labs.com/esphome/features.html#dial) · . |
| Use the Link as a room temperature sensor | Requires · **Connect a Serin Link** · . Adds Temperature and Humidity sensors and a Room Temperature Source selector. The heat pump keeps its built-in sensor until you select Serin Link as the source. See · [Serin Link as the room sensor](https://serin-labs.com/controller/room-sensors.html#esphome-link) · . |
| Separate heating and cooling temperatures | Adds two targets in Auto mode; the standard configuration uses one. |
| Vertical and horizontal vane controls | Include only the axes fitted to your indoor unit. |
| Swing mode | Adds swing to the climate entity alongside the separate vane selectors. |
| Airflow control | Adds Even, Indirect and Direct settings on supported units. |
| Diagnostics | Adds nine heat-pump sensors, enabled in Home Assistant when included. See the · [diagnostics reference](https://serin-labs.com/controller/diagnostics.html#heat-pump) · . |
| i-See occupancy sensor | Adds a binary sensor for indoor units fitted with Mitsubishi's infrared occupancy sensor. |
| Night mode, air purifier, circulator | Adds switches for supported units: reduced fan/display operation, the fitted purifier, or fan-only circulation. |
| Installer settings (ISU) | Exposes service-menu codes stored in the indoor unit. Change them only when you understand their effect. |
| ESPHome web server | Provides local browser controls for the configured entities. Enabled by default. |
| Home Assistant Bluetooth proxy | Extends Home Assistant's Bluetooth coverage. Select it to retain the standard firmware's proxy, including when it carries your · [Govee sensor](https://serin-labs.com/controller/room-sensors.html#esphome-govee) · readings. It does not configure direct thermometer-to-heat-pump control. |
| Fahrenheit compatibility mode | Off by default. For units operating natively in Fahrenheit, select Standard first; select Alternate if the unit reports incorrect temperatures. This setting concerns the indoor unit, not the remote sensor's display units. |

See the [standard entity reference](https://serin-labs.com/controller/controls.html#esphome) for the base configuration.
