Architettura
Come tutte le parti del sistema comunicano tra loro
Tempmonh è un sistema distribuito: l'intelligenza non si trova in un'unica macchina, ma è suddivisa tra la camera fisica, un server intermedio e un'app web. Ogni componente ha un ruolo preciso e comunica con gli altri attraverso protocolli standard aperti.
In parole semplici
ESP32 — Il cervello della camera
L'ESP32 è un microcontrollore dual-coreprogettato da Espressif Systems specificamente per applicazioni IoT. Integra nel singolo chip il processore, la memoria, il modulo Wi-Fi 802.11 b/g/n e il Bluetooth — eliminando la necessità di moduli separati. Un core gestisce la comunicazione di rete (MQTT, Wi-Fi), l'altro legge i sensori e controlla gli attuatori in tempo reale.
Ruolo nel sistema
MQTT & Mosquitto — La rete postale
MQTT (Message Queuing Telemetry Transport) è un protocollo di messaggistica leggero, progettato per dispositivi con risorse limitate e reti instabili. Funziona con tre componenti: il publisher (chi pubblica il dato), il subscriber (chi lo riceve) e il broker(l'intermediario). Mosquittoè il broker open-source più usato al mondo per IoT: riceve i messaggi dall'ESP32 e li distribuisce a tutti i client iscritti — Telegraf, la dashboard Next.js — in millisecondi.
La comunicazione MQTT è full duplex: ogni client può pubblicare e sottoscriversi contemporaneamente, senza dover aspettare il turno dell'altro. Nel nostro sistema questo significa che l'ESP32 pubblica continuamente i dati dei sensori e allo stesso tempo rimane in ascolto sui topic di comando — pronti a ricevere istruzioni dalla dashboard in qualsiasi momento, senza che le due direzioni si ostacolino a vicenda.
Regola critica — QoS dei comandi
- QoS 0— "fire and forget": il messaggio viene inviato una volta sola, senza conferma. Se la rete cade in quel momento, il messaggio è perso.
- QoS 1— "at least once": il broker conferma la ricezione. Se la conferma non arriva, il messaggio viene reinviato automaticamente fino a successo garantito.
- QoS 2— "exactly once": consegna garantita esattamente una volta, con un handshake a quattro fasi.
I messaggi di telemetria (temperatura, umidità) possono usare QoS 0: se un dato va perso, quello successivo arriva dopo 2 secondi. I comandi inviati da Next.js verso l'ESP32 — accensione heating pad, velocità ventole, contenuto display — sono operazioni critiche e devono usare almeno QoS 1. Un comando perso potrebbe lasciare la camera in uno stato sbagliato senza che nessuno se ne accorga.
Telegraf + InfluxDB 2 — Il diario storico
Telegraf — il bridge intelligente
Telegraf è un agente di raccolta dati scritto in Go, sviluppato da InfluxData. La sua architettura a plugin lo rende estremamente flessibile: si configura per sottoscriversi ai topic MQTT di Mosquitto tramite il plugin mqtt_consumer, parsifica i payload JSON, e li riscrive in InfluxDB tramite il plugin influxdb_v2. Non richiede codice: solo un file di configurazione.
InfluxDB 2 — il database delle serie temporali
InfluxDB è un database progettato appositamente per dati con marca temporale. A differenza di un database SQL tradizionale, ottimizza l'archiviazione e le query su sequenze di valori nel tempo: "dammi la temperatura media ogni 5 minuti nelle ultime 24 ore" è una query nativa, velocissima anche con milioni di punti. Usa il linguaggio Flux per query analitiche avanzate e supporta retention policy (cancellazione automatica dei dati più vecchi di N giorni).
Next.js — La dashboard
La dashboard è costruita con Next.js 15 (App Router) ed è divisa in due modalità di accesso ai dati:
Sicurezza