Skip to content
Crop Steering
Browse the documents

Entity Reference — Complete Schema

On this page

Every entity the Crop Steering System creates, what it does, its range/options, and its default. Generated against the live deployed system (3-zone example; per-zone entities scale with your zone count, N = 1…zones).

Conventions

  • Global entities set the system-wide default: …crop_steering_<param>.
  • Per-zone entities override the global for one zone: …crop_steering_zone_N_<param>. Most phase/EC/dryback setpoints exist in both forms — the engine uses the per-zone value for that zone and falls back to the global otherwise.
  • The engine reads these by entity_id. Renaming a friendly-name in HA or on a dashboard does not affect it.

1. Numbers — global setpoints (number.crop_steering_*)#

P0 — morning dryback#

EntityRangeDefaultUnitWhat it does
p0_dryback_drop_percent2–4015%How far VWC must drop from the overnight peak before P0 ends and P1 begins.
p0_minimum_wait_time5–30030minEarliest P0 may exit, even if the dryback target is already met.
p0_maximum_wait_time30–600120minHard ceiling — forces P0 → P1 if the dryback target is never reached.

P1 — ramp-up#

EntityRangeDefaultUnitWhat it does
p1_initial_shot_size0.1–202%Size of the first ramp shot (% of substrate volume).
p1_shot_size_increment0.05–100.5%How much each successive shot grows.
p1_maximum_shot_size2–5010%Cap on the ramp shot size.
p1_minimum_shots1–203—Minimum shots before P1 may exit.
p1_maximum_shots1–306—After this many shots P1 exits to P2 even if the target wasn't hit.
p1_target_vwc5–9560%VWC that ends the ramp and moves the zone to P2.
p1_time_between_shots1–605minSpacing between ramp shots.

P2 — maintenance#

EntityRangeDefaultUnitWhat it does
p2_vwc_threshold5–8555%Shoot a maintenance top-up when VWC falls below this.
p2_shot_size0.5–305%Size of a P2 maintenance shot.
p2_ec_high_threshold0.5–3.01.2×targetEC ratio above which the threshold is raised (water more to flush salts).
p2_ec_low_threshold0.2–2.00.8×targetEC ratio below which the threshold is lowered.

P3 — pre-lights-off / overnight#

EntityRangeDefaultUnitWhat it does
p3_emergency_vwc_threshold20–6540%Overnight emergency floor — a rescue shot fires below this.
p3_emergency_shot_size0.1–152%Size of an emergency rescue shot.
p3_veg_last_irrigation15–360120minMinutes before lights-off after which veg zones take no planned shots.
p3_gen_last_irrigation30–600180minSame, for generative zones.

EC targets — vegetative & generative (per phase)#

EntityRangeDefaultUnit
ec_target_veg_p0 / _p1 / _p2 / _p30.5–153.0 / 3.0 / 3.2 / 3.0mS/cm
ec_target_gen_p0 / _p1 / _p2 / _p30.5–204.0 / 5.0 / 6.0 / 4.5mS/cm
ec_target_flush0.1–150.8mS/cm

The active EC target = the row for the current phase and the zone's steering mode. sensor.crop_steering_ec_ratio = current EC ÷ this target.

EC & safety limits#

EntityRangeDefaultUnitWhat it does
irrigation_ec_min0–202.3mS/cmSource-water EC gate (low bound). Irrigation blocked below it. 0 disables.
irrigation_ec_max0–203.5mS/cmSource-water EC gate (high bound).
irrigation_ph_min3.0–9.05.8pHSource-water pH gate (low bound).
irrigation_ph_max3.0–9.06.2pHSource-water pH gate (high bound).
maximum_ec1–209.0mS/cmHard substrate-EC cutoff — no shot above it (salt-burn guard).
blocked_dripper_max_shots_30min1–204—Emergency shots in 30 min before a zone is flagged/backed-off as a blocked/draining dripper.

Substrate & schedule#

EntityRangeDefaultUnitWhat it does
substrate_volume1–2006LSubstrate volume per plant — converts shot % → mL → valve seconds.
dripper_flow_rate0.1–504L/hrPer-dripper flow — the other half of the % → seconds conversion.
drippers_per_plant1–61—Drippers feeding each plant.
field_capacity5–10060%VWC at/above which irrigation is blocked (over-water guard / P1 clamp).
vegetative_dryback_target5–8050%Overnight dryback target in vegetative mode.
generative_dryback_target5–7040%Overnight dryback target in generative mode.
lights_on_hour0–2310hourPhotoperiod start — P3→P0 + daily-counter reset fire here.
lights_off_hour0–2322hourPhotoperiod end — zones move to P3.

2. Numbers — per-zone overrides (number.crop_steering_zone_N_*)#

Every zone gets its own copy of the setpoints below. The engine uses the zone's value for that zone. (3 zones × 32 = 96 entities on a 3-zone system.)

Per-zone copies of the global setpoints: p0_dryback_drop_percent, p0_minimum_wait_time, p0_maximum_wait_time, p1_initial_shot_size, p1_shot_size_increment, p1_maximum_shot_size, p1_minimum_shots, p1_maximum_shots, p1_target_vwc, p1_time_between_shots, p2_vwc_threshold, p2_shot_size, p2_ec_high_threshold, p2_ec_low_threshold, p3_emergency_vwc_threshold, p3_emergency_shot_size, p3_veg_last_irrigation, p3_gen_last_irrigation, vegetative_dryback_target, generative_dryback_target, and all eight ec_target_veg_pX / ec_target_gen_pX plus ec_target_flush. Ranges match the globals above.

Per-zone only (no global equivalent):

EntityRangeDefaultUnitWhat it does
zone_N_plant_count1–50——Plants in the zone — scales total water volume.
zone_N_max_daily_volume0–200200LHard daily water cap for the zone (emergency rescue is exempt).
zone_N_shot_size_multiplier0.1–51.0×Scales every shot for this zone (a weak/strong row trim).

3. Switches#

Global (switch.crop_steering_*)#

EntityWhat it does
room_activeRoom on/off (default on). Off = nothing is growing: no irrigation of any kind for this room, including emergency shots and the no-probe fallback schedule, no alerts, repair issues cleared. Per room: switch.crop_steering_<prefix>room_active.
auto_setpointsAuto Setpoints (default off). On = the controller may rewrite this room's per-zone VWC targets from what it has learned, in bounded steps, never while a dated plan owns the room. Off = it still learns and reports, and writes nothing. Per room: switch.crop_steering_<prefix>auto_setpoints.
system_enabledMaster on/off. Off = no irrigation at all.
auto_irrigation_enabledEnables the autonomous decision loop (off = manual-only).
ec_stacking_enabledWhen on, the system builds EC when below target instead of diluting (push EC up intentionally).
analytics_enabledEnables the analytics/efficiency sensors + history tracking.

Per-zone (switch.crop_steering_zone_N_*)#

EntityWhat it does
zone_N_enabledInclude/exclude the zone from automation.
zone_N_manual_overrideAbsolute lockout — nothing opens that valve (auto, emergency, manual). For maintenance.
zone_N_dripper_protectionWhen on, the zone is allowed to abandon/back-off after repeated unresponsive emergency shots (blocked-dripper protection).

4. Selects#

Global (select.crop_steering_*)#

EntityOptionsWhat it does
steering_modeVegetative · GenerativeSystem-wide veg/gen bias (picks which EC + dryback targets apply).
growth_stageVegetative · Generative · TransitionCurrent growth stage — shifts EC targets + dryback aggressiveness.
crop_typeCannabis_Athena · _Hybrid · _Indica · _SativaCrop profile preset.
irrigation_phaseP0 · P1 · P2 · P3 · ManualSystem phase indicator / manual phase set.

Per-zone (select.crop_steering_zone_N_*)#

EntityOptionsWhat it does
zone_N_steering_modeVegetative · GenerativePer-zone veg/gen bias.
zone_N_crop_profileFollow Main · Cannabis_Athena · _Indica_Dominant · … · CustomPer-zone crop preset (Follow Main = use system default).
zone_N_priorityCritical · High · Normal · LowOrdering when multiple zones want water at once.
zone_N_groupUngrouped · Group A–DLogical grouping for multi-zone coordination.

5. Phase control (input_select.crop_steering_*)#

EntityOptionsWhat it does
zone_N_phase_controlAuto · P0 · P1 · P2 · P3Per-zone manual phase pin. Auto = engine controls the phase; any other value pins the zone there until set back to Auto.

6. Sensors (read-only)#

System (sensor.crop_steering_*)#

EntityUnitWhat it reports
activity_log—Rolling human-readable feed (last ~40 watered/blocked/phase events); full feed in the feed attribute.
current_phase / app_current_phase—Combined per-zone phase string (e.g. Z1:P3, Z2:P3, Z3:P3).
current_decision—What the engine decided this cycle (irrigate / wait / …).
app_next_irrigation / next_irrigation_time—Predicted next shot time.
system_state / app_status—active / safe_idle / …
system_safety_status—safe / fault.
system_health_score—0–100 composite health.
system_uptime—Engine uptime.
ai_heartbeat—Self-correction loop status (healthy / anomaly). Attribute controller_version: the controller app that is actually running (shown in the dashboard sidebar beside the descriptor's integration_version).
system_efficiency / water_efficiency—Efficiency metrics.
average_vwc_all_zones / average_ec_all_zones% / mS/cmCross-zone means.
fused_vwc / fused_ec—Sensor-fused VWC/EC.
sensor_health / sensor_fusion_confidence% / —Sensor-fusion quality.
ec_ratio—Current EC ÷ target EC.
ec_baselinemS/cmReference EC baseline.
dryback_percentage / dryback_target%Current dryback + active target.
dryback_detection_accuracy—Dryback-detector confidence.
ml_model_accuracy—Predictor confidence.
p1_shot_duration / p2_shot_duration / p3_emergency_shot_durationsComputed valve seconds for each shot type.
p2_vwc_threshold_adjusted%P2 threshold after EC-ratio adjustment.
vwc_target_min / vwc_target_max%Active VWC band.
daily_water_usage / daily_water_usage_appLTotal water today.
prediction_estimated_daily_water_needLPredicted daily demand.
irrigation_efficiency%Water-to-uptake efficiency.

Per-zone (sensor.crop_steering_zone_N_*)#

EntityUnitWhat it reports
zone_N_vwc%Fused substrate moisture.
zone_N_ecmS/cmFused pore-water EC.
zone_N_phase—The zone's current phase (P0–P3).
zone_N_auto_setpoints—Published by the controller: off / learning / tracking / frozen. Attributes: learned_peak, gain, day_rate, night_rate, p1_outcome (pending / reached / short / plateau / suspect), hold_days, frozen_reason, last_change, jev (disabled / ok / unavailable), jev_last (the judge's latest hourly P2 answer), jev_changed_today, working_peak_adjust, managed (the number entities it may rewrite; includes p2_shot_size while the judge is configured).
zone_N_status—Optimal / Dry - Needs Water / Saturated / Disabled / Sensor Error; Room off while the room is switched off.
zone_N_safety_status—safe / fault.
zone_N_health_score / zone_N_efficiency—Per-zone health/efficiency.
zone_N_daily_water_usage / _daily_water_appLWater today (resets at lights-on).
zone_N_weekly_water_usage / _weekly_water_appLRolling 7-day water.
zone_N_irrigations_today / _irrigation_count_app—Shot count today.
zone_N_last_irrigation / _last_irrigation_app—Last shot timestamp.
prediction_zone_N_next_irrigation_hourshPredicted hours to next shot.

Note: a few …_app sensors are engine-published mirrors of the integration sensors; prefer the engine …_app value when the two differ.


7. Hardware (your own switches/sensors — mapped via the add-on hardware option, not created here)#

The pump, mainline solenoid, per-zone valve switches, and the raw VWC/EC + source-water sensors are your existing HA entities. You map them to the engine via the f2-control add-on's hardware Configuration option (pump / mainline / per-zone valves), which defaults to the F2 entities (switch.veg_main_pump, switch.espoe_irrigation_relay_2_3, switch.f2_row1–f2_row3); the engine drives those switches and reads the sensors.

Inert legacy entities: the integration may still create a steering-intent slider and a few …_intelligence_*_enabled switches from a retired experimental layer. The deployed engine ignores them.