BWT AQA Perla (Bluetooth) — Full Home Assistant integration via BLE + MQTT
Hi everyone,
I’d like to share a project I’ve been working on: a custom integration for the BWT AQA Perla water softener (Bluetooth model) that brings full monitoring into Home Assistant.
Background
The Wi-Fi BWT Perla models already have a great HA integration. But the Bluetooth version (AQA Perla Compact and Standard) had nothing. The official app connects via BLE, BWT has no public API — so I reverse-engineered it.
What you get
The integration runs as a systemd service on a Raspberry Pi and publishes everything to HA via MQTT autodiscovery — no YAML needed, entities just appear.
11 entities created automatically:
| Entity | Description |
|---|---|
| Salt remaining (kg + %) | Current salt level |
| Water usage today | Litres since midnight |
| Water usage yesterday | Previous day (consolidated by the device ~4am) |
| Water usage last 7 days | Rolling window |
| Regenerations today | Number of regeneration cycles |
| Salt autonomy | Estimated weeks and days remaining |
| Firmware | Device firmware version |
| Last sync | Timestamp of last BLE read |
| Salt alarm | Low salt level alert |
How it works
The service runs two alternating read modes:
- Full cycle (hourly): reads the complete BLE history — up to 5 years of daily records and 30 days of 15-minute records. Takes ~25s.
- Quick cycle (every 15 min): reads only the BROADCAST characteristic (salt level, alarm, indexes) and the new quarter-hour entries since the last full cycle. Takes ~3s.
Requirements
- Raspberry Pi 3/4/5 (built-in Bluetooth, placed within ~5m of the softener)
- Home Assistant with the Mosquitto Broker add-on
- BWT AQA Perla Bluetooth (Compact or Standard)
Installation
One command on the Pi:
bash
curl -sSL https://raw.githubusercontent.com/Micka41/bwt-aqa-perla-ble/main/install_bwt.sh | sudo bash
The script asks 6 questions (system user, MAC address, MQTT broker IP/port/credentials, autodiscovery on/off), then handles everything: Python venv, systemd service, permissions, autostart.
Updates later:
bash
sudo bash /opt/bwt/install_bwt.sh --update
Dashboard example
yaml
type: vertical-stack
cards:
- type: gauge
entity: sensor.bwt_aqa_perla_sel_pourcentage
name: Salt level
min: 0
max: 100
severity:
green: 40
yellow: 20
red: 0
- type: entities
title: BWT AQA Perla
entities:
- sensor.bwt_aqa_perla_sel_restant
- sensor.bwt_aqa_perla_conso_jour
- sensor.bwt_aqa_perla_conso_hier
- sensor.bwt_aqa_perla_autonomie_sel_jours
- binary_sensor.bwt_aqa_perla_alarme_sel
- sensor.bwt_aqa_perla_derniere_sync
Known limitations
- Tested only on the BWT AQA Perla Compact (firmware A22X V1.21) — feedback on other models very welcome.
- The regeneration counter in the device’s daily log is unreliable on some units; the integration falls back to counting
False→Truetransitions in the 15-minute history, which is more robust.
Links
Happy to answer questions, and especially interested to hear from anyone with a different BWT Bluetooth model!