AI Tunables Traceability
This page is the operating contract for the bounded control surface Iris, the AI planner can reason about. It answers four questions for every tunable: what the value does, why it matters to greenhouse control, how the value routes through the stack, and what live evidence says about recent use.
End-to-end path for planner-owned values:
Iris -> MCP set_plan or set_tunable -> setpoint_plan -> v_active_plan -> ingestor dispatcher -> ESPHome number/switch -> firmware global/Setpoints -> cfg_* readback -> setpoint_snapshot and setpoint_changes confirmation.
The ESP32 still owns 5-second relay control. Iris owns bounded setpoint hypotheses, not direct actuator commands.
Current Audit Snapshot
Every name accepted by PlanTransition, SetpointChange, or setpoint_snapshot.
Includes dispatcher-routed and readback-only firmware inputs.
Required in every routine set_plan waypoint.
The only tunables the planner may write. Operator, crop-band, readback, and retired rows are context only.
Live safety state at generation time.
111 future active plan rows.
Should remain zero for no-op/deprecated params.
Plan dispatcher writes carrying trigger IDs.
1979 measured mister cycles in the last 14 days.
Contract class counts: {'planner_policy': 67, 'crop_band': 8, 'controller_safety': 52, 'readback_context': 3, 'retired': 11}.
Embedding corpus counts: {"plan": 159, "lesson": 93, "playbook": 43, "site_doc": 3496, "observation": 636}.
Firmware override events in the last 7 days: {"summer_vent": 56, "fog_gate_window": 1, "fog_heat_assist": 1, "vent_mist_assist": 511, "occupancy_blocks_moisture": 1}.
Effectiveness labels below mean three different things:
- Route confirmed means the planner/dispatcher write landed and firmware read it back.
- Operational effect means firmware has a code path that consumes the value.
- Greenhouse outcome means a later scorecard or structured rationale supports or falsifies the plan. This page reports the latest available evidence but does not pretend a single tunable has isolated causal proof unless the system measured that directly.
Current controller invariants:
DEHUM_VENTexits immediately if dehumidifying with vent/fans pushes VPD abovevpd_high; cooling then uses VENTILATE with vent-mist assist, otherwise sealed mist recovery is allowed.- Non-safety heat is suppressed while vent/fan air exchange is physically active.
heat2is never valid withoutheat1; any observed heat2-without-heat1 interval is a fault to investigate, not a planner tactic.- The dispatcher preserves a minimum 0.55 kPa house VPD deadband so mixed-zone crop targets do not create controller chatter.
- During live, near-edge, or recently unrecovered
VENTILATEVPD-high stress with healthy dew margin, the dispatcher clamps conservative moisture thresholds near the activevpd_highband:mister_engage_kpa <= vpd_high + 0.05,mister_all_kpa <= max(1.0, vpd_high + 0.25),fog_escalation_kpa <= 0.20or0.15in hot/dry venting, shorter mist delays/gaps, and shortermin_fog_off_s.
Routine Plan Contract
Routine set_plan calls must include these values at every transition. The page below gives the full per-tunable detail; this table is the compact operational contract.
| Parameter | Active | Future rows | Last dispatch | 7d confirmed | Planner instruction |
|---|---|---|---|---|---|
bias_cool | 4 | 3 | 2026-05-19 01:58Z | 134/166 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
bias_heat | 1.85 | 3 | 2026-05-19 04:30Z | 107/140 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
d_cool_stage_2 | 3 | 3 | 2026-05-19 01:58Z | 124/129 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
d_heat_stage_2 | 3 | 3 | 2026-05-19 01:58Z | 75/75 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
dwell_gate_ms | 300000 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
enthalpy_close | 1 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
enthalpy_open | -2 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
fog_escalation_kpa | 1 | 3 | 2026-05-19 01:58Z | 260/301 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use about 0.20, or 0.15 in hot/dry venting; higher values delay fog too far above the active band. |
heat_hysteresis | 1.5 | 3 | 2026-05-19 01:58Z | 116/153 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
min_fog_off_s | 180 | 3 | 2026-05-19 01:58Z | 157/189 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
min_fog_on_s | 45 | 3 | 2026-05-19 01:58Z | 109/109 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
min_heat_off_s | 180 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
min_heat_on_s | 120 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
min_vent_off_s | 60 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
min_vent_on_s | 60 | 3 | 2026-05-19 01:58Z | 65/65 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
mist_backoff_s | 2400 | 3 | 2026-05-19 01:58Z | 130/167 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
mist_max_closed_vent_s | 120 | 3 | 2026-05-19 01:58Z | 118/127 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
mist_thermal_relief_s | 90 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
mister_all_delay_s | 600 | 3 | 2026-05-19 02:23Z | 208/248 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
mister_all_kpa | 2.5 | 3 | 2026-05-19 02:23Z | 243/286 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, keep near max(1.0, vpd_high + 0.25) so all-zone mist assist can engage. |
mister_engage_delay_s | 300 | 3 | 2026-05-19 02:23Z | 197/232 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
mister_engage_kpa | 2.4 | 3 | 2026-05-19 02:23Z | 263/310 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, keep near active vpd_high + 0.05; dispatcher clamps overly conservative values. |
mister_pulse_gap_s | 60 | 3 | 2026-05-19 02:23Z | 228/268 | Planner-policy tunable. During VPD-high or near-edge VENTILATE stress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD. |
mister_pulse_on_s | 60 | 3 | 2026-05-19 01:58Z | 89/89 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
mister_vpd_weight | 2 | 3 | 2026-05-19 01:58Z | 163/173 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
mister_water_budget_gal | 600 | 3 | 2026-05-19 01:58Z | 111/111 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
outdoor_staleness_max_s | 600 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
sw_dwell_gate_enabled | 1 | 3 | 2026-05-18 19:44Z | 6/6 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
sw_fog_closes_vent | 1 | 3 | 2026-05-18 19:44Z | 4/4 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
sw_fsm_controller_enabled | 1 | 3 | 2026-05-18 19:44Z | 6/6 | Always include this as 1. It is a compatibility/readback field for the unified band-first controller, and MCP/dispatcher/ESPHome guardrails reject or correct OFF. |
sw_mister_closes_vent | 1 | 3 | 2026-05-18 19:44Z | 20/20 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
sw_summer_vent_enabled | 1 | 3 | 2026-05-18 19:44Z | 22/22 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
temp_hysteresis | 2 | 3 | 2026-05-19 01:58Z | 126/164 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
vent_prefer_dp_delta_f | 5 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
vent_prefer_temp_delta_f | 5 | 3 | 2026-05-19 01:58Z | 63/63 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
vpd_hysteresis | 0.5 | 3 | 2026-05-19 01:58Z | 157/167 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
vpd_watch_dwell_s | 120 | 3 | 2026-05-19 01:58Z | 141/180 | Include this in every routine set_plan waypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard. |
Findings That Matter
mister_engage_kpais effectful, but it is not the state-machine entry trigger. Firmware enters humidification fromvpd_highplusvpd_watch_dwell_s;mister_engage_kpagates physical S1 mister pulses onceSEALED_MISTor explicitVENTILATEassist creates humidity demand. Zone stress can choose the pulse target or satisfy the S1 stress check, but it cannot create a standalone mister mode.mister_all_kpacontrols physical all-zone mister rotation. The header mist-stage delay also usesmister_all_delay_s; fog escalation usesfog_escalation_kpa.- The planner tunes moisture intensity, not the crop band. In
VENTILATE, dry outside air can keep temperature in band while pushing VPD high, so moisture thresholds must stay coupled to the activevpd_highunless dew-risk evidence justifies suppression. - Reserved/no-op values are intentionally not planner-pushable:
fan_burst_min,fog_burst_min,mist_vent_close_lead_s,mist_vent_reopen_delay_s,mister_all_off_s,mister_all_on_s,mister_max_runtime_min,mister_off_s,mister_on_s,summer_vent_min_runtime_s,vent_bypass_min. - Readback-only values are now registry-covered but not planner-pushable:
fallback_window_s,outdoor_temp_f,outdoor_dewpoint_f.
Per-Tunable Detail
Activity and direct-wet gates
activity_duration_min - controller safety
- Purpose: Dispatcher-owned mirror of main-light target runtime. Direct wetting is blocked outside this global biological activity window.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: MCP rejects planner writes; ESPHome
activity_duration__min_via SETPOINT_MAP; readbackcfg_activity_duration_min. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default1440, bounds0 to 1440. - Firmware evidence:
controls.yaml:8, globals.yaml:1, greenhouse_logic.h:4, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch960at2026-05-19 01:58Zfromesp32. - Readback: latest
960at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
5, confirmed5, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Dispatcher-owned mirror of the main lighting runtime policy. Do not set directly; adjust the main light schedule when the biological day should move.
activity_start_hour - controller safety
- Purpose: Dispatcher-owned mirror of the main-light activity start hour. Direct-wet gates consume it so lights and wetting share one activity policy.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: MCP rejects planner writes; ESPHome
activity_start_hourvia SETPOINT_MAP; readbackcfg_activity_start_hour. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default6, bounds0 to 23. - Firmware evidence:
controls.yaml:8, globals.yaml:1, greenhouse_logic.h:2, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch6at2026-05-19 01:58Zfromesp32. - Readback: latest
6at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
2, confirmed2, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Dispatcher-owned mirror of the main lighting runtime policy. Do not set directly; adjust the main light schedule when the biological day should move.
activity_start_minute - controller safety
- Purpose: Dispatcher-owned mirror of the main-light activity start minute.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: MCP rejects planner writes; ESPHome
activity_start_minvia SETPOINT_MAP; readbackcfg_activity_start_min. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default0, bounds0 to 59. - Firmware evidence:
controls.yaml:16, globals.yaml:2, greenhouse_logic.h:4, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch0at2026-05-19 01:58Zfromesp32. - Readback: latest
0at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
2, confirmed2, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Dispatcher-owned mirror of the main lighting runtime policy. Do not set directly; adjust the main light schedule when the biological day should move.
direct_wet_center_drydown_before_off_min - planner policy
- Purpose: Center-zone drydown hold before global activity off. Applies to clean/fert wetting paths in the zone.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_center_drydown_before_off__min_via SETPOINT_MAP; readbackcfg_direct_wet_center_drydown_before_off_min. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch180at2026-05-19 01:58Zfromesp32. - Readback: latest
180at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
6, confirmed6, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_center_start_offset_min - planner policy
- Purpose: Center-zone direct-wet start offset from global activity start. Applies to clean/fert wetting paths in the zone.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_center_start_offset__min_via SETPOINT_MAP; readbackcfg_direct_wet_center_start_offset_min. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
5, confirmed5, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_min_temp_f - planner policy
- Purpose: Minimum house temperature for automated direct wetting across misters, fert paths, and drips.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_min_temp__f_via SETPOINT_MAP; readbackcfg_direct_wet_min_temp_f. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 90. - Firmware evidence:
controls.yaml:4, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch65at2026-05-19 01:58Zfromesp32. - Readback: latest
65at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
4, confirmed4, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_south_drydown_before_off_min - planner policy
- Purpose: South-zone drydown hold before global activity off. Applies to clean/fert wetting paths in the zone.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_south_drydown_before_off__min_via SETPOINT_MAP; readbackcfg_direct_wet_south_drydown_before_off_min. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
4, confirmed4, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_south_start_offset_min - planner policy
- Purpose: South-zone direct-wet start offset from global activity start. Applies to clean/fert wetting paths in the zone.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_south_start_offset__min_via SETPOINT_MAP; readbackcfg_direct_wet_south_start_offset_min. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
4, confirmed4, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_wall_drydown_before_off_min - planner policy
- Purpose: Wall drip drydown hold before global activity off. Applies to wall clean/fert drip and flush paths.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_wall_drydown_before_off__min_via SETPOINT_MAP; readbackcfg___direct_wet_wall_drydown_before_off__min_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
5, confirmed5, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_wall_start_offset_min - planner policy
- Purpose: Wall drip direct-wet start offset from global activity start. Applies to wall clean/fert drip and flush paths.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_wall_start_offset__min_via SETPOINT_MAP; readbackcfg___direct_wet_wall_start_offset__min_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
4, confirmed4, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_west_drydown_before_off_min - planner policy
- Purpose: West-zone drydown hold before global activity off. Applies to clean/fert wetting paths in the zone.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_west_drydown_before_off__min_via SETPOINT_MAP; readbackcfg_direct_wet_west_drydown_before_off_min. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
5, confirmed5, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
direct_wet_west_start_offset_min - planner policy
- Purpose: West-zone direct-wet start offset from global activity start. Applies to clean/fert wetting paths in the zone.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_west_start_offset__min_via SETPOINT_MAP; readbackcfg_direct_wet_west_start_offset_min. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default0, bounds0 to 720. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
4, confirmed4, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
sw_direct_wet_gate_enabled - planner policy
- Purpose: Enables global biological activity and per-zone direct-wet gates for clean/fert misters and irrigation paths.
- Why it matters: The activity window aligns lights, wetting, fert paths, and drydown timing so direct plant wetting happens only during the biological day.
- Implementation: set_tunable allowed; ESPHome
direct_wet_gate_enabledvia SETPOINT_MAP; readbackdirect_wet_gate_enabled. - Registry: class
planner_policy, kindswitch, ownerplanner, tier2, default1, boundsswitch 0/1. - Firmware evidence:
controls.yaml:4, globals.yaml:2, tunables.yaml:9. - Last used: active
-from-; latest plan-at-; latest dispatch-at-from-. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
0, confirmed0, unconfirmed0, distinct 7d values0, 30d clamps0. - Effectiveness: Firmware publishes the value; no recent planner/dispatcher use.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy gate for direct plant wetting. Tune per zone to move morning wet start or pre-off drydown without adding crop-specific firmware logic.
Controller gates
dwell_gate_ms - routine
- Purpose: Dwell hold duration. Default 5 min. Safety rails + R2-3 dry override + vpd_min_safe rescue preempt unconditionally.
- Why it matters: These switches and dwell values choose the controller posture and mode-transition stability.
- Implementation: routine set_plan required; ESPHome
dwell_gate__ms_via SETPOINT_MAP; readbackcfg_dwell_gate_ms. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default300000, bounds60000 to 1800000. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:3, greenhouse_types.h:6, sensors.yaml:3, tunables.yaml:4. - Last used: active
300000fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch300000at2026-05-19 01:58Zfromesp32. - Readback: latest
300000at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
sw_dwell_gate_enabled - routine
- Purpose: Master switch for Phase-2 mode-dwell gate. Default OFF for shadow-mode bake. Flip to ON after 14d replay+shadow validation.
- Why it matters: These switches and dwell values choose the controller posture and mode-transition stability.
- Implementation: routine set_plan required; ESPHome
dwell_gate_enabledvia SETPOINT_MAP; readbackcfg_dwell_gate_enabled. - Registry: class
planner_policy, kindswitch, ownerplanner, tier1, default0, boundsswitch 0/1. - Firmware evidence:
controls.yaml:4, globals.yaml:2, greenhouse_logic.h:6, greenhouse_types.h:8, sensors.yaml:4, tunables.yaml:12. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-18 19:44Zfromplan. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
6, confirmed6, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale:
iris-20260518-0543(validated 2026-05-19 02:13Z, score 6); expected effect: Reduce ordinary mode churn without blocking safety or thermal-relief exits.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
sw_fsm_controller_enabled - routine
- Purpose: Unified band-first controller is the live controller path. ESPHome control loop, dispatcher, MCP, and outbound-listener guardrails force this ON; rollback requires an explicit firmware/config rollback outside the planner surface.
- Why it matters: These switches and dwell values choose the controller posture and mode-transition stability.
- Implementation: routine set_plan required; ESPHome
fsm_controller_enabledvia SETPOINT_MAP; readbackcfg_fsm_controller_enabled. - Registry: class
planner_policy, kindswitch, owneroperator, tier1, default1, boundsswitch 0/1. - Firmware evidence:
controls.yaml:12, globals.yaml:2, greenhouse_logic.h:10, greenhouse_types.h:4, sensors.yaml:4, tunables.yaml:12. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-18 19:44Zfrommanual. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
6, confirmed6, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Always include this as
1. It is a compatibility/readback field for the unified band-first controller, and MCP/dispatcher/ESPHome guardrails reject or correct OFF.
sw_gl_grow_auto_mode - planner policy
- Purpose: Per-circuit automation enable for grow/secondary lighting.
- Why it matters: These switches and dwell values choose the controller posture and mode-transition stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_auto_modevia SETPOINT_MAP; readbackcfg_gl_grow_auto_mode. - Registry: class
planner_policy, kindswitch, ownerplanner, tier2, default1, boundsswitch 0/1. - Firmware evidence:
sensors.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch1at2026-05-18 02:35Zfromband. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
15, confirmed1, unconfirmed14, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 1/15 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
sw_gl_main_auto_mode - planner policy
- Purpose: Per-circuit automation enable for main/overhead lighting.
- Why it matters: These switches and dwell values choose the controller posture and mode-transition stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_auto_modevia SETPOINT_MAP; readbackcfg_gl_main_auto_mode. - Registry: class
planner_policy, kindswitch, ownerplanner, tier2, default1, boundsswitch 0/1. - Firmware evidence:
sensors.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch1at2026-05-18 02:35Zfromband. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
15, confirmed1, unconfirmed14, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 1/15 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
sw_occupancy_inhibit - controller safety
- Purpose: Block misting while greenhouse is occupied.
- Why it matters: These switches and dwell values choose the controller posture and mode-transition stability.
- Implementation: MCP rejects planner writes; ESPHome
occupancy_mist_inhibitvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default1, boundsswitch 0/1. - Firmware evidence:
controls.yaml:3, globals.yaml:1, greenhouse_logic.h:4, greenhouse_types.h:2, tunables.yaml:9. - Last used: active
-from-; latest plan-at-; latest dispatch1at2026-05-18 13:34Zfrommanual. - Readback: latest
-at-(- old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
17, confirmed3, unconfirmed14, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 3/17 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
Economiser
econ_heat_margin_f - controller safety
- Purpose: Blocks economiser venting when heating demand is active and temp is far below high band.
- Why it matters: Economiser settings decide when outside air is useful enough to ventilate without worsening heat or humidity.
- Implementation: MCP rejects planner writes; ESPHome
econ_heat_margin__fvia SETPOINT_MAP; readbackcfg___econ_heat_margin___f_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default5, bounds1 to 15. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:2, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch5at2026-05-19 01:58Zfromesp32. - Readback: latest
5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
enthalpy_close - routine
- Purpose: Economiser closes when enthalpy ≥ this. In MCP TIER1.
- Why it matters: Economiser settings decide when outside air is useful enough to ventilate without worsening heat or humidity.
- Implementation: routine set_plan required; ESPHome
enthalpy_close__kj_kg_via SETPOINT_MAP; readbackcfg___enthalpy_close__kj_kg___. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default1, bounds-5 to 20. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-19 01:58Zfromesp32. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
enthalpy_open - routine
- Purpose: Economiser opens when outdoor-indoor enthalpy ≤ this. In MCP TIER1.
- Why it matters: Economiser settings decide when outside air is useful enough to ventilate without worsening heat or humidity.
- Implementation: routine set_plan required; ESPHome
enthalpy_open__kj_kg_via SETPOINT_MAP; readbackcfg___enthalpy_open__kj_kg___. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default-2, bounds-5 to 0. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-2fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch-2at2026-05-19 01:58Zfromesp32. - Readback: latest
-2at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
site_pressure_hpa - controller safety
- Purpose: Elevation-corrected barometric pressure for VPD calc. Site constant — not planner-pushable.
- Why it matters: Economiser settings decide when outside air is useful enough to ventilate without worsening heat or humidity.
- Implementation: MCP rejects planner writes; ESPHome
site_pressure__hpa_via SETPOINT_MAP; readbackcfg___site_pressure__hpa_. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default840, bounds700 to 1100. - Firmware evidence:
globals.yaml:1, sensors.yaml:4, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch840at2026-05-19 01:58Zfromesp32. - Readback: latest
840at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
sw_economiser_enabled - controller safety
- Purpose: Economiser master enable. Default ON.
- Why it matters: Economiser settings decide when outside air is useful enough to ventilate without worsening heat or humidity.
- Implementation: MCP rejects planner writes; ESPHome
economiser_enabledvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default1, boundsswitch 0/1. - Firmware evidence:
controls.yaml:1, globals.yaml:1, tunables.yaml:9. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch1at2026-04-10 05:33Zfromplan. - Readback: latest
1at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
0, confirmed0, unconfirmed0, distinct 7d values0, 30d clamps0. - Effectiveness: Firmware publishes the value; no recent planner/dispatcher use.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
Fog gates
fog_burst_min - reserved/no-op
- Purpose: Manual fog-burst duration placeholder. Current firmware updates the value but does not consume it for timing.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
fog_burst__min_via SETPOINT_MAP; readbackcfg___fog_burst__min_. - Registry: class
retired, kindnumeric, owneroperator, tier2, default10, bounds1 to 60. - Firmware evidence:
controls.yaml:4, globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch8at2026-05-19 01:58Zfromesp32. - Readback: latest
8at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
79, confirmed79, unconfirmed0, distinct 7d values4, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
fog_escalation_kpa - routine
- Purpose: VPD delta above active vpd_high that escalates from mist to fog. Lower values mean earlier fog inside VENTILATE mist assist; dispatcher caps overly conservative deltas during live VPD-high or near-edge VENTILATE stress when dew margin is healthy.
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: routine set_plan required; ESPHome
fog_escalation__kpa_via SETPOINT_MAP; readbackcfg___fog_escalation__kpa_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default0.4, bounds0.1 to 1. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:7, greenhouse_types.h:4, sensors.yaml:2, tunables.yaml:4. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-19 01:58Zfromesp32. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
301, confirmed260, unconfirmed41, distinct 7d values16, 30d clamps205. - Effectiveness: Mostly confirmed: 260/301 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-0543(validated 2026-05-19 02:13Z, score 6); expected effect: Avoid fog-driven condensation and keep dp_risk_hours at 0.. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, use about0.20, or0.15in hot/dry venting; higher values delay fog too far above the active band.
fog_min_temp_f - controller safety
- Purpose: Fog blocks when indoor temp below this (evap cooling hurts in cold).
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: MCP rejects planner writes; ESPHome
fog_min_temp__f_via SETPOINT_MAP; readbackcfg___fog_min_temp___f_. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default55, bounds40 to 65. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch55at2026-05-19 01:58Zfromesp32. - Readback: latest
55at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
fog_rh_ceiling_pct - controller safety
- Purpose: Fog blocks when indoor RH exceeds this. Safety-adjacent.
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: MCP rejects planner writes; ESPHome
fog_rh_ceiling____via SETPOINT_MAP; readbackcfg___fog_rh_ceiling____. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default90, bounds75 to 98. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch90at2026-05-19 01:58Zfromesp32. - Readback: latest
90at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
fog_time_window_end - controller safety
- Purpose: End hour for fog eligibility window.
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: MCP rejects planner writes; ESPHome
fog_window_end__hr_via SETPOINT_MAP; readbackcfg___fog_window_end__hour_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default18, bounds14 to 20. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch17at2026-05-19 01:58Zfromesp32. - Readback: latest
17at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
fog_time_window_start - controller safety
- Purpose: Start hour for fog eligibility window.
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: MCP rejects planner writes; ESPHome
fog_window_start__hr_via SETPOINT_MAP; readbackcfg___fog_window_start__hour_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default6, bounds5 to 12. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch7at2026-05-19 01:58Zfromesp32. - Readback: latest
7at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
min_fog_off_s - routine
- Purpose: Fog minimum OFF time — in MCP TIER1.
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: routine set_plan required; ESPHome
min_fog_off__s_via SETPOINT_MAP; readbackcfg___min_fog_off__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default60, bounds15 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
180fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch180at2026-05-19 01:58Zfromesp32. - Readback: latest
180at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
189, confirmed157, unconfirmed32, distinct 7d values7, 30d clamps127. - Effectiveness: Mostly confirmed: 157/189 7d writes have readbacks.
- Latest plan rationale:
iris-20260516-0545(validated 2026-05-17 11:44Z, score 2); expected effect: allow timely fog cycling only during the confirmed dry peak. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD.
min_fog_on_s - routine
- Purpose: Fog minimum ON time — in MCP TIER1.
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: routine set_plan required; ESPHome
min_fog_on__s_via SETPOINT_MAP; readbackcfg___min_fog_on__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default60, bounds15 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
45fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch45at2026-05-19 01:58Zfromesp32. - Readback: latest
45at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
109, confirmed109, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
sw_fog_closes_vent - routine
- Purpose: Fog is suppressed while the vent is physically open, except vent-mist assist. Default ON; disabling re-enables open-vent fog during VENTILATE (tradeoff).
- Why it matters: Fog is high-power humidity assist. These gates decide when that heavy tool is allowed.
- Implementation: routine set_plan required; ESPHome
fog_closes_ventvia SETPOINT_MAP; readbackfog_closes_vent. - Registry: class
planner_policy, kindswitch, ownerplanner, tier1, default1, boundsswitch 0/1. - Firmware evidence:
controls.yaml:6, globals.yaml:2, tunables.yaml:9. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-18 19:44Zfromplan. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10048. - Landing evidence: 7d dispatcher writes
4, confirmed4, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
Grow lights
gl_dli_target - controller safety
- Purpose: Daily light integral target for supplemental grow-light automation.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_dli_target__mol_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default14, bounds1 to 50. - Firmware evidence:
globals.yaml:1, tunables.yaml:4. - Last used: active
-from-; latest planiris-fix-dli-20260328at2026-03-29 03:04Z; latest dispatch22at2026-05-18 02:31Zfromband. - Readback: latest
14at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
254, confirmed13, unconfirmed241, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 13/254 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
gl_grow_dli_target - controller safety
- Purpose: Legacy grow/secondary lighting DLI telemetry target. Runtime control now uses gl_grow_target_light_minutes.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_grow_dli_targetvia SETPOINT_MAP; readbackcfg_gl_grow_dli_target. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default14, bounds1 to 50. - Firmware evidence:
globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch14at2026-05-19 01:58Zfromesp32. - Readback: latest
14at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
52, confirmed52, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
gl_grow_lux_hysteresis - planner policy
- Purpose: Grow/secondary circuit OFF threshold is ON threshold plus this hysteresis.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_lux_hysteresisvia SETPOINT_MAP; readbackcfg_gl_grow_lux_hysteresis. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default8000, bounds0 to 25000. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch8000at2026-05-19 01:58Zfromesp32. - Readback: latest
8000at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_grow_lux_threshold - planner policy
- Purpose: Grow/secondary circuit ON threshold from Tempest outdoor lux.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_lux_thresholdvia SETPOINT_MAP; readbackcfg_gl_grow_lux_threshold. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default40000, bounds100 to 100000. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch40000at2026-05-19 01:58Zfromesp32. - Readback: latest
40000at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_grow_min_off_s - planner policy
- Purpose: Minimum OFF dwell for grow/secondary lighting state machine.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_min_off_svia SETPOINT_MAP; readbackcfg_gl_grow_min_off_s. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default60, bounds0 to 3600. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:5, tunables.yaml:8. - Last used: active
-from-; latest plan-at-; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
36, confirmed36, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_grow_min_on_s - planner policy
- Purpose: Minimum ON dwell for grow/secondary lighting state machine.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_min_on_svia SETPOINT_MAP; readbackcfg_gl_grow_min_on_s. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default120, bounds0 to 3600. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:5, tunables.yaml:8. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
36, confirmed36, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_grow_sunrise_hour - planner policy
- Purpose: Earliest local hour the grow/secondary circuit may turn on.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_sunrise_hourvia SETPOINT_MAP; readbackcfg_gl_grow_sunrise_hour. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default7, bounds0 to 23. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch6at2026-05-19 01:58Zfromesp32. - Readback: latest
6at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_grow_sunset_hour - planner policy
- Purpose: Latest local hour the grow/secondary circuit may remain on.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_sunset_hourvia SETPOINT_MAP; readbackcfg_gl_grow_sunset_hour. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default19, bounds0 to 23. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch22at2026-05-19 01:58Zfromesp32. - Readback: latest
22at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_grow_target_light_minutes - planner policy
- Purpose: Grow/secondary daily qualified-light-minutes target. A minute counts once when natural lux is above threshold or the actual switch is ON.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_grow_target_light_minutesvia SETPOINT_MAP; readbackcfg_gl_grow_target_light_minutes. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default960, bounds0 to 1080. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch960at2026-05-19 01:58Zfromesp32. - Readback: latest
960at2026-05-19 06:35Z(0m old); 7d readbacks2026. - Landing evidence: 7d dispatcher writes
23, confirmed23, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_lux_hysteresis - controller safety
- Purpose: Legacy shared grow-light hysteresis. Read-only fallback now that per-circuit hysteresis tunables are planner-writable.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_lux_hysteresisvia SETPOINT_MAP; readbackcfg___gl_lux_hysteresis. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default1500, bounds0 to 10000. - Firmware evidence:
globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch8000at2026-05-18 02:31Zfromband. - Readback: latest
1500at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
109, confirmed109, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
gl_lux_threshold - controller safety
- Purpose: Legacy shared grow-light threshold. Read-only fallback now that per-circuit gl_main_* and gl_grow_* thresholds are planner-writable.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_lux_thresholdvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default3000, bounds100 to 50000. - Firmware evidence:
globals.yaml:1, tunables.yaml:4. - Last used: active
-from-; latest planiris-fix-gl-20260328at2026-03-29 03:06Z; latest dispatch40000at2026-05-18 02:31Zfromband. - Readback: latest
20000at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
102, confirmed31, unconfirmed71, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 31/102 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
gl_main_dli_target - controller safety
- Purpose: Legacy main/overhead lighting DLI telemetry target. Runtime control now uses gl_main_target_light_minutes.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_main_dli_targetvia SETPOINT_MAP; readbackcfg_gl_main_dli_target. - Registry: class
controller_safety, kindnumeric, ownerdispatcher default, tier2, default14, bounds1 to 50. - Firmware evidence:
globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch14at2026-05-19 01:58Zfromesp32. - Readback: latest
14at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
52, confirmed52, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
gl_main_lux_hysteresis - planner policy
- Purpose: Main/overhead circuit OFF threshold is ON threshold plus this hysteresis.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_lux_hysteresisvia SETPOINT_MAP; readbackcfg_gl_main_lux_hysteresis. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default8000, bounds0 to 25000. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch8000at2026-05-19 01:58Zfromesp32. - Readback: latest
8000at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
56, confirmed56, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_main_lux_threshold - planner policy
- Purpose: Main/overhead circuit ON threshold from Tempest outdoor lux.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_lux_thresholdvia SETPOINT_MAP; readbackcfg_gl_main_lux_threshold. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default40000, bounds100 to 100000. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch40000at2026-05-19 01:58Zfromesp32. - Readback: latest
40000at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_main_min_off_s - planner policy
- Purpose: Minimum OFF dwell for main/overhead lighting state machine.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_min_off_svia SETPOINT_MAP; readbackcfg_gl_main_min_off_s. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default60, bounds0 to 3600. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:5, tunables.yaml:8. - Last used: active
-from-; latest plan-at-; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
36, confirmed36, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_main_min_on_s - planner policy
- Purpose: Minimum ON dwell for main/overhead lighting state machine.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_min_on_svia SETPOINT_MAP; readbackcfg_gl_main_min_on_s. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default120, bounds0 to 3600. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:5, tunables.yaml:8. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
36, confirmed36, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_main_sunrise_hour - planner policy
- Purpose: Earliest local hour the main/overhead circuit may turn on.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_sunrise_hourvia SETPOINT_MAP; readbackcfg_gl_main_sunrise_hour. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default7, bounds0 to 23. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch6at2026-05-19 01:58Zfromesp32. - Readback: latest
6at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_main_sunset_hour - planner policy
- Purpose: Latest local hour the main/overhead circuit may remain on.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_sunset_hourvia SETPOINT_MAP; readbackcfg_gl_main_sunset_hour. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default19, bounds0 to 23. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch22at2026-05-19 01:58Zfromesp32. - Readback: latest
22at2026-05-19 06:35Z(0m old); 7d readbacks2812. - Landing evidence: 7d dispatcher writes
55, confirmed55, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_main_target_light_minutes - planner policy
- Purpose: Main/overhead daily qualified-light-minutes target. A minute counts once when natural lux is above threshold or the actual switch is ON.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: set_tunable allowed; ESPHome
gl_main_target_light_minutesvia SETPOINT_MAP; readbackcfg_gl_main_target_light_minutes. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default960, bounds0 to 1080. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch960at2026-05-19 01:58Zfromesp32. - Readback: latest
960at2026-05-19 06:35Z(0m old); 7d readbacks2026. - Landing evidence: 7d dispatcher writes
23, confirmed23, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
gl_sunrise_hour - controller safety
- Purpose: Earliest local hour grow lights may turn on.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_start_hourvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default7, bounds0 to 23. - Firmware evidence:
globals.yaml:1, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch6at2026-05-18 02:31Zfromband. - Readback: latest
7at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
254, confirmed13, unconfirmed241, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 13/254 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
gl_sunset_hour - controller safety
- Purpose: Latest local hour grow lights may remain on.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_cutoff_hourvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default19, bounds0 to 23. - Firmware evidence:
globals.yaml:1, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch22at2026-05-18 02:31Zfromband. - Readback: latest
19at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
254, confirmed13, unconfirmed241, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 13/254 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
sw_gl_auto_mode - controller safety
- Purpose: Grow-light automation master enable.
- Why it matters: Grow-light settings trade supplemental DLI against electrical cost and light-cycle stability.
- Implementation: MCP rejects planner writes; ESPHome
gl_auto_modevia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default1, boundsswitch 0/1. - Firmware evidence:
no token hit. - Last used: active
-from-; latest planiris-dev-gl-fixat2026-03-25 17:31Z; latest dispatch1at2026-05-18 13:34Zfromband. - Readback: latest
1at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
244, confirmed1, unconfirmed243, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 1/244 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
Irrigation
irrig_center_days_mask - planner policy
- Purpose: Explicit center watering day mask, bit0=Sunday through bit6=Saturday.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: set_tunable allowed; ESPHome
irrig_center_days_maskvia SETPOINT_MAP; readbackcfg_irrig_center_days_mask. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default127, bounds0 to 127. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
127fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch127at2026-05-19 01:58Zfromesp32. - Readback: latest
127at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
2, confirmed2, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
irrig_center_duration_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_duration__min_via SETPOINT_MAP; readbackcfg_irrig_center_duration_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default10, bounds1 to 120. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch10at2026-05-19 01:58Zfromesp32. - Readback: latest
10at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_center_fert_days_mask - planner policy
- Purpose: Explicit center fertigation day mask. Nonzero supersedes irrig_center_fert_every_n.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: set_tunable allowed; ESPHome
irrig_center_fert_days_maskvia SETPOINT_MAP; readbackcfg_irrig_center_fert_days_mask. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default127, bounds0 to 127. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
127fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch127at2026-05-19 01:58Zfromesp32. - Readback: latest
127at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
7, confirmed7, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
irrig_center_fert_duration_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_fert_duration__min_via SETPOINT_MAP; readbackcfg_irrig_center_fert_duration_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default6, bounds0 to 60. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
6fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch6at2026-05-19 04:35Zfromplan. - Readback: latest
5at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
103, confirmed61, unconfirmed42, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 61/103 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_center_fert_every_n - controller safety
- Purpose: Naming quirk: canonical drops ‘_cycles’ suffix.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_fert_every_n_cyclesvia SETPOINT_MAP; readbackcfg_irrig_center_fert_every_n. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default0, bounds0 to 30. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
0fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch0at2026-05-19 04:35Zfromplan. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
100, confirmed58, unconfirmed42, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/100 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_center_flush_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_flush__min_via SETPOINT_MAP; readbackcfg_irrig_center_flush_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default2, bounds0 to 30. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
2fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch2at2026-05-19 04:35Zfromplan. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
100, confirmed58, unconfirmed42, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/100 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_center_interval_days - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_interval__days_via SETPOINT_MAP; readbackcfg_irrig_center_interval_days. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default1, bounds1 to 14. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
1fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch1at2026-05-19 04:35Zfromplan. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
100, confirmed58, unconfirmed42, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/100 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_center_start_hour - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_start_hourvia SETPOINT_MAP; readbackcfg_irrig_center_start_hour. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default10, bounds0 to 23. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
10fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch10at2026-05-19 04:35Zfromplan. - Readback: latest
6at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
103, confirmed61, unconfirmed42, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 61/103 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_center_start_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_center_start_minvia SETPOINT_MAP; readbackcfg_irrig_center_start_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default30, bounds0 to 59. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
30fromoperator-center-fert-aggressive-20260518; latest planoperator-center-fert-aggressive-20260518at2026-05-18 23:35Z; latest dispatch30at2026-05-19 04:35Zfromplan. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
100, confirmed58, unconfirmed42, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/100 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_vpd_boost_pct - controller safety
- Purpose: Irrigation duration boost after sustained high-VPD stress.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_vpd_boost__via SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default25, bounds0 to 200. - Firmware evidence:
controls.yaml:1, globals.yaml:1, tunables.yaml:4. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch25at2026-05-19 01:58Zfromesp32. - Readback: latest
25at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_vpd_boost_threshold_hrs - controller safety
- Purpose: Accumulated high-VPD hours before irrigation boost applies.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_vpd_boost_threshold__hrs_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default3, bounds0 to 24. - Firmware evidence:
controls.yaml:2, globals.yaml:1, tunables.yaml:2. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch3at2026-05-19 01:58Zfromesp32. - Readback: latest
3at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_days_mask - planner policy
- Purpose: Explicit wall watering day mask, bit0=Sunday through bit6=Saturday.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: set_tunable allowed; ESPHome
irrig_wall_days_maskvia SETPOINT_MAP; readbackcfg_irrig_wall_days_mask. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default127, bounds0 to 127. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
127fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch127at2026-05-19 01:58Zfromesp32. - Readback: latest
127at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
2, confirmed2, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
irrig_wall_duration_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_duration__min_via SETPOINT_MAP; readbackcfg_irrig_wall_duration_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default10, bounds1 to 120. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
10fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-19 02:10Z; latest dispatch10at2026-05-19 04:35Zfromplan. - Readback: latest
10at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
69, confirmed59, unconfirmed10, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 59/69 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_fert_days_mask - planner policy
- Purpose: Explicit wall fertigation day mask. Nonzero supersedes irrig_wall_fert_every_n.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: set_tunable allowed; ESPHome
irrig_wall_fert_days_maskvia SETPOINT_MAP; readbackcfg_irrig_wall_fert_days_mask. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier2, default127, bounds0 to 127. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
127fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch127at2026-05-19 01:58Zfromesp32. - Readback: latest
127at2026-05-19 06:35Z(0m old); 7d readbacks589. - Landing evidence: 7d dispatcher writes
7, confirmed7, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Planner-policy tunable. Use only when forecast or previous-plan evidence points directly to this control path.
irrig_wall_fert_duration_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_fert_duration__min_via SETPOINT_MAP; readbackcfg_irrig_wall_fert_duration_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default6, bounds0 to 60. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
6fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch6at2026-05-19 04:35Zfromplan. - Readback: latest
5at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
101, confirmed61, unconfirmed40, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 61/101 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_fert_every_n - controller safety
- Purpose: Naming quirk: canonical drops ‘_cycles’ suffix that SETPOINT_MAP key carries.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_fert_every_n_cyclesvia SETPOINT_MAP; readbackcfg_irrig_wall_fert_every_n. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default0, bounds0 to 30. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
0fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch0at2026-05-19 04:35Zfromplan. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
98, confirmed58, unconfirmed40, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/98 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_flush_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_flush__min_via SETPOINT_MAP; readbackcfg_irrig_wall_flush_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default2, bounds0 to 30. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
2fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch2at2026-05-19 04:35Zfromplan. - Readback: latest
2at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
98, confirmed58, unconfirmed40, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/98 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_interval_days - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_interval__days_via SETPOINT_MAP; readbackcfg_irrig_wall_interval_days. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default1, bounds1 to 14. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:2. - Last used: active
1fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch1at2026-05-19 04:35Zfromplan. - Readback: latest
1at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
98, confirmed58, unconfirmed40, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 58/98 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_start_hour - controller safety
- Purpose: Wall-drip schedule — operator configures.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_start_hourvia SETPOINT_MAP; readbackcfg_irrig_wall_start_hour. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default10, bounds0 to 23. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
10fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch10at2026-05-19 04:35Zfromplan. - Readback: latest
6at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
101, confirmed61, unconfirmed40, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 61/101 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
irrig_wall_start_min - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrig_wall_start_minvia SETPOINT_MAP; readbackcfg_irrig_wall_start_min. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default30, bounds0 to 59. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
30fromoperator-wall-fert-all-misters-20260518; latest planoperator-wall-fert-all-misters-20260518at2026-05-18 23:48Z; latest dispatch30at2026-05-19 04:35Zfromplan. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
101, confirmed61, unconfirmed40, distinct 7d values2, 30d clamps0. - Effectiveness: Mostly confirmed: 61/101 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
sw_irrigation_center_enabled - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrigation_center_enabledvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default1, boundsswitch 0/1. - Firmware evidence:
no token hit. - Last used: active
-from-; latest plan-at-; latest dispatch0at2026-05-18 13:34Zfrommanual. - Readback: latest
-at-(- old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
17, confirmed3, unconfirmed14, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 3/17 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
sw_irrigation_enabled - controller safety
- Purpose: Master irrigation enable.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrigation_enabledvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default1, boundsswitch 0/1. - Firmware evidence:
no token hit. - Last used: active
-from-; latest plan-at-; latest dispatch0at2026-05-18 13:34Zfrommanual. - Readback: latest
-at-(- old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
17, confirmed3, unconfirmed14, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 3/17 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
sw_irrigation_wall_enabled - controller safety
- Purpose: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrigation_wall_enabledvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default1, boundsswitch 0/1. - Firmware evidence:
no token hit. - Last used: active
-from-; latest plan-at-; latest dispatch0at2026-05-18 13:34Zfrommanual. - Readback: latest
-at-(- old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
17, confirmed3, unconfirmed14, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 3/17 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
sw_irrigation_weather_skip - controller safety
- Purpose: Operator-only legacy outdoor weather skip; default off for greenhouse irrigation.
- Why it matters: Irrigation settings feed crop water availability and fertigation timing, not the 5-second climate mode.
- Implementation: MCP rejects planner writes; ESPHome
irrigation_weather_skipvia SETPOINT_MAP; readbackno cfg readback. - Registry: class
controller_safety, kindswitch, owneroperator, tier2, default0, boundsswitch 0/1. - Firmware evidence:
no token hit. - Last used: active
-from-; latest plan-at-; latest dispatch1at2026-05-18 13:34Zfrommanual. - Readback: latest
-at-(- old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
17, confirmed3, unconfirmed14, distinct 7d values1, 30d clamps0. - Effectiveness: Mostly confirmed: 3/17 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
Misting and sealed-humidification
mist_backoff_s - routine
- Purpose: Controller lockout after sealed humidification times out. Suppresses another SEALED_MIST attempt without forcing venting.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mist_backoff__s_via SETPOINT_MAP; readbackcfg___mist_backoff__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default600, bounds60 to 3600. - Firmware evidence:
controls.yaml:5, globals.yaml:2, greenhouse_logic.h:18, greenhouse_types.h:6, sensors.yaml:5, tunables.yaml:8. - Last used: active
2400fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch2400at2026-05-19 01:58Zfromesp32. - Readback: latest
2400at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
167, confirmed130, unconfirmed37, distinct 7d values8, 30d clamps0. - Effectiveness: Mostly confirmed: 130/167 7d writes have readbacks.
- Latest plan rationale:
iris-20260515-2010(validated 2026-05-16 11:46Z, score 10); expected effect: space recovery attempts and protect water budget.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
mist_max_closed_vent_s - routine
- Purpose: Maximum time vent can stay closed during misting before thermal-relief burst.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mist_max_closed_vent__s_via SETPOINT_MAP; readbackcfg___mist_max_closed_vent__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default600, bounds120 to 900. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
120fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
127, confirmed118, unconfirmed9, distinct 7d values5, 30d clamps0. - Effectiveness: Mostly confirmed: 118/127 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Maintain dp_risk_hours at 0.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
mist_thermal_relief_s - routine
- Purpose: Mandatory vent-open relief duration if mist-closed-vent cap hit.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mist_thermal_relief__s_via SETPOINT_MAP; readbackcfg___mist_thermal_relief__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default90, bounds30 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
90fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch90at2026-05-19 01:58Zfromesp32. - Readback: latest
90at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
mist_vent_close_lead_s - reserved/no-op
- Purpose: Reserved/no-op in current firmware. Exposed/read back but not consumed by the control loop.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mist_vent_close_lead__s_via SETPOINT_MAP; readbackcfg___mist_vent_close_lead__s_. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default15, bounds0 to 60. - Firmware evidence:
globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest planiris-20260511-0448at2026-05-13 15:00Z; latest dispatch15at2026-05-19 01:58Zfromesp32. - Readback: latest
15at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mist_vent_reopen_delay_s - reserved/no-op
- Purpose: Reserved/no-op in current firmware. Exposed/read back but not consumed by the control loop.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mist_vent_reopen_delay__s_via SETPOINT_MAP; readbackcfg___mist_vent_reopen_delay__s_. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default45, bounds0 to 120. - Firmware evidence:
globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest planiris-20260511-0448at2026-05-13 15:00Z; latest dispatch45at2026-05-19 01:58Zfromesp32. - Readback: latest
45at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mister_all_delay_s - routine
- Purpose: Dwell before physical all-zone rotation. Also feeds the header mist-stage delay.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_all_delay__s_via SETPOINT_MAP; readbackcfg___mister_all_delay__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default300, bounds60 to 900. - Firmware evidence:
controls.yaml:4, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
600fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch600at2026-05-19 02:23Zfromplan. - Readback: latest
600at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
248, confirmed208, unconfirmed40, distinct 7d values9, 30d clamps262. - Effectiveness: Mostly confirmed: 208/248 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Avoid all-zone mist rotation overnight.. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD.
mister_all_kpa - routine
- Purpose: Physical all-zone mister rotation threshold. Keep close to active vpd_high on hot/dry ventilation cycles; dispatcher clamps values that would prevent all-zone assist during live VPD-high or near-edge VENTILATE stress.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
vpd_mister_all_kpavia SETPOINT_MAP; readbackcfg_mister_all__kpa_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default1.9, bounds1 to 2.5. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
2.5fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch2.5at2026-05-19 02:23Zfromplan. - Readback: latest
2.5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
286, confirmed243, unconfirmed43, distinct 7d values40, 30d clamps187. - Effectiveness: Mostly confirmed: 243/286 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Keep all-zone mist unavailable unless an unexpected severe VPD spike occurs.. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, keep nearmax(1.0, vpd_high + 0.25)so all-zone mist assist can engage.
mister_all_off_s - reserved/no-op
- Purpose: Deprecated legacy all-zone duty-cycle OFF duration. Current pulse controller does not consume it.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mister_all_off__s_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default420, bounds120 to 600. - Firmware evidence:
globals.yaml:2, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch420at2026-05-19 01:58Zfromesp32. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mister_all_on_s - reserved/no-op
- Purpose: Deprecated legacy all-zone duty-cycle ON duration. Current pulse controller does not consume it.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mister_all_on__s_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default480, bounds120 to 600. - Firmware evidence:
globals.yaml:2, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch480at2026-05-19 01:58Zfromesp32. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mister_center_penalty - controller safety
- Purpose: Score penalty on center zone to discourage over-misting seedlings.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: MCP rejects planner writes; ESPHome
mister_center_penaltyvia SETPOINT_MAP; readbackcfg___mister_center_penalty. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default0.5, bounds0 to 1. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch0.5at2026-05-19 01:58Zfromesp32. - Readback: latest
0.5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
mister_engage_delay_s - routine
- Purpose: Delay before first physical mister pulse during a sealed or vent-assist moisture cycle.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_engage_delay__s_via SETPOINT_MAP; readbackcfg___mister_engage_delay__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default45, bounds30 to 900. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
300fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch300at2026-05-19 02:23Zfromplan. - Readback: latest
300at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
232, confirmed197, unconfirmed35, distinct 7d values10, 30d clamps262. - Effectiveness: Mostly confirmed: 197/232 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Avoid short humidity pulses during transient VPD noise.. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD.
mister_engage_kpa - routine
- Purpose: Physical S1 mister-pulse threshold once humidity/zone demand exists. SEALED_MIST entry is vpd_high plus vpd_watch_dwell_s. During live VPD-high stress with healthy dew margin, dispatcher clamps overly conservative values back near the active vpd_high band.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
vpd_mister_engage_kpavia SETPOINT_MAP; readbackcfg_mister_engage__kpa_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default1.6, bounds0.5 to 2.5. - Firmware evidence:
controls.yaml:3, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
2.4fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch2.4at2026-05-19 02:23Zfromplan. - Readback: latest
2.4at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
310, confirmed263, unconfirmed47, distinct 7d values42, 30d clamps198. - Effectiveness: Mostly confirmed: 263/310 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Prevent physical misting overnight and keep VPD-low under 0.25h with dp-risk at 0h.. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, keep near activevpd_high + 0.05; dispatcher clamps overly conservative values.
mister_max_runtime_min - reserved/no-op
- Purpose: Deprecated legacy runtime cap. Current water-budget logic uses mister_water_budget_gal.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mister_max_runtime__min_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default120, bounds5 to 480. - Firmware evidence:
globals.yaml:1, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mister_off_s - reserved/no-op
- Purpose: Deprecated legacy duty-cycle OFF duration. Current pulse controller does not consume it.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mister_off__s_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default600, bounds120 to 900. - Firmware evidence:
globals.yaml:2, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch600at2026-05-19 01:58Zfromesp32. - Readback: latest
600at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mister_on_s - reserved/no-op
- Purpose: Deprecated legacy duty-cycle ON duration. Current pulse controller does not consume it.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
mister_on__s_via SETPOINT_MAP; readbackno cfg readback. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default300, bounds60 to 600. - Firmware evidence:
globals.yaml:2, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch300at2026-05-19 01:58Zfromesp32. - Readback: latest
0at2026-03-29 20:00Z(50d old); 7d readbacks0. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
mister_pulse_gap_s - routine
- Purpose: Pulse-rotation OFF (evap dwell) between zones.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_pulse_gap__s_via SETPOINT_MAP; readbackcfg___mister_pulse_gap__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default45, bounds10 to 60. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
60fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch60at2026-05-19 02:23Zfromplan. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
268, confirmed228, unconfirmed40, distinct 7d values11, 30d clamps113. - Effectiveness: Mostly confirmed: 228/268 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Reduce VPD-low and water use without increasing VPD-high stress.. - Planner use: Planner-policy tunable. During VPD-high or near-edge
VENTILATEstress with healthy dew margin, use shorter delays/gaps so ventilation can cool while misting protects VPD.
mister_pulse_on_s - routine
- Purpose: Pulse-rotation ON duration per zone.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_pulse_on__s_via SETPOINT_MAP; readbackcfg___mister_pulse_on__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default60, bounds30 to 90. - Firmware evidence:
controls.yaml:6, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
60fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
89, confirmed89, unconfirmed0, distinct 7d values3, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale:
iris-20260512-2007(pending, score -); expected effect: reduce over-humidification risk while relying on shorter gaps and fog for peak recovery. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
mister_vpd_weight - routine
- Purpose: Weight on VPD gap in zone-selection scoring formula.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_vpd_weightvia SETPOINT_MAP; readbackcfg___mister_vpd_weight. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default1.5, bounds0.5 to 5. - Firmware evidence:
controls.yaml:3, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
2fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch2at2026-05-19 01:58Zfromesp32. - Readback: latest
2at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
173, confirmed163, unconfirmed10, distinct 7d values14, 30d clamps2. - Effectiveness: Mostly confirmed: 163/173 7d writes have readbacks.
- Latest plan rationale:
iris-20260516-0545(validated 2026-05-17 11:44Z, score 2); expected effect: prioritize productive zones during peak without over-watering overnight. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
mister_water_budget_gal - routine
- Purpose: Daily mister water cap. In MCP TIER1 — planner trims on drought regimes.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_water_budget__gal_via SETPOINT_MAP; readbackcfg___mister_water_budget__gal_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default500, bounds100 to 600. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
600fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch600at2026-05-19 01:58Zfromesp32. - Readback: latest
600at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
111, confirmed111, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
sw_mister_closes_vent - routine
- Purpose: Normal mister pulses are suppressed while the vent is physically open. The explicit VENTILATE vent-mist assist path bypasses this interlock.
- Why it matters: Misting trades water and heat retention against VPD stress. Bad settings either waste water or leave plants dry.
- Implementation: routine set_plan required; ESPHome
mister_closes_ventvia SETPOINT_MAP; readbackmister_closes_vent. - Registry: class
planner_policy, kindswitch, ownerplanner, tier1, default0, boundsswitch 0/1. - Firmware evidence:
controls.yaml:6, globals.yaml:1, tunables.yaml:9. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-18 19:44Zfromplan. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10048. - Landing evidence: 7d dispatcher writes
20, confirmed20, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
Operator
fan_burst_min - reserved/no-op
- Purpose: Manual fan-burst duration placeholder. Current firmware does not consume it for timing.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
fan_burst__min_via SETPOINT_MAP; readbackcfg___fan_burst__min_. - Registry: class
retired, kindnumeric, owneroperator, tier2, default10, bounds1 to 60. - Firmware evidence:
globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch10at2026-05-19 01:58Zfromesp32. - Readback: latest
10at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
vent_bypass_min - reserved/no-op
- Purpose: Manual vent-bypass duration placeholder. Current firmware does not consume it for timing.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
vent_bypass__min_via SETPOINT_MAP; readbackcfg___vent_bypass__min_. - Registry: class
retired, kindnumeric, owneroperator, tier2, default10, bounds1 to 60. - Firmware evidence:
globals.yaml:1, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch10at2026-05-19 01:58Zfromesp32. - Readback: latest
10at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
Planner
bias_cool - routine
- Purpose: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: routine set_plan required; ESPHome
bias_cool__fvia SETPOINT_MAP; readbackcfg___bias_cool___f_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default0, bounds-10 to 10. - Firmware evidence:
controls.yaml:3, globals.yaml:1, greenhouse_logic.h:3, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:4. - Last used: active
4fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch4at2026-05-19 01:58Zfromesp32. - Readback: latest
4at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
166, confirmed134, unconfirmed32, distinct 7d values14, 30d clamps0. - Effectiveness: Mostly confirmed: 134/166 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Avoid vent dumps after heater overshoot and keep heat/cold whipsaw low.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
bias_heat - routine
- Purpose: Note: validate_setpoints tightens this to [-5, +5] at ingest; controls.yaml accepts [-10, +10]. Registry uses the wider value.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: routine set_plan required; ESPHome
bias_heat__fvia SETPOINT_MAP; readbackcfg___bias_heat___f_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default0, bounds-10 to 10. - Firmware evidence:
controls.yaml:3, globals.yaml:1, greenhouse_logic.h:5, greenhouse_types.h:6, sensors.yaml:2, tunables.yaml:4. - Last used: active
1.85fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1.85at2026-05-19 04:30Zfromplan. - Readback: latest
1.85at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
140, confirmed107, unconfirmed33, distinct 7d values9, 30d clamps0. - Effectiveness: Mostly confirmed: 107/140 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Keep cold stress near or below 1h overnight while maintaining dew margin above 5F.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
dehum_aggressive_kpa - controller safety
- Purpose: Margin below vpd_low that upgrades dehumidification demand; validate_setpoints also caps it below vpd_low.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
dehum_aggressive_kpavia SETPOINT_MAP; readbackcfg___dehum_aggressive__kpa_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default0.6, bounds0.05 to 1. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:2, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch0.6at2026-05-19 01:58Zfromesp32. - Readback: latest
0.6at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
max_relief_cycles - controller safety
- Purpose: Consecutive sealed→relief cycles before forced ventilation latch.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
max_relief_cyclesvia SETPOINT_MAP; readbackcfg___max_relief_cycles. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default3, bounds1 to 10. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:6, greenhouse_types.h:4, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch3at2026-05-19 01:58Zfromesp32. - Readback: latest
3at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
76, confirmed76, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
vent_latch_timeout_ms - controller safety
- Purpose: Maximum forced-vent latch duration after relief-cycle breaker trips.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
vent_latch_timeout__ms_via SETPOINT_MAP; readbackcfg___vent_latch_timeout__ms_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default1800000, bounds60000 to 7200000. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:2, greenhouse_types.h:4, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch1800000at2026-05-19 01:58Zfromesp32. - Readback: latest
1800000at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
Readback-only firmware inputs
fallback_window_s - readback context
- Purpose: Readback-only external-probe watchdog window. Firmware reboots if all external probes are silent longer than this; not a planner control knob.
- Why it matters: The planner cannot set this value, but it explains why the firmware accepted or rejected a control path.
- Implementation: MCP rejects planner writes; readback-only; no SETPOINT_MAP route; readback
cfg___fallback_window__s_. - Registry: class
readback_context, kindnumeric, ownerfirmware internal, tier2, default900, bounds60 to 3600. - Firmware evidence:
controls.yaml:6, globals.yaml:2, sensors.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch-at-from-. - Readback: latest
3600at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
0, confirmed0, unconfirmed0, distinct 7d values0, 30d clamps0. - Effectiveness: Readback/control input only; effectiveness is freshness and firmware consumption, not planner landing.
- Latest plan rationale: -; expected effect: -.
- Planner use: Read-only context. Use it to explain firmware decisions; never emit it in set_plan or set_tunable.
outdoor_dewpoint_f - readback context
- Purpose: Readback-only outdoor dew point derived from Tempest temperature/RH; consumed by the summer-vent drier-air comparator.
- Why it matters: The planner cannot set this value, but it explains why the firmware accepted or rejected a control path.
- Implementation: MCP rejects planner writes; readback-only; no SETPOINT_MAP route; readback
cfg___outdoor_dewpoint___f_. - Registry: class
readback_context, kindnumeric, ownerfirmware internal, tier2, defaultlive, bounds- to -. - Firmware evidence:
controls.yaml:1, greenhouse_logic.h:2, greenhouse_types.h:2, sensors.yaml:1. - Last used: active
-from-; latest plan-at-; latest dispatch-at-from-. - Readback: latest
36.171at2026-05-19 06:35Z(0m old); 7d readbacks1238. - Landing evidence: 7d dispatcher writes
0, confirmed0, unconfirmed0, distinct 7d values0, 30d clamps0. - Effectiveness: Readback/control input only; effectiveness is freshness and firmware consumption, not planner landing.
- Latest plan rationale: -; expected effect: -.
- Planner use: Read-only context. Use it to explain firmware decisions; never emit it in set_plan or set_tunable.
outdoor_temp_f - readback context
- Purpose: Readback-only Tempest outdoor temperature input consumed by the summer-vent cooler-and-drier gate.
- Why it matters: The planner cannot set this value, but it explains why the firmware accepted or rejected a control path.
- Implementation: MCP rejects planner writes; readback-only; no SETPOINT_MAP route; readback
cfg___outdoor_temp___f_. - Registry: class
readback_context, kindnumeric, ownerfirmware internal, tier2, defaultlive, bounds- to -. - Firmware evidence:
controls.yaml:4, globals.yaml:1, greenhouse_logic.h:4, greenhouse_types.h:2, sensors.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch-at-from-. - Readback: latest
38.912at2026-05-19 06:35Z(0m old); 7d readbacks1238. - Landing evidence: 7d dispatcher writes
0, confirmed0, unconfirmed0, distinct 7d values0, 30d clamps0. - Effectiveness: Readback/control input only; effectiveness is freshness and firmware consumption, not planner landing.
- Latest plan rationale: -; expected effect: -.
- Planner use: Read-only context. Use it to explain firmware decisions; never emit it in set_plan or set_tunable.
Relay dwell and rotation
lead_rotate_s - controller safety
- Purpose: Lead/lag fan rotation timer. Operator-tuned.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: MCP rejects planner writes; ESPHome
lead_rotate__s_via SETPOINT_MAP; readbackcfg___lead_rotate_timeout__s_. - Registry: class
controller_safety, kindnumeric, owneroperator, tier2, default600, bounds60 to 1800. - Firmware evidence:
controls.yaml:1, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch600at2026-05-19 01:58Zfromesp32. - Readback: latest
600at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
min_fan_off_s - controller safety
- Purpose: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: MCP rejects planner writes; ESPHome
min_fan_off__s_via SETPOINT_MAP; readbackcfg___min_fan_off__s_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default90, bounds30 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch90at2026-05-19 01:58Zfromesp32. - Readback: latest
90at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
min_fan_on_s - controller safety
- Purpose: Fan min-on dwell. Rarely tuned by planner.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: MCP rejects planner writes; ESPHome
min_fan_on__s_via SETPOINT_MAP; readbackcfg___min_fan_on__s_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default120, bounds30 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
min_heat_off_s - routine
- Purpose: Sprint-15.1 fix 6: default 300→180. Clamp ceiling tightened 60→600 so planner can’t walk past 10 min.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: routine set_plan required; ESPHome
min_heat_off__s_via SETPOINT_MAP; readbackcfg___min_heat_off__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default180, bounds60 to 600. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
180fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch180at2026-05-19 01:58Zfromesp32. - Readback: latest
180at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
min_heat_on_s - routine
- Purpose: Heater min-on dwell. In MCP TIER1.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: routine set_plan required; ESPHome
min_heat_on__s_via SETPOINT_MAP; readbackcfg___min_heat_on__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default120, bounds30 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
120fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
min_vent_off_s - routine
- Purpose: Vent min-off dwell. In MCP TIER1.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: routine set_plan required; ESPHome
min_vent_off__s_via SETPOINT_MAP; readbackcfg___min_vent_off__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default60, bounds10 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, greenhouse_logic.h:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
60fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
min_vent_on_s - routine
- Purpose: Vent min-on dwell. In MCP TIER1.
- Why it matters: Dwell limits protect relays and reduce churn while still letting safety paths preempt.
- Implementation: routine set_plan required; ESPHome
min_vent_on__s_via SETPOINT_MAP; readbackcfg___min_vent_on__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default60, bounds10 to 300. - Firmware evidence:
controls.yaml:2, globals.yaml:2, greenhouse_logic.h:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
60fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch60at2026-05-19 01:58Zfromesp32. - Readback: latest
60at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
65, confirmed65, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
Safety rails
safety_max - controller safety
- Purpose: Hard hot rail — SAFETY_COOL mode trigger. Operator-only.
- Why it matters: These are hard guardrails. They protect the greenhouse when normal planning or sensors are wrong.
- Implementation: MCP rejects planner writes; ESPHome
safety_max__fvia SETPOINT_MAP; readbackcfg___safety_max___f_. - Registry: class
controller_safety, kindnumeric, ownersafety, tier2, default95, bounds80 to 110. - Firmware evidence:
controls.yaml:8, globals.yaml:3, greenhouse_logic.h:19, greenhouse_types.h:13, sensors.yaml:4, tunables.yaml:8. - Last used: active
-from-; latest plan-at-; latest dispatch100at2026-05-19 01:58Zfromesp32. - Readback: latest
100at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
98, confirmed98, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
safety_max_seal_margin_f - controller safety
- Purpose: Blocks new sealed-mist entries when temp is within this margin of safety_max.
- Why it matters: These are hard guardrails. They protect the greenhouse when normal planning or sensors are wrong.
- Implementation: MCP rejects planner writes; ESPHome
safety_seal_margin__fvia SETPOINT_MAP; readbackcfg___safety_seal_margin___f_. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default5, bounds1 to 15. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:8, greenhouse_types.h:4, sensors.yaml:2, tunables.yaml:2. - Last used: active
-from-; latest plan-at-; latest dispatch5at2026-05-19 01:58Zfromesp32. - Readback: latest
5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
safety_min - controller safety
- Purpose: Hard cold rail — SAFETY_HEAT mode trigger. Operator-only.
- Why it matters: These are hard guardrails. They protect the greenhouse when normal planning or sensors are wrong.
- Implementation: MCP rejects planner writes; ESPHome
safety_min__fvia SETPOINT_MAP; readbackcfg___safety_min___f_. - Registry: class
controller_safety, kindnumeric, ownersafety, tier2, default45, bounds30 to 60. - Firmware evidence:
controls.yaml:6, globals.yaml:2, greenhouse_logic.h:2, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch40at2026-05-19 01:58Zfromesp32. - Readback: latest
40at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
101, confirmed101, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
safety_vpd_max - controller safety
- Purpose: Hard high-VPD rail (vpd_max_safe). Operator-only.
- Why it matters: These are hard guardrails. They protect the greenhouse when normal planning or sensors are wrong.
- Implementation: MCP rejects planner writes; ESPHome
safety_vpd_max_kpavia SETPOINT_MAP; readbackcfg___safety_vpd_max__kpa_. - Registry: class
controller_safety, kindnumeric, ownersafety, tier2, default2.5, bounds2.5 to 3. - Firmware evidence:
controls.yaml:6, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch2.5at2026-05-19 01:58Zfromesp32. - Readback: latest
2.5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
76, confirmed76, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
safety_vpd_min - controller safety
- Purpose: Hard low-VPD rail (vpd_min_safe). Operator-only.
- Why it matters: These are hard guardrails. They protect the greenhouse when normal planning or sensors are wrong.
- Implementation: MCP rejects planner writes; ESPHome
safety_vpd_min_kpavia SETPOINT_MAP; readbackcfg___safety_vpd_min__kpa_. - Registry: class
controller_safety, kindnumeric, ownersafety, tier2, default0.3, bounds0.1 to 1.5. - Firmware evidence:
controls.yaml:4, globals.yaml:2, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest plan-at-; latest dispatch0.3at2026-05-19 01:58Zfromesp32. - Readback: latest
0.3at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
76, confirmed76, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
Summer vent gate
outdoor_staleness_max_s - routine
- Purpose: Gate disables when outdoor data older than this. Sprint-15.1 raised default 300→600 and floor 60→120 so dispatcher cadence jitter doesn’t intermittently disqualify the gate.
- Why it matters: This gate prevents firmware from sealing the greenhouse when outside air is cooler and drier enough to cool safely.
- Implementation: routine set_plan required; ESPHome
outdoor_staleness_max__s_via SETPOINT_MAP; readbackcfg___outdoor_staleness_max__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default600, bounds120 to 1800. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:2, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:2. - Last used: active
600fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch600at2026-05-19 01:58Zfromesp32. - Readback: latest
600at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
summer_vent_min_runtime_s - reserved/no-op
- Purpose: Reserved/no-op in current firmware. Setpoints field is clamped but not consumed by the gate.
- Why it matters: It matters mostly as a drift risk: the value can be exposed or read back, but current firmware does not use it for control.
- Implementation: MCP rejects planner writes; ESPHome
summer_vent_min_runtime__s_via SETPOINT_MAP; readbackcfg___summer_vent_min_runtime__s_. - Registry: class
retired, kindnumeric, ownerplanner, tier2, default180, bounds60 to 600. - Firmware evidence:
controls.yaml:4, globals.yaml:2, greenhouse_types.h:8, sensors.yaml:4, tunables.yaml:6. - Last used: active
-from-; latest planiris-20260511-0448at2026-05-13 15:00Z; latest dispatch180at2026-05-19 01:58Zfromesp32. - Readback: latest
180at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Not effectful in current firmware; removed from planner writes.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not plan with this value until firmware consumes it. Treat existing readbacks as exposure evidence only.
sw_summer_vent_enabled - routine
- Purpose: Master switch for the sprint-15 outdoor-cooler-and-drier gate. Default ON: firmware behavior without it is wrong in summer.
- Why it matters: This gate prevents firmware from sealing the greenhouse when outside air is cooler and drier enough to cool safely.
- Implementation: routine set_plan required; ESPHome
summer_vent_enabledvia SETPOINT_MAP; readbackcfg_summer_vent_enabled. - Registry: class
planner_policy, kindswitch, ownerplanner, tier1, default1, boundsswitch 0/1. - Firmware evidence:
controls.yaml:4, globals.yaml:2, greenhouse_logic.h:4, greenhouse_types.h:6, sensors.yaml:8, tunables.yaml:12. - Last used: active
1fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1at2026-05-18 19:44Zfromplan. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
22, confirmed22, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
vent_prefer_dp_delta_f - routine
- Purpose: Outdoor dewpoint must be ≥ this many °F below indoor DP for gate.
- Why it matters: This gate prevents firmware from sealing the greenhouse when outside air is cooler and drier enough to cool safely.
- Implementation: routine set_plan required; ESPHome
vent_prefer_dp_delta__f_via SETPOINT_MAP; readbackcfg___vent_prefer_dp_delta__f_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default5, bounds2 to 15. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:3, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:2. - Last used: active
5fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch5at2026-05-19 01:58Zfromesp32. - Readback: latest
5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
vent_prefer_temp_delta_f - routine
- Purpose: Outdoor must be ≥ this many °F cooler than indoor for gate to fire.
- Why it matters: This gate prevents firmware from sealing the greenhouse when outside air is cooler and drier enough to cool safely.
- Implementation: routine set_plan required; ESPHome
vent_prefer_temp_delta__f_via SETPOINT_MAP; readbackcfg___vent_prefer_temp_delta__f_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default5, bounds2 to 15. - Firmware evidence:
controls.yaml:2, globals.yaml:1, greenhouse_logic.h:3, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:2. - Last used: active
5fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch5at2026-05-19 01:58Zfromesp32. - Readback: latest
5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
63, confirmed63, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
Temperature band and staging
d_cool_stage_2 - routine
- Purpose: °F above temp_high at which fan-2 engages. In MCP TIER1 — planner tunes during summer heat.
- Why it matters: Temperature setpoints drive heater staging, ventilation, fan staging, and heat-stress avoidance.
- Implementation: routine set_plan required; ESPHome
__cool_stage_2__fvia SETPOINT_MAP; readbackcfg___d_cool_stage_2___f_. - Registry: class
planner_policy, kindnumeric, ownerband, tier1, default3, bounds2 to 15. - Firmware evidence:
greenhouse_logic.h:1, sensors.yaml:2. - Last used: active
3fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch3at2026-05-19 01:58Zfromesp32. - Readback: latest
3at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
129, confirmed124, unconfirmed5, distinct 7d values3, 30d clamps0. - Effectiveness: Mostly confirmed: 124/129 7d writes have readbacks.
- Latest plan rationale:
iris-20260515-2010(validated 2026-05-16 11:46Z, score 10); expected effect: pre-stage full ventilation if sunrise cycle misses and dry ramp arrives.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
d_heat_stage_2 - routine
- Purpose: Forecast-tuned heating aggressiveness. °F below the interior heating target (temp_low + 25% band + bias_heat) where heat stage 2 latches.
- Why it matters: Temperature setpoints drive heater staging, ventilation, fan staging, and heat-stress avoidance.
- Implementation: routine set_plan required; ESPHome
__heat_stage_2__fvia SETPOINT_MAP; readbackcfg___d_heat_stage_2___f_. - Registry: class
planner_policy, kindnumeric, ownerband, tier1, default5, bounds2 to 15. - Firmware evidence:
greenhouse_logic.h:1, sensors.yaml:2. - Last used: active
3fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch3at2026-05-19 01:58Zfromesp32. - Readback: latest
3at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
75, confirmed75, unconfirmed0, distinct 7d values4, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale:
iris-20260517-2014(validated 2026-05-18 11:45Z, score 5); expected effect: Shift sustained cold support to gas staging and avoid excessive electric-only runtime.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
heat_hysteresis - routine
- Purpose: Forecast-tuned heat-stage clear margin above the interior heating target. Higher values hold heat longer.
- Why it matters: Temperature setpoints drive heater staging, ventilation, fan staging, and heat-stress avoidance.
- Implementation: routine set_plan required; ESPHome
heat_hysteresis__fvia SETPOINT_MAP; readbackcfg___heat_hyst___f_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default1, bounds0 to 3. - Firmware evidence:
controls.yaml:4, globals.yaml:1, greenhouse_logic.h:5, greenhouse_types.h:5, sensors.yaml:2, tunables.yaml:4. - Last used: active
1.5fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch1.5at2026-05-19 01:58Zfromesp32. - Readback: latest
1.5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
153, confirmed116, unconfirmed37, distinct 7d values7, 30d clamps0. - Effectiveness: Mostly confirmed: 116/153 7d writes have readbacks.
- Latest plan rationale:
iris-20260517-2014(validated 2026-05-18 11:45Z, score 5); expected effect: Restore stable heater clearing behavior and prevent rapid heat cycling.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
temp_high - crop band
- Purpose: Crop band — dispatcher pushes every cycle.
- Why it matters: Temperature setpoints drive heater staging, ventilation, fan staging, and heat-stress avoidance.
- Implementation: MCP rejects planner writes; ESPHome
set_temp_high__fvia SETPOINT_MAP; readbackcfg___temp_high___f_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default95, bounds40 to 100. - Firmware evidence:
controls.yaml:5, globals.yaml:2, greenhouse_logic.h:18, greenhouse_types.h:9, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest planpreemptive-20260512-2036at2026-05-12 20:36Z; latest dispatch65at2026-05-19 04:35Zfromband. - Readback: latest
65at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1187, confirmed1187, unconfirmed0, distinct 7d values134, 30d clamps493. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
temp_hysteresis - routine
- Purpose: Forecast-tuned temperature transition hysteresis. Wider values reduce mode churn; narrower values tighten band tracking.
- Why it matters: Temperature setpoints drive heater staging, ventilation, fan staging, and heat-stress avoidance.
- Implementation: routine set_plan required; ESPHome
temp_hysteresis__fvia SETPOINT_MAP; readbackcfg___temp_hyst___f_. - Registry: class
planner_policy, kindnumeric, ownerband, tier1, default1.5, bounds0.5 to 3. - Firmware evidence:
controls.yaml:1, greenhouse_logic.h:7, greenhouse_types.h:5. - Last used: active
2fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch2at2026-05-19 01:58Zfromesp32. - Readback: latest
2at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
164, confirmed126, unconfirmed38, distinct 7d values9, 30d clamps0. - Effectiveness: Mostly confirmed: 126/164 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
temp_low - crop band
- Purpose: Crop band — dispatcher pushes every cycle. Firmware default wide (40) so safety rails govern if dispatcher silent.
- Why it matters: Temperature setpoints drive heater staging, ventilation, fan staging, and heat-stress avoidance.
- Implementation: MCP rejects planner writes; ESPHome
set_temp_low__fvia SETPOINT_MAP; readbackcfg___temp_low___f_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default40, bounds30 to 80. - Firmware evidence:
controls.yaml:4, globals.yaml:2, greenhouse_logic.h:16, greenhouse_types.h:8, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest planpreemptive-20260418-0730at2026-04-18 07:30Z; latest dispatch62at2026-05-19 04:35Zfromband. - Readback: latest
62at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1179, confirmed1179, unconfirmed0, distinct 7d values103, 30d clamps1691. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
VPD band
vpd_high - crop band
- Purpose: Crop band high-VPD threshold; firmware seal entry trigger.
- Why it matters: VPD control protects transpiration balance; this is usually the limiting axis on hot dry days.
- Implementation: MCP rejects planner writes; ESPHome
set_vpd_high_kpavia SETPOINT_MAP; readbackcfg___vpd_high__kpa_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default2.8, bounds0.4 to 3. - Firmware evidence:
controls.yaml:3, globals.yaml:2, greenhouse_logic.h:36, greenhouse_types.h:10, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest planoperator-2026-04-25-band-reliefat2026-04-25 22:34Z; latest dispatch0.8at2026-05-19 04:35Zfromband. - Readback: latest
0.8at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1213, confirmed1198, unconfirmed15, distinct 7d values54, 30d clamps1496. - Effectiveness: Mostly confirmed: 1198/1213 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
vpd_hysteresis - routine
- Purpose: In MCP TIER1 — planner tunes to widen/tighten seal exit during humid regimes.
- Why it matters: VPD control protects transpiration balance; this is usually the limiting axis on hot dry days.
- Implementation: routine set_plan required; ESPHome
vpd_hysteresis_kpavia SETPOINT_MAP; readbackcfg___vpd_hyst__kpa_. - Registry: class
planner_policy, kindnumeric, ownerband, tier1, default0.3, bounds0.05 to 0.5. - Firmware evidence:
controls.yaml:1, greenhouse_logic.h:5, greenhouse_types.h:4. - Last used: active
0.5fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch0.5at2026-05-19 01:58Zfromesp32. - Readback: latest
0.5at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
167, confirmed157, unconfirmed10, distinct 7d values6, 30d clamps2. - Effectiveness: Mostly confirmed: 157/167 7d writes have readbacks.
- Latest plan rationale:
iris-20260518-2012(pending, score -); expected effect: Reduce dehum/mist chatter while preserving safety.. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
vpd_low - crop band
- Purpose: Crop band low-VPD threshold. Dispatcher pushes every cycle.
- Why it matters: VPD control protects transpiration balance; this is usually the limiting axis on hot dry days.
- Implementation: MCP rejects planner writes; ESPHome
set_vpd_low_kpavia SETPOINT_MAP; readbackcfg___vpd_low__kpa_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default0.35, bounds0.1 to 1. - Firmware evidence:
controls.yaml:2, globals.yaml:2, greenhouse_logic.h:17, greenhouse_types.h:13, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch0.25at2026-05-19 04:35Zfromband. - Readback: latest
0.25at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1323, confirmed1296, unconfirmed27, distinct 7d values78, 30d clamps65. - Effectiveness: Mostly confirmed: 1296/1323 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
vpd_watch_dwell_s - routine
- Purpose: VPD_WATCH observation window before engaging mist.
- Why it matters: VPD control protects transpiration balance; this is usually the limiting axis on hot dry days.
- Implementation: routine set_plan required; ESPHome
vpd_watch_dwell__s_via SETPOINT_MAP; readbackcfg___vpd_watch_dwell__s_. - Registry: class
planner_policy, kindnumeric, ownerplanner, tier1, default60, bounds15 to 120. - Firmware evidence:
controls.yaml:4, globals.yaml:2, greenhouse_logic.h:4, greenhouse_types.h:5, sensors.yaml:4, tunables.yaml:6. - Last used: active
120fromiris-20260518-2012; latest planiris-20260518-2012at2026-05-19 14:15Z; latest dispatch120at2026-05-19 01:58Zfromesp32. - Readback: latest
120at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
180, confirmed141, unconfirmed39, distinct 7d values6, 30d clamps0. - Effectiveness: Mostly confirmed: 141/180 7d writes have readbacks.
- Latest plan rationale:
iris-20260516-0545(validated 2026-05-17 11:44Z, score 2); expected effect: enter bounded recovery promptly during confirmed dry stress while restoring longer dwell overnight. - Planner use: Include this in every routine
set_planwaypoint. Change it only with a forecast-backed hypothesis and validate the next scorecard.
Zone scoring
east_adjacency_factor - controller safety
- Purpose: Weight for borrowing east-zone signal into adjacent scoring (no east mister).
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
east_adjacency_factorvia SETPOINT_MAP; readbackcfg___east_adjacency_factor. - Registry: class
controller_safety, kindnumeric, ownerplanner, tier2, default0.3, bounds0 to 1. - Firmware evidence:
controls.yaml:2, globals.yaml:1, sensors.yaml:3, tunables.yaml:4. - Last used: active
-from-; latest planiris-20260409-2105at2026-04-13 01:30Z; latest dispatch0.3at2026-05-19 01:58Zfromesp32. - Readback: latest
0.3at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
59, confirmed59, unconfirmed0, distinct 7d values1, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Controller/operator configuration. Keep stable from the planner; promote to planner_policy only after replay evidence proves value.
vpd_target_center - crop band
- Purpose: Center zone has wider floor (0.1) to tolerate seedling propagation.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
vpd_target_center__kpa_via SETPOINT_MAP; readbackcfg___vpd_target_center__kpa_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default0.8, bounds0.1 to 3. - Firmware evidence:
controls.yaml:8, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch0.6at2026-05-19 04:35Zfromband. - Readback: latest
0.6at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1254, confirmed1232, unconfirmed22, distinct 7d values64, 30d clamps0. - Effectiveness: Mostly confirmed: 1232/1254 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
vpd_target_east - crop band
- Purpose: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
vpd_target_east__kpa_via SETPOINT_MAP; readbackcfg___vpd_target_east__kpa_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default1, bounds0.3 to 3. - Firmware evidence:
controls.yaml:5, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch0.6at2026-05-19 04:35Zfromband. - Readback: latest
0.6at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1295, confirmed1276, unconfirmed19, distinct 7d values87, 30d clamps0. - Effectiveness: Mostly confirmed: 1276/1295 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
vpd_target_south - crop band
- Purpose: Per-zone VPD target — dispatcher pushes from crop band.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
vpd_target_south__kpa_via SETPOINT_MAP; readbackcfg___vpd_target_south__kpa_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default1.3, bounds0.3 to 3. - Firmware evidence:
controls.yaml:8, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch1at2026-05-19 04:35Zfromband. - Readback: latest
1at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1258, confirmed1209, unconfirmed49, distinct 7d values86, 30d clamps0. - Effectiveness: Mostly confirmed: 1209/1258 7d writes have readbacks.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
vpd_target_west - crop band
- Purpose: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Why it matters: It is part of the bounded greenhouse control surface and must stay traceable across schema, DB, dispatcher, firmware, and site docs.
- Implementation: MCP rejects planner writes; ESPHome
vpd_target_west__kpa_via SETPOINT_MAP; readbackcfg___vpd_target_west__kpa_. - Registry: class
crop_band, kindnumeric, ownerband, tier2, default1.2, bounds0.3 to 3. - Firmware evidence:
controls.yaml:8, globals.yaml:1, sensors.yaml:2, tunables.yaml:4. - Last used: active
-from-; latest plan-at-; latest dispatch1.2at2026-05-19 04:35Zfromband. - Readback: latest
1.2at2026-05-19 06:35Z(0m old); 7d readbacks10038. - Landing evidence: 7d dispatcher writes
1165, confirmed1165, unconfirmed0, distinct 7d values2, 30d clamps0. - Effectiveness: Route confirmed: every 7d dispatcher write has a matching firmware readback.
- Latest plan rationale: -; expected effect: -.
- Planner use: Do not push from Iris. Crop profiles and dispatcher own this value; use planner-policy bias/staging knobs instead.
Regenerate with scripts/generate-ai-tunables-page.py; publish through scripts/publish-site-content.sh so the static context and public site stay aligned.