Skip to content
Crop Steering

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.

One grow-day of substrate water content across the four irrigation phasesAn illustration, not data. The horizontal axis runs from lights-on at 10:00 to the next lights-on. In P0, the morning wait, the line keeps falling after lights-on until it reaches the dryback target: with a 60 percent peak and a 10 percent dryback target that is 54 percent. In P1, the ramp-up, the line climbs a staircase of six steps; each vertical riser is one irrigation shot. In P2, maintenance, the line is a sawtooth: it dries down to a dashed threshold, a shot lifts it, and this repeats until lights-off at 22:00. In P3, overnight, the line slopes smoothly down through the night, well above a separate dashed emergency floor. A thinner second line underneath stands for the recorded probe, following the plan a little late and a little low, and stopping at now.P0P1P2P345%50%55%60%10:0022:0010:00lights onlights offP2 thresholdemergency floornowshots
  • 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
An illustration of one grow-day, lights-on to lights-on. The bright line is the kind of projection the app draws. Each vertical riser is one irrigation shot. The thin line represents the recorded probe and is drawn, not data. The numbers are the project's own worked example (a 60% peak with a 10% dryback target is 54% VWC). They are an example, not a recommendation.
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.

Open the demo

The Today page, showing a daily VWC and EC plan with phase bands P0 to P3, a projected line with risers for each shot, and the recorded probe readings below.
Captured on 20 September 2026 (tank panel: 8 September) from the compiled application with isolated demo data and inherited Home Assistant dark-theme variables. These are current UI examples, not photographs or live facility readings.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Recorded VWC and pore EC history with each setpoint drawn as a line across the chart.
Recorded VWC and pore EC with setpoint lines. Captured from the app with isolated demo data, not live readings.

Review before apply

Draft and saved targets beside the plan graph, with a review bar listing pending changes.
Draft and saved targets side by side, with the review bar. Captured from the app with isolated demo data.
  • 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

All features with their test results

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.

  1. Step 1

    Add the integration through HACS, then restart Home Assistant.

  2. Step 2

    Add Crop Steering in Devices & services and name the first room.

  3. Step 3

    Add the controller app repository, then install and start the controller.

  4. 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.

Go to the install guide

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 the demo

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.