Aqualisa Smart Digital Shower

I bought an Aqualisa Visage Q Smart Digital Shower. It equipped an ESP32 chip. It connects to Azure IoT hub in the cloud over Wi-Fi using TLS-enabled MQTT. The hub’s address is aqualisa-production-iothub1.azure-devices.net. I did the followings and am managed to report the shower’s status to Home Assistant. However, I am not yet able to control it. Here is what I did.

  1. My Home Assistant and Mosquitto MQTT broker (non-TLS) are running on a Raspberry Pi. I set up a local DNS record on my router which resolves aqualisa-production-iothub1.azure-devices.net as the Pi’s IP address. If your router does not support it, you will have to install a dnsmasq (e.g. using a Home Assistant add-on), add the above DNS record, and set up a dedicated Wi-Fi network to use the dnsmasq as the DNS resolver. Configure your shower to connect to the Wi-Fi network.
  2. Run a second Mosquitto MQTT broker with TLS-enabled listening on TCP port 8883 on the Pi. It will receive the messages from the shower and forward them to the primary MQTT broker. Here is my config file:
listener 8883
cafile /mosquitto/certs/ca.crt
certfile /mosquitto/certs/server.crt
keyfile /mosquitto/certs/server.key
require_certificate false
allow_anonymous true
connection mosquitto1883
address <primary_mqtt_broker_address>:1883
remote_username <username_on_primary_mqtt_broker>
remote_password <password_on_primary_mqtt_broker>
bridge_insecure true
topic devices/# both 1 "" aqualisa/

The last line appends “aqualisa/” to the messages’ topic after forwarding to your primary MQTT broker.

  1. Connect an MQTT Explorer to both brokers, turn on and off the shower for a few seconds, and ensure you see the shower’s messages. On the second broker, you should see the topic “devices/{sn}/messages/events” where {sn} is your shower’s serial number:

Copy the serial number.
On the primary broker, you should see the topic “aqualisa/devices/{sn}/messages/events”.

  1. Paste the following AI prompt to your favorite AI model (I used Google Gemini). Follow the procedure to add the shower to Home Assistant. Replace {sn} below with the serial number you copied above.

In an MQTT broker, there is a topic “aqualisa/devices/{sn}/messages/events/name=value”. It is a digital shower’s status. The value is like this:

{“message_type”:1,“live_on_off”:0,“live_at_temperature”:0,“live_flow”:2,“live_outlet”:1,“live_temperature”:32,“live_timer”:0,“live_time_run”:0,“request_on_off”:0,“request_flow”:2,“request_outlet”:1,“request_temperature”:38,“request_timer”:0,“usage_run_time”:12,“usage_average_temperature”:22,“timestamp”:“2026-11-07T20:55:07Z”}

Provide detailed procedure on how to add an MQTT device on Home Assistant’s graphical user interface. The device shall contain 3 sensors:

  1. a binary sensor to indicate the shower’s on/off state. The attribute is “live_on_off”.

  2. a temperature sensor to indicate the water temperature. The attribute is “live_temperature”.

  3. A usage run time. The attribute is “usage_run_time”.

Then you will have the shower set up in Home Assistant.

If you know how to turn on or off the shower, please share what topic and message should be published.

1 Like

I should not be able to “control” the shower because the command message is HMAC-SHA256 signed. See the echo_string in the following JSON published from the cloud to the shower:

{
  "message_type": 1,
  "live_on_off": 1,
  "live_at_temperature": 1,
  "live_flow": 2,
  "live_outlet": 1,
  "live_temperature": 20,
  "live_timer": 0,
  "live_time_run": 0,
  "request_on_off": 1,
  "request_flow": 2,
  "request_outlet": 1,
  "request_temperature": 38,
  "request_timer": 0,
  "mode_adc": 249,
  "echo_string": "VVXVR6jQZCTvwFR3uqFLdpPo6iTedkjWNt+7HmTPexycTiF7/1ZEbI0g8mK7zKUw1mnR94c/rQETwQPyJpnbPzZq/tMtuI/5JGU2/+7e1Ldu5j0UQs778fTuTTVdAwvqAmo7JU1O63Jf4pW7KMQK/7KNgZnfZoxT8fJjJMkrWXo=",
  "timestamp": "2025-11-09T14:15:54Z"
}

Thanks for this, I got a similar shower last week and have been looking for a way to do this! Just need to set up the second MQTT broker and test it out.

Are you able to set it up with the instructions?

Yes, your instructions were great.

In the end I decided to go down another route. I only wanted to see when the shower first came on in the morning to start my Good Morning routine. So I put a smart plug on the shower which senses when the power spikes and the shower is on!

This probably has all the solutions you need for control.

I got this working a couple of years back now.

I set the shower up as a template climate device as that made most sense at the time.

I read through the threads that were active a few year ago. But Aqualisa has made quite a lot of changes in the few years. At least the findings do not apply to my shower.

I captured the “action” messages the Azure MQTT broker sent to the shower. The messages also include a signature or hash. The shower only executes requests that come with correct signatures. It is not possible to generate the signature without knowing the key(s) and algorithm.

Just this week got a new Aqualisa smart shower and I’ve come to exactly the same conclusion as you after much MQTT MITM poking. Reading of values is fine but setting the shower state/temp etc appears to be beyond my capabilities! I was thinking of perhaps (while not fully local so less than ideal) connecting the shower using the officialy supported Google Home and then managing that via HA somehow. I really want to be able to have a zigbee switch near the shower to turn on a preset temp/flow rate based on which button is pressed.

Linking via Google Assistant works - it allows for on/off and temperature adjustment but not flow or shower output (if you have multiple shower heads). This way the app still works too so I suppose it’s not all bad - just cloud based which is not ideal.