Running on a Raspberry Pi¶
Aqualink Automate runs well on a Raspberry Pi sitting next to your pool equipment, wired to the AquaLink RS-485 bus. This page is the Pi-specific quick start; for the full option reference see configuration.md, and for non-Pi hosts see hardware-server-automation.md.
Which Pi¶
| Model | Notes |
|---|---|
| Pi 5 / Pi 4 | Plenty of headroom; also fine for the Docker image with the Matter bridge. |
| Pi 3 / Zero 2 W | Ample for the app + web UI. The Zero 2 W (512 MB RAM) is the lowest-cost always-on option. |
Use the 64-bit (arm64) Raspberry Pi OS (Bookworm or newer). The .deb/.rpm/.tgz
are built for arm64 (and amd64); 32-bit Raspberry Pi OS is not currently supported.
Install¶
Download the arm64 .deb from the latest release
and install it — the package brings its own runtime libraries, so it works on a stock
Raspberry Pi OS with no extra dependencies:
This installs the binary, a systemd service, the aqualink service account (added to
the dialout group for serial access), and a default config at
/etc/aqualink-automate/aqualink-automate.conf. The service is enabled on boot but not
started yet — it needs your serial port first (below).
Connect the RS-485 bus¶
You need an RS-485 transceiver between the Pi and the AquaLink bus. Two common ways:
A. USB-RS485 adapter (easiest)¶
Plug in a USB-RS485 adapter (FTDI, CH340, or CP2102 based). It appears as /dev/ttyUSB0:
Because /dev/ttyUSB0 can renumber across reboots/replugs, pin a stable name. Copy the
shipped udev template and uncomment the line for your adapter:
sudo cp /usr/share/doc/aqualink-automate/examples/60-aqualink-automate.rules.example \
/etc/udev/rules.d/60-aqualink-automate.rules
sudoedit /etc/udev/rules.d/60-aqualink-automate.rules # uncomment your adapter
sudo udevadm control --reload-rules && sudo udevadm trigger
ls -l /dev/aqualink-rs485 # -> your adapter
B. GPIO UART + RS-485 HAT (no USB port used)¶
If you use a MAX485/transceiver HAT on the 40-pin header, enable the PL011 UART and free it from the serial login console:
sudo raspi-config # Interface Options -> Serial Port:
# login shell over serial? NO
# serial hardware enabled? YES
For full-rate PL011 on /dev/ttyAMA0 (rather than the lower-quality mini-UART), add to
/boot/firmware/config.txt:
Reboot, then use serial-port = /dev/ttyAMA0.
Configure and start¶
Set your serial device in the config, then start the service:
sudoedit /etc/aqualink-automate/aqualink-automate.conf
# serial-port = /dev/aqualink-rs485 (or /dev/ttyUSB0, or /dev/ttyAMA0)
sudo systemctl start aqualink-automate
sudo systemctl status aqualink-automate
journalctl -u aqualink-automate -f # live logs
The web UI is at http://<pi-address>:9000. To use port 80 instead, set
http-port = 80 in the config (the service is granted CAP_NET_BIND_SERVICE, so it
does not need to run as root). If you expose the UI to your LAN, consider setting
api-auth-token.
Updating / uninstalling¶
sudo apt install ./aqualink-automate_<newer>_arm64.deb # upgrade (config is preserved)
sudo systemctl status aqualink-automate # restarts automatically on upgrade
sudo apt remove aqualink-automate # remove (keeps /etc config)
sudo apt purge aqualink-automate # remove config + state too
Troubleshooting¶
statusshows the serial port can't be opened — check the device path, that the adapter is plugged in, and that theaqualinkuser is indialout(id aqualink). After adding a udev rule, re-runudevadm trigger.- UI not reachable from another machine — the default binds
0.0.0.0; check the Pi's firewall and that you used the Pi's LAN address and port (9000by default). - Logs — everything goes to the journal:
journalctl -u aqualink-automate -e.