Centralina The One aperta, con i moduli di espansione etichettati: ingressi, GSM, controllo accessi, uscite, wireless.
Ottimizzazione performance

The One

Re-architettura domotica

1000+
Dispositivi target
WebSocket
Protocollo adottato
3
Parser protocollo
Local-first
Architettura

Panoramica

Il Problema

Tecnel MC gestiva un sistema domotico esistente che controllava luci, telecamere, sensori e accessi in una struttura con molti dispositivi. Funzionava, ma già con pochi dispositivi iniziava a collassare: latenza in salita, crash frequenti, server sotto sforzo costante. Il cliente aveva bisogno di arrivare a 1000+ dispositivi, ma con l'architettura esistente era impossibile.

L'analisi del codice ha rivelato la radice del problema: ogni dispositivo faceva polling HTTP ogni secondo per chiedere se c'erano aggiornamenti, anche quando non cambiava nulla. Con 200 dispositivi, questo significava 200 richieste al secondo in idle. Con 1000 sarebbero state 1000 richieste al secondo solo per stare fermi. Il server non reggeva, e il polling arrivava a buttare giù anche la rete internet dell'ufficio.

La Soluzione

Ho re-architettato il sistema partendo dal layer di comunicazione. Ho sostituito il polling HTTP con WebSocket persistenti: i dispositivi aprono una connessione e ricevono notifiche solo quando c'è qualcosa da comunicare. Il carico in idle è sceso quasi a zero. Per ridurre ulteriormente il traffico ho introdotto serializzazione binaria custom al posto del JSON: i messaggi di stato dei dispositivi si comprimono dell'80%.

Ogni produttore di dispositivi IoT usa protocolli proprietari diversi. Ho scritto parser custom per ogni protocollo presente nella struttura, con un layer di astrazione che li espone tutti con la stessa interfaccia verso il frontend. Redux Toolkit gestisce lo stato globale di ogni dispositivo in modo prevedibile, con differenze incrementali invece di sostituzioni complete.

L'architettura è ibrida per garantire continuità: Redis locale gestisce lo stato in tempo reale e i comandi immediati (se internet cade, la struttura funziona ancora), MongoDB cloud sincronizza log e configurazioni e gestisce l'accesso remoto. Un sistema di health monitoring con auto-recovery rileva dispositivi offline o in errore e tenta il ripristino automatico prima di allertare il team. Ho aggiunto anche la gestione di più centrali e un sistema di inviti con autorizzazioni temporanee.

Il Risultato

Il crash da burst di riconnessioni è stato eliminato con backoff esponenziale sul client Socket.IO. Tre parser di protocollo sono stati scritti e integrati. Ho rifatto per intero il sistema esistente con WebSocket, Redis e MongoDB e sono andato oltre quanto richiesto. Il progetto è stato consegnato fino al punto concordato con il cliente.

Funzionalità chiave

  • Crash burst riconnessioni eliminato: backoff esponenziale sul client Socket.IO
  • 3 parser di protocollo custom scritti per integrare dispositivi di produttori diversi
  • Re-architettura WebSocket + Redis locale + MongoDB cloud, consegnata fino al punto concordato con il cliente
  • Gestione multi-centrale e inviti con autorizzazioni temporanee

Tecnologie usate

WebSocketRedisMongoDBRedux Toolkit