// the find
40rbidd3n/Hydro0x01
Secure, production-grade IoT hydroponic automation system with ESP32, MQTT telemetry, and real-time dashboard
HydroponicOne is an ESP32-based hydroponic controller with a Fastify/React dashboard, MQTT telemetry piped into InfluxDB, and RSA-signed OTA firmware updates. It sits in the gap between a weekend Arduino project and a proper industrial controller — aimed at serious hobbyists or small-scale growers who want real data without buying proprietary hardware. The stack is modern and the security story is better than most IoT projects of this size.
RSA-2048 signed OTA is a genuine differentiator — most hobby IoT projects skip firmware signing entirely, and the included Python scripts for key generation and signing make it actually usable. The firmware is organized around clear C++ abstractions (SensorManager, RelayManager, PumpController) rather than a single monolithic main.cpp, which is unusual for ESP32 projects and makes adding sensors tractable. Using both PostgreSQL for config state and InfluxDB for telemetry is the right call — time-series data in a relational DB is a known pain point this sidesteps. The calibration guide and hardware wiring docs are thorough; most open-source hardware projects ship README-and-good-luck.
The firmware relies on a single MQTT connection with no documented reconnect strategy beyond what AsyncMQTT handles internally — if the broker drops during a dosing cycle, actuator state can get stuck and the ESP32 won't know. There is no automated test suite anywhere in the repo; the CI workflow presumably just builds, which means regressions in pH dosing logic will only surface when plants die. Splitting the backend dependency chain across PostgreSQL, InfluxDB, Mosquitto, and Node.js creates a non-trivial local setup burden — the docker-compose helps but still requires four services before you can see a sensor reading. The roadmap mentions AI diagnostics and LoRa mesh, but the current firmware has no offline autonomous mode documented, so a network outage leaves the system blind to alerts.