test-realistic-solutions.pyβ’5.92 kB
import sys
import time
import os
import tempfile
import json
sys.path.append(r"H:\Program Files\PTV Vision\PTV Visum 2025\Exe")
print("=== TEST SOLUZIONI ALTERNATIVE REALISTICHE ===")
print("Visum GUI aperto, COM non accessibile")
print("Testing workarounds...\n")
# SOLUZIONE 1: VAL Script Export
print("π SOLUZIONE 1: VAL Script per Export Dati")
print("Creo script VAL che Visum puΓ² eseguire per esportare dati...")
val_script = '''
// VAL Script per export dati rete
// Script generato da MCP per analisi
// Export basic network statistics
Com AddProcedureStep("ExportNetworkStats", 1)
// Define output file
VISUM_MCP_OUTPUT = "H:\\visum-thinker-mcp-server\\mcp_export.json"
// Get network data
nodes_count = Nodes.Count
links_count = Links.Count
zones_count = Zones.Count
// Export to temp file as JSON-like format
PUTFILE(VISUM_MCP_OUTPUT) "{"
PUTFILE(VISUM_MCP_OUTPUT) '"timestamp": "' + TIMESTR(NOW) + '",'
PUTFILE(VISUM_MCP_OUTPUT) '"nodes": ' + STR(nodes_count) + ','
PUTFILE(VISUM_MCP_OUTPUT) '"links": ' + STR(links_count) + ','
PUTFILE(VISUM_MCP_OUTPUT) '"zones": ' + STR(zones_count) + ','
// Sample link data
PUTFILE(VISUM_MCP_OUTPUT) '"sample_links": ['
sample_count = 0
FOR link IN Links DO
IF sample_count < 5 THEN
PUTFILE(VISUM_MCP_OUTPUT) '{"no": ' + STR(link\No) + ', "length": ' + STR(link\Length) + ', "lanes": ' + STR(link\NumLanes) + '}'
sample_count = sample_count + 1
IF sample_count < 5 THEN PUTFILE(VISUM_MCP_OUTPUT) ','
ENDIF
ENDFOR
PUTFILE(VISUM_MCP_OUTPUT) ']'
PUTFILE(VISUM_MCP_OUTPUT) '}'
// Signal completion
PUTFILE("H:\\visum-thinker-mcp-server\\mcp_ready.flag") "EXPORT_COMPLETE"
'''
val_file = "h:\\visum-thinker-mcp-server\\mcp_network_export.val"
with open(val_file, 'w') as f:
f.write(val_script)
print(f"β
Script VAL creato: {val_file}")
print("π ISTRUZIONI PER UTENTE:")
print("1. In Visum GUI: vai a 'Procedures' > 'Execute VAL Script'")
print("2. Carica e esegui: mcp_network_export.val")
print("3. Lo script esporterΓ i dati per MCP")
# SOLUZIONE 2: File Watcher per modifiche progetto
print(f"\nπ SOLUZIONE 2: File Watcher")
project_file = r"H:\go\italferr2025\Campoleone\100625_Versione_base_v0.3_sub_ok_priv.ver"
if os.path.exists(project_file):
stat = os.stat(project_file)
mod_time = time.ctime(stat.st_mtime)
size_mb = stat.st_size / (1024 * 1024)
print(f"π File progetto: {os.path.basename(project_file)}")
print(f" Ultima modifica: {mod_time}")
print(f" Dimensione: {size_mb:.1f} MB")
# Simula monitoraggio
print("π Monitoraggio modifiche...")
time.sleep(2)
new_stat = os.stat(project_file)
if new_stat.st_mtime != stat.st_mtime:
print("β
File modificato - ricaricamento necessario")
else:
print("β
File non modificato - dati consistenti")
# SOLUZIONE 3: Temp Export Approach
print(f"\nπ SOLUZIONE 3: Export Temporaneo")
temp_dir = tempfile.gettempdir()
export_file = os.path.join(temp_dir, "visum_mcp_export.txt")
print(f"π Directory temp: {temp_dir}")
print("π‘ STRATEGIA:")
print("1. Utente esporta dati da Visum GUI in formato standard")
print("2. MCP legge file esportato")
print("3. Analisi su dati reali e aggiornati")
print("4. Utente puΓ² esportare quando necessario")
# SOLUZIONE 4: Clipboard Integration
print(f"\nπ SOLUZIONE 4: Clipboard Data Exchange")
try:
import win32clipboard
# Test clipboard access
win32clipboard.OpenClipboard()
if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_TEXT):
data = win32clipboard.GetClipboardData()
print(f"π Clipboard corrente: {data[:100] if data else 'Empty'}...")
else:
print("π Clipboard vuoto")
win32clipboard.CloseClipboard()
print("π‘ WORKFLOW CLIPBOARD:")
print("1. Utente seleziona dati in Visum e copia (Ctrl+C)")
print("2. MCP legge automaticamente da clipboard")
print("3. Parsing e analisi dati copiati")
print("4. Risultati immediati")
except ImportError:
print("β win32clipboard non disponibile")
except Exception as e:
print(f"β Clipboard test fallito: {e}")
# SOLUZIONE 5: Socket/Named Pipe Communication
print(f"\nπ SOLUZIONE 5: Custom IPC")
import socket
try:
# Test socket locale
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 0)) # Porta automatica
port = sock.getsockname()[1]
sock.listen(1)
print(f"π Socket MCP creato su porta: {port}")
print("π‘ STRATEGIA IPC:")
print("1. MCP avvia server socket locale")
print("2. Script VAL in Visum invia dati via HTTP/socket")
print("3. Comunicazione bidirezionale real-time")
print("4. Dati sempre sincronizzati")
sock.close()
except Exception as e:
print(f"β Socket test fallito: {e}")
print(f"\n" + "="*60)
print("π― MIGLIORI SOLUZIONI ALTERNATIVE")
print("="*60)
print("\nπ₯ TOP 1: VAL Script Export")
print("β
Accesso completo ai dati Visum")
print("β
Dati sempre aggiornati (real-time)")
print("β
Performance eccellenti")
print("β
Controllo completo utente")
print("β Richiede azione utente per export")
print("\nπ₯ TOP 2: File Watcher + Auto Export")
print("β
Monitoring automatico modifiche")
print("β
Trigger export quando necessario")
print("β
Dati sincronizzati")
print("β Setup piΓΉ complesso")
print("\nπ₯ TOP 3: Clipboard Integration")
print("β
Immediato e semplice")
print("β
Workflow naturale (Ctrl+C)")
print("β
Zero setup")
print("β Limitato ai dati visualizzati")
print(f"\nπ‘ RACCOMANDAZIONE:")
print("Combinazione VAL Script + File Watcher")
print("- Script VAL per export completo")
print("- File watcher per trigger automatico")
print("- Migliore compromesso efficienza/usabilitΓ ")
print(f"\n=== ANALISI COMPLETATA ===")
print("Scegliamo e implementiamo la soluzione migliore?")