virtualdj / pun_sensor

Prezzi PUN del mese - Home Assistant Integration
MIT License
78 stars 13 forks source link

Calcolo pun giorno/notte a2a #12

Closed docdona closed 9 months ago

docdona commented 10 months ago

Ciao, complimenti per il lavoro svolto. volevo chiedere se riesci a integrare anche il calcolo del pun giorno e notte di a2a che è differente dalle fasce f1,f2,f3 perchè ha orari differenti.

https://casa.a2aenergia.eu/noi2#luce

avendo questa offerta che calcola il 70% del consumo annuo a prezzo fisso e il restante al pun di cui sopra volevo capire se c'è modo di automatizzare questo calcolo

grazie

virtualdj commented 10 months ago

Ciao, seppure tecnicamente fattibile la ritengo una funzionalità limitata ad un ristretto numero di beneficiari (cioè solamenti i clienti di A2A) in quanto non è una fascia standard.

Inoltre c'è il solito problema che i numeri non corrispondono (stesso motivo per cui non ho incluso la fascia F23); estrarre la fascia è facile, basta modificare il codice per inserire il prezzo orario in quella giorno o notte a seconda dell'orario. A seconda del fatto che l'ora sia inclusa o esclusa cambiano chiaramente i risultati.

Ad esempio quella che secondo me è corretta è questa versione (perché la fascia giorno è indicata come dalle 8 alle 17 e perciò la fascia notte è l'opposto):

def get_notte(data, ora):
    return (ora < 8) or (ora >= 17)

# Risultati con questo codice:
# 5/2023  0.097450        0.110690
# 6/2023  0.097400        0.110110
# 7/2023  0.103730        0.117140

Questi risultati non corrispondo a quanto pubblicato da A2A, che è invece:

# Risultati dal sito A2A
# 5/2023  0.099766        0.109305
# 6/2023  0.099623        0.108772
# 7/2023  0.104049        0.116915

Anche provando le altre varianti, non c'è nessuna combinazione che faccia ottenere i risultati corretti:

def get_notte(data, ora):
    return (ora < 8) or (ora > 17)

# Risultati con questo codice:
# 5/2023  0.098130        0.111160
# 6/2023  0.097610        0.110860
# 7/2023  0.104800        0.117330

def get_notte(data, ora):
    return (ora <= 8) or (ora > 17)

# Risultati con questo codice:
# 5/2023  0.095440        0.111900
# 6/2023  0.095450        0.111270
# 7/2023  0.103850        0.117060

def get_notte(data, ora):
    return (ora <= 8) or (ora >= 17)

# Risultati con questo codice:
# 5/2023  0.094340        0.111420
# 6/2023  0.094940        0.110540
# 7/2023  0.102530        0.116900

Questi sono basati sui dati storici (lo script lo trovi qui) quindi dovrebbero corrispondere!