esp32.diy

ESPAltherma: Monitor Your Daikin Heat Pump with ESP32

Oct 13, 2026 · 6 min read

Intermediate 508 stars 178 forks C MIT Updated 2026-10-12

Home Assistant dashboard showing ESPAltherma sensor values and switch entities after MQTT auto-discovery

TL;DR ESPAltherma connects an ESP32 to the serial X10A port on a Daikin Altherma, ROTEX, or HOVAL Belaria heat pump and publishes live sensor values to Home Assistant via MQTT. No extra hardware is required beyond the microcontroller and a small JST connector.
What you need
  • ESP32
  • ESP8266
  • M5StickC
  • M5StickCPlus
  • Daikin Altherma heat pump
  • ROTEX heat pump
  • HOVAL Belaria heat pump
  • 5-pin JST EH 2.5mm connector
  • Dupont wires M-F
BoardESP32 or ESP8266
FrameworkArduino via PlatformIO
LanguageC
LicenseMIT
DifficultyIntermediate
IntegrationHome Assistant MQTT auto-discovery

What You Will Build

ESPAltherma turns a bare ESP32 (or ESP8266) into a real-time monitor for Daikin Altherma, ROTEX, and HOVAL Belaria heat pumps. The microcontroller talks to the heat pump's built-in X10A serial port, polls the values you care about at a set interval, and forwards them as JSON messages over MQTT. Home Assistant picks these up automatically through MQTT auto-discovery, giving you live sensor entities and an optional on/off switch — all without touching any proprietary cloud service or gateway.

If you heat your home with one of these units, visibility into operating mode, temperatures, and thermostat state lets you spot inefficiencies, automate based on real pump data, and avoid expensive service calls for issues you could have caught early.

X10A wiring schematic — four wires connect the heat pump serial port to the ESP32 GPIO pins\2
X10A wiring schematic — four wires connect the heat pump serial port to the ESP32 GPIO pins
The 8-pin X10A connector found on ROTEX units, which uses a different pin layout from the standard 4-pin version\2
The 8-pin X10A connector found on ROTEX units, which uses a different pin layout from the standard 4-pin version
Completed installation with the ESP32 mounted inside the heat pump cabinet next to the main PCB\2
Completed installation with the ESP32 mounted inside the heat pump cabinet next to the main PCB

What You Need

Hardware

Software

Typical use cases

Energy Monitoring

Track heat pump operating mode, flow temperatures, and thermostat state in real time to understand your heating costs and spot inefficiencies.

Home Automation

Trigger Home Assistant automations from live pump data — boost hot water before guests arrive or alert when the unit enters an unexpected state.

Smart Grid Load Shifting

Use the SG-Ready relay outputs to shift heat pump load to low-tariff or surplus solar periods, cutting your electricity bill.

Remote On/Off Control

Wire a relay to the external thermostat terminals and control heating from anywhere through Home Assistant, without touching the pump's own settings.

How It Works

The X10A connector on the heat pump PCB exposes a 5V serial port. ESPAltherma maps ESP32 GPIO pins to a second hardware serial port (Serial2, typically GPIO 16 RX and GPIO 17 TX) and uses that to query the pump using Daikin's serial protocol. Older Altherma units from around 2010 or before use an 'S' protocol; newer ones use the default 'I' protocol — both are supported.

You choose which values to expose by uncommenting lines in a model-specific header file. Each line maps to a register address on the pump, so you pull only what you need and keep the MQTT payload lean. The firmware publishes all selected values as a single JSON object to the espaltherma/ topic tree, and logs debug output both to the USB serial console and to espaltherma/log on MQTT.

For the M5StickC, debug messages also appear on the built-in screen, making in-cabinet troubleshooting straightforward.

Build and Flash Steps

Step 1 — Set up the firmware

  1. Download the repository and open the folder in PlatformIO.
  2. If you are using an M5StickC, click the environment selector in the PlatformIO status bar and choose env:M5StickC. For M5StickCPlus choose env:M5StickCPlus. For ESP8266 choose nodemcuv2. Leave the default for a plain ESP32.
  3. Open src/setup.h and fill in your WiFi SSID, WiFi password, and MQTT broker address.
  4. Set RX_PIN and TX_PIN to the GPIO pins you will use for Serial2. The README recommends sticking to your board's RX2/TX2 (commonly GPIO 16 and GPIO 17). Do not use the RX0/TX0 pins — those are reserved for USB logging. M5StickC and M5StickCPlus environments set pins 26 and 36 automatically.
  5. Uncomment the #include line that matches your heat pump model, for example:
// #include "def/ALTHERMA(HPSU6_ULTRA).h"
#include "def/ALTHERMA(HYBRID).h"  // <-- this one will be used
// #include "def/ALTHERMA(LT-D7_E_BML).h"

If you are unsure of your exact model, pick the closest option or Default.h. The worst outcome is missing or null values — the pump will not be harmed.

Locale variants (French, German, Spanish) are available by adding the language folder to the path:

#include "def/German/ALTHERMA(HYBRID).h"
  1. Open the model header you just uncommented and uncomment each value line you want to monitor. Avoid enabling every value at once — a very large MQTT payload slows things down.
LabelDef labelDefs[] = {
  {0x60,0,304,1,-1,"Data Enable/Disable"},
  {0x60,2,315,1,-1,"I/U operation mode"},
  {0x60,2,303,1,-1,"Thermostat ON/OFF"},
  // {0x60,2,301,1,-1,"Silent Mode"},  // leave commented to skip
  1. Connect your ESP32 via USB, then click Upload in PlatformIO or press F1 → PlatformIO: Upload.

Step 2 — Wire the heat pump

  1. Switch off the heat pump at the circuit breaker.
  2. Open the panel to reach the main PCB and locate the X10A connector. If a bi-zone module is fitted and occupies X10A, use the X12A port on that module instead — the pins are identical.
  3. Connect as follows for the standard 4-pin X10A:
X10A pin Signal ESP32
1 5V 5V / VIN
2 TX (pump sends) RX_PIN (default GPIO 16)
3 RX (pump receives) TX_PIN (default GPIO 17)
4 NC — not connected —
5 GND GND

ROTEX units use an 8-pin X10A with a different layout — see the schematic image in the repository. Some ROTEX boards cannot supply enough 5V current for an ESP32; if yours cannot, power the ESP32 from a USB charger and connect only GND and the TX/RX lines.

Critical: Always connect the GND of the ESP32 to the GND pin of the X10A, even when powering from an external USB charger. Skipping this is the most common cause of communication failures.

  1. Double-check all connections, then restore power. Within moments, two new entities — AlthermaSensor and AlthermaSwitch — should appear in Home Assistant.

You can verify the MQTT stream directly:

mosquitto_sub -v -t "espaltherma/#"

Step 3 (optional) — Remote on/off control

ESPAltherma can drive a relay wired to the heat pump's external thermostat terminals, letting you turn heating on or off from Home Assistant. Consult your heat pump's schematic for the correct terminals. A second relay can enable or disable the cooling function. When the relay is active, ESPAltherma takes priority over the physical thermostat.

Step 4 (optional) — Smart Grid integration

Uncomment and configure PIN_SG1 and PIN_SG2 in src/setup.h, wire two relays to the SG1 and SG2 contacts on the pump, and publish a value of 0–3 to espaltherma/sg/set. This lets you shift heat pump load to cheap or surplus electricity periods — for example, setting mode 2 (Recommended ON) to pre-heat during low-tariff hours.

Troubleshooting Tips

Ideas to Extend It

Known limitations: ESPAltherma can read values and toggle relays, but it cannot write configuration values directly to the heat pump. Settings such as target temperatures must still be changed through the heat pump's own controls or thermostat.

Verdict

ESPAltherma is a well-maintained, practical project that fills a real gap: getting live data out of a Daikin Altherma heat pump without proprietary gateways or cloud accounts. The wiring requires opening the heat pump cabinet and working carefully with a live appliance once power is restored, so it suits makers who are comfortable with basic electrical safety. Once running, the Home Assistant integration is clean and the MQTT data stream is flexible enough to feed almost any dashboard or automation platform.

Sources

github.comraomin/ESPAltherma — repository & README

Facts in this article come from the project's public README and GitHub metadata at the time of writing. Images belong to their respective owners and link back to the original source.