|
5 | 5 | from homeassistant.config_entries import ConfigEntry |
6 | 6 | from homeassistant.core import HomeAssistant |
7 | 7 | from homeassistant.const import Platform |
8 | | -from homeassistant.helpers.event import async_track_time_interval |
| 8 | +from homeassistant.helpers.event import async_track_time_change |
9 | 9 | from homeassistant.helpers.aiohttp_client import async_get_clientsession |
10 | 10 | from homeassistant.helpers.dispatcher import async_dispatcher_send |
11 | 11 | import homeassistant.util.dt as dt_util |
@@ -147,7 +147,22 @@ async def push_data(now: datetime, sys_id=system_id, gen_id=generation_ent_id, c |
147 | 147 | except Exception as e: |
148 | 148 | _LOGGER.error("Unexpected error connecting to PVOutput for %s: %s", name, e) |
149 | 149 |
|
150 | | - listener = async_track_time_interval(hass, push_data, timedelta(minutes=frequency)) |
| 150 | + # Smart clock-aligned scheduling (Cron style) |
| 151 | + if frequency < 60: |
| 152 | + # Creates a list of exact minutes: [0, 5, 10, 15...] |
| 153 | + minutes = list(range(0, 60, frequency)) |
| 154 | + listener = async_track_time_change(hass, push_data, minute=minutes, second=0) |
| 155 | + elif frequency == 60: |
| 156 | + # Every hour on the dot (xx:00:00) |
| 157 | + listener = async_track_time_change(hass, push_data, minute=0, second=0) |
| 158 | + elif frequency == 180: |
| 159 | + # Every 3 hours on the dot (00:00, 03:00, 06:00...) |
| 160 | + hours = list(range(0, 24, 3)) |
| 161 | + listener = async_track_time_change(hass, push_data, hour=hours, minute=0, second=0) |
| 162 | + else: |
| 163 | + # Safe fallback just in case |
| 164 | + listener = async_track_time_change(hass, push_data, minute=list(range(0, 60, 5)), second=0) |
| 165 | + |
151 | 166 | remove_listeners.append(listener) |
152 | 167 |
|
153 | 168 | hass.data[DOMAIN][entry.entry_id] = remove_listeners |
|
0 commit comments