Water meters and head flows: the arithmetic of a clogged head#
Saved 2026-10-11. Items 1–3 below were built the same day, as modules/zoneflow; item 4 on 2026-10-12.
A zone's flow is the sum of its heads' flows. With a meter on the irrigation line, each run of each zone has a measured flow, which can be set beside the flow its heads should give.
- Too little means a clogged nozzle or filter, a valve not opening fully, or low pressure.
- Too much means a broken head, a missing nozzle or a leak.
This note lists the meters a farm or a home can add easily, and the makers' flow figures per head. It then works through how small a fault the arithmetic can see.
What exists already#
- OpenSprinkler counts a 2-wire pulse flow meter on its sensor input and reports each
zone's flow as the zone closes. fieldmesh's MQTT bridge already reads that into the log
as
station.<n>.flow(irrigation projects). - Its flow alert only looks up. In its firmware (
services_notifier.cpp), the alert fires when a zone's flow exceeds a set point, read from the last five characters of the station's name. A broken head can trip it. A clogged head, which lowers the flow, never does. That is the gap this note is about.
Meters that install easily#
| meter | how it goes in | output | reaches fieldmesh | open? | caveat |
|---|---|---|---|---|---|
| A pulse-output meter on the irrigation line, such as Hunter's HC Flow, a Dwyer multi-jet with pulse output, or Rain Bird's FS with a pulse transmitter | Plumbed in after the backflow preventer, on the irrigation line only | A dry contact pulsing per volume. Hunter lists 1 pulse per 0.1 gallon on the ¾-inch HC and 1 per gallon on the larger, ±2% of reading (as resellers reproduce Hunter's listing) | Today: through OpenSprinkler's flow input and the bridge; or an ESPHome pulse counter and the bridge | the protocol is a pulse; the meters are proprietary | it needs a plumber, or a homeowner who solders PVC; the meter's pulse rate goes in a calibration (§3.2) |
| A sensor on the utility meter's dial: an inductive proximity sensor (such as the LJ18A3-8-Z/BX) over the meter's turning metal target, counted by ESPHome's pulse meter | Strapped on, no plumbing, nothing cut | Pulses, one per turn of the target | Today: through ESPHome and the bridge | the firmware is open (ESPHome) | It measures the whole house, so irrigation is told apart only by when a zone runs. Not every meter has a metal target. The meter is the utility's: a sensor beside it alters nothing, but nothing should be opened |
| A camera reading the dial: AI-on-the-edge, an ESP32-CAM and a neural network | Clipped over the meter's face | The reading, by MQTT | Through MQTT, under a profile to write | Not open source since January 2025: its Dual Use License allows private, non-commercial use only | A home lawn may use it. A farm is a business, and would need the author's commercial licence |
| A small turbine flow sensor (Hall-effect, for small pipe) | Cut into a drip zone's line | Pulses | Through ESPHome and the bridge | open in practice | uncalibrated; calibrate with a bucket and a stopwatch before trusting it |
Flow per head, from the makers' charts#
Fixed spray nozzles: Rain Bird MPR, 4-inch pop-ups, at 30 psi.
| series (radius) | full circle | half | quarter |
|---|---|---|---|
| 8 Series (8 ft) | 1.05 gpm | 0.52 | 0.26 |
| 10 Series (10 ft) | 1.58 | 0.79 | 0.39 |
| 12 Series (12 ft) | 2.60 | 1.30 | 0.65 |
| 15 Series (15 ft) | 3.70 | 1.85 | 0.92 |
Rotor nozzles: Rain Bird 5000 / 5000 Plus Rain Curtain, at 45 psi.
| nozzle | 1.5 | 2.0 | 2.5 | 3.0 | 4.0 | 5.0 | 6.0 | 8.0 |
|---|---|---|---|---|---|---|---|---|
| gpm | 1.54 | 2.07 | 2.51 | 3.09 | 4.01 | 5.09 | 6.01 | 8.03 |
Drip emitters: Rain Bird Xeri-Bug, pressure-compensating from 15 to 50 psi. 0.5, 1.0 and 2.0 gallons an hour, which is 0.008, 0.017 and 0.033 gpm.
Pressure changes every head at once, as its square root. A nozzle is an orifice, so its flow goes as √P. The charts bear it out: the 15F gives 2.60 gpm at 15 psi and 3.70 at 30, a ratio of 1.42, where √2 is 1.41. A pressure drop lowers every head together, by a share that does not depend on the head. A clog takes one head's whole share. That difference is how the two can be told apart, especially with a pressure sensor on the line.
The arithmetic: how small a fault can be seen#
A lawn zone: six 15-foot half heads and two quarters, at 30 psi.
- Expected: 6 × 1.85 + 2 × 0.92 = 12.94 gpm.
- One half head fully clogged: 11.09 gpm, −14%.
- One quarter head clogged: −7%.
- A head knocked off its riser: far more. The riser runs open, beyond any chart.
What hides a fault:
- the meter's own error, ±2% on Hunter's HC;
- the supply's pressure. Pressure swinging ±10% swings the flow about ±5%, by the square root.
So on flow alone:
- a whole half head shows;
- a quarter head is at the edge;
- a partly clogged nozzle does not show.
A pressure sensor on the line, dividing the flow by √(P/P₀), removes most of the pressure term, and quarter heads come into view.
A rotor zone: four 5000s with #3.0 nozzles at 45 psi, 12.36 gpm. One clogged rotor is −25%, plain at any pressure.
A drip zone: a hundred 1-gph emitters, 1.67 gpm.
- One clogged emitter is −1%, invisible to any meter.
- A quarter of a line silted up is −25%, plain.
- Drip clogs slowly, so the zone's flow drifting down over weeks is the sign, more than any one run.
Counting is not the limit, if the meter is sized to the zone.
- The lawn zone through a ¾-inch HC (0.1 gallon a pulse) for ten minutes is about 1,290 pulses, a counting error under 0.1%.
- The drip zone through a 1-gallon-a-pulse meter for ten minutes is 17 pulses, ±6% from counting alone. That needs the finer meter, or a longer run.
What fieldmesh builds: all four built#
- A zone's inventory as a record: its heads and nozzles, and the pressure they were set for. From it, the zone's expected flow from the makers' charts, scaled by √P.
- Each zone's own flow, learned: the median of its recent runs, from OpenSprinkler's station flow already in the log. It is the bed's-own-soil idea applied to pipes. The inventory is the check on what was learned, not the other way round.
- An advisory decision for low flow and for high flow, sized in heads: "zone 3 ran at 11.1 gpm where it usually runs 12.9: about one half-circle head's worth is not flowing". And for drip, a drift over weeks.
- A pressure series on the line, so a pressure drop is not called a clog.
Items 1–3 are modules/zoneflow. Its drill over 300 simulated seasons bears out the arithmetic above: no false alert in 12,000 healthy runs, when a low or high flow must hold for two runs; a clogged half head, a stuck rotor and a broken head caught every time, by their second run; a quarter head in a fifth of seasons; drip silting as drift in about two weeks. Item 4, a gauge on the line, takes each run to one pressure; at a 6% tolerance it then sees every clogged quarter-circle head, with one false alert in 12,000 runs (modules/zoneflow). None of it has met a meter (UNTESTED).
Sources#
- Rain Bird: MPR spray nozzle performance charts; 5000 / 5000 Plus nozzle chart; Xeri-Bug drip emitters.
- Hunter HC Flow meter, pulse rates and accuracy as resellers list them: HC-075-FLOW.
- OpenSprinkler's flow input: forum, flow meter wiring;
its flow alert: the firmware's
services_notifier.cpp(read 2026-10-11). - ESPHome and an inductive sensor on a water meter: example.
- AI-on-the-edge-device and its Dual Use License (2025-01-05): github.com/jomjol/AI-on-the-edge-device.