lefteros_by SomniusX
EL ↗Say hello

LEFTEROS / PERSONAL NOTES

Three fixes for eucWatch, from Igor's fork to the project

2 October 2026 / Lefteris Iliadis / SomniusX

Three fixes for eucWatch

eucWatch, by enaon, is a dash for electric unicycles that runs on cheap smartwatches: a P8, a P22, a PineTime, a Bangle.js 2. The watch connects to the wheel over Bluetooth and shows speed, battery, temperature and alerts on your wrist. It's all JavaScript on Espruino, installed from a web page. More on the eucWatch page.

Two copies that drifted apart

In 2024 Igor Vasilkov (kvazimoda24) worked on a fork of eucWatch, with its own loader. One pull request went back to enaon in April 2024; after that, 61 more commits on the fork's main branch and 100 on its test branch never did. Riders using one loader got fixes that riders using the other never saw.

So I compared the two. A trial merge of the fork into the project goes through with no conflicts, and much of the difference is new features. A few changes, though, fix real bugs in the project, so those went first, each as a small pull request with Igor as the author of the commit.

The three fixes

  • #30, Inmotion V11, V12 and V13. The watch added up the battery, speed, temperature and current alerts, and then reset the total to zero right before the part that vibrates. So it never vibrated. Igor moved the reset to the start. The same pull request fixes a crash on the first "escaped" packet from the wheel, which used variables that didn't exist. On top of Igor's fix I added one of mine: packets with two or more escapes came out shifted.
  • #31, the loader. Installing apps from a phone's browser froze halfway. Igor's fix gives the loader a breath between chunks, and it's what the fork's loader already runs.
  • #32, Veteran wheels. After a dropped connection the watch could get stuck on "ble already connected". Bluetooth reports the reason for a disconnect, and reason 8, a connection timeout, wasn't handled. Now the watch closes the stale connection and tries again in 5 seconds.

Pull request #30, merged by enaon

enaon merged all three within the hour. Thank you!

And four for the fork

Reading the fork closely, I found bugs in it as well, so four pull requests went to Igor: the low-pressure alarm of the tyre sensors (TPMS) crashed instead of warning you, the dash ignored the pressure limits you set, and the packets with more than one escape. Each comes twice, once for the main branch and once for the test branch.

What was and wasn't tested

The Inmotion changes were checked in Node, with stubbed packets: without the fix there's no vibration and every escaped packet throws, and with it the alerts fire and the packets come out right. Nothing was tried on a wheel or a watch, and the phone-install fix still needs a try on a real phone.

Thanks a lot: enaon for eucWatch and for the quick merges, and Igor Vasilkov for the fixes.