Files
matlab-python/src
alex 23c53cf747 Add comprehensive validation system and migrate to .env configuration
This commit includes:

1. Database Configuration Migration:
   - Migrated from DB.txt (Java JDBC) to .env (python-dotenv)
   - Added .env.example template with clear variable names
   - Updated database.py to use environment variables
   - Added python-dotenv>=1.0.0 to dependencies
   - Updated .gitignore to exclude sensitive files

2. Validation System (1,294 lines):
   - comparator.py: Statistical comparison with RMSE, correlation, tolerances
   - db_extractor.py: Database queries for all sensor types
   - validator.py: High-level validation orchestration
   - cli.py: Command-line interface for validation
   - README.md: Comprehensive validation documentation

3. Validation Features:
   - Compare Python vs MATLAB outputs from database
   - Support for all sensor types (RSN, Tilt, ATD)
   - Statistical metrics: max abs/rel diff, RMSE, correlation
   - Configurable tolerances (abs, rel, max)
   - Detailed validation reports
   - CLI and programmatic APIs

4. Examples and Documentation:
   - validate_example.sh: Bash script example
   - validate_example.py: Python programmatic example
   - Updated main README with validation section
   - Added validation workflow and troubleshooting guide

Benefits:
-  No Java driver needed (native Python connectors)
-  Secure .env configuration (excluded from git)
-  Comprehensive validation against MATLAB
-  Statistical confidence in migration accuracy
-  Automated validation reports

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-13 15:34:13 +02:00
..
2025-10-12 20:16:19 +02:00
2025-10-12 20:16:19 +02:00
2025-10-12 20:16:19 +02:00

Sensor Data Processing System - Python Version

Conversione dei moduli MATLAB per l'elaborazione dati dei sensori di monitoraggio geotecnico.

Descrizione

Questo sistema elabora dati provenienti da varie tipologie di sensori utilizzati per il monitoraggio strutturale e geotecnico:

  • RSN (Rockfall Safety Network): Reti di protezione caduta massi con sensori di accelerazione
  • Tilt: Inclinometri e tiltmetri biassiali per monitoraggio deformazioni
  • ATD (Automatic Data Acquisition): Estensimetri, fessurimetri, e altri sensori di spostamento

Struttura del Progetto

src/
├── common/                 # Moduli condivisi
│   ├── database.py        # Gestione connessioni e query MySQL
│   ├── config.py          # Caricamento parametri e configurazioni
│   ├── logging_utils.py   # Sistema di logging
│   └── validators.py      # Validazione e filtraggio dati
│
├── rsn/                   # Elaborazione RSN sensors
│   ├── main.py           # Entry point principale
│   ├── data_processing.py # Caricamento dati da DB
│   ├── conversion.py     # Conversione dati grezzi -> unità fisiche
│   ├── averaging.py      # Media temporale dati
│   ├── elaboration.py    # Elaborazione e calcolo spostamenti
│   ├── db_write.py       # Scrittura dati elaborati su DB
│   └── sensors/          # Moduli specifici per sensori
│
├── tilt/                  # Elaborazione inclinometri
│   ├── main.py           # Entry point principale
│   ├── geometry.py       # Calcoli geometrici (rotazioni, quaternioni)
│   ├── data_processing.py
│   └── sensors/
│
├── atd/                   # Elaborazione ATD sensors
│   ├── main.py           # Entry point principale
│   ├── star_calculation.py # Calcolo posizioni con metodo stella
│   ├── data_processing.py
│   ├── sensors/
│   └── reports/          # Generazione report
│
└── monitoring/            # Sistema monitoraggio e allerte
    ├── alerts.py         # Gestione soglie e allarmi
    ├── thresholds.py     # Configurazione soglie
    └── notifications.py  # Notifiche (SMS, email, sirene)

Installazione

Requisiti

  • Python 3.8+
  • MySQL 5.7+ o MariaDB 10.3+

Dipendenze Python

pip install numpy pandas mysql-connector-python scipy openpyxl

Configurazione Database

  1. Creare il file DB.txt nella directory di lavoro con le credenziali del database:
nome_database
username
password
com.mysql.cj.jdbc.Driver
jdbc:mysql://host:porta/database?useLegacyDatetimeCode=false&serverTimezone=Europe/Rome

Utilizzo

Elaborazione RSN

python -m src.rsn.main <ID_centralina> <catena>

Esempio:

python -m src.rsn.main CU001 A

Elaborazione Tilt

python -m src.tilt.main <ID_centralina> <catena>

Elaborazione ATD

python -m src.atd.main <ID_centralina> <catena>

Flusso di Elaborazione

1. Caricamento Dati

  • Connessione al database MySQL
  • Lettura parametri installazione
  • Caricamento dati di calibrazione
  • Query dati grezzi dai sensori

2. Conversione

  • Applicazione coefficienti di calibrazione
  • Conversione da ADC/conteggi a unità fisiche (gradi, mm, kN, ecc.)
  • Calcolo grandezze derivate (magnitudine accelerazione, ecc.)

3. Validazione

  • Controllo range temperature (-30°C / +80°C)
  • Verifica magnitudine vettori accelerazione
  • Despiking (rimozione valori anomali)
  • Forward fill per valori mancanti

4. Media Temporale

  • Media mobile su finestre configurabili (tipicamente 60 campioni)
  • Riduzione rumore
  • Downsampling per storage efficiente

5. Elaborazione

  • Calcolo spostamenti differenziali
  • Trasformazioni geometriche
  • Compensazione temperatura
  • Calcolo posizioni con metodo stella (per ATD)

6. Controllo Soglie

  • Verifica soglie di allarme (WARNING/CRITICAL)
  • Generazione eventi
  • Attivazione dispositivi di allarme

7. Scrittura Database

  • Salvataggio dati elaborati
  • Aggiornamento flag di errore
  • Logging operazioni

Tipi di Sensori Supportati

RSN (Rockfall Safety Network)

  • RSN Link: Sensori MEMS biassiali/triassiali per misura inclinazione
  • RSN Link HR: Versione alta risoluzione
  • Load Link: Celle di carico per misura tensione cavi
  • Trigger Link: Sensori on/off per eventi caduta massi
  • Shock Sensor: Accelerometri per rilevamento urti
  • Debris Link: Sensori per rilevamento debris flow

Tilt (Inclinometri)

  • TL/TLH/TLHR/TLHRH: Tilt Link (varie risoluzioni)
  • BL: Biaxial Link
  • PL: Pendulum Link
  • RL: Radial Link
  • IPL/IPLHR: In-Place Inclinometer
  • KL/KLHR: Kessler Link
  • PT100: Sensori temperatura

ATD (Automatic Data Acquisition)

  • 3DEL: Estensimetro 3D
  • MPBEL: Estensimetro multi-punto in foro
  • CrL/2DCrL/3DCrL: Fessurimetri 1D/2D/3D
  • WEL: Estensimetro a filo
  • PCL/PCLHR: Perimeter Cable Link
  • TuL: Tube Link
  • SM: Settlement Marker
  • LL: Linear Link

Calibrazione

I dati di calibrazione sono memorizzati nel database nella tabella sensor_calibration.

Formato tipico calibrazione lineare:

valore_fisico = gain * valore_grezzo + offset

Per sensori MEMS biassiali:

[gain_x, offset_x, gain_y, offset_y, gain_temp, offset_temp]

Sistema di Allerta

Il sistema monitora continuamente:

  1. Eventi singoli (SEL - Single Event Level): soglia per evento singolo significativo
  2. Eventi multipli (MEL - Multiple Event Level): soglia per somma eventi in finestra temporale
  3. Soglie statiche: valori massimi/minimi per ciascun sensore
  4. Trend: analisi tendenze temporali (opzionale)

Quando una soglia viene superata:

  • Viene registrato un alert nel database
  • Vengono inviate notifiche (email, SMS)
  • Si attivano dispositivi fisici (sirene, semafori)

Logging

Ogni elaborazione genera un file di log:

LogFile_<MODULO>-<ID_CENTRALINA>-<CATENA>-<DATA>-<ORA>.txt

Il log contiene:

  • Timestamp operazioni
  • Parametri caricati
  • Numero record elaborati
  • Errori e warning
  • Correzioni applicate ai dati
  • Tempo totale elaborazione

Gestione Errori

Il sistema applica diversi flag di errore ai dati:

  • 0: Dato valido
  • 0.5: Dato corretto automaticamente
  • 1: Dato invalido/mancante

Gli errori vengono propagati attraverso la pipeline di elaborazione e salvati nel database.

Performance

Ottimizzazioni implementate:

  • Uso di NumPy per operazioni vettoriali
  • Query batch per scrittura database
  • Caricamento incrementale (solo dati nuovi)
  • Caching file di riferimento per calcoli differenziali

Tempi tipici di elaborazione:

  • RSN chain (100 nodi, 1 giorno dati): ~30-60 secondi
  • Tilt chain (50 nodi, 1 giorno dati): ~20-40 secondi
  • ATD chain (30 nodi, 1 giorno dati): ~15-30 secondi

Migrazione da MATLAB

Principali differenze rispetto alla versione MATLAB:

  1. Indicizzazione: Python usa 0-based indexing invece di 1-based
  2. Array: NumPy arrays invece di matrici MATLAB
  3. Database: mysql-connector-python invece di MATLAB Database Toolbox
  4. Logging: Sistema logging Python invece di scrittura file diretta
  5. Configurazione: Caricamento via codice invece di workspace MATLAB

Sviluppo Futuro

Funzionalità in programma:

  • Interfaccia web per visualizzazione dati in tempo reale
  • API REST per integrazione con sistemi esterni
  • Machine learning per previsione anomalie
  • Sistema di report automatici PDF
  • Dashboard Grafana per monitoring
  • Supporto multi-database (PostgreSQL, InfluxDB)

Troubleshooting

Errore connessione database

Error connecting to database: Access denied for user

Soluzione: Verificare credenziali in DB.txt

Dati di calibrazione mancanti

No calibration data for node X, using defaults

Soluzione: Verificare tabella sensor_calibration nel database

Temperature fuori range

X temperature values out of valid range [-30.0, 80.0]

Questo è normale, il sistema corregge automaticamente usando valori precedenti validi.

Supporto

Per problemi o domande:

  • Controllare i file di log generati
  • Verificare configurazione database
  • Consultare documentazione codice (docstrings)

Licenza

Proprietario: [Nome Organizzazione] Uso riservato per scopi di monitoraggio geotecnico.

Autori

Conversione MATLAB → Python: [Data] Basato su codice MATLAB originale (2021-2024)