BWT AQA Perla (Bluetooth) — Full Home Assistant integration via BLE + MQTT

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→True transitions in the 15-minute history, which is more robust.

Links

:link: GitHub: GitHub - Micka41/bwt-aqa-perla-ble: Récupère les informations de l'adoucisseur BWT AQA Perla en bluetooth (sel, consommation d'eau) et les publie en MQTT pour Home Assistant ou autre système · GitHub

Happy to answer questions, and especially interested to hear from anyone with a different BWT Bluetooth model!

I’ve moved this code into an integration.