# Setup e Installazione Guida rapida per configurare e avviare il sistema di elaborazione dati sensori. ## Prerequisiti ### Sistema Operativo - Linux (consigliato: Ubuntu 20.04+, CentOS 8+) - macOS 10.15+ - Windows 10+ (con WSL2 consigliato) ### Software Richiesto - **Python 3.8+**: `python --version` - **pip**: Gestore pacchetti Python - **MySQL/MariaDB**: Database server (5.7+ / 10.3+) - **Git**: Version control (opzionale) ## Installazione ### 1. Clone/Download Repository ```bash cd /path/to/workspace # Se usando git: git clone cd matlab_func # Oppure scarica e estrai l'archivio ``` ### 2. Crea Virtual Environment (Consigliato) ```bash # Crea virtual environment python3 -m venv venv # Attiva virtual environment # Linux/macOS: source venv/bin/activate # Windows: venv\Scripts\activate ``` Dovresti vedere `(venv)` nel prompt. ### 3. Installa Dipendenze Python ```bash pip install --upgrade pip pip install -r requirements.txt ``` Questo installerà: - numpy - pandas - scipy - mysql-connector-python - openpyxl ### 4. Configura Database #### Opzione A: Copia File Configurazione ```bash cp DB.txt.example DB.txt nano DB.txt # oppure vim, code, etc. ``` Modifica con le tue credenziali: ``` nome_database username password com.mysql.cj.jdbc.Driver jdbc:mysql://host:porta/database?useLegacyDatetimeCode=false&serverTimezone=Europe/Rome ``` #### Opzione B: Crea Nuovo File ```bash cat > DB.txt << EOF ase_monitoring myuser mypassword com.mysql.cj.jdbc.Driver jdbc:mysql://192.168.1.100:3306/ase_monitoring?useLegacyDatetimeCode=false&serverTimezone=Europe/Rome EOF ``` ### 5. Verifica Connessione Database ```bash python -c " from src.common.database import DatabaseConfig, DatabaseConnection config = DatabaseConfig('DB.txt') with DatabaseConnection(config) as conn: print('✓ Database connection successful') " ``` Se vedi errori: - Verifica credenziali in DB.txt - Controlla che MySQL server sia raggiungibile - Verifica firewall rules - Testa connessione con: `mysql -h host -u user -p` ## Configurazione ### 1. Verifica Struttura Database Il database deve avere le seguenti tabelle (schema semplificato): ```sql -- Tabelle dati grezzi CREATE TABLE raw_rsn_data (...); CREATE TABLE raw_tilt_data (...); CREATE TABLE raw_atd_data (...); -- Tabelle dati elaborati CREATE TABLE elaborated_rsn_data (...); CREATE TABLE elaborated_tilt_data (...); CREATE TABLE elaborated_atd_data (...); -- Tabelle configurazione CREATE TABLE control_units (...); CREATE TABLE chain_nodes (...); CREATE TABLE sensor_calibration (...); CREATE TABLE installation_parameters (...); -- Tabelle monitoring CREATE TABLE sensor_alerts (...); CREATE TABLE alarm_devices (...); ``` **Nota**: Per schema completo, vedere documentazione database del progetto originale. ### 2. Verifica File Configurazione Sensori Per ATD con calcolo stella, verificare presenza file Excel: ``` -.xlsx ``` Esempio: `CU001-A.xlsx` ### 3. Configura Logging I log vengono salvati nella directory corrente. Per cambiarla: ```python # In codice chiamante from src.common.logging_utils import setup_logger logger = setup_logger( control_unit_id="CU001", chain="A", module_name="RSN", log_dir="/var/log/sensor_processing" # Directory personalizzata ) ``` ## Test Installazione ### Test 1: Import Moduli ```bash python << EOF from src.common.database import DatabaseConnection from src.rsn.main import process_rsn_chain from src.tilt.main import process_tilt_chain from src.atd.main import process_atd_chain print("✓ All imports successful") EOF ``` ### Test 2: Esegui Esempi ```bash python example_usage.py ``` Output atteso: ``` ╔==========================================================╗ ║ Sensor Data Processing System - Python Examples ║ ╚==========================================================╝ [... vari test ...] Summary ============================================================ ✓ PASS: Data Validation ✓ PASS: Logging Setup ✓ PASS: Database Connection Total: 3/3 examples passed ``` ### Test 3: Elaborazione Dati Reali ```bash # RSN python -m src.rsn.main CU001 A # Tilt python -m src.tilt.main CU001 B # ATD python -m src.atd.main CU001 C ``` Verifica: 1. File log creati: `LogFile_---*.txt` 2. Dati scritti nel database 3. Nessun errore critico nei log ## Configurazione Produzione ### 1. Variabili d'Ambiente Invece di DB.txt, usa variabili d'ambiente: ```bash export DB_HOST="192.168.1.100" export DB_PORT="3306" export DB_NAME="ase_monitoring" export DB_USER="sensor_user" export DB_PASSWORD="securepassword" ``` Modifica `common/database.py` per leggere env vars: ```python import os class DatabaseConfig: def __init__(self): self.config = { 'database': os.getenv('DB_NAME'), 'user': os.getenv('DB_USER'), 'password': os.getenv('DB_PASSWORD'), # ... } ``` ### 2. Systemd Service (Linux) Crea `/etc/systemd/system/sensor-rsn@.service`: ```ini [Unit] Description=Sensor RSN Processing for %i After=network.target mysql.service [Service] Type=oneshot User=sensor WorkingDirectory=/opt/sensor_processing Environment="PYTHONUNBUFFERED=1" ExecStart=/opt/sensor_processing/venv/bin/python -m src.rsn.main %i A StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target ``` Attiva: ```bash sudo systemctl daemon-reload sudo systemctl enable sensor-rsn@CU001.service sudo systemctl start sensor-rsn@CU001.service sudo systemctl status sensor-rsn@CU001.service ``` ### 3. Cron per Elaborazione Periodica ```bash crontab -e ``` Aggiungi: ```cron # Elabora RSN ogni ora 0 * * * * cd /opt/sensor_processing && /opt/sensor_processing/venv/bin/python -m src.rsn.main CU001 A >> /var/log/sensor/rsn.log 2>&1 # Elabora Tilt ogni 6 ore 0 */6 * * * cd /opt/sensor_processing && /opt/sensor_processing/venv/bin/python -m src.tilt.main CU001 B >> /var/log/sensor/tilt.log 2>&1 # Elabora ATD una volta al giorno alle 02:00 0 2 * * * cd /opt/sensor_processing && /opt/sensor_processing/venv/bin/python -m src.atd.main CU001 C >> /var/log/sensor/atd.log 2>&1 ``` ### 4. Monitoring con Supervisor Installa supervisor: ```bash sudo apt-get install supervisor # Ubuntu/Debian ``` Crea `/etc/supervisor/conf.d/sensor-processing.conf`: ```ini [program:sensor-rsn-cu001] command=/opt/sensor_processing/venv/bin/python -m src.rsn.main CU001 A directory=/opt/sensor_processing user=sensor autostart=true autorestart=true stderr_logfile=/var/log/sensor/rsn-cu001.err.log stdout_logfile=/var/log/sensor/rsn-cu001.out.log ``` Ricarica: ```bash sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl status ``` ### 5. Docker (Opzionale) Crea `Dockerfile`: ```dockerfile FROM python:3.9-slim WORKDIR /app # Installa dipendenze COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copia codice COPY src/ ./src/ COPY DB.txt . # Entry point ENTRYPOINT ["python", "-m"] CMD ["src.rsn.main", "CU001", "A"] ``` Build e run: ```bash docker build -t sensor-processing . docker run -d --name rsn-cu001 sensor-processing ``` ## Troubleshooting ### Problema: ModuleNotFoundError ``` ModuleNotFoundError: No module named 'src' ``` **Soluzione**: ```bash # Assicurati di essere nella directory corretta cd /path/to/matlab_func # Aggiungi al PYTHONPATH export PYTHONPATH="${PYTHONPATH}:$(pwd)" # Oppure installa come package pip install -e . ``` ### Problema: MySQL Connection Refused ``` Error 2003: Can't connect to MySQL server ``` **Soluzioni**: 1. Verifica MySQL in esecuzione: `sudo systemctl status mysql` 2. Controlla bind-address in `/etc/mysql/mysql.conf.d/mysqld.cnf` 3. Verifica firewall: `sudo ufw allow 3306` 4. Testa connessione: `telnet host 3306` ### Problema: Permission Denied per log files ``` PermissionError: [Errno 13] Permission denied: 'LogFile_...' ``` **Soluzioni**: 1. Crea directory log: `mkdir -p /var/log/sensor && chmod 755 /var/log/sensor` 2. Cambia ownership: `sudo chown sensor:sensor /var/log/sensor` 3. Oppure usa directory home: `log_dir="~/sensor_logs"` ### Problema: Dati non trovati ``` No data found for unit CU001, chain A ``` **Verifiche**: 1. Controlla database: `SELECT COUNT(*) FROM raw_rsn_data WHERE IDcentralina='CU001'` 2. Verifica date iniziali nella configurazione 3. Controlla log per errori di query ## Performance Tuning ### 1. Batch Size Per grandi volumi di dati: ```python # In db_write.py, aumenta batch size BATCH_SIZE = 10000 # invece di 1000 ``` ### 2. NumPy Threads ```bash export OMP_NUM_THREADS=4 export MKL_NUM_THREADS=4 ``` ### 3. MySQL Tuning In `/etc/mysql/mysql.conf.d/mysqld.cnf`: ```ini [mysqld] innodb_buffer_pool_size = 2G max_allowed_packet = 64M bulk_insert_buffer_size = 256M ``` ## Supporto ### Log Files - Controllare sempre i log file generati - Livello di log regolabile in `logging_utils.py` ### Debug Mode ```bash # Attiva logging verbose export LOG_LEVEL=DEBUG python -m src.rsn.main CU001 A ``` ### Contatti - Documentazione: [src/README.md](src/README.md) - Migration Guide: [MIGRATION_GUIDE.md](MIGRATION_GUIDE.md) - Issue tracker: [repository issues] --- **Data setup**: 2025-10-12 **Versione**: 1.0 **Python richiesto**: 3.8+