Перейти к содержанию

Миграция MARS Android → Linux L2

Документ описывает однократный переход с устаревшего Android-приложения MARS L2 на новый сервис Linux edge-service (пакет okto-edge-service).

Требования

  • Root-доступ на Android-хосте (линии MARS уже работают с root).
  • adb на ноутбуке инженера.
  • Промышленный ПК с предустановленным okto-edge-service (Debian) или соответствующим RPM (РЕД ОС).
  • JAR миграционной утилиты:
    ./gradlew :okto-migrate:shadowJar
    cp packages/okto-migrate/build/libs/okto-migrate-*-all.jar okto-migrate.jar
    

Пошаговая процедура

1. Снятие Android-дампа

mkdir android-dump && cd android-dump
adb shell run-as ru.okto.android tar c shared_prefs databases | tar x

2. Конвертация SharedPreferences → edge-service.yaml

java -jar okto-migrate.jar convert ./android-dump \
    --out /etc/okto/edge-service.yaml --overwrite

Далее открываем сгенерированный YAML и заполняем:

  • device.identifier — идентификатор линии MARS.
  • line.variant (DRY / WET), line.site (LUZ / NOV / MIR / RND).
  • Сканеры / принтеры / ПЛК — под физическое подключение конкретного шкафа.

3. Экспорт истории SQLite

java -jar okto-migrate.jar export-history ./android-dump \
    --out android-history.jsonl

В период перехода историю можно проиграть в новый сервис (см. scripts/replay-history.py).

4. Запуск сервиса

sudo systemctl restart okto-edge
curl http://localhost:8080/health

5. Проверка

  • Интерфейс оператора доступен по адресу http://<ipc>:3000 (режим Tauri / киоск).
  • В Центральной консоли появляется новая запись с корректным вариантом / площадкой.
  • Для каждого сканера — проверка через POST /api/v1/scanners/{index}/test.
  • Для шкафов WET — имитация скачка питания:
    curl -X POST http://<ipc>:8080/api/v1/ups/simulate \
         -H 'Content-Type: application/json' \
         -d '{"onBattery":true,"batteryPercent":35}'
    
    В Журнале должно появиться событие UPS_ON_BATTERY.

Откат

  1. Остановить сервис:
    sudo systemctl stop okto-edge
    
  2. Включить Android-хост обратно.
  3. Android-хост физически остаётся в цехе 14 дней, после чего выводится из эксплуатации.

Таблица соответствий SharedPreferences

Ключ OLD_APP Новый конфиг Комментарий
device_id / DEVICE_ID device.identifier
device_name / DEVICE_NAME device.name
line_id / production_line_id device.productionLineId
scanner_ip / matrix_scanner_ip scanners[0].host Основной сканер
scanner_port scanners[0].port
printer_ip printers[0].host
printer_port printers[0].port
printer_type printers[0].type В верхнем регистре
modbus_ip / plc_ip plcs[0].host протокол = MODBUS_TCP
modbus_port / plc_port plcs[0].port по умолчанию 502
copacking_mode, task_mode OperationModes (в БД) управляются из UI

Новые ключи — выставляются вручную либо через страницу «Настройки L2» в UI оператора:

  • line.variant (DRY / WET)
  • line.site (LUZ / NOV / MIR / RND)
  • line.plcVisualisationUrl (URL визуализации ПЛК команды MARS)
  • ups.type (OWEN_IBP120K для WET)
  • gpio.backend (libgpiod для DRY; USB-GPIO как альтернатива)

Известные отличия

  • Число сканеров — у MARS Android ограничение 8 шт., в новом конфиге — до 10.
  • Множественные принтеры — ранее поддерживался только один принтер; теперь допустимо параллельное использование нескольких (например, MARS SDX + мобильный ZPL).
  • Журнал событий — новая подсистема, на Android-стороне не было аналога.
  • Партионный учёт — новая функциональность, миграции не требует, поведение настраивается из UI.