Crop Steering for Home Assistant
A Home Assistant irrigation controller with a native operator workspace: see the room, plan each zone, map sensors, and review changes before applying them.
- P0 Morning wait10:00 to 11:00
- P1 Ramp-up11:00 to 12:30
- P2 Maintenance12:30 to 22:00
- P3 Overnight22:00 to 10:00
- Release
- 2.19.2
- Controller
- 0.16.2
- Home Assistant
- 2024.3 or newer
- Licence
- MIT
The Today page
The Today page shows one zone's grow-day. It plots the targets, which can be dragged, the zone's recorded probe readings, and the projected day from P0 to P3. Shot timing in the projection is calculated from the zone's measured dry-down rate. The projection is an estimate. The engine fires each shot on the probe reading.
The line does not forecast plant response, uptake or runoff, and the dashed EC line only joins the targets you configured. It does not predict salt concentration.

The four phases, always in this order
The controller steers each zone from substrate water content (VWC) and root-zone EC readings. Each zone is scheduled separately.
P0Morning wait
After lights-on the zone continues to dry until it reaches its dryback target. Dryback is measured from the day's peak. A 60% peak with a 10% dryback target gives 54% VWC.
P1Ramp-up
Shots raise VWC one step per shot. P1 has no time limit. It runs until the target is recovered after at least the minimum shot count, or until the maximum shot count is reached.
P2Maintenance
A shot fires each time water content falls to the P2 threshold, and this repeats until lights-off. The thresholds respond to root-zone EC.
P3Overnight
Scheduled irrigation stops and the zone dries down to the next lights-on. Only an emergency-floor rescue shot can fire.
Targets and recorded probe readings
The graph for setting targets also displays the zone's recorded probe readings.
Recorded probe readings
Recorded VWC for this grow-day and the previous one, recorded pore EC, and the current reading with today's peak and trough.
Axis scaling
The axis is scaled to the probe readings. A zone at 31% against a 40% target is visible on the chart. On a fixed 0 to 100% scale the same readings plot as a near-flat line.
History for 24 hours, 72 hours or 7 days
The same probes with each setpoint drawn as a line, the typical daily peak and trough, and a note beside any field whose target sits outside what the probe reads.
Unreachable targets
A P2 threshold far under the P1 target projects few or no maintenance shots, and the graph shows that instead of hiding it.

Review before apply

Local drafts
Moving a target moves its draft line straight away, while the saved value stays visible beside it. Review the before and after, then apply.
Plan save, review and arm
An armed plan takes effect at the next lights-on.
Arming and irrigation enable
Arming a plan does not enable pumps or the engine. Enabling irrigation requires a separate action.
Safety model and its limits
The software switches a pump and valves.
Software safeguards
Kill switch checks during a shot
The controller is gated by a hard kill switch. Water is delivered in slices of two seconds or less, and each slice re-checks the kill switch and the zone's manual override. An abort closes the valve immediately and counts only the water delivered.
Hardware-fault latch
After every shot the controller confirms that pump, mainline and valve all read off. The first read is at 1 second. Reads repeat every 0.5 seconds up to 6 seconds. A late report passes. Equipment that still reads on latches a hold, and a shared-hardware fault stays latched until the engines and hardware involved are off.
Setup acceptance after a change
The controller stores the accepted setup. After a restart it resumes only if nothing changed and pump, mainline and valves read off. A changed setup must be accepted with the engine switched off, and a notification lists the equipment that must read off.
Pre-shot gates
Source-water, sensor, enable and interlock, volume and duration gates run before any equipment is sequenced. A missing or stale plan snapshot holds irrigation. A room with no hardware mapped holds irrigation, and newly added rooms start in the off state.
Room off state
A room switched off gets no irrigation of any kind, including emergency shots and the no-probe fallback, and raises no alerts. Its readings stay visible.
Limits of software
Switch state and water delivery
Home Assistant reading a pump or valve as on or off does not prove that water flowed. Check water delivery on site before enabling an engine.
Software limits during Home Assistant downtime
Software cannot close a valve when Home Assistant is down. Normally-closed valves, a pump relay that defaults to off and an independent watchdog are the safeguards.
Pause and emergency stop
Pausing scheduling stops future shots from being planned. A shot that is already running may continue. Use a physical shutdown procedure in an emergency.
Uncommissioned items
Physical water delivery, a first run on a blank Home Assistant, and a live handover to a grow plan at lights-on remain uncommissioned.
A demo is not proof of physical water delivery.
Features by task
The project keeps a feature matrix that records, for each feature, what was tested and what was only checked in software. The 37 features below link to that evidence on the features page.
See the room
Current readings from the zones, tank and probes, and the recorded history.
- Today graph: recorded zone and projected day
- Combined recorded VWC + EC history
- Graphical tank and pump overview
- Zone current state and last irrigation
- Sensor diagnostics and equipment map
- Run comparison with daily target overlays
- Activity view and CSV export
Plan and steer
Setting targets for today, and scheduling them per zone across a whole grow.
- Today: current targets and daily graph
- Reactive combined planning curve
- Continuous vegetative/generative steering
- Different setpoints per zone
- Whole-grow day/week schedule
- User-authored recipe library
- P1 runs its full ramp
- Auto Setpoints
Review and apply
Changes are not sent to Home Assistant until they have been reviewed and applied.
- Reviewed manual setpoint writes
- Persistent plans and safe activation
- Timed manual override
Set up rooms and sensors
Mapping existing Home Assistant entities to rooms and zones.
- Room and zone creation/removal
- Sensor mapping
- Sensor fusion
- Room on / off
Water accounting
Estimates of what was delivered, and the tools to check them against a measuring jug.
- Water per zone, plant and proposed runtime
- Weekly water usage
- Catch-test calculator
Safety gates and degraded modes
Conditions that must be met before equipment is switched, and system behaviour when something is missing.
- Source-water/interlock/volume/duration gates
- Patient switch read-back
- Restart-safe setup
- Missing or invalid EC
Connect an LLM
An optional connector that allows an assistant to read the setup and prepare changes for review.
- Optional scoped MCP server
Install, appearance and proof
Installation into Home Assistant, the appearance of the workspace, and what has been verified on a real installation.
- Installation shortcuts and sidebar
- HA sidebar integration
- Native Home Assistant appearance
- All advanced pages in one workspace
- Interactive demo
- Complete usage documentation
- Live deployment
The four parts and their responsibilities
The integration and the controller are installed together as a matching pair. Both are needed for automatic irrigation.
- Integration
- Inside Home Assistant, installed through HACS
- Manages rooms and zones, sensor mapping, entities, stored plans and the sidebar workspace.
- Controller
- A companion app beside Home Assistant
- Makes irrigation decisions and sequences equipment. It runs the P0 to P3 loop and switches the mapped pump and valves.
- Dashboard
- Served by the integration, in the sidebar
- One dashboard serves every page. It is compiled to a single file with its fonts, scripts and styles inside. No CDN is needed.
- MCP connector
- Optional, on the user's computer
- An LLM can use this connector to inspect rooms and prepare changes for review. The connector is read-only by default. Writes are opt-in. It does not operate equipment or activate plans.
Install steps
Installation requires Home Assistant 2024.3 or newer, HACS, and existing entities for the pump, zone valves and probes. The integration maps existing entities. It does not pair devices.
- Step 1
Add the integration through HACS, then restart Home Assistant.
- Step 2
Add Crop Steering in Devices & services and name the first room.
- Step 3
Add the controller app repository, then install and start the controller.
- Step 4
Open Crop Steering in the sidebar, map equipment and probes, check the readings, and keep the engine off until the installation checks pass.
The repository link can also be given to an AI assistant for a guided install. The project keeps a short page of ground rules for that.
The demo
The demo is the project's dashboard running on sample rooms and synthetic readings. No login or Home Assistant account is required, and changes stay in your browser.
Open source, MIT licensed
The code, the tests and every document on this site live on GitHub. Questions and bug reports go to the issue tracker.