Skip to content

Commit

Permalink
Merge pull request #41 from nanomad/master
Browse files Browse the repository at this point in the history
Aggiunto attributo prossima fascia e relativo timestamp a pun_fascia_corrente
  • Loading branch information
virtualdj authored May 7, 2024
2 parents c0d4cac + a9b352c commit 2662a1f
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 15 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
__pycache__/
*.py[cod]
*.py[cod]
.idea/
18 changes: 15 additions & 3 deletions custom_components/pun_sensor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ def __init__(self, hass: HomeAssistant, config: ConfigEntry) -> None:
self.pun = [0.0, 0.0, 0.0, 0.0, 0.0]
self.orari = [0, 0, 0, 0, 0]
self.fascia_corrente = None
self.prossimo_cambio_fascia = None
self.termine_prossima_fascia = None
self.fascia_successiva = None
_LOGGER.debug('Coordinator inizializzato (con \'usa dati reali\' = %s).', self.actual_data_only)

async def _async_update_data(self):
Expand Down Expand Up @@ -300,14 +303,23 @@ async def update_fascia(self, now=None):
_LOGGER.debug('Ora corrente fuso orario italiano: %s', dt_util.now(time_zone=tz_pun).strftime('%a %d/%m/%Y %H:%M:%S %z'))

# Ottiene la fascia oraria corrente e il prossimo aggiornamento
self.fascia_corrente, next_update_fascia = get_fascia(dt_util.now(time_zone=tz_pun))
_LOGGER.info('Nuova fascia corrente: F%s (prossima: %s)', self.fascia_corrente, next_update_fascia.strftime('%a %d/%m/%Y %H:%M:%S %z'))
self.fascia_corrente, self.prossimo_cambio_fascia = get_fascia(dt_util.now(time_zone=tz_pun))

# Calcola la fascia futura ri-applicando lo stesso algoritmo
self.fascia_successiva, self.termine_prossima_fascia = get_fascia(self.prossimo_cambio_fascia)

_LOGGER.info(
'Nuova fascia corrente: F%s (prossima: F%s alle %s)',
self.fascia_corrente,
self.fascia_successiva,
self.prossimo_cambio_fascia.strftime('%a %d/%m/%Y %H:%M:%S %z')
)

# Notifica che i dati sono stati aggiornati (fascia)
self.async_set_updated_data({ COORD_EVENT: EVENT_UPDATE_FASCIA })

# Schedula la prossima esecuzione
async_track_point_in_time(self.hass, self.update_fascia, next_update_fascia)
async_track_point_in_time(self.hass, self.update_fascia, self.prossimo_cambio_fascia)

async def update_pun(self, now=None):
"""Aggiorna i prezzi PUN da Internet (funziona solo se schedulata)"""
Expand Down
43 changes: 32 additions & 11 deletions custom_components/pun_sensor/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
ExtraStoredData,
RestoredExtraData
)
from typing import Any, Dict
from typing import Any, Dict, override

from . import PUNDataUpdateCoordinator
from .const import (
Expand Down Expand Up @@ -56,7 +56,18 @@ async def async_setup_entry(hass: HomeAssistant, config: ConfigEntry,
# Aggiunge i sensori ma non aggiorna automaticamente via web
# per lasciare il tempo ad Home Assistant di avviarsi
async_add_entities(entities, update_before_add=False)



def decode_fascia(fascia: int) -> str | None:
if fascia == 3:
return "F3"
elif fascia == 2:
return "F2"
elif fascia == 1:
return "F1"
else:
return None


def fmt_float(num: float):
"""Formatta adeguatamente il numero decimale"""
Expand Down Expand Up @@ -211,16 +222,26 @@ def available(self) -> bool:
return self.coordinator.fascia_corrente is not None

@property
def state(self) -> str:
def device_class(self) -> SensorDeviceClass | None:
return SensorDeviceClass.ENUM

@property
def options(self) -> list[str] | None:
return ["F1", "F2", "F3"]

@property
def native_value(self) -> str | None:
"""Restituisce la fascia corrente come stato"""
if (self.coordinator.fascia_corrente == 3):
return "F3"
elif (self.coordinator.fascia_corrente == 2):
return "F2"
elif (self.coordinator.fascia_corrente == 1):
return "F1"
else:
return None
return decode_fascia(self.coordinator.fascia_corrente)

@override
@property
def extra_state_attributes(self) -> dict[str, Any] | None:
return {
'fascia_successiva': decode_fascia(self.coordinator.fascia_successiva),
'inizio_fascia_successiva': self.coordinator.prossimo_cambio_fascia,
'termine_fascia_successiva': self.coordinator.termine_prossima_fascia
}

@property
def icon(self) -> str:
Expand Down

0 comments on commit 2662a1f

Please sign in to comment.