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

Project screenshot
Type
Personal
Category
Open Source
Published
Jul 26, 2026
Updated
Jul 26, 2026
Built withESP32ArduinoMQTTHome Assistant
TopicsIoTLifestyle

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.