Interfacciamento client-server con il simulatore di propagazione del calore Energy2D
by Nicolò Fasulo
Energy2D (E2D) è un simulatore di propagazione del calore sviluppato dal Dr. Charles Xie, fisico presso il Concord Consortium. E2D è scritto in linguaggio Java ed è completamente open-source. I modelli per le simulazioni sono salvati in file con formato e2d
, basato su formato XML, e permettono di simulare il comportamento di entità quali:
- entità di forma e proprietà chimico-fisiche (densità, conducibilità termica, calore specifico, ecc.) arbitrarie, a temperatura variabile o costante;
- sorgenti di calore, di cui è possibile specificare dimensioni e densità di potenza;
- termometri, anemometri, sensori di flusso di calore;
- altri tipi di entità (alberi, nuvole, ventole).
Inoltre, è possibile simulare il trascorrere del tempo, il ciclo giorno/notte e l’irraggiamento del sole relativamente alla sua posizione durante la giornata.
Obiettivi
L’obiettivo della tesi consiste nel creare un modello in E2D che permetta di simulare la distribuzione del calore in un edificio. Inoltre, si desidera estendere il simulatore dotandolo di una interfaccia client-server che permetta, tramite il client, di eseguire la simulazione, raccoglierne i risultati e visualizzarli.
Il modello
Il modello di edificio utilizzato nella simulazione rappresenta un condominio di quattro piani, con quattro appartamenti per piano. Le dimensioni degli appartamenti sono di circa 8 m di larghezza e 4.5 m di altezza. All’interno di ciascun appartamento si trova una sorgente di calore che modellizza l’insieme delle tecnologie utilizzate per riscaldare le singole stanze, ad esempio i termosifoni, ed un termometro per la misurazione della temperatura interna.
Per semplicità sono stati utilizzati solo tre materiali, con le seguenti caratteristiche:
- Muri: conducibilità termica 2.3 W/(m*°C), calore specifico 1000 J/(kg*°C), densità 2300 kg/m^3;
- Tetto: conducibilità termica 0.8 W/(m*°C), calore specifico 800 J/(kg*°C), densità 700 kg/m^3;
- Finestre: conducibilità termica 1 W/(m*°C), calore specifico 840 J/(kg*°C), densità 2500 kg/m^3.
La densità di potenza delle sorgenti di calore è 150 W/m^3.
Il server
Il server è stato realizzato innestando il codice di interfacciamento all’interno del simulatore E2D esistente.
Il codice è scritto scritto in Java, dal momento che Energy2D è stato implementato in Java.
Per la comunicazione viene utilizzato il protocollo UDP.
Il ruolo del server è quello di ricevere i comandi da eseguire, sotto forma di messaggi testuali, e restituirne l’esito al client.
A questo scopo è stato utilizzato il pattern Command della GoF: il server riceve la stringa contenente il comando e la passa alla classe Processor
, che riconosce il comando da eseguire con gli eventuali argomenti, mentre tramite la classe Executor
vengono effettivamente eseguite le operazioni corrispondenti ai diversi comandi (che devono obbligatoriamente implementare l’interfaccia ICommand
).
Il client
Il client è stato implementato in linguaggio Python e permette di effettuare una simulazione della programmazione settimanale del riscaldamento dei diversi appartamenti. La programmazione della temperatura viene configurata tramite un file in formato JSON con il seguente formato:
All’interno del file, è presente un campo THERMOMETER_X
per ciascun appartamento (es: THERMOMETER23
rappresenta il terzo appartamento da sinistra del secondo piano).
E’ possibile impostare la deadband del termostato e la temperatura desiderata in gradi Celsius.
La programmazione settimanale è costituita da un dizionario con 7 chiavi (da 0 a 6, corrispondenti ai giorni della settimana), i cui valori sono anch’essi dizionari con 24 chiavi ciascuno (da 0 a 23), il cui valore corrisponde alla temperatura desiderata a quell’ora del giorno.
Il client è composto da tre diversi script:
- init-thermostats.py: permette di inizializzare il file JSON, recuperando i nomi di tutti i termometri del modello ed assegnando ad ognuno di essi una programmazione di default (SP: 20°C, DB: 0.5°C);
- client.py: avvia la vera e propria simulazione, la cui durata gli viene passata come argomento, raccogliendo i dati con una frequenza arbitraria. I dati corrispondono alle temperature rilevate dai diversi termometri ad ogni campionamento e vengono salvati in un file CSV. Grazie alle temperature raccolte, lo script invierà comandi per spegnere/accendere le sorgenti di calore in modo da raggiungere e mantenere costantemente la temperatura desiderata (controllo ON/OFF);
- data-reader.py: permette di visualizzare i dati salvati durante la simulazione nel file CSV tramite grafici. In particolare, è possibile vedere l’andamento della temperatura di ogni appartamento, l’andamento della temperatura esterna, il setpoint e se la sorgente di calore è accesa o spenta.
Conclusioni
In questo progetto è stato ottenuto uno strumento semplice e personalizzabile per la valutazione dell’efficienza energetica di un edificio. Inoltre, grazie all’utilizzo del pattern Command è possibile implementare nuovi comandi con facilità per estendere le funzionalità del simulatore a seconda delle necessità.