Integrazione per Home Assistant (basata sullo script pun-fasce) che mostra i prezzi stimati del mese corrente per fasce orarie (F1, F2 e F3 e mono-oraria) nonché la fascia oraria attuale.
I valori vengono scaricati dal sito MercatoElettrico.org per l'intero mese e viene calcolata la media per fasce giorno per giorno, in questo modo verso la fine del mese il valore mostrato si avvicina sempre di più al prezzo reale del PUN in bolletta (per i contratti a prezzo variabile).
Installare usando HACS tramite il menu con i tre puntini nell'angolo in alto a destra e scegliendo Add custom repository e aggiungendo l'URL https://github.com/virtualdj/pun_sensor alla lista.
Installare manualmente clonando o copiando questa repository e poi copiando la cartella custom_components/pun_sensor
nella cartella /custom_components/pun_sensor
di Home Assistant, che andrà successivamente riavviato.
Dopo l'aggiunta dell'integrazione oppure cliccando il pulsante Configurazione nelle impostazioni di Home Assistant, verrà visualizzata questa finestra:
Qui è possibile selezionare un'ora del giorno in cui scaricare i prezzi aggiornati dell'energia (default: 1). Nel caso il sito non fosse raggiungibile, verranno effettuati altri tentativi dopo 10, 60, 120 e 180 minuti.
Se la casella di controllo Usa solo dati reali ad inizio mese è attivata, all'inizio del mese quando non ci sono i prezzi per tutte le fasce orarie questi vengono disabilitati (non viene mostrato quindi un prezzo in €/kWh finché i dati non sono in numero sufficiente); nel caso invece la casella fosse disattivata (default) nel conteggio vengono inclusi gli ultimi giorni del mese precedente in modo da avere sempre un valore in €/kWh.
È possibile forzare un aggiornamento manuale richiamando il servizio Home Assistant Core Integration: Aggiorna entità (homeassistant.update_entity
) e passando come destinazione una qualsiasi entità tra quelle fornite da questa integrazione: questo causerà chiaramente un nuovo download dei dati.
L'integrazione fornisce il nome della fascia corrente relativa all'orario di Home Assistant (tra F1 / F2 / F3), i prezzi delle tre fasce F1 / F2 / F3 più la fascia mono-oraria e il prezzo della fascia corrente.
Questo componente fornisce informazioni sul prezzo all'ingrosso dell'energia elettrica: per calcolare il prezzo al dettaglio, è necessario creare un sensore fittizio (o template sensor), basato sui dati specifici del proprio contratto con il fornitore finale aggiungendo tasse e costi fissi.
Di seguito un esempio di un sensore configurato manualmente modificando il file configuration.yaml
di Home Assistant:
# Template sensors section
template:
- sensor:
- unique_id: prezzo_attuale_energia_al_dettaglio
name: "Prezzo attuale energia al dettaglio"
icon: mdi:currency-eur
unit_of_measurement: "€/kWh"
state: >
{{ (1.1 * (states('sensor.pun_prezzo_fascia_corrente')|float(0) + 0.0087 + 0.04 + 0.0227))|round(3) }}
A partire dalla versione v0.5.0, è stato aggiunto il sensore relativo al calcolo della fascia F23, cioè quella contrapposta alla F1 nella bioraria. Il calcolo non è documentato molto nei vari siti (si veda QUI) e non è affatto la media dei prezzi in F2 e F3 come si potrebbe pensare: c'è invece una percentuale fissa, come ha scoperto virtualj. Pertanto, seppur questo metodo non sia ufficiale, è stato implementato perché i risultati corrispondono sempre alle tabelle pubblicate online.
È possibile abilitare la registrazione dei log tramite l'interfaccia grafica in Impostazioni > Dispositivi e servizi > Prezzi PUN del mese e cliccando sul pulsante Abilita la registrazione di debug.
Il tasto verrà modificato come nell'immagine qui sotto:
Dopo che si verifica il problema, premerlo nuovamente: in questo modo verrà scaricato un file di log con le informazioni da allegare alle Issue.
Questa è la mia prima esperienza con le integrazioni di Home Assistant e, in generale, con Python. Purtroppo, mio malgrado, ho scoperto che la documentazione di Home Assistant per quanto riguarda la creazione di nuove integrazioni è scarsa e incompleta.
Nella prima versione (commit d239dae) ho provato ad effettuare un polling ogni 10 secondi sia per verificare se è sopraggiunto l'orario di aggiornamento dei prezzi che per calcolare la fascia oraria corrente. Ma, specie per il calcolo della fascia, non era il metodo corretto perché non è detto che l'aggiornamento avvenisse al secondo 0 della nuova fascia.
Così, cercando altri sorgenti in giro su GitHub, ho scoperto che esiste una funzione in Home Assistant chiamata async_track_point_in_time
che consente di schedulare l'esecuzione di una routine in un determinato istante nel tempo, che viene rispettato perfettamente. La versione successiva è stata quindi riscritta utilizzando questo metodo (più efficiente).
Ovviamente non ho alcuna certezza che tutto questo sia la maniera giusta di procedere, ma funziona! Per chi di interesse, questi sono i progetti da cui ho tratto del codice interessante da utilizzare per il mio:
- zaubererty/homeassistant-mvpv
- Gradecak/spaarnelanden-containers
- nintendo_wishlist
- saso5/homeassistant-mojelektro
- YodaDaCoda/hass-solarman-modbus
- bruxy70/Garbage-Collection
- dcmeglio/alarmdecoder-hass
- BenPru/luxtronik e collse/Home-AssistantConfig per due esempi di come assegnare un entity-id predeterminato quando si usa anche l'unique_id senza ricevere errori
AttributeError: can't set attribute 'entity_id'
(altra cosa non sufficientemente documentata di HomeAssistant) - dlashua/bolted, pippyn/Home-Assistant-Sensor-Afvalbeheer e questo articolo per come salvare e ripristinare lo stato di una entità con
RestoreEntity
- Il componente di Home Assistant energyzero per il blocco del
config_flow
già configurato e per esprimere correttamente le unità di misura - La PR #99213 di Home Assistant per il suggerimento di usare
async_call_later
anziché sommare il timedelta all'ora corrente - La PR #76793 di Home Assistant per un esempio di come usare il cancellation token restituito da
async_track_point_in_time
- I commit 1 e 2 per risolvere il warning nei log
[homeassistant.util.loop] Detected blocking call to import_module inside the event loop by custom integration
comparso con la versione 2024.5.0 di Home Assistant e dovuto alle librerie importate - La configurazione del devcontainer con script ispirati dalla repository astrandb/viva e da post sulla community Home Assistant; utili anche questo e questo