My Rower Doesn't Speak Garmin
Reverse engineering, BLE bridging, and a Connect IQ app — because no manufacturer thought of it
Garmin Connect IQ · Monkey C · BLE · ANT+
I row. Not on water — on a Sportstech WRX1000 Waterrower. Solid machine with one problem: it speaks Bluetooth Low Energy. My Garmin Epix 2 Pro speaks ANT+. They don't talk to each other.
Why Imported Activities Aren't Enough
FIT Import
- Garmin ignores imported data
- No Training Effect
- No VO2max update
- No Training Load
- Rowing = invisible
Live Pairing via Bridge
- Watch sees real-time data
- Aerobic/Anaerobic Training Effect
- VO2max gets updated
- Training Load is counted
- Rowing = fully tracked
Firstbeat algorithms run on-device. If the watch doesn't see heart rate live during the activity, there's no calculation. No Body Battery drain, no Intensity Minutes, no Recovery Time.
The Bridge: BLE In, ANT+ Out
Software that receives BLE FTMS data from the WRX1000 and forwards it as ANT+ FE-C to the Garmin watch. Runs on an Android phone in Chrome. And suddenly: Training Effect. VO2max. Everything.
The Garmin App: WRX1000-IQ
The standard Indoor Rowing display is generic. So: Connect IQ data field in Monkey C. Zone-based pace display with color coding, four core metrics: pace, power, stroke rate, distance. AMOLED-optimized.

Connect IQ: Every API call can crash. Bluetooth drops. Fields vanish. Blue square = your code is broken. Solution: Every call in try-catch, null checks everywhere, tag-and-rollback workflow.
What an Engineer Does
“Would it have been easier to buy a rower with native Garmin support? Of course. But the WRX1000 is a water rower — the rowing feel is unbeatable. And I'm a mechanical engineer.”
Full Garmin integration for a device the manufacturer never intended for it. Training metrics that were previously invisible. And a deploy script that pushes directly to the watch via MTP.
— Philipp
More maker stories? The book has fourteen of them.
About the book