Fiera 27-29/10: demo TMF con calibro, attività e camera TC bench (misure, PM, DXF compare su Sider) #72
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ESITO: richiesta
RIF: gitea:Adriano/TieMeasureFlow (V3.0.0
82ad885); fiera con Ricerca e Misure (Menoncin) 27-29/10/2026COSA: contenuto della demo in fiera deciso da Adriano il 12/10/2026.
HARDWARE DISPONIBILE: TC CORE BENCH 036 di Opto Engineering (camera integrata); una telecentrica con stativo.
SI ESPONE: TieMeasureFlow con
CAMPIONI: profili Sider Engineering (5 disegni DWG+PDF in Shared/5_SIDER ENG/1_Materiale utile/).
STATO VERIFICATO:
vision(#46 chiusa): misure, MatchPattern, CompareDxf, overlay salvato.anchor="align"prende la posa dal localizzatore (visionsuite origin/main c84bfd4, packages/vs-tools/src/visionsuite/tools/dxf.py:15,136): PM + DXF compare componibili.MANCA PER LA FIERA (ordine di rischio):
GET /grab; nella schermata operatore un tasto «Acquisisci» lo chiama e passa il fotogramma alla stessa API dell'upload (/api/vision/execute). Niente station_devices, niente WebSocket. Da decidere: questa via o anticipare #3.APERTE: nome e sede della fiera; dove sta l'hardware e quando arriva a Tielogic; chi porta PC e monitor; data della prova generale (proposta: entro 22/10).
CRITERIO DI FATTO: sul PC della fiera, un pezzo Sider appoggiato sul bench → «Acquisisci» → esito PM + DXF compare + quote con tolleranze, salvato in statistica; un task col calibro nella stessa ricetta.
AGGIORNAMENTO 15/10/2026: fiera = A&T Vicenza (Automation & Testing), Fiera di Vicenza, 27-29/10. Perimetro esteso: assistente di ricetta LLM in vs-gui (gitea:Adriano/visionsuite#282) + test DXF compare su Sider. Dettaglio nel commento 13787.
ANALISI (passo 1, claude-opus-5-5) — acquisizione dalla camera, parte 1 di #72
RIF: gitea:Adriano/TieMeasureFlow#72, base V3.0.0
5bf374aDECISIONI DI ADRIANO (15/10/2026): processo locale, non #3; bench TC CORE BENCH 036 sta da Menoncin; telecentrica con stativo = seconda postazione; PC e monitor della demo li porta Menoncin.
ARCHITETTURA: niente servizio nuovo. Sul PC della demo gira vs-gui (VisionSuite) nativo, che ha già
POST /camera/grab{source, trigger, timeout_ms} → PNG (vendor/visionsuite/packages/vs-gui/src/visionsuite/gui/server.py:355), con GenTL Itala/Opto via harvesters e la sorgente fintacamera:folderper provare senza ferro. Ogni stazione TMF dichiara URL del servizio e nome della sorgente. Il Flask fa da proxy (niente CORS, niente X-API-Key nel browser) e il fotogramma entra inacquire(blob)di vision_execute.js:27, cioè nella stessa API dell'upload.CONTRATTO (identico per A e B):
camera:<seriale>,camera:folder.GET /api/stations/by-code/{code}→ StationResponse; 404 se il codice non esiste; auth comeGET /api/stations/{station_id}.POST /measure/api/vision/grab(login_required, role MeasurementTec), senza corpo: stazione =_current_station(); legge la stazione da/api/stations/by-code/{code}; senza camera_url o camera_source → 409 JSON {"error": "..."}; altrimenti POST{camera_url}/camera/grabjson {"source": camera_source, "trigger": "continuo", "timeout_ms": 5000}, timeout 15 s; 200 → PNG così com'è (image/png); 404/503/504 del servizio → 502 JSON con il dettaglio; servizio irraggiungibile → 502 JSON.PIANO A — backend (agente A, ramo lavoro/jeeg-tmf72-backend):
FILE: src/backend/migrations/versions/020_station_camera.py (nuova, down_revision 019_station_vision_worker, batch_alter_table, downgrade toglie le due colonne); src/backend/models/orm/station.py; src/backend/models/api/station.py; src/backend/services/station_service.py (create e update); src/backend/api/routers/stations.py (by-code, PRIMA di
/{station_id}per l'ordine delle route).TEST: test_migrations.py (020 su e giù, schema come 019); test_stations_api.py (crea/aggiorna/leggi i due campi, validazione URL, by-code 200 e 404).
NON TOCCARE: frontend, vision_service, migrazioni 000-019.
PIANO B — frontend (agente B, ramo lavoro/jeeg-tmf72-frontend):
FILE: src/frontend/flask_app/services/api_client.py (get_station_by_code); blueprints/measure.py (route grab; flag
camera_enabledpassato al template di task_execute, calcolato dalla stazione corrente, falso se la chiamata fallisce); templates/measure/task_execute.html (pulsante «Acquisisci dalla camera» accanto all'input file, solo con camera_enabled;grabUrlin window.__visionCfg); static/js/vision_execute.js (metodo grab(): fetch POST con X-CSRFToken → blob → this.acquire(blob); errore mostrato come oggi gli errori di execute; stato busy); templates/admin/stations.html (due campi, nei cinque punti JS dove compare vision_worker_url); translations it/en (+ compilazione .mo se il repo la versiona); docker-compose.dev.yml (client: extra_hosts "host.docker.internal:host-gateway", così da container si raggiunge vs-gui sull'host Linux).TEST: src/frontend/flask_app/tests — route grab con api_client e requests finti: 409 senza camera, 200 PNG passato, 502 su 503 del servizio, 502 su ConnectionError; ruolo richiesto; admin stazioni con i campi nuovi.
NON TOCCARE: backend, vendor/visionsuite, vision_execute.acquire().
DOPO (Opus): merge dei due rami, suite intera, prova d'insieme in docker-compose.dev con vs-gui su jeeg e
camera:foldersui BMP Sider.PARTI SUCCESSIVE (non in questo giro): ricette Sider (servono i DXF: nessun convertitore DWG su jeeg), calibrazione mm/px per stazione, guida d'installazione sul PC di Menoncin.
⚡ jeeg — preso in carico 2026-10-15T07:44:46Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI 2 (passo 1, claude-opus-5-5) — servizio camera minimo, parte 1b di #72
RIF: gitea:Adriano/TieMeasureFlow#72, ramo lavoro/jeeg-tmf72 (merge di backend
1453b31e frontend 192d4b5; suite 545 + 342 passed)PROBLEMA VERIFICATO: vs-gui ascolta solo su 127.0.0.1 per scelta (vendor/visionsuite/packages/vs-gui/src/visionsuite/gui/__main__.py, niente --host, niente auth). Dal container client il loopback dell'host non si raggiunge.
PROVA: vs-gui su jeeg,
POST 127.0.0.1:8760/camera/grab {"source":"camera:folder"}→ 200 PNG 2464x2056 (BMP Sider); dal container tmflow-clientconnect 172.17.0.1:8760→ ECONNREFUSED.DECISIONE: vs-gui non si tocca. Si aggiunge a TMF un servizio camera minimo, solo grab, con lo stesso contratto HTTP di vs-gui, e host configurabile.
FILE: scripts/camera_service.py (nuovo). Avvio:
vendor/visionsuite/.venv/bin/python scripts/camera_service.py [--host 127.0.0.1] [--port 8765] [--folder <cartella immagini>](il venv di VisionSuite ha vs-camera, fastapi, uvicorn;uv sync --all-packagesin vendor/visionsuite).GET /camera/sources→ {"sources":[{name,kind,label}]} davisionsuite.camera.sources.list_sources(None, cameras=True, config=cfg).POST /camera/grabjson {source, trigger="continuo", timeout_ms=5000} → PNG (cv2.imencode). Sorgenti aperte una volta e tenute in un dict con lock per nome (come vs-gui server.py:355-390). Errori: 400 source mancante; 404 SourceNotFound; 503 CameraError/CameraGrabError; 504 timeout.--folder→ config {"folder": {"folder": X, "loop": True}} cosìcamera:foldergira in loop sulle immagini.--host 172.17.0.1(gateway di docker0, raggiunto via host.docker.internal:host-gateway del compose dev). Windows Docker Desktop: PRESUNTO che host.docker.internal raggiunga 127.0.0.1, da provare sul PC di Menoncin.host:8765della schermata Stazioni.TEST: src/backend/tests? no — test in scripts non esistono; aggiungere
src/frontend/flask_app/tests/? no. Test con il venv di VisionSuite:scripts/tests/test_camera_service.pycon FastAPI TestClient su una cartella di 2 PNG generati: sources contiene camera:folder; grab → 200 image/png e dimensioni giuste; source mancante → 400; sorgente inesistente → 404.DOC: README.md, sezione breve «Camera di stazione (demo fiera, #72)»: avvio del servizio, campi camera_url (
http://host.docker.internal:8765) e camera_source (camera:<seriale>ocamera:folder) nella schermata Stazioni, STATION_SWITCH_ENABLED per due postazioni sullo stesso PC.NON TOCCARE: vendor/visionsuite, src/backend, src/frontend.
ESITO: fatto (parte 1: acquisizione dalla camera). Issue resta aperta per le parti 2-4.
RIF: gitea:Adriano/TieMeasureFlow#72; merge
e5989c9su V3.0.0 (backend1453b31, frontend192d4b5, servizio camera0af6692)COSA: stazione con camera_url + camera_source (migrazione 020); GET /api/stations/by-code/{code} (utente loggato); proxy Flask POST /measure/api/vision/grab; pulsante «Acquisisci dalla camera» in task_execute → acquire(blob) → /api/vision/execute; campi nella schermata Stazioni; scripts/camera_service.py (solo grab, contratto vs-gui, --host/--port/--folder); README «Camera di stazione».
PROVA:
NON PROVATO: clic nel browser sullo stack docker completo (blob → execute → esito); host.docker.internal → loopback su Windows Docker Desktop (PRESUNTO); camera vera del TC bench.
MANCA:
dwg2dxf -m, letti con ezdxf; tutto su layer 0, cartiglio e asse da togliere). Copia su jeeg in AI-OS/data/tmp/sider/dxf/.⚡ jeeg — rilasciata 2026-10-15T08:03:04Z
ESITO: richiesta
RIF: gitea:Adriano/TieMeasureFlow#72
COSA: fiera identificata e perimetro esteso da Adriano (15/10/2026).
FIERA: A&T Vicenza (Automation & Testing), Fiera di Vicenza, 27-29/10/2026. Fonte: mail A&T Expo e mail Menoncin 29/09 «info software gestione CQ fiera A&T» (vicino di stand: es-tek.it, software gestione misure). Call Teams Menoncin «update progetti + fiera A&T» 16/10/2026 11:00.
PERIMETRO AGGIUNTO (Adriano, 15/10/2026): «mi sarebbe piaciuto portare la gestione della creazione ricette per gui di visionsuite tramite LLM e un paio di test di dxf compare».
VERIFICATO: vendor/visionsuite di TMF V3.0.0 sta a cdc7a14, 20 commit dietro origin/main (git log HEAD..origin/main).
BLOCCO: percorso API mai collaudato, gitea:Adriano/visionsuite#302 attesa:adriano (chiave API). Il backend
abbonamento(#301) è solo sviluppo: login Max ammesso per uso individuale, demo a terzi → chiave API. Serve anche rete Internet allo stand.Bug aperto: gitea:Adriano/visionsuite#320 (testo ripetuto prima e dopo un tool).
dwg2dxf -y -m), immagini 12 BMP 2464x2056 in jeeg:/data/Sorgenti/AI-OS/data/tmp/sider/. Tutto su layer 0: cartiglio e asse da togliere prima del compare (editor DXF con cancellina = gitea:Adriano/visionsuite#304, non fatto).PRESUNTO: le BMP sono riprese telecentriche dei profili nei DXF; scala mm/px non nota.
DA DECIDERE (Adriano): editor a nodi V2 in TMF (decisione 14/09) sostituito dall'assistente in vs-gui come «creazione ricette» della fiera, sì/no. Ricetta creata in vs-gui → eseguita in TMF (worker vision, #46): percorso da provare.
MANCA: chiave API (Adriano); aggiornamento vendor visionsuite in TMF; ricette Sider; calibrazione; installazione PC Menoncin.
ESITO: fatto (parziale: prove su immagini esistenti, non sul bench)
RIF: gitea:Adriano/TieMeasureFlow#72
COSA: prove DXF compare sui 4 profili Sider con vs-assistant; riepilogo per Menoncin
FILE: wasabi:adp-work/output/2026-10-15_riepilogo-prove-sider.pdf (e .md) — ricette jeeg:/data/Sorgenti/AI-OS/data/tmp/sider/fiera/ricette/sider{A_fomir,B_pr165,C_quadro,E_mevis}.json con meta.dxf {path,sha256}
PROVA: vs-gui (worktree ~/lavoro/visionsuite-fiera, origin/main 6191182, backend abbonamento) → pezzo trovato e orientato su tutte le immagini; quote principali entro pochi centesimi dal calibro
ESITI: MEVIS 12,309/5,082 (img 10), raggi inf 1,31-1,37 vs R1; PR165 h 5,235-5,239, piede dx R0,85 vs 0,50, teste R0,33-0,37 (15,03 vs 15,37), DXF compare non valido (#327); Quadro 7,137 vs 7,036 stesso pezzo (Δ0,10 fra foto); FOMIR piano sup 3,07 vs 3,30-3,40, DXF a 3,50
LIMITI: scala stimata 53,5 px/mm non calibrata; luce frontale; pezzi a contatto con le piastre; 1-3 foto per pezzo
DIFETTI APERTI: gitea:Adriano/visionsuite#324 #325 #326 #327
NOTA: patch locale NON committata in ~/lavoro/visionsuite-fiera/packages/vs-assistant/src/visionsuite/assistant/abbonamento.py (max_buffer_size=32MiB); fix vero = visionsuite#326
MANCA: foto controluce dal TC bench, ripetibilità, target di calibrazione, DXF Doppia T (Menoncin); chiave API per la fiera (visionsuite#302, Adriano)
PROSSIMO: call Menoncin 16/10 11:00, poi ritaratura ricette sulle foto del bench
ESITO: fatto
RIF: gitea:Adriano/TieMeasureFlow#72, #74
COSA: rami lavoro/jeeg-tmf72, -backend, -frontend portati a V3.0.0
6bc6c0c(fast-forward: erano già tutti contenuti in V3.0.0); submodule vendor/visionsuite su TieVision-Core 4c178cf.PROVA: git merge --ff-only origin/V3.0.0 + submodule sync/update nei worktree jeeg:~/lavoro/TieMeasureFlow{,-72backend,-72frontend} → HEAD
6bc6c0c, sub 4c178cf, working tree pulito, pushati; test visione 29 passed.ESITO: richiesta
RIF: gitea:Adriano/TieMeasureFlow#72
COSA: stato fiera A&T Vicenza 27-29/10 al 2026-10-19 17:15 UTC, da giornale TMF e issue aperte (goldrake). Nessuna prova sul ferro.
FATTO: setup Windows offline v3.0.0-rc2 (#76-#81); TieVision Studio installato su DESKTOP-FVJB02N, licenza a 15/11 (AI-OS#383); assistente rivisto (TieVision-Assistant main b8c07de, Studio ba2afa6); acquisizione camera in TMF (
e5989c9).MANCA:
BUG APERTI: TieVision-Studio#60, TieVision-Core#336 #320, TieVision-Assistant#11.
PROSSIMO: Adriano decide punto 4; punti 1-2 col PC e il bench in mano.
ESITO: fatto (controllo, sola lettura)
RIF: gitea:Adriano/TieMeasureFlow#72
COSA: PC fiera REM DESKTOP-FVJB02N controllato via ssh da daitarn, 22/10/2026 23:53.
PROVA:
MANCA: identificare la camera (ItalaView o enumerazione GenTL), prova di acquisizione da Studio, ricette Sider sul PC; PC TieMeasureFlow (punto 1 del 19/10).
ESITO: bloccato
RIF: gitea:Adriano/TieMeasureFlow#72
COSA: PC fiera REM (DESKTOP-FVJB02N): camera identificata da TieVision Studio 0.1.2, grab fallito perché ItalaView tiene la camera.
PROVA: Studio avviato da ssh, GET /camera/sources →
camera:601654«GenTL Opto Engineering ITA50-GM-10C (601654)», ItalaGenTL.cti, Ethernet 2, risposta in 6 s.PROVA: POST /camera/grab {source: camera:601654} → 503 «apertura fallita … GenTL exception: Communication error … Insufficient privileges to access the resource (ID: -1010)».
VERIFICATO: tasklist →
ItalaView.exepid 22236, sessione Console di HOFME, 18 h di CPU: controllo esclusivo GigE della camera.VERIFICATO: C:\ProgramData\Tielogic\TieVisionStudio\ricette vuota. Correzione al commento del 22/10: la cartella base contiene immagini/, log/, ricette/; nessuna ricetta.
NOTA: il primo tentativo («Studio non risponde») era il timeout del client a 5 s; studio.log mostra /camera/sources 200 in 6-30 s.
MANCA: ItalaView non chiuso (qualcuno potrebbe usarlo, scelta di Adriano). Chi è sul posto chiude ItalaView, poi si rifà il grab da Studio. Ricette Sider sul PC ancora da caricare.
PROSSIMO: chiusura di ItalaView sul PC REM → rilanciare il grab da Studio.
ESITO: fatto (script pronto, non ancora eseguito)
RIF: gitea:Adriano/TieMeasureFlow#72
COSA: nuovo PC fiera per TMF (Adriano lo prepara 23/10/2026); installazione e configurazione da remoto da daitarn via ZeroTier Ricerca_Misure 37354b864742e173.
FILE: wasabi:adp-work/_output/2026-10-23_tmf-fiera-chiavetta.zip (primo-accesso.cmd + OpenSSH-Win64-v10.0.0.0.msi sha256 ddec9c53… + ZeroTier One.msi sha256 42514072…, firma ZeroTier Inc. valida); locale daitarn D:\Sorgenti\AI-OS\data\tmp\tmf-fiera-chiavettaCOSA FA LO SCRIPT: utente locale admin adriano (password che non scade), ZeroTier install + join, OpenSSH Server da MSI, chiave adriano@dev con from=10.5.0.45, PasswordAuthentication no, DefaultShell powershell, firewall 22+ping solo da 10.5.0.45, niente standby a corrente; stampa nodo ZT e impronta host.
PROVA: parse PowerShell della parte #PS# → 0 errori; file ASCII CRLF. Non eseguito su PC reale.
PROSSIMO: Adriano lancia primo-accesso.cmd → autorizzare il nodo sul controller goldrake (rete 37354b864742e173, IP fisso proposto 10.5.0.11), alias ssh TMF-FIERA su daitarn, poi installazione TieMeasureFlow-setup 3.0.0-rc3 + licenza sull'impronta.
ESITO: fatto
RIF: gitea:Adriano/TieMeasureFlow#72, gitea:Adriano/TieMeasureFlow#109
COSA: 28/10 10:10-10:18, PC fiera DESKTOP-RABEHJJ via ZeroTier (hotspot telefono): Prova del wizard sbloccata, TMF riavviato.
FILE: C:\Tielogic\TieMeasureFlow-src\vision-engine-version.txt — creato, 06b549a25d0bff7504a0e8bbbd233fd5fc05652a (difetto del repo in #109).
TRAPPOLA: appena il PC è andato online, Smart App Control è passato da valutazione ad attivo (VerifiedAndReputablePolicyState=1) e ha bloccato build\venv313\Scripts\python.exe (CodeIntegrity 3033/3077): TMF non ripartiva. Spento con l'ok di Adriano: VerifiedAndReputablePolicyState=0 + CiTool --refresh, senza riavvio; irreversibile senza reinstallare Windows. Ogni PC Windows 11 nuovo che fa girare python da venv o exe Nuitka non firmati: SAC va spento prima della consegna.
PROVA: task tielogic-avvia-tmf → 4 porte su in 37 s, python in sessione 1 (Fiera); GET :8100/health → engine_version 06b549a…; GET :8780/ → 200.
MANCA: Prova del wizard cliccata davanti al PC (Adriano).
Soluzione
ESITO: fatto (fiera svolta; chiusa su richiesta di Adriano del 06/11/2026: «chiudi quelle della fiera»)
RIF: gitea:Adriano/TieMeasureFlow#72; scheda AI-OS projects/azienda/clienti/Ricerca_e_Misure/TieMeasureFlow/progetto.md, voci 24/10-04/11
COSA: demo TMF alla fiera A&T Vicenza 27-29/10/2026 sul PC DESKTOP-RABEHJJ, TMF da sorgente con camera ITALA sul bench telecentrico, calibrazione a scacchiera densa, ricette da DXF e calibro.
FATTO:
VERIFICATO: origin/V3.0.0
8c361c1contiene scripts/camera_service.py, scripts/calibrazione.py (calibra_scacchiera_densa:377), scripts/seed_fiera.py, src/vision/costruttori.py, POST /recipes/dxf-compare (src/vision_worker/main.py:242);8c361c1gira sulla demo tieflow.tielogic.xyz dal 06/11 (#126).PRESUNTO: il criterio completo (pezzo Sider → Acquisisci → PM + DXF + quote in statistica + calibro nella stessa ricetta) non risulta registrato come prova unica: in vision_results della ricetta DXF non c'erano righe il 28/10.
DOPO: 04/11 il PC fiera è diventato Sacet001 (SACET); dati in wasabi://AI-OS/projects/azienda/clienti/Ricerca_e_Misure/TieMeasureFlow/fiera-vicenza/.
APERTE ALTROVE: #109 (archivio da sorgente), #3 (agente di stazione, attesa:cliente).