# Aggiornamento 2026-05-16 11:04 ## Milestone prima implementazione comunicazione WMS Questa milestone documenta la specifica concordata prima di completare la parte client-server reale tra `flywms_navigation.py` e un server WMS demo. ## Obiettivo Implementare una comunicazione reale, asincrona e configurabile tra: - client navigazione: `flywms_navigation.py`; - server WMS demo: nuovo script FastAPI. Il client deve inviare il crop etichetta e i metadati dello snapshot. Il server deve ricevere, salvare i payload per debug, simulare OCR/WMS e rispondere `ACK` o `NACK`. ## Decisioni concordate - Server demo basato su FastAPI. - Dipendenze installate: - `fastapi`; - `uvicorn`; - `python-multipart`. - Il server deve salvare fisicamente le immagini ricevute in una cartella di debug. - Modalita' risposta configurabili: - `always-ack`; - `always-nack`; - `alternate`; - `random`. - Il client deve poter inviare a un server su altro computer tramite IP/porta configurabili. - Il loop video/navigazione non deve fare la POST direttamente: invio tramite worker asincrono. - La sequenza logica rimane: - stop; - scatta etichetta; - invia WMS; - attende risposta o timeout; - riparte. - L'attesa della risposta deve essere gestita senza congelare brutalmente il rendering. ## Configurazione prevista lato navigazione Da aggiungere/validare in `flywms_navigation.ini`: ```ini wms_enabled = false wms_server_url = http://127.0.0.1:8088/api/v1/navigation-snapshot wms_client_id = flywms-demo-01 wms_timeout_sec = 2.0 wms_queue_max_size = 8 wms_send_gaylord_debug = true ``` Per server remoto: ```ini wms_server_url = http://192.168.1.50:8088/api/v1/navigation-snapshot ``` ## Configurazione prevista lato server Da implementare in `flywms_wms_server.py`: ```text host = 0.0.0.0 port = 8088 fake_ack_mode = always-ack fake_processing_sec = 0.5 received_dir = wms_received ``` ## Protocollo previsto Endpoint: ```text POST /api/v1/navigation-snapshot ``` Payload multipart: - `metadata`: JSON; - `label_image`: JPEG crop etichetta; - `gaylord_image`: JPEG opzionale/debug. Risposta: ```json { "status": "ACK", "request_id": "...", "message": "codice valido su WMS", "fake_ocr_text": "DEMO-0001", "processing_ms": 120 } ``` Oppure: ```json { "status": "NACK", "request_id": "...", "message": "codice non riconosciuto", "fake_ocr_text": "", "processing_ms": 120 } ``` ## Nota operativa Al momento della creazione di questa milestone erano gia' stati installati i pacchetti FastAPI e iniziati i primi campi/config del client WMS. La milestone serve a fissare la specifica prima di proseguire con il completamento.