Follow-up from the hot water Wi-Fi adapter: I have put the ESPHome component for HW211-family heat pump controllers on GitHub.
The repository is sjtrny/esphome-hw211. It is an ESPHome external component that talks to the controller locally over Modbus RTU and generates Home Assistant entities from the register map.
The main reason for pulling it out into a component is that the register list is long and fiddly. Rather than hand-writing a wall of YAML sensors, the component reads a JSON version of the Modbus spec and creates sensors, binary sensors, and, if you explicitly enable them, writable controls.
The basic setup looks like this:
external_components:
- source:
type: git
url: https://github.com/sjtrny/esphome-hw211
components: [hw211]
uart:
id: rs485
tx_pin: GPIO17
rx_pin: GPIO18
baud_rate: 9600
data_bits: 8
parity: NONE
stop_bits: 1
modbus_controller:
- id: hw211_modbus
address: 99
update_interval: 30s
hw211:
modbus_controller_id: hw211_modbus
create_controls: false
That starts in a read-only mode. You get local telemetry in Home Assistant without handing the heater back to a cloud service, and without writing values to the controller until you are ready.
The component currently supports the DTU/WiFi register map and a HW211 sheet from the extracted protocol data. It includes scaling for the controller's temperature and numeric formats, enum labels for common operating modes, and bitfield parsing for status and fault registers.
There is also an optional raw_registers mode, which creates disabled-by-default raw register sensors. That has been useful while comparing the datasheet, the Home Assistant forum notes, and what the unit is actually returning on the wire.
Hardware-wise, you need an ESP32 with RS485. The heat pump's Wi-Fi connector gives you 12V, ground, and the RS485 pair, so do not feed that 12V straight into a bare ESP32 board. I used a Waveshare ESP32-S3-RS485-CAN module because it can accept the supply voltage and already has RS485 on board.
This should be useful for other systems using the same HW211-family controller or Aqua Temp/HiTemp/Handy Heat Pump app ecosystem but ompatibility is not guaranteed and use is at your own risk.
The write side is deliberately opt-in:
hw211:
modbus_controller_id: hw211_modbus
create_controls: true
That can expose numbers, selects, and switches for writable registers such as power, mode, target temperatures, schedules, offsets, and other controller parameters. I would leave it off until you have confirmed your model, wiring, slave address, and register map.
The repo also includes the extracted protocol JSON and the script used to generate it from the EVO270-1 Modbus spreadsheet. Most of the component code was written with Codex, which was very handy for turning the spreadsheet-shaped mess into generated ESPHome entities.
Project: sjtrny/esphome-hw211.