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