You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+74Lines changed: 74 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,80 @@ All notable changes to PadSpan HA are documented here.
4
4
5
5
---
6
6
7
+
## 0.17.2 — Bug Fix (2026-03-24)
8
+
9
+
### Fixed
10
+
-**Map scale save crash** — "Save Scale" button referenced `scale_x_m` / `scale_y_m` before they were defined, causing `ReferenceError` and preventing scale saves (maps.js:1944)
11
+
-**Occupancy training save crash** — `ws_occupancy_train` called `_st.async_save()` which doesn't exist on `SettingsStore`; corrected to `_st.store.async_save(_st.data)` (websocket.py:8374)
12
+
-**Blocking `scandir` in event loop** — factory reset's map-file cleanup used synchronous `iterdir()` / `is_dir()` inside an async handler, triggering HA's blocking-call detector; wrapped in `asyncio.to_thread` (websocket.py:7508)
13
+
-**Onboarding step click crash** — `this.actions.renderRooms()` could fail with `TypeError` if `actions` was undefined during panel init; added optional chaining with fallback (panel.js:2414)
14
+
15
+
---
16
+
17
+
## 0.17.0 — Stable Release (2026-03-23)
18
+
19
+
Major release with 78 commits since last stable (v0.15.25). Introduces the Device Registry identity system, positioning fabric decoupling, multi-floor accuracy learning, occupancy estimation, and an onboarding wizard.
20
+
21
+
### Device Registry (NEW)
22
+
-**Stable device identity** — every physical device gets an immutable `padspan_id` (format: `ps_<12 hex chars>`) that survives MAC rotation, iBeacon UUID changes, and firmware updates
23
+
-**Identity resolution** — O(1) lookup from any volatile key (MAC, iBeacon, canonical_id) to stable padspan_id
24
+
-**Automatic migration** — existing labeled objects in ObjectStore are auto-migrated to DeviceRegistry on first startup
25
+
-**Label pipeline** — DeviceRegistry is now the primary label source; ObjectStore is a thin fallback
26
+
-**HA entity identity** — sensor and device_tracker entities use padspan_id for stable HA device identity
-**Fabric is the authority** — all spatial data (scanner positions, room geometry, RF barriers, beacon positions) stored in real-world metres in the positioning fabric
33
+
-**Maps are setup tools only** — floor plan images no longer own positioning data, overview map toggle defaults to off
34
+
-**Metre-space coordinates** — all stores use real-world metres with floor_id references
35
+
-**Map transforms** — affine transforms convert between map fracs and metres
36
+
-**Measure tool** — two-point reference distance calibration with aspect ratio validation
37
+
38
+
### Multi-Floor Accuracy
39
+
-**Floor-transition learning** — adaptive store records floor-to-floor transitions with Welford stats on dwell time
40
+
-**Dwell-based velocity gate** — short dwell (<30s) requires unanimous vote; medium dwell (30-120s) needs supermajority for cross-floor; long dwell (>120s) uses normal threshold
41
+
-**Learned cross-floor attenuation** — Gaussian scorer applies learned RSSI corrections to cross-floor scanners when adaptive floor detection is enabled
0 commit comments