β οΈ WARNING: This project involves 230V AC mains voltage!
- Only proceed if you have basic electronics knowledge.
- Always use a Residual Current Device (RCD/FI circuit breaker) for the pump circuit.
- Disconnect power before working on the circuit.
- Keep low-voltage (sensor) wiring separate from mains wiring.
- If in doubt, consult a qualified electrician.
- This project is NOT certified (no CE/UL mark). For personal use only!
Manage your swimming pool the smart way - enjoy it in a comfortable and affordable (less than 100β¬) way with professional-grade reliability.
π Discussions: GitHub Discussions
New to the project? Start here:
- π Quick Start Guide β Step-by-step setup for beginners (recommended!)
- β Frequently Asked Questions (FAQ) β Troubleshooting common issues
- β Timed circulation for cleaning
- β Solar heating control via additional pump
- β Multiple operation modes: Auto, Manual, Boost, Timer
- β Temperature-based automation (e.g., disable solar heating if pool is too hot)
- β Home Assistant MQTT Discovery β Native HA integration (v3.3.0+)
- β
Independent of specific smart home servers
- β Home Assistant via MQTT Discovery
- β openHAB via MQTT (manual configuration required)
- β
State Persistence β All settings survive reboots and power failures
- Operation mode, temperatures, timer settings automatically restored
- ESP32 NVS storage
- β
System Health Monitoring β Continuous health checks
- Memory monitoring every 10 seconds
- Auto-reboot at critical memory threshold (8KB)
- Hardware watchdog timer (30s timeout)
- β
Memory Optimization β Efficient resource usage
- 90% reduction in heap fragmentation
- 2,880-28,800 fewer allocations per day
- Fixed millis() overflow for operation beyond 49.7 days
- β
Automatic Recovery β Self-healing capabilities
- Auto-recovery from memory exhaustion
- Watchdog timer prevents system hangs
- Sensor auto-recovery with fast re-polling
- Boot-loop detection with Safe Mode
- NTP graceful degradation (3-stage)
- Zero manual intervention required
- β
Full Web Dashboard β Direct device management without Home Assistant
- AP Mode: Connects as
Pool-Controller-SetupWiFi hotspot at192.168.4.1 - STA Mode: Web server on port 80 at the device's local IP
- REST API for programmatic access (
/api/status,/api/config, etc.) - Password-protected with session management (cookie-based, SHA-256)
- Tabs: Dashboard, WiFi Setup, MQTT Settings, Configuration, Security & Update
- OTA firmware update via web interface
- AP Mode: Connects as
- β
Over-The-Air (OTA) Updates β Remote firmware updates via WiFi
- No physical access required for updates
- Password-protected secure updates
- mDNS discovery support
- β Time sync via NTP (configurable server, default: pool.ntp.org)
- β Configurable timezone with DST support (10 major timezones available)
- β Logging information via MQTT
- β Modern libraries (ArduinoJson 7.3.0, NTPClient 3.2.1)
- β Clean, formatted code following project standards
| Guide | Description | For |
|---|---|---|
| Quick Start Guide | Step-by-step setup for beginners | π New users |
| FAQ | Troubleshooting common issues | β All users |
| Users Guide | Web dashboard, operation modes, MQTT | ποΈ Intermediate users |
| Hardware Guide | Assembly, wiring, parts list | π§ Builders |
| MQTT Configuration | Home Assistant Discovery, entity reference | π Smart home integrators |
| State Persistence | How settings are saved across reboots | πΎ Advanced users |
| OTA Updates | Remote firmware updates | π‘ Developers |
| ESP32 Schematic Optimization (DE) | Pin assignment and optimization | π Hardware experts |
- Codebase is now ESP32-only β cleaner, faster, more reliable
- Removed all
#ifdef ESP8266conditional compilation - Platform: esp32dev (ESP32 DevKit V1)
- P7: Fast Sensor Recovery β DallasTemperatureNode polls every 5s (instead of 300s) when sensor reads NaN
- P8: Boot-Loop Detection β NVS-based boot counter, Safe Mode after 4 consecutive short boots (<5 min), all relays forced OFF
- P9: Configurable Fallback Times β ConfigManager settings
time-loss-green-hoursandtime-loss-red-hoursreplace hardcoded NTP thresholds
- Critical Bug Fixes
- Fixed critical logging bug (vsnprintf buffer initialization)
- Fixed millis() overflow for reliable operation beyond 49.7 days
- Added buffer validation and overflow detection
- New Features
- State persistence across reboots and power failures
- Home Assistant MQTT Discovery support
- System health monitoring with auto-reboot
- Hardware watchdog timer (ESP32)
- Performance Improvements
- Eliminated 10+ String allocations per measurement cycle
- Reduced heap fragmentation by ~90%
- Optimized memory usage for 24/7 operation
See CHANGELOG.md for complete details.
- Configurable NTP Server (currently hardcoded: europe.pool.ntp.org)
- Smart learning: Improved pool pump circulation optimization
- Two separate circulation cycles
- Temperature-based cleaning circulation time
- Improved operation without WiFi connection
- Display and button setup interface
- See also the issue list
Configure your preferred MQTT protocol in the device settings:
mqtt-protocol = "homeassistant"- Home Assistant native discovery (only option in v3.3.0+)
See docs/mqtt-configuration.md for setup details.
All controller states are automatically saved and restored:
- Operation modes and settings
- Temperature thresholds
- Timer configurations
- Relay states
See docs/state-persistence.md for details.
We welcome contributions! Before submitting a pull request, please:
- Read the coding guidelines:
.github/CODING_GUIDELINES.md - Run local linting:
make lint-fix && make lint - Test your changes:
make build(builds for ESP32) - Check for issues: See
.github/QUICK_REFERENCE.mdfor common fixes
All code must pass the same Super-Linter checks run in CI (cpplint for C/C++, EditorConfig, and Markdown/YAML/JSON validation) before merge.
- LΓΌbbe Onken for
TimeClientHelper - All contributors for their valuable input!
MIT License β Free to use, modify, and share.
- Discussions: GitHub Discussions
- Home Assistant Community: community.home-assistant.io
- Reddit: r/homeassistant
If you encounter issues:
- Check the FAQ for common problems.
- Search the Discussions.
- Open a new issue with:
- A detailed description of the problem.
- Screenshots (e.g., serial monitor output, Web Dashboard).
- Your hardware setup (ESP32 model, relay module, sensors).
- Firmware version (check Web Dashboard or serial monitor).