On restart, pv_state resets to IDLE so the computed decision is always
False on the first recalculate. Comparing against self.decision (also
False) meant relay_control was never called, leaving the relay physically
ON past the PV target and cut-off temperature limits.
- Compare decision against the actual relay_on state instead of the
coordinator's previous self.decision, so any discrepancy (including
one left by a restart or an external integration) is corrected
immediately on every recalculate.
- Call _recalculate() at the end of async_setup() so the relay is synced
on startup without waiting for an external state-change event.
Co-Authored-By: Claude