A complete residential water management system combines everything from the preceding chapters: rainwater collection, greywater recycling, storage, treatment, distribution, and a mains backup — all in a coherent architecture that is safe, reliable, legally compliant, and maintainable. This chapter provides the integration logic and works through three complete design examples.
Four principal architectures cover the range of residential applications:
Roof → First-flush → Coarse screen → Tank → Treatment → Distribution
↓
Overflow → Soakaway/storm drain
Suitable for: Rural properties in moderate-to-high rainfall climates with no mains connection. Requires: Sufficient roof area and storage to meet 100% of demand; comprehensive treatment for potable use.
Roof → First-flush → Screen → Tank → Treatment → Non-potable distribution
↑
Mains top-up (air gap or float valve)
Mains supply ──────────────────────────────────────→ Potable distribution
The most common pattern for connected homes. Rainwater offsets a substantial fraction of mains use; mains fills the tank when rainwater is insufficient.
Showers / Sinks → Greywater collection → Surge tank → Treatment → Toilet flushing / Irrigation
Washing machine ─┘
Mains supply → All potable uses
Suitable for: Urban homes without roof collection potential; apartment buildings; homes in water-restricted areas.
Roof → First-flush → Screen → Rainwater tank (primary) ─┐
├→ Treatment → Non-potable supply
Showers / Sinks ──→ Greywater tank (secondary) ──────────┘
Mains top-up ─────────────────────────→ Rainwater tank (backup, via air gap)
Mains supply ─────────────────────────────────────────── Potable supply
Full integration maximises offset and provides redundancy. More complex to install and commission.
In Pattern B and D systems, the system must decide when to draw from the rainwater tank vs. when to top up from mains. Two approaches:
A float valve on the mains inlet to the rainwater tank automatically opens when the tank level drops below a set point (e.g., 20% of capacity), allowing mains water to fill to a minimum working level (e.g., 30%).
An electronic level sensor (float switch, ultrasonic, or pressure transducer) monitors tank level. A controller opens a solenoid valve on the mains top-up line when level drops below a threshold.
A trompe valve maintains an air gap between the mains inlet and the tank water surface at all times, regardless of tank level. Water trickles in continuously above the surface level. Elegant mechanical solution for regulatory compliance where air gap is required.
Every tank must have an overflow. In heavy rain, the tank fills faster than demand can draw it down. Overflow must be:
Soakaway sizing: For a roof with a 50-year return period rainfall intensity of 75 mm/hour:
Peak overflow rate = A × I = 80 m² × 75 mm/hr / 3,600 s/hr × 1,000 = 1.67 L/s
This is the design flow for the overflow pipe and the soakaway.
For automated systems, the control logic should be:
Rainwater pump:
Mains top-up:
Greywater system:
A simple Arduino or ESP32 microcontroller can manage these control loops with level sensors and relay-switched pumps for DIY implementations. Commercial pre-wired control units are also available.
Inputs:
Design:
Toilet demand:
2 persons × 21 L/person/day = 42 L/day
Greywater from showers (2 × 8 min × 8 L/min = 128 L/day): Greywater available: 128 L/day » 42 L/day toilet demand. Greywater easily covers toilets.
Greywater system: Surge tank (200 L) + small pump to toilet cisterns. No treatment needed beyond lint filter if used only for toilet flushing.
Rainwater system (garden irrigation only):
30 × 37 × 0.85 = 943 L/month20 m² × 5 L/m²/week × 4.3 = 430 L/monthSystem: Greywater surge tank (200 L) + pump + 200 L rainwater garden butt. Mains for all potable uses.
Mains offset: 42 L/day toilet saving = 15 m³/year ≈ 28% of total demand.
Inputs:
Rainwater system sizing:
Non-potable demand (toilets + laundry): 84 + 35 = 119 L/day = 3,570 L/month
Monthly supply vs. demand (C = 0.85, A = 120 m²):
| Month | Rainfall (mm) | Supply (L) | Demand (L) | Net (L) |
|---|---|---|---|---|
| Jan | 74 | 7,548 | 3,570 | +3,978 |
| Jul | 34 | 3,468 | 3,570 | −102 |
| Aug | 43 | 4,386 | 3,570 | +816 |
Annual supply: 120 × 792 × 0.85 = 80,784 L = 80.8 m³
Annual demand: 3,570 × 12 = 42,840 L = 42.8 m³
Annual supply (80.8 m³) far exceeds demand (42.8 m³) → System is supply-abundant; storage needed only to bridge the July/August shoulder period.
Rippl sizing: Maximum cumulative deficit across the year ≈ 3,000 L. With 20% safety factor: Tank = 3,600 L → use 4,000 L HDPE tank.
Mains top-up for July/August shortfall only.
Greywater garden system:
Mains offset: 42.8 m³/year from rainwater ≈ 20% of total ~219 m³/year demand.
Inputs:
Collection potential:
Annual yield: 200 × 900 × 0.88 = 158,400 L = 158.4 m³
Annual total demand (4 persons × 150 L/day × 365): 219,000 L = 219 m³
Annual supply < annual demand. Demand reduction is essential.
With demand reduction measures (low-flow showerheads, dual-flush, efficient washing machine): Revised demand: 4 × 100 L/day × 365 = 146 m³/year
Supply/demand ratio: 158.4 / 146 = 1.08 — marginally surplus.
Storage sizing (Rippl method for borderline system):
Driest period: May–July, ~45 mm/month
Monthly supply = 200 × 45 × 0.88 = 7,920 L
Monthly demand = 146,000 / 12 = 12,167 L
Monthly deficit: −4,247 L
Three-month cumulative deficit: ~12,750 L
With 25% safety factor: Tank = 16,000 L → use 2 × 10,000 L underground concrete tanks (manifolded).
Treatment train (potable): Roof → First-flush diverter (200 L) → vortex self-cleaning filter → underground tank → sediment filter (20 μm pre-filter + 5 μm final) → activated carbon → UV (40 mJ/cm²) → potable distribution
System autonomy: 100% in average years; mains-independent. In a dry year (10th percentile: 750 mm), annual yield = 132 m³ vs. 146 m³ demand — a 14 m³ shortfall. Emergency tankered water delivery for ~4 dry weeks.
def system_autonomy(monthly_supply, monthly_demand, tank_capacity):
"""Calculate % of demand met by harvested water."""
level = tank_capacity / 2 # start at half full
total_demand = sum(monthly_demand)
total_harvested = 0
for s, d in zip(monthly_supply, monthly_demand):
level = min(level + s, tank_capacity)
drawn = min(level, d)
total_harvested += drawn
level -= drawn
return 100 * total_harvested / total_demand
Previous: Chapter 7 — Greywater Recycling Systems