I have a WaterFurnace 7-Series geothermal heat pump. Like most WaterFurnace owners who want integration with Home Assistant, my options were either the Symphony cloud add-on (with the existing HA cloud integration) or Cody Cutrer’s excellent waterfurnace_aurora Ruby gem, which bridges the heat pump’s maintenance port to MQTT via a Raspberry Pi.
I didn’t want a cloud dependency, and while the Ruby bridge works well, I wanted something that could run on an ESP32 and speak the ESPHome native API directly - no Pi, no MQTT broker in the middle. So I ported the protocol to C++ as an ESPHome custom component.
How it works
WaterFurnace Aurora heat pumps have an RJ45 “AID Tool” port on the ABC board that exposes an RS-485 interface. The protocol is Modbus RTU with some proprietary function codes that allow reading large batches of non-contiguous registers in a single transaction. Cody Cutrer did the hard work of reverse-engineering all of this for the Ruby gem; I just translated it into something an ESP32 can run.
The hardware is straightforward: an ESP32, a MAX485 transceiver module (the kind with exposed DE/RE pins - avoid the “automatic flow control” modules), and a standard Ethernet cable with one end cut off and wired to the transceiver. The repo has wiring diagrams. One thing to be careful of: pins 5-8 on the RJ45 port carry 24VAC - only connect pins 1-4.
What you get
The component gives you a climate entity with full thermostat control (heat, cool, auto, emergency heat, dual setpoints, fan modes). On IntelliZone 2 systems, each zone gets its own climate entity.
Beyond the thermostat, it exposes the wealth of sensor data the heat pump reports - air and water temperatures, compressor speed, power consumption broken down by component (compressor, blower, aux heat, loop pump), refrigeration pressures, water flow rate, COP, and more. There are around 55 sensors, 15 binary sensors, and various controls for things like DHW setpoints, blower speeds, and humidity targets. The full entity list is in the repo docs.
The component auto-detects your hardware configuration at startup - AXB accessory board, variable speed drive, IZ2 zones, blower type, energy monitor level - so the YAML configuration is minimal. Basically just your GPIO pins.
Firmware requirement
Your thermostat firmware needs to be AWL version 3.0 or above for full control access. Older versions will report some sensor data but won’t let you change setpoints or modes. You can check the version in the thermostat’s settings screen; your WaterFurnace dealer can update it if needed.
Energy tracking
The total power usage sensor can be fed into HA’s Riemann Sum Integral helper (kilo prefix, hours for time unit) to get kWh values for the Energy Dashboard. This is useful if you want to evaluate whether your HVAC automations are actually saving energy or just moving consumption around.
Installation
substitutions:
name: waterfurnace-aurora
friendly_name: "WaterFurnace"
uart_tx_pin: GPIO17
uart_rx_pin: GPIO16
flow_control_pin: GPIO4
packages:
waterfurnace.aurora: github://daemonp/esphome_waterfurnace_aurora/waterfurnace_aurora.yaml@master
esphome:
name: ${name}
friendly_name: ${friendly_name}
esp32:
board: esp32dev
framework:
type: arduino
logger:
api:
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
Help wanted
I’ve been running this on my 7-Series and it’s been stable, but WaterFurnace ships a lot of different configurations and I can only test against what I have. If you have a 3-Series, 5-Series, IZ2 multi-zone setup, or anything else I haven’t been able to test against, I’d genuinely like to hear whether it works correctly - or doesn’t. Issues and pull requests are welcome.
There’s also a 3D-printable project box by @benpeart if you want a tidy enclosure for the hardware.
Documentation and source: github.com/daemonp/esphome_waterfurnace_aurora