Удобное Android-приложение для управления совместимыми электросамокатами AOVO по Bluetooth Low Energy.
SCOOT показывает телеметрию самоката, управляет доступными функциями, сохраняет поездки и помогает следить за примерным запасом хода. Интерфейс рассчитан на повседневное использование одной рукой и поддерживает светлую, тёмную и системную темы.
SCOOT — независимый проект. Он не является официальным приложением AOVO, ZYD, LENZOD, Xiaomi или других производителей.
- поиск только совместимых BLE-устройств без телевизоров, колонок и другой техники;
- стабильное подключение, автоподключение и восстановление после кратковременного обрыва;
- скорость, заряд, напряжение, ток, мощность, температуры и пробег;
- блокировка и разблокировка свайпом;
- фара, круиз-контроль, старт с толчка и режимы Eco, Drive и Sport;
- изменение лимита скорости на контроллерах, которые подтверждают эту команду;
- локальное имя для каждого самоката;
- прогноз запаса хода с сохранением результата между запусками приложения;
- история поездок со средней скоростью, временем, расстоянием и изменением заряда;
- запись GPS-маршрута и отображение поездки на Яндекс Картах;
- ручное завершение поездки, если самокат не сообщил о выключении;
- звуки, вибрация, выбор единиц скорости и температуры;
- проверка обновлений через GitHub Releases и установка нового APK из приложения;
- встроенная форма обратной связи без перехода в почтовый клиент.
- Откройте раздел Releases.
- Выберите последнюю версию и скачайте файл с расширением
.apk. - Откройте файл на телефоне и разрешите установку из этого источника, если Android попросит.
- Запустите SCOOT и выдайте разрешения на поиск устройств поблизости.
- Включите самокат, нажмите Найти и выберите его в списке.
Android всегда показывает системное подтверждение перед установкой APK. SCOOT не обходит эту защиту.
- проверьте, что Bluetooth включён;
- держите телефон рядом с включённым самокатом;
- закройте другие приложения, которые могут быть к нему подключены;
- на Android 11 и ниже включите геолокацию: она нужна системе для BLE-сканирования;
- повторите поиск через несколько секунд.
Приложение выбирает внешний вид по исходному Bluetooth-имени устройства. Возможность управления определяется не картинкой и не торговым названием, а фактически найденным GATT-профилем контроллера.
| Модель или имя устройства | Изображение | Статус |
|---|---|---|
AOVO PRO MAX, H19, AOVO MAX, SN_A913C554 |
AOVO PRO MAX | Проверено на реальном SN_A913C554 |
| ES40 | ES40 | Распознавание модели реализовано; управление доступно при совместимом ZYD/LENZOD-контроллере |
| AP07 | AP07 | Распознавание модели реализовано; управление доступно при совместимом ZYD/LENZOD-контроллере |
| M365 | семейство M365 | Распознавание модели реализовано; набор команд зависит от контроллера |
| ES60 | семейство M365 | Распознавание модели реализовано; набор команд зависит от контроллера |
| ES80 | семейство M365 | Распознавание модели реализовано; набор команд зависит от контроллера |
| AV01 | семейство M365 | Распознавание модели реализовано; набор команд зависит от контроллера |
| Неизвестное имя с совместимым BLE-профилем | универсальная модель | SCOOT попробует определить протокол после подключения |
Одинаковые названия могут использоваться с разными ревизиями контроллера. Поэтому конкретная функция может отсутствовать, даже если модель есть в таблице. SCOOT скрывает неподтверждённые инженерные возможности и не отправляет неизвестные команды вслепую.
| Профиль | GATT | Доступные функции |
|---|---|---|
| ZYD / AovoPro | сервисы F1F0, F2F0; запись F1F1, F2F1; уведомления F1F2, F2F2 |
авторизация, телеметрия, фара, круиз-контроль, старт с толчка, режим езды, блокировка и подтверждаемый лимит скорости |
| LENZOD legacy | сервис 7777; запись 8877; уведомления 8888 |
телеметрия, блокировка и круиз-контроль |
На LENZOD SCOOT не отправляет команды, формат которых не подтверждён: это защищает контроллер от случайных записей.
История поездки включает:
- дату и время начала и окончания;
- длительность;
- расстояние в километрах или милях;
- среднюю скорость;
- заряд в начале и конце;
- GPS-маршрут, если на телефоне была доступна геолокация.
Запас хода рассчитывается по данным текущей поездки и профилю пользователя. Расчёт обновляется с ограниченной частотой, сохраняется локально и не сбрасывается после краткого отключения или перезапуска приложения. Это прогноз, а не гарантия: ветер, температура, давление в шинах, рельеф и стиль езды заметно влияют на результат.
SCOOT проверяет последний релиз и предлагает обновиться, если доступна более новая версия. Обновление загружается внутри приложения, после чего открывается системный установщик Android.
Перед установкой проверяются:
- адрес загрузки GitHub;
- имя пакета приложения;
- увеличение
versionCode; - совпадение подписи APK с уже установленной версией.
Для каждого публичного обновления необходимо:
- увеличить
versionCodeиversionName; - собрать release APK тем же ключом подписи, что и предыдущую версию;
- создать GitHub Release;
- прикрепить к релизу один актуальный
.apk.
В приложении есть встроенная форма для сообщений об ошибках, вопросов и предложений. Пользователь выбирает тему, описывает обращение и отправляет его разработчику прямо из SCOOT — открывать почтовое приложение не нужно.
Поддержать разработку, тестирование новых контроллеров и развитие SCOOT можно на Boosty.
Понадобятся:
- Android Studio с Android SDK 35;
- JDK 17;
- устройство или эмулятор с Android 8.0 и новее.
Клонирование и сборка debug APK:
git clone https://github.com/Chill-Man/scoot.git
cd scoot
./gradlew assembleDebugВ Windows используйте:
.\gradlew.bat assembleDebugГотовый файл появится здесь:
app/build/outputs/apk/debug/app-debug.apk
Создайте или дополните local.properties:
sdk.dir=C:\\Users\\YOUR_NAME\\AppData\\Local\\Android\\Sdk
MAPKIT_API_KEY=ваш_ключ_Yandex_MapKit
GITHUB_REPOSITORY=Chill-Man/scoot
FINANCIAL_SUPPORT_URL=https://boosty.to/chillyperchick/donatelocal.properties исключён из Git и не должен попадать в коммиты.
Модульные тесты:
.\gradlew.bat testDebugUnitTestСборка и Android Lint:
.\gradlew.bat assembleDebug lintDebugИнструментальные UI-тесты на запущенном эмуляторе:
.\gradlew.bat connectedDebugAndroidTestapp/src/main/java/ru/samokat/scootcontrol/
├── ble/ подключение, GATT, очереди команд и восстановление связи
├── protocol/ кодирование и разбор кадров ZYD/LENZOD
├── data/ настройки и локальное хранение
├── range/ прогноз запаса хода
├── trip/ запись и хранение поездок
├── update/ проверка релизов, загрузка и проверка APK
├── support/ встроенная обратная связь
├── presentation/ состояние приложения и команды интерфейса
└── ui/ экраны и компоненты Jetpack Compose
Дополнительные материалы:
- Не изменяйте настройки самоката во время движения.
- Проверяйте работу новой модели на вывешенном ведущем колесе и на минимальной скорости.
- BLE-блокировка не заменяет физический замок.
- Соблюдайте ограничения скорости и правила движения вашего региона.
- Не публикуйте ключ MapKit и ключ подписи приложения.
Если обнаружена новая ревизия контроллера, приложите к обращению Bluetooth-имя, модель самоката, версию прошивки и описание доступных функций. Это позволит добавить поддержку без опасных предположений.
Исходный код распространяется по лицензии MIT.