The theme of this release is getting out of the way of everything else that talks to your air conditioner.
The Smart M-Air app could be locked out entirely
Enabling a single operation-data sensor made the integration ask the unit for values once a minute. Each of those requests takes the unit's 60-second write lock — and with the request cadence and the lock length both at 60 seconds, the lock never lapsed. The app, and the infrared remote, could not get a command in at all. Reported by daveywf in #294.
The module has no clock of its own: it dates the lock from the timestamp on the request that took it. Operation-data requests are now stamped 55 seconds in the past, so the lock they take runs 5 of its 60 seconds and the rest of every minute stays free. A command you send from Home Assistant is stamped honestly and keeps its full protection — verified on hardware, including the case where an operation-data request follows a command within the same minute.
Once another client does get a command through, the integration stands down for three minutes and the new External Control entity says so while it lasts. The operation-data sensors hold their last values meanwhile.
Hot Gas Temperature now reads unknown when the outdoor unit is idle
Worth knowing before you see it, because it looks like a broken sensor. The discharge-pipe conversion only holds from raw byte 18 upwards; below that the sensor is telling us "30 °C or colder" and nothing more precise. It used to convert that anyway and report a plausible-looking 36–40 °C on a completely idle outdoor unit — which is where the suspicion of a permanently running crankcase heater came from (#288). It now reports unknown there instead of a number the protocol never sent. Hot Gas Temperature (raw) still shows the byte.
If you only want the operation-data channel switched on, Indoor Coil Temperature is the better entity to enable — it always has a reading.
Quieter, and more useful when something is wrong
- Refusals the integration recovers from by itself no longer produce warnings. They were running at about a dozen a day on a healthy setup. The tally now rides along in the diagnostics download instead, so nothing is lost for anyone actually investigating.
getAirconStatrefusals no longer blame the write lock. That command never touches it — the message said otherwise and sent a tester looking in the wrong place.- The stale-operation-data warning now points at the network, which is what every measured occurrence turned out to be.
- Discovery falls back to the module's fixed port when the announced one does not answer (#290), and says so, instead of failing setup.
- A command refused because the account was not registered is re-registered and retried once.
- The repair issue for a full account table says what that actually means: slots never free themselves, and only the holding account can remove itself.
Also
The README explains how to remove the integration, and says plainly that the Indoor Coil Outlet name describes the cooling case. There is a code of conduct. Internally the coordinator has moved out of wfrac/device.py into its own module and the integration now declares its quality-scale status — groundwork, no behaviour change.
If you ran the betas
Nothing to do. Everything from beta1 through beta4 is included, plus the quieter logging and the discovery port fallback, which are new here.
There's a Sponsor button in the sidebar if this saved you a support ticket or an evening of guessing.