Conversation
After SET_OPERATION_MODE / SET_SETTING_STATUS / SET_SETPOINT the BRC1H takes a few hundred milliseconds (sometimes much longer for SET_OPERATION_MODE) to settle internally before its GET responses match what we just wrote. When PollingComponent's next tick fires within that window, the readback can return the *previous* state and overwrite climate::mode in ESPHome, leading to visible 'set cool → flip back to fan_only briefly → flip to cool again' jitter in HA UI. Stamp millis() on every control(), and short-circuit update() for the next 5 seconds. After 5s clear the stamp so normal polling resumes. No behaviour change in steady state — affects only the first 1-2 polls after a control command.
|
To use the changes from this PR as an external component, add the following to your ESPHome configuration YAML file: external_components:
- source: github://Petapton/esphome@pull/11/head
components: [daikin_madoka]
refresh: 1h(Added by the PR bot) |
|
Hi, is there any log documenting this behavior? |
|
The behavior is a race between How to reproduce / catch it
Without the cooldown, the just-set mode flips back to the previously-read value for one poll cycle and then flips to the new value on the following poll (visible Stamping |
After a
SET_OPERATION_MODE/SET_SETTING_STATUS/SET_SETPOINTthe BRC1H takes a few hundred milliseconds (sometimes much longer forSET_OPERATION_MODE, which the existing code already pauses 600ms after) to settle internally before itsGET_*responses match what we just wrote. WhenPollingComponent's next tick fires within that window the readback can return the previous state and overwriteclimate::mode/target_temperaturein ESPHome, leading to visible "set cool → flip back to fan_only briefly → flip to cool again" jitter in HA UI.Stamp
millis()on everycontrol()and short-circuitupdate()for the next 5 seconds. After 5s the stamp clears and normal polling resumes.No behaviour change in steady state — affects only the first 1–2 polls after a control command.
Test plan
cool→heat→fan_only) from HA, observe no transient flicker inclimate.*.modeafter each set.update()continues to poll on schedule once cooldown expires).