Skip to content

Commit

Permalink
Calcolo fascia F23 per bioraria; fix #24
Browse files Browse the repository at this point in the history
  • Loading branch information
virtualdj committed Dec 17, 2023
1 parent e519109 commit 25bb583
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 3 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ template:
{{ (1.1 * (states('sensor.pun_prezzo_fascia_corrente')|float(0) + 0.0087 + 0.04 + 0.0227))|round(3) }}
```
### Fascia F23
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](https://github.com/virtualdj/pun_sensor/issues/24#issuecomment-1806864251)) e non è affatto la media dei prezzi in F2 e F3 come si potrebbe pensare: c'è invece una percentuale fissa, [come ha scoperto *virtualj*](https://github.com/virtualdj/pun_sensor/issues/24#issuecomment-1829846806).
Pertanto, seppur questo metodo non sia ufficiale, è stato implementato perché i risultati corrispondono sempre alle tabelle pubblicate online.
### In caso di problemi
È 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**.
Expand Down
17 changes: 15 additions & 2 deletions custom_components/pun_sensor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from .const import (
DOMAIN,
PUN_FASCIA_MONO,
PUN_FASCIA_F23,
PUN_FASCIA_F1,
PUN_FASCIA_F2,
PUN_FASCIA_F3,
Expand Down Expand Up @@ -138,8 +139,8 @@ def __init__(self, hass: HomeAssistant, config: ConfigEntry) -> None:
# Inizializza i valori di default
self.web_retries = 0
self.schedule_token = None
self.pun = [0.0, 0.0, 0.0, 0.0]
self.orari = [0, 0, 0, 0]
self.pun = [0.0, 0.0, 0.0, 0.0, 0.0]
self.orari = [0, 0, 0, 0, 0]
self.fascia_corrente = None
_LOGGER.debug('Coordinator inizializzato (con \'usa dati reali\' = %s).', self.actual_data_only)

Expand Down Expand Up @@ -263,6 +264,18 @@ async def _async_update_data(self):
self.pun[PUN_FASCIA_F2] = mean(f2)
if self.orari[PUN_FASCIA_F3] > 0:
self.pun[PUN_FASCIA_F3] = mean(f3)

# Calcola la fascia F23 (a partire da F2 ed F3)
# NOTA: la motivazione del calcolo è oscura ma sembra corretta; vedere:
# https://github.com/virtualdj/pun_sensor/issues/24#issuecomment-1829846806
if self.orari[PUN_FASCIA_F2] > 0 and self.orari[PUN_FASCIA_F3] > 0:
# Esistono dati sia per F2 che per F3
self.orari[PUN_FASCIA_F23] = self.orari[PUN_FASCIA_F2] + self.orari[PUN_FASCIA_F3]
self.pun[PUN_FASCIA_F23] = 0.46 * self.pun[PUN_FASCIA_F2] + 0.54 * self.pun[PUN_FASCIA_F3]
else:
# Devono esserci dati sia per F2 che per F3 affinché il risultato sia valido
self.orari[PUN_FASCIA_F23] = 0
self.pun[PUN_FASCIA_F23] = 0

# Logga i dati
_LOGGER.debug('Numero di dati: ' + ', '.join(str(i) for i in self.orari))
Expand Down
1 change: 1 addition & 0 deletions custom_components/pun_sensor/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
PUN_FASCIA_F1 = 1
PUN_FASCIA_F2 = 2
PUN_FASCIA_F3 = 3
PUN_FASCIA_F23 = 4

# Tipi di aggiornamento
COORD_EVENT = "coordinator_event"
Expand Down
2 changes: 1 addition & 1 deletion custom_components/pun_sensor/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
"issue_tracker": "https://github.com/virtualdj/pun_sensor/issues",
"loggers": ["pun_sensor"],
"requirements": ["holidays", "bs4"],
"version": "0.4.1"
"version": "0.5.0"
}
6 changes: 6 additions & 0 deletions custom_components/pun_sensor/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from .const import (
DOMAIN,
PUN_FASCIA_MONO,
PUN_FASCIA_F23,
PUN_FASCIA_F1,
PUN_FASCIA_F2,
PUN_FASCIA_F3,
Expand All @@ -45,6 +46,7 @@ async def async_setup_entry(hass: HomeAssistant, config: ConfigEntry,
# Crea i sensori (legati al coordinator)
entities = []
entities.append(PUNSensorEntity(coordinator, PUN_FASCIA_MONO))
entities.append(PUNSensorEntity(coordinator, PUN_FASCIA_F23))
entities.append(PUNSensorEntity(coordinator, PUN_FASCIA_F1))
entities.append(PUNSensorEntity(coordinator, PUN_FASCIA_F2))
entities.append(PUNSensorEntity(coordinator, PUN_FASCIA_F3))
Expand Down Expand Up @@ -85,6 +87,8 @@ def __init__(self, coordinator: PUNDataUpdateCoordinator, tipo: int) -> None:
self.entity_id = ENTITY_ID_FORMAT.format('pun_fascia_f1')
elif (self.tipo == PUN_FASCIA_MONO):
self.entity_id = ENTITY_ID_FORMAT.format('pun_mono_orario')
elif (self.tipo == PUN_FASCIA_F23):
self.entity_id = ENTITY_ID_FORMAT.format('pun_fascia_f23')
else:
self.entity_id = None
self._attr_unique_id = self.entity_id
Expand Down Expand Up @@ -160,6 +164,8 @@ def name(self) -> str:
return "PUN fascia F1"
elif (self.tipo == PUN_FASCIA_MONO):
return "PUN mono-orario"
elif (self.tipo == PUN_FASCIA_F23):
return "PUN fascia F23"
else:
return None

Expand Down
Binary file modified screenshots_main.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 25bb583

Please sign in to comment.