Disclaimer: This project involves reverse engineering a proprietary product and modifying mains-connected hardware. This work should only be carried out by qualified professionals with the appropriate electrical and electronics expertise. Incorrect wiring or component selection can result in electric shock, fire, or serious injury. Use entirely at your own risk. You may void your warranty, damage your device, or cause injury or death. No liability is accepted for any damage resulting from this project.
After my Grohe Blue Home's main PCB failed, I contacted Grohe support hoping to get a replacement board. No luck — Grohe's only offer was to buy a completely new unit. Rather than throwing away an otherwise functional appliance, I reverse engineered the PCB, designed my own replacement, and built it around a NodeMCU (ESP8266) module.
The result is a fully functional smart water dispenser with a web interface and API.
The Grohe Blue Home runs on 24V AC from its internal transformer. You need to convert this to two DC rails:
- 24V DC — for the solenoid/diaphragm pumps
- 5V DC — for the NodeMCU and sensors
Mount both converters where the original PCB sat. The original PCB footprint has enough space if you use compact step-down modules.
There are three 24V DC pumps to control. Wire them as follows:
| Wire colour | Function |
|---|---|
| Brown | GND (−) |
| White / Green | +24V DC (switched) |
| Grey | Water in GND (−) |
| Yellow | Water in +24V DC |
Important: Start with DC-capable MOSFET trigger boards — not relays. Relays work initially but fail within a few weeks under the switching frequency and inductive load. MOSFET trigger modules are far more reliable here.
Use one MOSFET trigger per pump (three total) switched from NodeMCU GPIO pins:
| NodeMCU pin | Pump |
|---|---|
| D2 | Water pump (DC) |
| D4 | Water output pump |
| D0 | CO2 output pump |
The compressor pump runs on AC. Use an AC-capable MOSFET (e.g. a BTA16 or similar TRIAC/MOSFET board) to switch it safely from a low-voltage GPIO signal.
| NodeMCU pin | Pump |
|---|---|
| D3 | AC filter/compressor pump |
Connect both digital sensors to the NodeMCU:
| NodeMCU pin | Sensor |
|---|---|
| D7 | CO2 pressure sensor (HIGH = alarm, LOW = OK) |
| D6 | Moisture / leak sensor (HIGH = dry, LOW = wet) |
Both sensors are binary — no additional circuitry required beyond a pull-up if your module doesn't include one.
This was the trickiest part. The cable running to the tap has five wires:
| Wire colour | Function |
|---|---|
| White | GND |
| Green | 5V DC |
| Brown | A0 (analog signal from hall sensor) |
| Yellow | Unknown — not yet decoded |
| Dark brown | Unknown — not yet decoded |
The tap contains a hall effect sensor that generates pulses when you touch it. These pulses are read on the NodeMCU's A0 pin with fast oversampling to detect a touch event reliably.
Known limitation / open TODO: Only basic single-touch detection is working. The tap's LED ring no longer functions, and the yellow and dark brown wires have not been decoded. Multi-touch gestures are not yet implemented. Contributions and reverse engineering help are very welcome.
A responsive dark-themed web UI is served directly from the NodeMCU on port 80. It works on mobile and desktop browsers.
Three pages:
- Home — one-tap presets: Water, Water + CO2, CO2 only
- Pumps — granular control; select any combination of the four pumps and set duration
- Settings — configure WLAN credentials, pump startup delays, duration presets, reboot
The tap's hall sensor is wired to A0. When a tap is detected (voltage drops below the threshold), the NodeMCU triggers the configured pump sequence automatically — no phone required. This can be enabled or disabled from the Settings page.
The home page offers three quick-launch buttons matching the original Grohe experience:
- Water — runs the water pump for the selected duration
- Water + CO2 — runs water and CO2 together
- CO2 — CO2 flush only
The Pumps page gives full control: tick any combination of the four pumps and pick an exact duration.
All settings survive reboots (stored in EEPROM):
| Setting | Description |
|---|---|
| WLAN SSID / Password | Station mode credentials |
| Pump startup delays | Per-pump stagger delay (0–5000 ms) |
| Duration presets | Five configurable quick-duration buttons |
| Post-flush offset | Seconds between the DC/AC pumps and the WATER_OUT/CO2_OUT valves switching off at cycle end (0–60 s), plus a mode: DC/AC stop later (default) or earlier than the valves |
| A0 logic | Enable / disable hall sensor trigger |
| Reboot | One-tap reboot from the UI |
If the NodeMCU cannot connect to your network it falls back to Access Point mode:
- SSID:
GroheBlueHome - Password:
grohe1234
Connect to this AP and open http://192.168.4.1 to configure your WLAN.
Automate or integrate the dispenser with any home automation system:
| Endpoint | Method | Description |
|---|---|---|
/api/status |
GET | JSON: CO2 state, moisture, pump active, time remaining, A0 voltage |
/api/run |
GET | Start the currently selected pump sequence |
/api/stop |
GET | Stop all pumps (with automatic post-flush) |
/run |
POST | Start pumps — params: p1, p2, p3, p4, duration |
/stop |
POST | Stop all pumps |
/savewifi |
POST | Update WLAN credentials |
/saveconfig |
POST | Save pump delay settings |
/savedurslots |
POST | Update duration preset values |
/savepostflush |
POST | Update post-flush offset (seconds) and mode |
/reboot |
POST | Reboot device |
Status response example:
{
"co2": "OK",
"moisture": "dry",
"pump": true,
"remaining": 12,
"voltage": 3.8
}Firmware can be flashed over WiFi using Arduino IDE's OTA feature:
- Hostname:
GroheBlueHome - OTA password:
GroUp123
| Component | Notes |
|---|---|
| NodeMCU 1.0 (ESP-12E) | Main controller |
| 24V AC → 24V DC converter | Powers the pumps |
| 24V DC → 5V DC step-down | Powers NodeMCU |
| 3× DC MOSFET trigger module | One per 24V DC pump |
| 1× AC MOSFET / TRIAC module | For compressor pump |
| Wiring, connectors, enclosure | To taste |
The biggest open item is the tap LED ring and full touch gesture decoding. If you have a logic analyser capture of the original PCB's tap cable signals, or you have successfully decoded the protocol, please open an issue or pull request — it would complete this project.
All contributions are welcome.