Back to field notes

OpenSprinkler

Why OpenSprinkler Preflight Must Match the Visible Schedule

How schedule-source proof prevents stale times, flattened runtimes, and incomplete zone programs from reaching a controller.

Core Cannabis · Master-grower reviewedPublished 2026-08-20

Connection and schedule proof are separate

A saved or reachable controller can still hold an old program. Preflight should compare the visible station rows, applied schedule payload, and generated controller preview before any write occurs.

Connected answers only one question: can the application reach the controller through the configured route? It does not prove that the correct date, start times, station grouping, or runtimes are stored. Treating connectivity as schedule proof is how a green badge can sit beside a room that never receives its intended events.

A useful preflight names the exact room, schedule date, station count, event count, and source version. Ambiguous labels such as current schedule or latest plan are not enough when tomorrow and same-day recovery can both exist.

  • Confirm the schedule date
  • Compare every start time
  • Compare every duration and mapped zone

The applied schedule is the handoff contract

The deployable payload should be built from the schedule the operator can see. Deployment history and recommendation records can explain what happened, but they should not become hidden schedule sources.

The handoff should be one-way: canonical station events are validated, translated into the controller representation, written, and read back. OpenSprinkler should not independently decide shot count, biological correction, or crop-stage volume.

When the application and controller need different shapes, the translation must remain reversible. Grouped controller programs should still map back to the same station, start time, and runtime shown to the operator.

  • One applied source
  • No controller-side crop math
  • No stale historical fallback

Read-back closes the loop

Where the controller API supports it, read the stored programs after writing and compare them with the expected grouped events. Mark the deployment failed when the actual controller state is incomplete.

Acknowledgement is not persistence. A controller can accept a write request while the stored program remains unchanged, incomplete, or normalized differently. Read-back closes that gap by comparing the stored result with the acknowledged payload.

When verification fails, restore the prior known schedule only if that rollback can also be read back and proven. The failure message should identify the mismatched program rather than leaving the operator to guess whether the room is safe.

  • Expected grouped program count
  • Expected station durations
  • Clear failure reason when read-back differs

Logs prove execution after deployment

Even a verified stored program is not proof that water moved. Pumps can be off, valves can be closed, and stations can stop early. After the expected event window, compare controller logs with the schedule and surface missed, short, and overlong runs by station.

This creates an evidence chain: schedule intent, controller persistence, and execution history. Each layer answers a different operational question.

  • Intent: what should run
  • Persistence: what the controller stored
  • Execution: what the controller logged

Recovery must not duplicate future events

Before creating a same-day recovery, first determine which scheduled events completed and which future events remain pending. Recovery should replace only the confirmed missing volume inside an operator-approved window.

A temporary recovery program must stay separate from the recurring crop schedule. Otherwise a one-day correction can become tomorrow's unexpected irrigation.

  • Verify completed events
  • Preserve pending scheduled events
  • Recover only confirmed misses
  • Remove or expire temporary programs

See the operating workflow

Follow room inputs through P1/P2/P3 schedule generation and operator review without connecting a controller.

Open the interactive demo