Dal Cin Eva e Di Bert Giacomo
Panoramica
Questo progetto implementa un sistema di monitoraggio per una casetta dell'acqua utilizzando diversi sensori per raccogliere dati come la temperatura dell'acqua, il livello dell'acqua e lo stato del filtro. I dati vengono raccolti dai sensori, inviati a un server e memorizzati in un database InfluxDB per ulteriori elaborazioni e analisi.
Architettura
Il sistema è composto da due parti principali:
- Client (Lato Casetta dell'Acqua): Raccoglie i dati dai sensori e li invia al server.
- Server: Riceve i dati dal client, li elabora e li memorizza nel database InfluxDB.
-
Inizio
- L'applicazione inizia.
-
Inizializzazione Sensori
- Creazione degli oggetti sensori:
WaterTempSensorWaterLevelSensorFilterSensor
- Creazione degli oggetti sensori:
-
Loop Infinito
- L'applicazione entra in un ciclo infinito.
-
Ciclo su ciascun sensore
- Per ciascun sensore (ad esempio
WaterTempSensor,WaterLevelSensor,FilterSensor):- Lettura Dato Sensore
- Ogni sensore raccoglie il dato (ad esempio temperatura per
WaterTempSensor, livello dell'acqua perWaterLevelSensor, stato del filtro perFilterSensor).
- Ogni sensore raccoglie il dato (ad esempio temperatura per
- Creazione JSON
- Il dato raccolto viene serializzato in formato JSON.
- Lettura Dato Sensore
- Per ciascun sensore (ad esempio
-
Invio Dato al Server
- I dati del sensore vengono inviati al server tramite HTTP POST all'endpoint configurato.
-
Pausa di 1 Secondo
- L'applicazione aspetta un secondo prima di passare al sensore successivo.
-
Ripeti per tutti i sensori
- Continua il ciclo per ciascun sensore finché l'applicazione non viene fermata.
-
Inizio
- Il server inizia e ascolta sulla porta 8011.
-
Ricezione Dati HTTP
- Il server riceve una richiesta HTTP POST dall'applicazione lato casetta all'endpoint
/water_coolers/:id.
- Il server riceve una richiesta HTTP POST dall'applicazione lato casetta all'endpoint
-
Parsing Dati
- I dati JSON inviati dal client vengono analizzati:
iddella casetta dell'acqua.Namedel sensore (ad esempio "temperature", "waterLevel", "filterStatus").Valuedel dato raccolto.
- I dati JSON inviati dal client vengono analizzati:
-
Elaborazione Dati
- I dati vengono elaborati dalla funzione
insertWaterCoolerData.
- I dati vengono elaborati dalla funzione
-
Inserimento nel Database InfluxDB
- I dati vengono inseriti nel database InfluxDB, utilizzando un tag basato sull'ID della casetta (
water_coolers#<id>), e un campo che rappresenta il sensore (es.temperature,waterLevel,filterStatus).
- I dati vengono inseriti nel database InfluxDB, utilizzando un tag basato sull'ID della casetta (
-
Risposta al Client
- Dopo aver inserito correttamente i dati nel database, il server risponde al client con un codice di stato 200 (successo).
-
Errore
- Se si verifica un errore durante l'inserimento dei dati, il server invia un codice di stato 500 (errore interno).
-
Fine
- La richiesta è stata completata, il server ritorna in ascolto per nuove richieste.
I dati inviati dall'applicazione al server sono in formato JSON. Di seguito è un esempio di payload JSON:
{
"Name": "sensorName",
"Value": sensorValue
}Nel caso di WaterTempSensor, il payload JSON potrebbe apparire come segue:
{
"Name": "temperature",
"Value": 23
}
