HomeDomoticaCollector
Un hub su Raspberry Pi che raccoglie i dati di tutti i dispositivi di casa — fotovoltaico, meteo, colonnina EV, tende, termostati, climatizzatori — li archivia e permette di monitorare e controllare tutto da un bot Telegram, una dashboard web in LAN e con la voce tramite Alexa.
L’idea
Casa mia è piena di dispositivi “smart”, ognuno con la sua app e il suo portale: fotovoltaico, stazione meteo, colonnina per l’auto elettrica, tende da sole, termostati, climatizzatori. Volevo un unico posto per vedere tutto, tenerne lo storico e automatizzarne il comportamento. Così ho costruito un piccolo hub che gira su un Raspberry Pi sempre acceso.
Cosa fa
Interroga a intervalli regolari i vari sistemi di casa e ne salva le letture in un database SQLite:
- Fotovoltaico e batteria — produzione, consumo, stato di carica, flussi di energia.
- Stazione meteo — temperatura, umidità, vento, pioggia, pressione, UV.
- Colonnina EV — stato ed energia erogata (protocollo OCPP).
- Tende da sole — stato e posizione (Somfy TaHoma).
- Termostati — temperatura, setpoint e modalità per ogni zona.
- Climatizzatori — stato e controllo (Sensibo).
E offre tre modi per interagire:
- Bot Telegram con menu a pulsanti — stato di tutto e controllo diretto: apri/chiudi le tende, imposta la modalità dei termostati, accendi/regola i climatizzatori, avvia/ferma la ricarica, attiva/disattiva le automazioni.
- Dashboard web in LAN — vista in sola lettura delle ultime letture e dei grafici storici, con tema chiaro/scuro.
- Controllo vocale con Alexa — una skill personalizzata per chiedere lo stato, comandare le tende e lanciare “scene”.
Il motore delle automazioni
Il cuore “intelligente” è un motore di regole definite nella configurazione e valutate dopo ogni lettura meteo. Esempi: chiudere le tende in caso di vento o pioggia, mettere i termostati in antigelo, accendere il clima quando ci sono le condizioni giuste.
Le regole supportano condizioni multiple in AND su fonti diverse (meteo, fotovoltaico, termostati), finestre temporali, e due livelli di priorità: le regole critiche (es. vento forte) possono scattare più volte e bloccano per la giornata quelle normali sugli stessi dispositivi.
Come è fatto
- App Python (asincrona) su Raspberry Pi 4, avviata come servizio systemd con riavvio automatico e attesa della rete.
- Collector modulari, uno per famiglia di dispositivi, con una classe base comune; uno scheduler interroga ciascuno al proprio intervallo. Le letture finiscono in SQLite con migrazioni automatiche.
- Bot, dashboard e Alexa leggono le stesse tabelle: nessuna raccolta duplicata.
Dettagli di ingegneria
- Cloudflare Tunnel espone l’endpoint HTTPS per Alexa senza aprire porte sul router: l’IP del Pi resta privato e il TLS lo gestisce Cloudflare. La dashboard, al contrario, resta volutamente solo in LAN.
- Robustezza: le funzioni opzionali (Alexa, dashboard) sono protette in modo che un errore non faccia mai cadere il collector; un watchdog di rete riavvia il Pi dopo una perdita di connettività prolungata.
- Soluzioni pragmatiche: dove
urllibandava in timeout sul Pi ho usatocurlcome sottoprocesso; i token OAuth vengono rinnovati e salvati tra un riavvio e l’altro. - Gestione delle stranezze dei dispositivi (es. una tenda cablata al contrario: apertura e chiusura scambiate via software).
Stack
Python (async) · Raspberry Pi 4 · SQLite · Telegram Bot · aiohttp · OCPP · Cloudflare Tunnel · systemd
Prossimi passi
- Passare SQLite in modalità WAL se dovesse comparire contesa in scrittura.
- Aggiungere altre zone termostato.
- Ampliare gli intent di Alexa.