Hydroponic Control is a Home Assistant integration that turns your existing smart plugs and sensors into a fully automated hydroponic grow system — no YAML, no coding, configured entirely through the UI in minutes.
Whether you're running a tower garden, an NFT channel, a DWC bucket, or any other hydroponic setup, this integration handles the irrigation cycle, grow light photoperiod, water temperature management, and safety monitoring for you. It works with any hardware — Tuya, Zigbee, ESPHome, MQTT, or Wi-Fi — because it controls your existing Home Assistant entities rather than talking to hardware directly.
- Irrigation cycle — pump x minutes on / y minutes off, adjustable live.
- Adaptive pause — an optional switch scales the pause between pulses by the air temperature (×0.5 hot … ×1.5 cold, three tunable thresholds), so warmer days water more often. Fail-neutral: off or without a reading, the pause is unchanged.
- Night mode — an optional switch that swaps in separate night pump on/off times while the sun is below the horizon (uses the built-in
sun.sun, no setup needed). Combines with the adaptive pause. Fail-neutral: off or without a sun entity, the daytime timing applies. - Maintenance run — a one-tap button runs the pump once for the configured on-time, still gated by safety (handy for maintenance/priming). The
run_pumpservice does the same programmatically. - Light photoperiod — on/off times that handle the midnight crossing and DST.
- Dry-run protection — the pump never runs when the reservoir is empty.
- Pump fault detection — verifies real power draw after switching on (needs a power sensor).
- Water-temperature window — alerts when too hot/cold, optionally drives a fan/heater.
- Frost protection — blocks irrigation while the air temperature is below an adjustable threshold (needs an air/outdoor temperature sensor), with debounce and hysteresis.
- Irrigation watchdog — raises an alarm if the pump hasn't run for longer than a configurable limit, and exposes a Last watering timestamp. Off by default (set the limit to enable); suppressed during maintenance and while a blocking alarm is active.
- Restart-safe — the last run is persisted, so after a Home Assistant restart the integration resumes the remaining pause instead of pumping immediately, waits a short startup grace (default 30 s, for Zigbee/devices to come back), and the Last watering timestamp survives the reboot.
- Flood / leak detection, max-runtime backstop, sensor-unavailable watchdog (fail-safe).
- Operating modes — Auto, Manual, Maintenance (auto-expiring), Vacation.
- Notifications — fires
hydroponic_control_alert/_clearedevents and exposes aProblembinary sensor; can also call a notify service directly on both alert and recovery, with the system name in the title, measured values in the text, and a choice of English or German.
If you use Home Assistant to automate your home and want to extend that to your hydroponic garden, grow room, or indoor growing setup, this integration is the easiest way to do it. Instead of writing complex YAML automations for irrigation timing, grow light schedules, and safety shutoffs, Hydroponic Control handles all of that as a single, configurable integration with a proper UI.
It is especially useful for:
- Tower gardens (Lettuce Grow, Tower Garden, DIY PVC towers)
- NFT (Nutrient Film Technique) and DWC (Deep Water Culture) systems
- Kratky and other passive setups where you want light photoperiod control
- Grow rooms and grow tents where temperature monitoring and fan/heater control matters
- Home Assistant 2024.12 or newer.
- Existing entities for at least a pump (a
switch,input_booleanorlight). A water/leak sensor is strongly recommended (it powers the dry-run protection).
Oder manuell:
- HACS → ⋮ → Custom repositories.
- Add
https://github.com/DDA1010/hydroponic-control, category Integration. - Install Hydroponic Control, then restart Home Assistant.
Copy custom_components/hydroponic_control into your config/custom_components/ folder and
restart Home Assistant.
Settings → Devices & Services → Add Integration → Hydroponic Control.
Pick your entities. Only the pump is required.
⚠️ Water-sensor polarity matters. Choose correctly whetheronoroffmeans water present. If it is inverted, dry-run protection is inverted too — and the pump could run dry. Verify it on the device page before relying on it.
Safety/advanced values (notify service, debounce/grace times, power threshold, watchdog timeouts, fan/heater behaviour) live under the integration's Configure (options) dialog.
| Entity | Purpose |
|---|---|
select.*_mode |
Auto / Manual / Maintenance / Vacation |
switch.*_irrigation |
Master enable for the pump cycle |
switch.*_adaptive_irrigation |
Scale the pause by air temperature (only if an air temperature sensor is configured) |
switch.*_night_mode |
Use the separate night timing while the sun is below the horizon |
button.*_maintenance_run |
Manually run the pump once for the configured on-time (safety-gated) |
button.*_send_test_notification |
Send a test push via the configured notify service — shows an error in the UI if it fails |
number.*_pump_on_time / *_pump_off_time |
Pulse timing (minutes) |
number.*_night_pump_on_time / *_night_pump_off_time |
Night pulse timing, used when night mode is active (minutes) |
number.*_water_temperature_max / *_min |
Temperature window |
number.*_frost_threshold |
Air temperature below which irrigation is blocked (only if an air temperature sensor is configured) |
number.*_watering_watchdog |
Alarm if no pump run within this many minutes (0 = off) |
time.*_light_on / *_light_off |
Photoperiod (only if a light is configured) |
sensor.*_status |
idle / irrigating / waiting / blocked / maintenance |
sensor.*_next_pump_change |
Timestamp of the next on/off transition |
sensor.*_last_watering |
Timestamp of the last pump run |
binary_sensor.*_problem |
Any alarm active (great notification hook) |
binary_sensor.*_dry_run, *_pump_fault, *_water_temperature_alarm, *_sensor_fault, *_leak, *_frost, *_watering_stale |
Individual alarms (created for the sources you configured) |
- Auto — full automation (cycle + light + safety).
- Manual — automation paused; you control devices yourself. Safety still applies.
- Maintenance — everything off, alarms suppressed; auto-returns to Auto after 2 h.
- Vacation — like Auto, conservative.
hydroponic_control.run_pump(optionalminutes) — one manual pulse, still gated by safety.hydroponic_control.reset_alarms— clear latched alarms (e.g. a pump fault) and resume.
Both target the switch.*_irrigation entity.
Hydroponic Control fires bus events you can build any automation on:
hydroponic_control_alert—{ entry_id, alarm, severity, message }hydroponic_control_alert_cleared—{ entry_id, alarm, message }
Example — push every critical alert to your phone:
automation:
- alias: Hydroponic Control critical alerts
triggers:
- trigger: event
event_type: hydroponic_control_alert
event_data:
severity: critical
actions:
- action: notify.mobile_app_phone
data:
title: "Hydroponic Control"
message: "{{ trigger.event.data.message }}"Or simply notify on the Problem binary sensor.
Set a Notify service in the options and Hydroponic Control calls it directly
on every alert and again when it clears (a recovery push with Info
severity, e.g. "Air temperature back above the frost threshold — irrigation
resumes."). The push title is your system name plus the severity (e.g.
Tomato Tower — Critical), and the message carries the measured values and
limits. A Notification language option (English / German, defaults to your
Home Assistant language) controls the text.
Troubleshooting no notifications: enter the exact service name, e.g.
notify.mobile_app_iphone — look it up under Developer Tools › Actions
(the companion-app service is notify.mobile_app_<device>, which can differ
from your device's display name). Press Send test notification
(button.*_send_test_notification) to check your setup directly — it uses the
exact same delivery path as a real alert, and shows the failure reason (wrong
service name, no service configured, delivery error) right in the Home
Assistant UI instead of only the log.
type: entities
title: Hydroponic Control
entities:
- entity: sensor.hydroponic_control_status
- entity: select.hydroponic_control_mode
- entity: switch.hydroponic_control_irrigation
- entity: button.hydroponic_control_maintenance_run
- entity: number.hydroponic_control_pump_on_time
- entity: number.hydroponic_control_pump_off_time
- entity: time.hydroponic_control_light_on
- entity: time.hydroponic_control_light_off
- entity: binary_sensor.hydroponic_control_problem
- entity: sensor.hydroponic_control_next_pump_change- Dry-run, leak, pump-fault and frost are blocking alarms: the pump is stopped and will not start while they are active.
- Frost latches after the air temperature has stayed below the threshold for the configured debounce (default 5 min) and clears only once it has risen 0.5 °C above the threshold (hysteresis against flapping).
- The irrigation watchdog is a non-blocking alarm: it flags that no pump run has happened within the limit, but never stops the pump (that would be counterproductive). It is suppressed during maintenance, when irrigation is off, and while a blocking alarm already explains the missing run.
- After a restart the pump does not fire immediately: the integration waits the startup grace, then resumes the remaining pause (or, if the pause already elapsed while HA was down, runs once the grace passes). Set the startup grace to 0 to disable the delay.
- An unavailable water sensor is treated as not safe — the pump is blocked and a sensor-fault alarm is raised after the configured timeout.
- The max-runtime timer is a backstop against logic bugs, independent of the normal pulse length.
- pH / EC monitoring and dosing helpers
- Auto top-up valve control
- Runtime/energy statistics entities
Gefunden einen Bug oder eine Idee für eine neue Funktion?
Provided as-is (MIT). Hydroponics involves water and electricity near living plants — test thoroughly, and keep an independent hardware safety where a failure could cause damage.