From dd01243391f8b4ecf4046b15cd09476c6b3ce07d Mon Sep 17 00:00:00 2001 From: Josef Zweck Date: Fri, 26 Sep 2025 21:36:03 +0200 Subject: [PATCH] Ensure token validity in lamarzocco (#153058) --- homeassistant/components/lamarzocco/__init__.py | 2 +- homeassistant/components/lamarzocco/coordinator.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/lamarzocco/__init__.py b/homeassistant/components/lamarzocco/__init__.py index 96d4f4c61ac4..2e2c81333058 100644 --- a/homeassistant/components/lamarzocco/__init__.py +++ b/homeassistant/components/lamarzocco/__init__.py @@ -142,7 +142,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: LaMarzoccoConfigEntry) - ) coordinators = LaMarzoccoRuntimeData( - LaMarzoccoConfigUpdateCoordinator(hass, entry, device), + LaMarzoccoConfigUpdateCoordinator(hass, entry, device, cloud_client), LaMarzoccoSettingsUpdateCoordinator(hass, entry, device), LaMarzoccoScheduleUpdateCoordinator(hass, entry, device), LaMarzoccoStatisticsUpdateCoordinator(hass, entry, device), diff --git a/homeassistant/components/lamarzocco/coordinator.py b/homeassistant/components/lamarzocco/coordinator.py index b6379f237ae4..b5fa0ed9028f 100644 --- a/homeassistant/components/lamarzocco/coordinator.py +++ b/homeassistant/components/lamarzocco/coordinator.py @@ -8,7 +8,7 @@ from datetime import timedelta import logging from typing import Any -from pylamarzocco import LaMarzoccoMachine +from pylamarzocco import LaMarzoccoCloudClient, LaMarzoccoMachine from pylamarzocco.exceptions import AuthFail, RequestNotSuccessful from homeassistant.config_entries import ConfigEntry @@ -19,7 +19,7 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda from .const import DOMAIN -SCAN_INTERVAL = timedelta(seconds=15) +SCAN_INTERVAL = timedelta(seconds=60) SETTINGS_UPDATE_INTERVAL = timedelta(hours=8) SCHEDULE_UPDATE_INTERVAL = timedelta(minutes=30) STATISTICS_UPDATE_INTERVAL = timedelta(minutes=15) @@ -51,6 +51,7 @@ class LaMarzoccoUpdateCoordinator(DataUpdateCoordinator[None]): hass: HomeAssistant, entry: LaMarzoccoConfigEntry, device: LaMarzoccoMachine, + cloud_client: LaMarzoccoCloudClient | None = None, ) -> None: """Initialize coordinator.""" super().__init__( @@ -61,6 +62,7 @@ class LaMarzoccoUpdateCoordinator(DataUpdateCoordinator[None]): update_interval=self._default_update_interval, ) self.device = device + self.cloud_client = cloud_client async def _async_update_data(self) -> None: """Do the data update.""" @@ -85,11 +87,17 @@ class LaMarzoccoUpdateCoordinator(DataUpdateCoordinator[None]): class LaMarzoccoConfigUpdateCoordinator(LaMarzoccoUpdateCoordinator): """Class to handle fetching data from the La Marzocco API centrally.""" + cloud_client: LaMarzoccoCloudClient + async def _internal_async_update_data(self) -> None: """Fetch data from API endpoint.""" + # ensure token stays valid; does nothing if token is still valid + await self.cloud_client.async_get_access_token() + if self.device.websocket.connected: return + await self.device.get_dashboard() _LOGGER.debug("Current status: %s", self.device.dashboard.to_dict())