Přeskočit obsah

Tiskový agent

Tiskový agent (agent.py) je malý program, který běží na počítači s tiskárnou a tiskne úlohy ze serveru OdbavTo. Hodí se, když:

  • skenujete mobilem nebo tabletem (WebUSB na nich nefunguje),
  • aplikace běží v cloudu a tiskárna je v lokální síti akce.

Agent se k serveru připojuje sám (WebSocket, případně polling), takže funguje i za NAT a firewallem bez otevírání portů.

sequenceDiagram
    participant M as Mobil (skener)
    participant S as Server OdbavTo
    participant A as Agent (PC u vstupu)
    participant T as Tiskárna
    M->>S: sken QR kódu
    S->>A: tisková úloha (WebSocket)
    A->>T: tisk
    A->>S: potvrzení

Instalace

Na PC s tiskárnou potřebujete Python 3.11+ a soubor agent.py z repozitáře.

pip install "websockets>=12.0,<14.0"

Podle systému ještě:

pip install pywin32

Tiskne přes nainstalovaný ovladač tiskárny (Windows spooler).

brew install libusb
pip install pyusb

Tiskne přímo přes USB (PyUSB), případně přes lpr.

sudo apt install libusb-1.0-0
pip install pyusb

Tiskne přímo přes USB (PyUSB), případně přes lpr. Bez roota je potřeba udev pravidlo pro přístup k USB zařízení.

Konfigurace

Token tiskového agenta v nastavení

  1. V aplikaci u akce nastavte tiskárně metodu Agent.
  2. V Nastavení → Tisk a odbavení → Tiskový agent zkopírujte token agenta.
  3. Číslo akce zjistíte z adresy: https://odbavto.example.cz/events/12/….
  4. Vedle agent.py vytvořte agent_config.ini (vzor je v agent_config.ini.example):
[server]
url = https://odbavto.example.cz
event_pk = 12
token = <token-agenta>
; websocket (vychozi) nebo polling
transport = websocket
; jen pro polling, v sekundach
poll_interval = 2

[printers]
; cislo tiskarny v akci (#1, #2 ... z Nastaveni) = nazev tiskarny v systemu
1 = TDP-225
2 = TDP-225 (2)

Název tiskárny v systému zjistíte příkazem:

python agent.py --list-printers

Spuštění

python agent.py

Parametry z konfigurace jdou přepsat z příkazové řádky:

python agent.py --url https://odbavto.example.cz --event 12 --token <token>

Stav připojení agenta uvidíte v Nastavení → Tiskárny a ve stavu tiskárny ve skeneru.

Chování

  • Výchozí transport je WebSocket (úloha dorazí okamžitě). Po třech neúspěšných pokusech o připojení agent automaticky přejde na polling (dotaz každé 2 s).
  • Úlohy starší než 5 minut se nevytisknou (PENDING_JOB_MAX_AGE_SECONDS), aby se po výpadku nevytiskly staré jmenovky.
  • Úloha „zaseknutá“ v tisku déle než 60 s se vrátí do fronty.

Jeden agent na tiskárnu

Dvě instance agenta se stejným tokenem pro stejnou tiskárnu vedou k dvojitému tisku.

Únik tokenu

Token agenta jde v Nastavení přegenerovat. Starý token okamžitě přestane platit. Opakované pokusy se špatným tokenem server blokuje (5 pokusů za minutu z jedné IP).