
Как я уже не раз писала, мне очень понравилось кататься на электросамокате, даже купила себе один такой.
Естественно, руки всегда чешутся похакать всё, что хакается, ехехе!
Сначала хотела отреверсить прошивку контроллера и поснимать всякие скоростные ограничения, но в чате самокатчиков нашёлся человек, который этим уже занимается. Он ясно дал понять, что на это у меня силёнок не хватит, ну или потрачу год времени. Всё-таки на уровень асма я спускаться не очень желаю и умею.
В итоге решила ограничиться реверсингом протокола беспроводного общения с самокатом.
Так как самокат дома всегда стоит в коридоре у входа, где рядом, в электрощитке, спрятана Raspberry Pi, я поставила себе задачу: вывести текущий процент заряда в панельку умного дома, чтобы откуда угодно понимать, сколько ему ещё торчать на привязи к розетке, а не бегать постоянно к дисплею.
Raspberry Pi поддерживает Bluetooth Low Energy, ничто не должно мне помешать.
Начала с очевидного: скачала apk официального приложения и декомпилировала. Брр, противная обфускация, лень ломать голову. Вспомнила, что Ninebot ES2 очень похож на Xiaomi Mijia Scooter (Ninebot вообще принадлежит компании Xiaomi), а значит протокол может совпасть. Протокол моего самоката ещё никто публично не реверсил, а вот по сяомишному какие-то наработки на GitHub нашлись. В итоге оказалось, что там чуть иной формат пакетов.
Одновременно с изучением чужих наработок по сяокату пыталась научиться работать с BLE (впервые) из Go. Научилась подключаться к самокату с "малинки", но на команды самокат никак не реагировал. В итоге мне это надоело, идею забросила на несколько дней, пока не случилось чудо: прокат самокатов YouDrive Lite выпустил приложение под Android!
Спасибо, YouDrive, за это приложение. Я ведь знаю, что у вас такие же самокаты, что вы своим приложением к ним подключаетесь. А ещё спасибо, что не обфусцировали его!
Достала правильные пакеты из их приложения, сложила это всё с предыдущими наработками, получила заветный байт со значением процента заряда.
Дальше дело за малым: привести код в порядок, реализовать автоматический поиск самоката (регулярные попытки подключиться, чтобы "ловить" его сразу, когда он оказывается дома), прикрутить MQTT для связи с умным домом.
Готово, уиу! Если что, currantlabs/ble — единственная адекватная библиотека для работы с BLE на Go.
Она зарелизилась!
Съездила установить её, теперь буду гонять быстрее и лучше экономить заряд.
Хотела на ней уже доехать домой, но ливень всё испортил. Не терпится затестить :с