← Tutti i progetti
Attivo maggio 2026

Bollette Auto

Un sistema self-hosted che controlla la posta, scarica automaticamente le bollette dai portali dei fornitori, le archivia sul NAS di casa e ne estrae i dati in un cruscotto web — con notifiche su Telegram.

PythonDockerPlaywrightFastAPISQLiteSelf-hosted

Il problema

Ogni mese la stessa trafila: arriva l’email del fornitore, login al portale, scarica il PDF, rinominalo, salvalo nella cartella giusta. Moltiplicato per luce, gas, telefono e internet diventa un lavoretto noioso e ripetitivo — esattamente il genere di cosa che un computer dovrebbe fare al posto mio.

Cosa fa

Bollette Auto gira in background dentro un piccolo container Docker e, in autonomia:

  1. Controlla la posta via IMAP (Gmail e altre caselle) a intervalli regolari.
  2. Riconosce le email delle bollette in base al mittente.
  3. Scarica il PDF dal portale del fornitore.
  4. Archivia il file sul NAS con una struttura ordinata anno/FORNITORE/.
  5. Estrae i dati dal PDF e li salva in un database, per renderli consultabili.
  6. Notifica l’esito su Telegram — bolletta scaricata, oppure errore.

Come funziona

Il cuore del sistema è un ciclo di polling IMAP: per ogni casella parte un thread che controlla le nuove email, le smista al fornitore giusto e attiva lo scraper corrispondente. Il PDF scaricato passa all’archiviatore, che lo salva sul NAS (montato via CIFS) nella cartella dell’anno e del fornitore.

Due strategie di download

Design guidato dalla configurazione

Un unico file YAML descrive caselle email, fornitori, selettori e notifiche. La maggior parte dei fornitori si aggiunge senza toccare il codice; solo i portali “difficili” — single-page app con token in sessionStorage, API particolari — richiedono un piccolo scraper dedicato in Python.

Dai PDF al cruscotto

Le bollette non restano semplici PDF in una cartella. Ogni file viene analizzato (estrazione del testo con pdfplumber) per ricavarne importo, periodo, data della fattura, consumo e fornitore, e i dati confluiscono in un database SQLite.

Su questi dati gira un cruscotto web — un servizio a parte in FastAPI + Uvicorn, con frontend statico e grafici Chart.js:

I filtri (fornitore, anno, mese) sono globali e si mantengono passando da una scheda all’altra.

Attenzione alla sicurezza

Stack

Python · Playwright · IMAP · Docker · NAS Synology (CIFS) · Telegram Bot API

Cosa ho imparato