Pipe-freeze guard: trickle the far tap and warn before the line drops to 2 °C
A pipe-clamp temperature sensor on the most exposed run warns at 4 °C and opens a 0.4 L/min trickle at 2 °C, which is enough to keep a 15 mm copper line flowing through a -8 °C night without wasting more than 12 litres.
# HearthNodes recipe 23 - pipe freeze guard
alias: "Water - freeze guard trickles the far tap"
id: hn_water_freeze_trickle
description: "Warn at 4 C, trickle at 2 C, close after 15 minutes above 6 C"
mode: restart
max_exceeded: silent
trigger:
- platform: numeric_state
entity_id: sensor.exposed_pipe_temperature
below: 4
id: warn
- platform: numeric_state
entity_id: sensor.exposed_pipe_temperature
below: 2
id: trickle
- platform: numeric_state
entity_id: sensor.exposed_pipe_temperature
above: 6
for: "00:15:00"
id: release
variables:
tap: valve.far_tap
trickle_lpm: 0.4
max_runtime_h: 10
wind_chill: >-
{{ states('sensor.outdoor_temperature') | float(10)
- (states('sensor.wind_speed_kmh') | float(0) * 0.12) }}
condition:
- condition: template
value_template: >-
{{ states('sensor.outdoor_temperature') | float(10) < 1
or states('sensor.forecast_overnight_min') | float(10) < -3 }}
- condition: template
value_template: >-
{{ is_state('person.primary','home') or is_state('input_boolean.away_freeze_guard','on') }}
- condition: template
value_template: >-
{{ (now() - states.sensor.exposed_pipe_temperature.last_updated).total_seconds() < 300 }}
action:
- choose:
- conditions:
- condition: trigger
id: warn
sequence:
- service: notify.mobile_app
data:
title: "Freeze risk"
message: >-
Exposed run at {{ states('sensor.exposed_pipe_temperature') }} C,
wind chill {{ wind_chill | round(1) }} C. Trickle arms at 2 C.
- conditions:
- condition: trigger
id: trickle
sequence:
- service: valve.open_valve
target:
entity_id: "{{ tap }}"
data:
flow_limit_lpm: "{{ trickle_lpm }}"
- wait_for_trigger:
- platform: numeric_state
entity_id: sensor.exposed_pipe_temperature
above: 6
for: "00:15:00"
timeout: "{{ max_runtime_h }}:00:00"
continue_on_timeout: true
- service: valve.close_valve
target:
entity_id: "{{ tap }}"
- conditions:
- condition: trigger
id: release
sequence:
- service: valve.close_valve
target:
entity_id: "{{ tap }}"
# Pipe clamp failure -> fall back to outdoor below -2 C with wind above 15 km/h.
# Tap fails to open -> escalate the notification with instructions to open a tap
# by hand. Tap fails to close -> 30 minute maximum runtime plus a notification.
Trigger · numeric_state
sensor.exposed_pipe_temperature
Exposed pipe temperature falls below 4 °C, with a second stage at 2 °C.
Step-by-step
- notify.mobile_appWarn at the first stage so a person can decide, rather than discovering the trickle running in the morning.
send at 4 °C · 'exposed run at 4 °C, trickle arms at 2 °C' - valve.far_tapOpen the farthest tap on the exposed run at the minimum flow that keeps water moving; a 15 mm copper line needs roughly 0.3 L/min to resist a -8 °C night.
open · flow limited to 0.4 L/min - valve.far_tapClose only after 15 minutes above 6 °C, so a brief warm spell does not end the protection just before dawn, when it is coldest.
close when pipe temp > 6 °C for 15 min - sensor.water_used_freeze_guardLog litres used per night so a stuck-open tap is visible rather than being discovered on the water bill.
log · litres per night
Clamp the sensor on the coldest point, not the most convenient
The coldest point is where the run passes through a wall, crosses an unheated void, or sits against a vented cavity. Walk the run on the first cold night with an infrared thermometer and clamp the sensor where the reading is lowest. Convenience placement gives you a sensor that reads 8 °C while the pipe is at 2 °C.
Insulate over the clamp, not under it
Fit the clamp directly to bare copper, then wrap pipe insulation over both. Insulating under the clamp breaks the thermal path and the sensor measures the insulation's surface instead. This is the single most common installation mistake with pipe clamps.
Use a calibrated trickle, not an open tap
A fully open tap wastes 200–400 litres a night and can overwhelm a septic system. A 0.4 L/min trickle keeps the line above freezing for about 12 litres a night. Fit a flow restrictor or use a motorised valve with a position setpoint instead of a plain solenoid.
Hardware
| Model | Protocol | Link | Role in this chain |
|---|---|---|---|
| Pipe-clamp temperature sensor, insulated over the clamp | thread |
wireless | Clamped to the copper and covered with pipe insulation; an uninsulated clamp reads air temperature and warns far too late. |
| Thread motorised tap or valve on the far end of the run | thread |
wired | Opens to a calibrated trickle; a standard solenoid gives full flow, which wastes 200+ litres a night. |
| Outdoor temperature and wind sensor | thread |
wireless | Provides the wind chill input that makes an exposed north wall run freeze at 4 °C air temperature. |
When it fails
If the pipe clamp fails, the guard falls back to outdoor temperature below -2 °C with wind above 15 km/h, which is less precise but errs early. If the tap fails to open, the notification escalates and tells the household to open a tap manually for the night. If the tap fails to close, a 30-minute maximum runtime closes it, plus a notification.