Files
2026-10-13 13:50:34 +07:00

48 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Печать чеков команды на MXW01
Печать работает только на локальной площадке (`APP_MODE=venue`). На вкладке
«Команды» выберите «Печать чека» → проверьте предпросмотр → нажмите «Печатать».
Firefox и Chrome используют один серверный API; Web Bluetooth и настройки
браузера не нужны. Сервер берёт название и пароль команды из базы, а адрес QR —
из `APP_BASE_URL` площадки.
## Настройка площадки на Linux
1. Сервер venue и MXW01 должны находиться рядом на одном Linux-компьютере
с включённым Bluetooth. Установите термобумагу и включите принтер.
2. В локальном `venue/.env` задайте `MXW01_ADDRESS=<Bluetooth MAC принтера>`.
Адрес текущего MXW01 уже настроен локально; `.env` не включается в Git.
3. Соберите комплект существующей командой `make build`, затем запустите
`make venue`. Служба `receipt_printer` запускается из того же Go-образа.
4. Если приложение телефона подключено к принтеру, закройте его.
Служба печати использует прямое Bluetooth LE-соединение. Её контейнер работает
с `network_mode: host` и `NET_RAW`, без `privileged`, доступа к базе и TCP-порта.
API передаёт растровые данные через закрытый Unix-сокет в общем Docker-volume.
Остальные контейнеры сохраняют существующую сеть. Python, Bleak и BlueZ D-Bus
для печати не нужны.
Без `MXW01_ADDRESS` игра продолжает работать; при попытке печати сервер сообщает,
что принтер не настроен. На публичном сервере кнопки печати нет, и API её запрещает.
## Поведение и проверка
- За один запрос печатается один чек шириной 384 пикселя. Одновременный запрос
получает сообщение «принтер занят»; постоянной очереди нет.
- Сервер проверяет бумагу и состояние MXW01, затем ждёт подтверждение завершения
и проверяет контрольную сумму изображения. Общий таймаут — 110 секунд.
- Длинное название переносится. Неподдерживаемые символы, слишком длинная ссылка
или чек выше 1024 пикселей отклоняются до печати.
- После разрыва связи или таймаута сначала проверьте бумажный чек: он мог уже
выйти. Автоматической повторной печати нет. После устранения проблемы повторите
печать вручную; спящий принтер разбудите кнопкой.
- Перед игрой напечатайте две разные команды, проверьте названия и отсканируйте
QR телефоном в Wi-Fi площадки. Ссылка должна открывать напечатанную команду.
Чек содержит ссылку доступа команды; передавайте его участникам этой команды.
PNG-предпросмотр требует авторизации и отдаётся с `Cache-Control: no-store`.
Протокол проверен на текущем MXW01: фактический ответ состояния содержит
10 байт, а ответ завершения — подтверждение и две копии CRC изображения.
Источник описания формата: [измерения протокола MXW01](https://github.com/eliorpom-cmd/print-on-my-desk/blob/main/docs/09-protocol.md).