Bridge serial para Raspberry Pi que atende balanças e impressoras ESC/POS para vários caixas via HTTP na LAN.
- Python 3.11, 3.12 ou 3.13
- Linux com
/dev/serial/by-id - Permissão de acesso serial (grupos
dialoutelpconforme hardware)
cd utils/pdv-device-bridge
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
python -m pip install -e .- Copie
config.example.tomlpara/etc/pdv-device-bridge/config.toml. - Ajuste
id,pathe parâmetros seriais de cada dispositivo. - O bind HTTP deve permanecer na LAN (ex.:
0.0.0.0:8787em rede interna). - Defina
server.cors_allowed_originscom as origens do PDV web (ex.:http://localhost:8080no desenvolvimento).
pdv-device-bridge --config ./config.example.tomlGET /healthGET /v1/devicesGET /v1/scales/{scale_id}/read?max_age_ms=1500POST /v1/printers/{printer_id}/jobsGET /v1/printers/{printer_id}/jobs/{job_id}
PAYLOAD_BASE64=$(printf '\x1b@Teste bridge\n\x1dVA\x10' | base64)
curl -X POST "http://127.0.0.1:8787/v1/printers/printer-caixa-1/jobs" \
-H "Content-Type: application/json" \
-d "{\"payload_base64\":\"${PAYLOAD_BASE64}\",\"content_type\":\"escpos_raw\",\"request_id\":\"sale-123\"}"Arquivo de unidade pronto em:
systemd/pdv-device-bridge.service
Config padrão aplicada:
Restart=alwaysRestartSec=2WatchdogSec=20
O processo envia READY=1 e WATCHDOG=1 automaticamente quando executado com Type=notify.
cd utils/pdv-device-bridge
source .venv/bin/activate
python -m pip install -e .[dev]
pytest- Leitura da balança: timeout total
800ms, comando0x04 0x05, até200bytes; encerra emCR/LFou após30mssem novos bytes. - Cache de peso válido:
1500ms(ajustável pormax_age_ms). - Fila por impressora: tamanho máximo
100. - Retry de impressão: backoff
200ms,500ms,1000ms(1 envio inicial + 3 retries). - Escrita da impressora: chunks de
512bytes, pausa15msentre chunks, settle final1000ms, timeout de escrita3000ms.