Open Source
Low Tank
Built by Leandro Magbanua
A sensor on our rooftop water tank that warns the family group chat before the tank runs dry mid-shower, which used to happen every long weekend.
Builder email verified
Verification

- Type
- Personal
- Category
- Open Source
- Published
- Jul 26, 2026
- Updated
- Jul 26, 2026
About this project
- What I built & why
Our house feeds from a rooftop tank, and the municipal supply that refills it slows to a trickle on weekends when the whole subdivision is home. The tank's level was unknowable without a ladder, so its status was discovered empirically, by whoever was mid-shower when the pressure died. After the third long weekend of this, I decided the tank was going to report its status like every other system I'm responsible for.
- The problem
Know how much water is in a sealed concrete tank on the roof, and tell the household before it runs out rather than after — specifically before evening showers, when a low tank still has time to refill if everyone shortens their turn. The audience is five family members in a group chat, exactly one of whom cares how it works.
- What I owned
The whole stack, such as it is: sensor selection and mounting, the ESP32 firmware, the MQTT plumbing into a Home Assistant instance on an old laptop, and the notification rules. Also the waterproofing, twice, because the first enclosure survived every test except actual rain.
- Technical & product decisions
I started with a float switch and replaced it with a pressure sensor at the tank outlet after the float jammed against the inlet pipe within a month — pressure at the outlet gives continuous level, not just one threshold, and nothing moves, so nothing sticks. Alerts have hysteresis and a schedule: one warning at 30% before 5pm, one urgent at 15%, and silence otherwise, because the first version messaged on every threshold crossing and the family muted it within a day. That mute taught me more about alert design than any incident retrospective at work.
- Hardest challenge
The pump. Every time the booster pump kicks in, outlet pressure spikes and the raw reading claims the tank gained two meters of water. I ended up sampling once a second into a five-minute median, which throws away the pump's lies entirely — a solution I found only after an embarrassing week of trying to detect pump state and subtract a correction, which is the overengineered version of ignoring the problem.
- Result & impact
Eight months, zero surprise dry tanks. The family ignores most of what I automate, but not this — my daughter now checks the level before committing to washing her hair, which is the strongest product-market fit I have achieved on any system, professional ones included. The municipal supply is still slow on weekends; that part is beyond engineering.