Home Assistant custom component for Pool Comfort, Galaxywind and GWCD swimming pool heat pumps. Install via HACS, control your pool heat pump locally — no cloud, no vendor account needed.
Local UDP client and Home Assistant integration for Pool Comfort /
Galaxywind / GWCD pool heat pumps. Reverse-engineered from the
com.gwcd.htc_en_oem Android app — works fully offline against the heat pump
on UDP 1194. No cloud, no vendor account.
Tested on a Pool Comfort unit; captures from other Galaxywind / GWCD pumps that speak the same protocol are welcome. If you have a pool heat pump that uses the Pool Comfort or Galaxywind mobile app, this integration should work.
- Click the button above (or in HACS go to ⋮ → Custom repositories, paste
https://github.com/corekill/poolcomfort-galaxywind, category Integration). - Find Pool Comfort / Galaxywind heat pump in HACS and Download.
- Restart Home Assistant.
- Add the integration:
You'll be asked for the heat pump IP and the device password (default
123456). The serial number is detected automatically.
- Copy
custom_components/poolcomfort/into your Home Assistantconfig/custom_components/. - Restart Home Assistant.
- Use the Add integration button above.
- Climate entity — target temperature, HVAC mode (off / auto / heat / cool), current water temperature.
- Sensors — water inlet temperature, water outlet temperature, ambient temperature, serial number, device status and raw state block diagnostics.
- Binary diagnostic sensors — compressor, high/low fan speed, circulation pump, four-way valve, pressure/flow switches and related working details.
- Local-only — all traffic stays on your LAN over UDP
1194. No cloud account, no internet dependency. - Polling — 30 s by default. The integration maintains a single persistent UDP session with keepalive pings, so only one session slot is used on the pump.
Any heat pump that pairs with the Pool Comfort / Galaxywind / GWCD
com.gwcd.htc_en_oem Android app should work — these include OEM-rebranded
units (Pool Comfort, Galaxywind, GWCD, several Chinese pool heat pump brands).
Confirmed:
- Pool Comfort (one unit, FW shipped 2023-ish)
If yours works (or doesn't), please open an issue with a small PCAP and the
model number — see docs/capture-mikrotik.md.
| Path | What it is |
|---|---|
poolcomfort_local/ |
Pure-Python library: discovery, login, query, set commands |
custom_components/poolcomfort/ |
Home Assistant custom component |
scripts/ |
PCAP analysis: dump frames, extract auth challenge-response pairs |
docs/ |
Reverse-engineering notes (protocol, capture HOWTO) |
tests/ |
pytest test vectors backed by real captures |
The Home Assistant component is built on a standalone library you can use directly:
python -m venv .venv
. .venv/bin/activate
pip install -e .
# Discover by serial, query state
python -m poolcomfort_local.cli --serial <serial> --password 123456 status
# Or by IP
python -m poolcomfort_local.cli --host <ip> --password 123456 status
python -m poolcomfort_local.cli --host <ip> --password 123456 diagnostics
# Control
python -m poolcomfort_local.cli --host <ip> --password 123456 power on
python -m poolcomfort_local.cli --host <ip> --password 123456 set-temp 28
python -m poolcomfort_local.cli --host <ip> --password 123456 set-mode 2Set-temp and set-mode require the pump to be powered on; the CLI checks first
unless --assume-on is passed.
PCAP analysis (needs scapy):
pip install -e '.[pcap]'
python scripts/pcap_dump.py capture.pcap --pump <ip>
python scripts/pcap_auth_pairs.py capture.pcap --pump <ip>- UDP
8818— LAN discovery - UDP
1194— control session - Device type
0x000d— pool heat pump - Login:
MD5(nonce + challenge + MD5(password)), two-step handshake - Per-attribute byte order matters: target temp is BE u16, mode and power
are first-byte / LE u16 — see
docs/protocol.md. - After every SET, the pump expects an immediate query and ACK on its
0b0anotify, otherwise the session goes stale within ~2 s.
Full notes in docs/protocol.md.
- Working details bitfield is decoded from the same
pump_info/fault2logic used by the Android app. The current mapping is verified on one Pool Comfort unit and kept alongside raw diagnostic words for easier validation on other OEM models. - Session keepalive — the firmware kills idle sessions within seconds. The integration keeps the session alive with periodic pings and automatically reconnects if needed. Failed reconnects use exponential backoff so a flaky or wedged pump is not flooded with half-open login sessions.
- One physical unit tested. More captures from other devices would help.
PCAPs from other heat pumps, parsed attributes, and protocol findings are very
welcome. Please do not commit captures with router credentials, public IPs,
or unrelated LAN traffic — see CONTRIBUTING.md.
Built from reverse-engineering the com.gwcd.htc_en_oem Android app and
MikroTik LAN captures. Galaxywind / GWCD / Pool Comfort are trademarks of their
respective owners; this project is not affiliated with or endorsed by any of
them.
If this integration saved you time or works well for you, consider buying me a coffee.
MIT — see LICENSE.
