fix: solar forecast charging

This commit is contained in:
Björn Stormwall
2026-06-23 15:22:05 +02:00
parent 27ed07f0c4
commit d2f7c1dc73
7 changed files with 676 additions and 70 deletions
@@ -10,8 +10,15 @@ from .const import (
CONF_CHARGER_ID,
CHARGING_PROFILE_ALL_SURPLUS,
CHARGING_PROFILE_CONSERVATIVE,
CHARGING_PROFILE_FORECAST,
CHARGING_PROFILE_FORECAST_CONSERVATIVE,
CONF_CHARGING_PROFILE,
CONF_DEAD_BAND_RESYNC_MINUTES,
CONF_FORECAST_CONFIDENCE,
CONF_FORECAST_LOOKAHEAD_MINUTES,
CONF_FORECAST_SENSOR,
DEFAULT_FORECAST_CONFIDENCE,
DEFAULT_FORECAST_LOOKAHEAD_MINUTES,
CONF_DEVICE_ID,
CONF_EV_CHARGING_SENSOR,
CONF_HOUSE_LOAD_SENSOR,
@@ -43,11 +50,21 @@ _CHARGING_PROFILE_SELECTOR = selector.SelectSelector(
options=[
selector.SelectOptionDict(value=CHARGING_PROFILE_CONSERVATIVE, label="Conservative"),
selector.SelectOptionDict(value=CHARGING_PROFILE_ALL_SURPLUS, label="All Surplus"),
selector.SelectOptionDict(value=CHARGING_PROFILE_FORECAST, label="Forecast look-ahead"),
selector.SelectOptionDict(value=CHARGING_PROFILE_FORECAST_CONSERVATIVE, label="Forecast surplus"),
],
mode=selector.SelectSelectorMode.DROPDOWN,
)
)
_CONFIDENCE_SELECTOR = selector.NumberSelector(
selector.NumberSelectorConfig(min=50, max=100, step=5, unit_of_measurement="%", mode=selector.NumberSelectorMode.SLIDER)
)
_LOOKAHEAD_SELECTOR = selector.NumberSelector(
selector.NumberSelectorConfig(min=5, max=120, step=5, unit_of_measurement="min", mode=selector.NumberSelectorMode.BOX)
)
_POWER_SENSOR_SELECTOR = selector.EntitySelector(
selector.EntitySelectorConfig(domain="sensor", device_class="power")
)
@@ -103,6 +120,19 @@ def _options_schema(hass: HomeAssistant, current: dict) -> vol.Schema:
CONF_DEAD_BAND_RESYNC_MINUTES,
default=current.get(CONF_DEAD_BAND_RESYNC_MINUTES, DEFAULT_DEAD_BAND_RESYNC_MINUTES),
): _DEAD_BAND_RESYNC_SELECTOR,
# ── Forecast profiles ─────────────────────────────────────────────────
vol.Optional(CONF_FORECAST_SENSOR): selector.EntitySelector(
selector.EntitySelectorConfig(integration="forecast_solar")
),
vol.Required(
CONF_FORECAST_CONFIDENCE,
default=current.get(CONF_FORECAST_CONFIDENCE, DEFAULT_FORECAST_CONFIDENCE),
): _CONFIDENCE_SELECTOR,
vol.Required(
CONF_FORECAST_LOOKAHEAD_MINUTES,
default=current.get(CONF_FORECAST_LOOKAHEAD_MINUTES, DEFAULT_FORECAST_LOOKAHEAD_MINUTES),
): _LOOKAHEAD_SELECTOR,
# ─────────────────────────────────────────────────────────────────────
vol.Optional(CONF_NOTIFY_TARGET): _notify_selector(_notify_services(hass)),
})