Skip to content

Repository files navigation

HomeAssistant-Contatore

Unofficial meta-integration for Italian electricity distributor meter data in Home Assistant

hacs_badge GitHub Release

Disclaimer: This is an unofficial integration and is not affiliated with or endorsed by ARERA, Duereti, Unareti, RetiPiù, Reti Valtellina Valchiavenna, E-Distribuzione, Areti, Ireti, or any other distributor in any way.

Integrazione per Home Assistant che, dato il tuo comune, individua automaticamente il distributore elettrico competente (interrogando ARERA in tempo reale) e configura di conseguenza l'importazione delle curve di consumo dei tuoi POD come statistiche esterne, visibili anche nella Energy Dashboard.

Invece di dover sapere in anticipo quale distributore ti serve, contatore_letture lo scopre per te durante la configurazione.

Distributori supportati

Distributore Autenticazione Azioni
Duereti Client ID + Secret ID recupera_storico, recupera_ticket
Unareti Client ID + Secret ID recupera_storico, recupera_ticket
RetiPiù Client ID + Secret ID recupera_storico, recupera_ticket
Reti Valtellina Valchiavenna Client ID + Secret ID recupera_storico, recupera_ticket
E-Distribuzione Email + password + OTP recupera_storico
Areti Email + password recupera_storico
Ireti Username + password recupera_storico

Per Duereti/Unareti/E-Distribuzione/Areti: login, lettura dati, import nella Energy Dashboard e più POD per configurazione — tutto confermato funzionante su installazioni reali. Dettagli sulle azioni in Azioni più sotto.

Note

Ireti è nuovo: l'endpoint dei consumi è confermato con dati reali (curva di carico a 15 minuti — più granulare di tutti gli altri distributori supportati), ma non ancora testato ufficialmente dentro Home Assistant. Alcuni dettagli restano da verificare con l'uso reale (unità di misura esatta dei campioni, POD a fasce multiple anziché monorari) — vedi documentation/protocols/ireti-protocol.md. Se lo provi e trovi un problema, apri una issue.

Note

RetiPiù (Seregno, gruppo A2A) e Reti Valtellina Valchiavenna (Sondrio, Tirano, Sernio, Valdisotto — gruppo Acinque) sono nuovi: usano lo stesso Portale Clienti Finali e le stesse API di Duereti/Unareti (verificato sui rispettivi manuali API ufficiali), quindi riusano lo stesso codice già collaudato — ma non sono ancora stati provati con credenziali reali. Se hai un'utenza e lo provi, apri una issue con l'esito.

Per i comuni serviti da un distributore non ancora supportato, il wizard di configurazione permette comunque di selezionarlo manualmente se sai che è uno di quelli supportati, o si ferma con un messaggio chiaro altrimenti.

Cercasi contributori

Tip

Per questi distributori manca un solo ingrediente: un account con un POD già associato. Chi mantiene il progetto non ne ha uno per nessuno dei tre, quindi da solo non può andare oltre — se hai una fornitura attiva con uno di questi distributori, sei tu il pezzo mancante.

SET Distribuzione (Rovereto, gruppo Dolomiti Energia) — da confermare se i consumi sono letture vere

Login (Azure AD B2C) e anagrafica verificati, ma la cattura disponibile è di un account senza fornitura associata (profilo "Prospect"), quindi non sappiamo ancora se gli endpoint di consumo individuati nel bundle dell'app restituiscano vere letture del distributore o dati di fatturazione. Se hai un'utenza mySET con un POD attivo puoi aiutare — vedi documentation/protocols/set-distribuzione-protocol.md.

Edyna (Alto Adige / Südtirol, gruppo Alperia) — non è ancora noto se espone i consumi

Non è ancora noto se il portale esponga consumi/curve di carico — l'unica cattura disponibile è di un account senza POD associato, quindi non arriva a nessuna pagina di fornitura. Se hai un'utenza Edyna con un POD attivo puoi aiutare — vedi documentation/protocols/edyna-protocol.md.

Deval (Valle d'Aosta) — login con 2FA verificato, da confermare Letture/Curve

Login completo verificato con una cattura reale (credenziali + 2FA via app authenticator, sempre obbligatorio — un vincolo che nessun altro distributore già supportato ha), ma da un account senza POD associato: manca ancora la conferma delle sezioni Letture/Curve, che il manuale pubblico del portale PUF descrive come letture mensili e curve orarie per POD. Stesso tipo di portale ASP.NET WebForms di Edyna (probabilmente stesso vendor, Terranova). Se hai una fornitura Deval con un'utenza registrata sul PUF puoi aiutare — vedi documentation/protocols/deval-protocol.md.

V-Reti (Verona/Vicenza/Grezzana, gruppo AGSM AIM, ex Megareti) — login ok, account in attesa di validazione

Stesso prodotto Terranova PUF di Edyna e Deval, login verificato con una cattura reale (senza 2FA, a differenza di Deval) — ma da un account ancora in attesa di validazione da parte del distributore, quindi manca ancora la conferma delle sezioni Letture/Curve. Se hai una fornitura elettrica V-Reti già validata (con POD associato) puoi aiutare — vedi documentation/protocols/v-reti-protocol.md.

DEA (Osimo/Recanati, Ortona, Sanremo, Bresciano — Distribuzione Elettrica Adriatica) — login ok, nessun POD associato

Quarta istanza dello stesso prodotto Terranova PUF di Edyna, Deval e V-Reti, con registrazione self-service online. Login verificato con una cattura reale (senza 2FA, identico a V-Reti) da un account attivo ma senza utenze associate: la pagina Utenze ha le colonne Letture e Curve per ogni POD, ma resta da vedere cosa restituiscono. Se hai una fornitura DEA con il POD visibile in "Utenze" puoi aiutare — vedi documentation/protocols/dea-protocol.md.

AcegasApsAmga (Trieste / Padova / Gorizia, gruppo Hera) — endpoint individuati ma mai provati

Login (Azure AD B2C) e anagrafica verificati, endpoint energia individuati nel bundle dell'app ma mai provati — la cattura disponibile è di un account "prospect" senza alcun contratto associato. Se hai una fornitura AcegasApsAmga con un POD/PDR attivo puoi aiutare — vedi documentation/protocols/acegasapsamga-protocol.md.

Inrete Distribuzione (Emilia-Romagna e Toscana, gruppo Hera) — portale BT self-service individuato, da verificare con un account reale

Per gli utenti in bassa tensione (il caso residenziale tipico) il distributore offre un portale self-service dedicato ("Portale Hera 105", Azure AD B2C, registrazione "Iscrizione Immediata" con nome, codice fiscale, email, POD e documento d'identità) — login pubblico verificato, ma nessun account ancora registrato, quindi non sappiamo se espone davvero dati di misura. Se hai una fornitura Inrete BT puoi aiutare — vedi documentation/protocols/inrete-protocol.md.

Come funziona il rilevamento del distributore

  1. Selezioni regione → provincia → comune (elenco ISTAT, aggiornato automaticamente ad ogni configurazione, con una copia di riserva inclusa nell'integrazione nel caso il download non sia disponibile).
  2. L'integrazione interroga live la pagina di ricerca operatori ARERA per quel comune, filtrando sui distributori elettrici.
  3. In base alla Partita IVA dell'operatore restituito, il wizard prosegue con lo step corretto.

Prerequisiti

I distributori supportati usano meccanismi di autenticazione diversi tra loro — nessuno è "il caso normale" rispetto agli altri, sono semplicemente protocolli distinti imposti da ciascun distributore. Espandi la sezione del tuo distributore per i dettagli.

Duereti / Unareti / RetiPiù / Reti Valtellina Valchiavenna (Client ID + Secret ID)

Le API PCF non sono pubbliche in modo libero: vanno abilitate manualmente dal distributore, che poi invia via email le credenziali (client_id e secret_id) da usare in questa integrazione.

  1. Accedi al Portale Clienti Finali (PCF) del tuo distributore:
  2. Assicurati di avere almeno un'identificazione validata dal backoffice del distributore sul tuo profilo: senza questo passaggio la richiesta di abilitazione API non compare nemmeno.
  3. Vai nella sezione "Area POD/PDR: Interruzioni, Misure e servizi" e cerca l'opzione per richiedere l'abilitazione all'uso delle API.
  4. Invia la richiesta e attendi l'accettazione.
  5. Una volta approvata, riceverai via email Client ID e Secret ID (sono comunque visibili anche nella stessa pagina del portale da cui hai fatto la richiesta).
  6. Prendi nota anche di:
    • il/i codice/i POD o PDR che vuoi monitorare;
    • il dato fiscale associato a ciascun POD/PDR (codice fiscale o partita IVA a seconda dell'intestatario — richiesto ad ogni chiamata insieme al POD).

Questo processo è interamente gestito dal distributore: l'integrazione non può velocizzarlo né bypassarlo.

E-Distribuzione (email + password + OTP)

Nessuna richiesta di abilitazione preventiva: ti servono solo le stesse credenziali dell'app/area clienti ufficiale E-Distribuzione (email, password, e il codice OTP che ricevi via email o SMS al momento dell'accesso — te lo chiede direttamente il wizard di configurazione). Se il tuo account ha più POD associati, potrai selezionarne più di uno.

Areti (email + password)

Nessuna richiesta di abilitazione preventiva e nessun OTP: usa le stesse credenziali dell'area riservata Areti. A differenza di E-Distribuzione, non esiste (per quanto verificato) un endpoint che elenchi tutti i POD dell'account: il wizard ti chiede di inserirli a mano, uno alla volta, e li verifica subito.

Ireti (username + password)

Nessuna richiesta di abilitazione preventiva e nessun OTP: usa le stesse credenziali del portale SmartPOD. Come E-Distribuzione (non come Areti), i POD si scoprono automaticamente dall'account: se ce n'è più di uno potrai selezionarne uno o più. Serve almeno un POD già associato sul portale (SmartPOD → "Aggiungi POD"): se il tuo account non ne ha ancora nessuno, il wizard te lo dice chiaramente invece di procedere a vuoto.

Installazione

Tramite HACS (custom repository)

  1. HACS → menu (⋮) → Repository personalizzate
  2. Aggiungi l'URL di questo repository, categoria Integrazione
  3. Installa "Contatore Letture" e riavvia Home Assistant

Manuale

  1. Copia la cartella custom_components/contatore_letture nella cartella custom_components della tua configurazione Home Assistant
  2. Riavvia Home Assistant

Configurazione

  1. Impostazioni → Dispositivi e Servizi → Aggiungi integrazione, cerca Contatore Letture
  2. Seleziona regione, provincia e comune della fornitura
  3. Il distributore viene individuato automaticamente (o selezionato a mano se necessario), e ti viene mostrato cosa ti servirà per proseguire
  4. Inserisci le credenziali del tuo distributore (vedi Prerequisiti sopra)

Dopo la configurazione, puoi aggiungere/rimuovere POD in qualsiasi momento da Configura sull'integrazione (Opzioni) — per Duereti/Unareti/ RetiPiù/Reti Valtellina Valchiavenna/E-Distribuzione/Areti. Per Ireti le opzioni non hanno ancora nessuna voce (v1 minimale): per cambiare i POD monitorati, rimuovi e riconfigura l'integrazione. Per E-Distribuzione puoi anche cambiare l'orario della richiesta giornaliera (per Duereti/Unareti/RetiPiù/Reti Valtellina Valchiavenna/Areti non serve: importano a mese chiuso, vedi sotto; Ireti nemmeno, vedi sotto).

Cosa fa una volta configurata

I dati importati sono visibili come external statistics (contatore_letture:<pod>_energia) in Impostazioni → Sistema → Statistiche, utilizzabili nella Energy Dashboard, per tutti i distributori supportati.

Duereti, Unareti, RetiPiù, Reti Valtellina Valchiavenna e Areti pubblicano i dati a mese solare chiuso, non giorno per giorno (per Duereti/Unareti è un cambio imposto dai distributori a settembre 2026: prima si poteva chiedere il singolo giorno; RetiPiù e Reti Valtellina Valchiavenna usano lo stesso codice, quindi lo stesso modello). L'integrazione tiene, per ogni POD, il mese che sta aspettando, e una volta al giorno controlla se è disponibile: se sì lo importa e passa al successivo, se no riprova al giro dopo — senza mai abbandonare un mese in attesa. Un POD nuovo parte dal mese corrente: niente backfill automatico.

E-Distribuzione invece pubblica giorno per giorno: ogni sera dopo le 19:00 (orario configurabile dalle opzioni) viene richiesto il giorno precedente; se non è ancora pubblicato finisce in una coda e viene riprovato nei giorni successivi, così non si creano buchi.

Ireti pubblica una curva a 15 minuti (non oraria/giornaliera come gli altri), con la stessa logica a coda di E-Distribuzione (un giorno non ancora disponibile viene riprovato, non perso), ma senza un orario di cortesia configurabile: non sappiamo ancora quando Ireti pubblica i dati (nessuna osservazione empirica come per E-Distribuzione), quindi si prova a ogni ciclo invece di aspettare un'ora precisa. A differenza degli altri, l'API accetta un intervallo di date qualsiasi in una sola chiamata: se c'è arretrato, un solo ciclo può recuperare più giorni insieme.

Per tutti, lo storico pregresso non viene recuperato automaticamente: si richiede con l'azione recupera_storico (vedi Azioni sotto).

Tutte le entità esposte sono diagnostiche — i consumi stanno nelle statistiche, non in un sensore — raggruppate in un dispositivo "Account" più uno per ogni POD. Espandi la sezione del tuo distributore per il dettaglio.

Entità esposte — Duereti / Unareti / RetiPiù / Reti Valtellina Valchiavenna
Entità Dispositivo Cosa mostra
Ultimo import Account Fine del periodo dell'ultimo import riuscito
Attesa file (minuti) Account Da quanto si attende il file; 0 se non c'è una richiesta in corso
POD configurati Account Quanti e quali POD in questa istanza
Ultima data disponibile POD Ultimo giorno per cui esistono dati importati
Consumo ultimo periodo POD kWh totali dell'ultimo mese importato

Attesa file è utile per un'automazione di allerta: se resta alto per ore, qualcosa si è inceppato. POD e dato fiscale vengono verificati subito in configurazione: se il distributore non li riconosce, il form non permette di salvare.

Entità esposte — E-Distribuzione
Entità Dispositivo Cosa mostra
POD configurati Account Quanti e quali POD in questa istanza
Ultima data disponibile POD Ultimo giorno per cui esistono dati importati
Consumo ultimo giorno importato POD kWh dell'ultimo giorno importato
Entità esposte — Areti
Entità Dispositivo Cosa mostra
POD configurati Account Quanti e quali POD in questa istanza
Ultima data disponibile POD Ultimo giorno per cui esistono dati importati
Consumo ultimo mese importato POD kWh totali dell'ultimo mese importato (con negli attributi il mese e il prossimo mese in attesa)

Stessa struttura di E-Distribuzione (stesso numero di entità: un dispositivo "Account" più due per POD) — cambia solo che qui il consumo è per mese, non per giorno, coerente con come Areti pubblica i dati.

Entità esposte — Ireti
Entità Dispositivo Cosa mostra
POD configurati Account Quanti e quali POD in questa istanza
Ultima data disponibile POD Ultimo giorno per cui esistono dati importati
Consumo ultimo giorno importato POD kWh dell'ultimo giorno effettivamente ricevuto

Stessa struttura di E-Distribuzione (stesso numero di entità, stessa logica a coda) — cambia solo la sorgente dei dati: curva a 15 minuti invece di giornaliera (vedi Cosa fa una volta configurata).

Azioni

contatore_letture.recupera_storico — richiede un periodo passato e lo importa, con un'unica richiesta per l'intero periodo. Il campo "Configurazione / POD" è un selettore di dispositivo popolato dinamicamente: la scelta più comoda è farla dall'interfaccia (Strumenti per sviluppatori → Azioni), dove compare come un menu a tendina con i nomi reali. Le API accettano al massimo 6 mesi per richiesta; per periodi più lunghi ripeti l'azione su intervalli consecutivi.

action: contatore_letture.recupera_storico
data:
  device_id: <scegli dall'interfaccia, vedi sopra>
  data_da: "2026-02-01"
  data_a: "2026-07-31"

Per le sfumature specifiche di ciascun distributore (limite di 6 mesi documentato o auto-imposto, targeting per singolo POD) vedi documentation/. Per Areti, che non ha una vera API a intervallo di date, l'intervallo scelto viene convertito nei mesi solari che attraversa e per ciascuno si importa il mese intero. Per Ireti (limite auto-imposto: 731 giorni) l'intervallo viene invece spezzato in blocchi da un mese circa, la dimensione dell'unica richiesta finora confermata su dati reali.

contatore_letture.recupera_ticket — solo Duereti/Unareti/RetiPiù/Reti Valtellina Valchiavenna (gli altri distributori non hanno il concetto di ticket): riprende un ticket già esistente presso il distributore, saltando la richiesta di un nuovo export.

action: contatore_letture.recupera_ticket
data:
  ticket: "ENdZS6CausBMlUzrS3as5Q"
  entry_id: <opzionale, se hai più istanze Duereti/Unareti/RetiPiù/RE.V.V.>

Documentazione tecnica

Dettagli di reverse engineering dei protocolli (endpoint, gotcha, struttura delle risposte), architettura del codice, sviluppo/test e script disponibili sono in documentation/ — non necessari per usare l'integrazione, utili se vuoi contribuire o capire come funziona sotto.

Se vuoi aggiungere un nuovo distributore o modificarne uno esistente, vedi CONTRIBUTING.md.

Releases

Used by

Contributors

Languages