π Changelog
All notable changes are documented here. Versions follow Semantic Versioning.
[2.1.0] β Observability & Architecture
Added
sensor.pumpsteer_thermal_outlookβ new sensor exposing PumpSteerβs internal forecast analysis: preheat worthwhile, preheat strength, warming/cooling trends, night min / day max temperature, precool risk, and effective wind-chill temperature. Primarily diagnostic in 2.1.0 β does not yet replace core preheat logic.switch.pumpsteer_preheat_boostβ preheat boost is now a proper dashboard switch. Previously only configurable via the options flow. Existing state is preserved across upgrades via RestoreEntity.ThermalModelinthermal_model.pyβ passively collects indoor cooling rate samples during braking periods. Foundation for future brake safety prediction.fit()is not yet called; this is passive collection only.
Changed
forecast.pyrefactored β cleaner weather analysis, better separation between forecast retrieval and thermal analysis.ThermalOutlookdataclass introduced.thermal_model.pyintroduced as a separate module for thermal regression logic.ThermalOutlookSensorsuppressespreheat_worthwhilewhenindoor_temp >= target_temperatureto avoid unnecessary preheat signals.- Internal cleanup for maintainability and future extensibility.
Notes
- No migration required. Fully backward compatible with 2.0.x.
- All new features are additive β existing behavior is unchanged.
ThermalModel.fit()is identified as a future improvement; not called in 2.1.0.
[2.0.x] β Stability & Hardening
Fixed (across 2.0.x patch releases)
- Brake ramp
dtnow capped at 60 seconds per step β prevents large ramp jumps after HA restarts or long gaps between polling cycles. - Midnight grace window (00:00β00:15) prevents stale price threshold caching before Nordpool delivers fresh data.
- P80 guard: if P80 for the day is below
ABSOLUTE_CHEAP_LIMIT, all slots are classified as cheap β no braking on days when electricity is universally cheap. _forecast_is_cold()result correctly isolated frombridge_short_dippath.ramp_incomputed againstPRICE_EXPENSIVEwhenupcoming=Trueto ensure correct ramp duration regardless of intermediate price categories.
[2.0.0] β The Big Rewrite
Added
- PI controller as the primary control loop with integral windup protection
(
PID_INTEGRAL_CLAMP). Integral is frozen (not decayed or reset) during braking. - Smooth brake ramping β
brake_factorramps in and out over configurable minutes. No hard steps. - P30/P80 price classification with per-day caching. Prevents mid-slot reclassification from releasing the brake unexpectedly.
- Pre-brake (block 5a) β pure price signal, starts ramp before the expensive slot. Independent of forecast availability.
- Preheat-boost (block 5b) β forecast-gated, boosts heating before expensive periods when weather is cold.
pre_brakingmode β separate frompreheatingfor unambiguous logging and dashboard state.- Comfort floor per aggressiveness level β brake releases automatically when indoor temperature drops too far.
- Brake hold time β prevents oscillation during short cheap dips within a longer expensive block.
- Summer mode β passes through real outdoor temperature when outdoor temp exceeds threshold. Highest-priority check.
- Safe mode β passes through real outdoor temperature when any required sensor is missing or invalid.
- Holiday mode β lower target (16 Β°C default), same PI/braking logic. Scheduled via datetime helpers.
- Ohmigo integration β pushes fake temp to Ohmigo WiFi controller with hysteresis and rate limiting.
- Notification system β push alerts on mode transitions (braking / preheating).
- HA 2026.2+ compatibility β uses
weather.get_forecastsservice call instead of deprecatedstate_attr(..., 'forecast'). - Peak filter β ignores expensive price spikes shorter than
PEAK_FILTER_MIN_DURATION_MINUTES(default 30 min).
Removed
- Machine learning features from v1.x
very_cheap,extremeprice categories β replaced withcheap,normal,expensive- All cloud dependencies
Breaking changes from 1.x
- All entity IDs renamed
- Price categories changed
- Options flow rebuilt
- Automations referencing old entities must be updated
[1.x] β Legacy
Version 1.x used heuristic control with ML features and cloud-optional components. No longer supported. See the Installation Guide for migration instructions.