Repository navigation
A defect-hunting release. Eight faults were found by reviewing every read and
write path against what a window does rather than what the fake peripheral
did, and each fix is held by a test that was checked by reverting the fix and
watching it fail.
Nothing here changes how the integration is set up or what entities it
creates, so upgrading is a HACS update and a restart.
Fixed
One odd value no longer costs you every entity. A refresh read six
characteristics with no tolerance for any of them, so a single empty string,
non-UTF-8 byte or truncated document raised out of the refresh and left the
entry with no entities at all — recoverable only by reloading, and then only
until it happened again. A value that will not decode now sets that one field
to unknown and the refresh carries on.
A slow display is no longer turned back off. Confirmation was allowed
three seconds and the retry waited two, so a display taking longer than three
seconds to report got a second toggle at around five — far outside the second
or so in which a window discards a duplicate. The result was the display
ending up in the state you did not ask for, with nothing raised. Each attempt
now re-reads before toggling, which is what tells a late confirmation apart
from a dropped write.
A renamed window keeps its entry and its history (#24). Renaming a
window in the Atmoph app changed the only thing discovery can match on, so it
read as a new window: a second entry appeared and the original was stranded on
a name nothing advertises, reachable only by deleting it and losing the
window's history.
A disconnect notice can no longer take down a healthy connection. BLE
addresses rotate every few tens of seconds, so a notice from a replaced link
arriving after its successor is up is ordinary. Acting on it marked a working
entry unavailable.
A truncated settings read no longer leaves stale values on screen. The
settings document was merged into what was already known, so a document
missing a key kept showing the old value for it indefinitely. Reads now
replace the document, since a read is the window's whole answer rather than a
delta.
Failures now say what to do about them. Every timeout, wrong-window and
connection error reached you as a stack trace in the log and an opaque failure
in the interface. They now name the likely cause — the display asleep, out of
range, or held by the Atmoph phone app. A failed setting write also no longer
reports that display power was not confirmed, which was the wrong operation
and the wrong advice.
A control the window cannot serve withdraws itself rather than accepting a
value and silently doing nothing. This covers the media player's volume as
well as any level the window reports no range for.
Smaller things: a window reporting an inverted or zero-width range is
handled rather than clamped the wrong way; notifications no longer push the
scheduled read out indefinitely; a window that has stopped advertising its
name is recovered without skipping the identity check; and a disconnect
arriving after Home Assistant has stopped no longer raises from a thread
nobody is watching.
Diagnostics
Settings → Devices & services → Atmoph Window → Download diagnostics now
carries the live GATT table and the window's own quick-settings document with
the bounds it reports, redacted of the advertised name, address and device
UUID. That is the one artifact nobody without the hardware can produce, and it
is safe to attach to an issue as-is.
Not verified
No release of this integration has run against an AW102. The suite is 266
tests and it found everything above, but every one of those defects was found
after the fake peripheral was taught to behave that way — so the fake encodes
what this project believes about the hardware and cannot contradict a belief
that is wrong. Hardware validation is #5; the view-ID sensor rests on the
weakest evidence of anything here and is #14.
Full Changelog: v0.5.0...v0.6.0