WaterH

Intake
0ml
Sips
0
Temp
°C
Goal
0%
TimeAmountTemp
Avg Daily
0ml
Best Day
0ml
Streak
0days

Why does this exist?

I bought a smart water bottle that tracks your sips — but the app was mediocre and all the data was trapped on my phone. I wanted to see my hydration data on a real dashboard, on my own terms. So I figured out how to talk to the bottle myself.

The rabbit hole

The bottle (a WaterH Boost) uses Bluetooth Low Energy to sync with its app. My first thought was to intercept the network traffic — but there was none. The app never phones home. Everything happens locally over Bluetooth, which meant I had to go deeper.

I pointed a Linux machine at the bottle and started poking. First I mapped out what Bluetooth services it exposes, then I started sending it every command I could think of — hundreds of them — to see what it would respond to. Eventually I found the magic byte that makes it dump its entire sip history: every drink you've taken, with timestamps, amounts, and water temperature.

The data comes back as raw bytes — no documentation, no spec sheet. I had to decode it by hand: take a sip, read the bytes, repeat, until the pattern clicked. Each sip is 13 bytes of data that encodes when you drank, how much, and how warm the water was.

How it all fits together

A small Linux box next to my fridge polls the bottle every 30 seconds over Bluetooth. When it gets new sip data, it pushes it to a server which stores everything and serves this dashboard. The whole pipeline is automated — I just drink water and the data shows up here.

Bottle --Bluetooth--> Collector --HTTPS--> API + Dashboard
         (30s poll)    (fridge)             (water.syl.rest)