2 Οκτωβρίου 2026 / Lefteris Iliadis / SomniusX
Τρεις διορθώσεις για το eucWatch, από το fork του Igor στο έργο
2 Οκτωβρίου 2026
Το eucWatch φέρνει την οθόνη του ηλεκτρικού σου μονόκυκλου σε ένα φθηνό smartwatch. Ένα fork του είχε διορθώσεις που δεν γύρισαν ποτέ πίσω. Σήμερα τρεις από αυτές πήγαν στο έργο, και μπήκαν και οι τρεις το ίδιο βράδυ.

Το eucWatch, έργο του enaon, είναι μια οθόνη για ηλεκτρικά μονόκυκλα που τρέχει σε φθηνά smartwatch: ένα P8, ένα P22, ένα PineTime, ένα Bangle.js 2. Το ρολόι συνδέεται με τον τροχό μέσω Bluetooth και δείχνει ταχύτητα, μπαταρία, θερμοκρασία και ειδοποιήσεις στον καρπό σου. Είναι όλο JavaScript πάνω στο Espruino, και εγκαθίσταται από μια ιστοσελίδα. Περισσότερα στη σελίδα του eucWatch.
Δύο αντίγραφα που απομακρύνθηκαν
Το 2024 το fork του Igor Vasilkov (kvazimoda24) προχώρησε μόνο του, με δικό του loader. Ένα pull request γύρισε στο έργο τον Απρίλιο του 2024· μετά από αυτό, 61 ακόμη commits στον κύριο κλάδο του fork και 100 στον δοκιμαστικό δεν γύρισαν ποτέ. Όσοι χρησιμοποιούσαν τον έναν loader είχαν διορθώσεις που όσοι χρησιμοποιούσαν τον άλλον δεν είδαν ποτέ.
Σύγκρινα λοιπόν τα δύο. Μια δοκιμαστική ένωση του fork με το έργο περνά χωρίς καμία σύγκρουση, και μεγάλο μέρος της διαφοράς είναι νέες δυνατότητες. Κάποιες αλλαγές όμως διορθώνουν πραγματικά bugs του έργου, οπότε αυτές πήγαν πρώτες, η καθεμία ως μικρό pull request με το όνομα του Igor ως συγγραφέα του commit.
Οι τρεις διορθώσεις
- #30, Inmotion V11, V12 και V13. Το ρολόι άθροιζε τις ειδοποιήσεις για μπαταρία, ταχύτητα, θερμοκρασία και ρεύμα, και μετά μηδένιζε το άθροισμα ακριβώς πριν από το κομμάτι που κάνει τη δόνηση. Οπότε δεν δονούνταν ποτέ. Η διόρθωση του Igor μεταφέρει τον μηδενισμό στην αρχή. Το ίδιο pull request διορθώνει και ένα σφάλμα στο πρώτο πακέτο με «escape» από τον τροχό, που χρησιμοποιούσε μεταβλητές που δεν υπήρχαν. Πάνω στη διόρθωση του Igor πρόσθεσα και μία δική μου: τα πακέτα με δύο ή περισσότερα escape έβγαιναν μετατοπισμένα.
- #31, ο loader. Η εγκατάσταση εφαρμογών από τον browser του κινητού κολλούσε στη μέση. Η διόρθωση του Igor αφήνει στον loader μια μικρή ανάσα ανάμεσα στα κομμάτια, και είναι αυτό που τρέχει ήδη ο loader του fork.
- #32, τροχοί Veteran. Μετά από μια διακοπή της σύνδεσης, το ρολόι μπορούσε να κολλήσει στο «ble already connected». Το Bluetooth αναφέρει τον λόγο κάθε αποσύνδεσης, και ο λόγος 8, η λήξη χρόνου σύνδεσης, δεν αντιμετωπιζόταν. Τώρα το ρολόι κλείνει την παλιά σύνδεση και ξαναδοκιμάζει σε 5 δευτερόλεπτα.

Και τα τρία μπήκαν στο έργο μέσα σε λιγότερο από μία ώρα. Ευχαριστώ!
Και τέσσερα για το fork
Διαβάζοντας το fork προσεκτικά, βρήκα bugs και σε αυτό, οπότε τέσσερα pull requests πήγαν και εκεί: ο συναγερμός χαμηλής πίεσης των αισθητήρων ελαστικών (TPMS) έριχνε σφάλμα αντί να σε ειδοποιεί, η οθόνη αγνοούσε τα όρια πίεσης που έβαζες, και τα πακέτα με περισσότερα από ένα escape. Το καθένα πηγαίνει δύο φορές, μία για τον κύριο κλάδο και μία για τον δοκιμαστικό.
Τι δοκιμάστηκε και τι όχι
Οι αλλαγές για τα Inmotion ελέγχθηκαν σε Node, με προσομοιωμένα πακέτα: χωρίς τη διόρθωση δεν υπάρχει δόνηση και κάθε πακέτο με escape ρίχνει σφάλμα, ενώ με αυτήν οι ειδοποιήσεις χτυπούν και τα πακέτα βγαίνουν σωστά. Τίποτα δεν δοκιμάστηκε σε τροχό ή σε ρολόι, και η διόρθωση για την εγκατάσταση από κινητό θέλει ακόμη μια δοκιμή σε πραγματικό κινητό.
Ευχαριστώ πολύ: enaon για το eucWatch και για τη γρήγορη ενσωμάτωση, και Igor Vasilkov για τις διορθώσεις.