Skip to content

Updating from 3.17 or earlier? Read the upgrade guide first.

Crop Steering
Browse the documents

3.18 upgrade report, line by line

Applies to release 3.18.1 · View source at the tag · Markdown

On this page

⚠️ This is a very large upgrade. Almost every page of the dashboard is new or rebuilt: timer programs, presets, alert rules, a new History section, feed and pump calibration, pump supply sharing, quiet hours and an Upgrade report.

If you are running this on a live grow, do NOT just click update unless you have time for a big configuration session straight after. Watering will not stop, but there is a lot to set up and check.

Your settings come across as far as they can. The update keeps every zone watering and dosing exactly as before, and carries your current settings into the new features wherever it can do that without guessing. Nothing new that waters or doses is switched on for you.

  • Carried across: every zone keeps watering by steering; each recipe stage you had edited is copied as a preset; a "before 3.18 update" preset of your current settings is saved as a rollback point; temperatures in °F if Home Assistant uses °F; every notification recipient; your pH up/down pumps keep their role; your earlier setting changes, stock moves, calibrations and dosing records are imported into History; a room with no feed EC probe keeps the old 3.0 mS/cm assumption so it flushes as before.
  • Needs you: the irrigation supply (each pump's real flow, how many zones it feeds at once, its flow meter: nothing is saved until you save it); the 2-point feed pH and EC probe calibration; the solution and a pump calibration for each nutrient pump; ppm instead of mS/cm if that is how you work; automations that still use a retired entity; grow-plan recipes saved only in your browser (export them). Optional: alert rules, quiet hours, camera, CO2 and light panels, new dashboards.
  • Each room's Upgrade report lists exactly what was carried and what needs you: Crop Steering → Settings → System status, and a card in Home Assistant's Settings → Repairs.

Get your AI to configure it. Point your AI assistant (Claude, ChatGPT, or any assistant connected through the Crop Steering MCP server) at the new documentation and have it work through the Upgrade report with you, one line at a time, asking you before each save:

Order: update the integration first, restart Home Assistant, then update the controller app.

A tour of the new pages, with pictures, is in the changelog.

3.18 is a big upgrade. The update keeps every zone watering and dosing by the same settings (with one new fail-closed hold, see Upgrade to 3.18: the plan), carries your settings into the new features where it can do that without guessing, and lists the rest in each room's Upgrade report: Crop Steering → Settings › System status, one card in HA Settings › Repairs (code CS-616) and the crop_steering.migration_report service. The plan for update day, a first-hour checklist and how to go back are in Upgrade to 3.18: the plan.

This page has one section per line of that report. Each section says what the update did, what it left for you, and how to set it, written so that you, or an AI assistant you give this page to, can do it step by step. Nothing below is needed to keep watering as before: each step turns on something new.

Order. Update the integration first, restart Home Assistant, then update the controller app.

For an AI assistant. Read the report first: crop_steering.migration_report with room_id (room: for the default room, room:<prefix> for a named room, for example room:f2_). It answers {carried: [...], needs_you: [...]}, each row {id, title, status, detail, page, doc}; doc points at a section below. Work through needs_you one row at a time. Every service named here that changes something needs a Home Assistant administrator and an expected_revision read first from its *_get / *_list service. Ask the grower before each save; never guess a pump's flow or a probe's calibration.

Supply

Report row supply.pumps. The update found each room's irrigation pump and main line in its setup and did not save a supply. Saving one turns on pump sharing: two rooms on one pump then take turns, and a zone that needs more water than its pump can give raises CS-214. Until you save, watering is as before.

To set it: Crop Steering → Equipment › Setup: pumps & valves › Supply, or crop_steering.supply_get then crop_steering.supply_save with expected_revision and irrigation_pumps: [{entity_id, max_flow_lph, max_concurrent_zones, flow_meter}].

  • entity_id: the pump switch the report names (hardware.pump_switch of each room that uses it).
  • max_flow_lph: the pump's real output in litres per hour. Measure it (a timed bucket at the far zone), do not take it from the box. Leave it out (null) if unknown: no capacity check runs.
  • max_concurrent_zones: how many zones it may feed at once. 1 is the safe default and how it ran before.
  • flow_meter: a meter on the pump's line whose state is a running total volume in L, m³ or gal, or null. A rate (L/min) is not read. Never a dosing pump's mL/min sensor.

zone_meters ({"room:<prefix>": {"<zone>": "sensor.x"}}) and zone_groups (zones that must never run together) are optional. supply_save with preview: true shows the capacity check before saving. In full: Water supply, pump queue and flow checks.

Irrigation mode

Report row irrigation.mode. Each zone has a new select, select.crop_steering_<prefix>zone_<n>_irrigation_mode: steering (as before), timer (runs the room's timer programs only) or off. Every zone starts on steering. If the report lists a zone with no mode, pick steering to keep it as it was. Turning a zone off still uses switch.crop_steering_<prefix>zone_<n>_enabled, as before. In full: Timer programs and irrigation modes.

Presets

Report rows presets.recipe, presets.snapshot, presets.recipe_keys. Presets save a room's or a zone's targets, phase timing, water limits and timer programs, and copy them to other rooms or zones. They are in Crop Steering → Irrigation → Grow plan & presets.

  • Each recipe stage you had edited (one that differs from the shipped default) was copied as a preset named <room> – <stage> (from 3.17 recipe). The recipe itself is unchanged and still works.
  • A preset named <room> – before 3.18 update holds the room's own settings as they were at the update. It is a point to go back to if you change things and regret it. A zone's own values (a zone tuned apart from its room) are not in it: before you change one, save a preset from that zone. If some settings could not be read at the update, no preset is saved and the update tries again at the next start.

Nothing was applied. To apply one: crop_steering.preset_list, then crop_steering.preset_apply with preset_id, to: [{room_id}] or [{room_id, zone}] and preview: true first to see the changes. A recipe key listed under presets.recipe_keys has no preset section: set it on the room's settings. In full: Presets and copying settings.

Alerts

Report row alerts.rules. Alert rules (Crop Steering → Settings › Alert rules) are new and there are none. Your irrigation pH and EC limits (number.crop_steering_<prefix>irrigation_ph_min/max, irrigation_ec_min/max) still stop watering as before; a rule is only a notification. To add one: crop_steering.alert_rule_preview to see how often it would have fired, then crop_steering.alert_rule_set. Optional. In full: Alerts.

Units

Report rows units.temperature, units.ec, units.clock. Display only: what the dashboard shows, never what is stored or what the controller uses. Temperatures follow Home Assistant (°F where Home Assistant uses °F). EC is shown in mS/cm; if you work in ppm, pick the 500 or 700 scale. Set them in Crop Steering → Settings › Dashboards & display, or crop_steering.display_get then crop_steering.display_save with options: {ec_unit: "ppm500" | "ppm700" | "mS/cm", temp_unit: "C" | "F", clock: 12 | 24}. The API and the MCP tools always answer in mS/cm and °C.

Quiet hours

Report rows notify.recipients, notify.quiet_hours. Every notification recipient was kept as it was. Quiet hours are new and off for everyone: urgent pushes always come through, other known alerts wait until the quiet hours end and arrive as one push. The Notifications page does not edit them yet: set them per phone with crop_steering.notify_save (Quiet hours). Optional.

Feed calibration

Report rows calibration.feed_ph, calibration.feed_ec. Each feed probe reads raw, as before. The 2-point calibration is new: Crop Steering → Equipment › Feed pH/EC calibration, two buffer solutions, and the correction is applied only when you commit it. While a session is open, batches and pH auto-correct wait, and a room with a feed band for that probe holds its shots. Once committed, the source-water gate uses the corrected reading. In full: Calibration. An old calibration check from before 3.18 is kept as a record and never applied. A person does this at the tank: an AI assistant can explain it but cannot run it.

Dosing pumps

Report rows dosing.ph_pumps, dosing.pump.<id>. The dosing setup was not changed. A pH up/down pump keeps its pH role. Each other pump is listed: pick its solution (nutrient or additive) in Crop Steering → Equipment › Feed & dosing.

  • A pump with a flow sensor (flow_entity) doses from that sensor, as before. Its flow sensor always wins over a calibrated mL/min, so a pump calibration changes nothing for it.
  • A pump without one: run a pump calibration (Equipment › Prime & calibrate a pump, pump_calibrate, then pump_calibration_commit) so its doses are sized from a measured mL/min. Until then it doses as before.

Feed EC fallback

Report row feed.ec_fallback. This room has no feed EC probe and its feed recipe declares no EC. Before 3.18 the controller assumed the feed was 3.0 mS/cm, and that decided its EC flushes and its holds for a high EC. 3.18 does not invent a feed EC, so the update keeps the old 3.0 for this room, and the controller says so (CS-907). It stops by itself when either of these is done:

  • map a feed EC probe (Crop Steering → Equipment › Setup: pumps & valves, hardware.feed_ec_sensor), or
  • set the EC of the feed recipe in use (Crop Steering → Equipment › Feed & dosing).

The report checks the probe mapped in Setup. A feed EC probe mapped only in the controller app's options is used by the controller, which then ignores the kept 3.0: map it in Setup too and this line goes away.

The CS-907 notification is sent (not quiet) once each time the controller starts, for every room on the kept 3.0, until one of the above is done.

A change for rooms that do have a feed EC probe. When the probe is offline for longer than the feed grace period, 3.17.0 assumed 3.0 mS/cm; 3.18 treats the feed EC as unknown (the recipe's EC if it declares one), so that room takes no EC flush and no hold for a high EC until the probe reads again. The kept 3.0 is only for rooms with no probe at all.

New panels

Report row panels.new. The camera, CO2 and light-level (PPFD, DLI) panels show once their entities are mapped in Setup. New dashboards (wall, tablet, dosing) are made from Settings › Dashboards & display (Dashboards and display); the ones you made yourself are never changed. Optional.

Retired entities

Report row entities.retired. An automation or script still uses an entity Crop Steering no longer reads. Settings → Repairs names each one (CS-614). Remove it from the automation.

History

Report row history.import. Your earlier setting changes, stock moves, calibrations and overlays were added to History (Crop Steering → History › Changes), beside everything recorded from now on. The controller adds its own dosing history and AI records after it updates. In full: History.

Browser recipes

Grow-plan recipes saved "on this browser" before 3.18 stay in that browser. They are not presets and are never imported without you. Export them as a backup from Irrigation › Grow plan & presets › Recipes, or import them there with Import as presets: a preview names each preset first (one for the vegetative and one for the generative end of each profile, with its targets), each is saved on its own with a receipt, a name the controller already has is not saved again, and nothing is applied. An administrator does it; for an AI assistant it is crop_steering.preset_save with scope: "targets", the room in from and the settings in values.