@riddix/hamh 2.0.38 → 2.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,7 +37,7 @@ of port forwarding etc.
37
37
 
38
38
  | Channel | Branch | Current Version | Description |
39
39
  |---------|--------|-----------------|-------------|
40
- | **Stable** | `main` | v2.0.36 | Production-ready, recommended for most users |
40
+ | **Stable** | `main` | v2.0.38 | Production-ready, recommended for most users |
41
41
  | **Alpha** | `alpha` | v2.1.0-alpha.x | Pre-release with new features, for early adopters |
42
42
  | **Testing** | `testing` | v4.1.0-testing.x | ⚠️ **Highly unstable!** Experimental features, may break |
43
43
 
@@ -52,9 +52,36 @@ of port forwarding etc.
52
52
  ## 🎉 What's New
53
53
 
54
54
  <details>
55
- <summary><strong>📦 Stable Features (v2.0.36)</strong> - Click to expand</summary>
55
+ <summary><strong>📦 Stable Features (v2.0.38)</strong> - Click to expand</summary>
56
56
 
57
- **New in v2.0.36:**
57
+ **HOTFIX (post v2.0.38):**
58
+ - Fixed crash loop on startup caused by Node 22 native WebSocket dropping connections ([#297](https://github.com/RiDDiX/home-assistant-matter-hub/issues/297), [#299](https://github.com/RiDDiX/home-assistant-matter-hub/issues/299)) — affects both aarch64 (RPi) and amd64
59
+ - Fixed service initialization errors being silently swallowed, causing the process to hang instead of exiting
60
+ - Registry fetch now waits for WebSocket reconnect between retries and has increased retry tolerance
61
+ - Fixed `select`, `input_select`, `siren` domains showing as unsupported in filter preview ([#298](https://github.com/RiDDiX/home-assistant-matter-hub/issues/298))
62
+
63
+ **New in v2.0.38:**
64
+
65
+ | Feature | Description |
66
+ |---------|-------------|
67
+ | **🏷️ Per-Entity Identity Overrides** | `customProductName`, `customVendorName`, `customSerialNumber` per entity mapping ([#277](https://github.com/RiDDiX/home-assistant-matter-hub/issues/277), [#290](https://github.com/RiDDiX/home-assistant-matter-hub/issues/290)) |
68
+ | **🪟 Garage & Gate Open/Close** | Discrete Open/Close mode for garage and gate covers ([#55](https://github.com/RiDDiX/home-assistant-matter-hub/issues/55)) |
69
+ | **🚿 Dishwasher Device Type** | Dishwasher override for switch entities |
70
+ | **🚨 Siren Support** | Siren domain as OnOff Plug-in Unit |
71
+ | **🏷️ productNameFromNodeLabel Flag** | Report node label as Matter productName for Aqara controllers |
72
+ | **🤖 Vacuum Room Progress** | Dynamic room progress tracking via `currentRoomEntity` sensor |
73
+ | **⚡ Startup Force Sync** | Immediate force sync on startup to beat stale Alexa queues ([#282](https://github.com/RiDDiX/home-assistant-matter-hub/pull/282)) |
74
+ | **🌐 Network Diagnostic API** | mDNS/network diagnostic endpoint with dashboard card |
75
+ | **🔌 Energy on Composed Devices** | Energy/power measurement clusters on composed endpoints |
76
+ | **🩺 Multi-Admin Fabric Diagnostics** | Per-fabric session info in health API |
77
+ | **🩺 Docker HEALTHCHECK** | Native healthcheck in standalone and addon images |
78
+ | **🔒 Admin Password Hashing** | Admin password stored hashed, `timingSafeEqual` for lock PIN verification |
79
+ | **🧵 Matter.js 0.16.11** | Updated Matter stack |
80
+ | **🌍 Polish + Traditional Chinese** | New `pl` and `zh-tw` locales |
81
+
82
+ **Fix highlights:** vacuum keepalive for Apple Home "Updating…" ([#287](https://github.com/RiDDiX/home-assistant-matter-hub/issues/287)), multi-phase clean progress ([#281](https://github.com/RiDDiX/home-assistant-matter-hub/issues/281)), GenericSwitch single/multi split for Apple Home buttons ([#289](https://github.com/RiDDiX/home-assistant-matter-hub/issues/289)), HA restart attribute guards ([#286](https://github.com/RiDDiX/home-assistant-matter-hub/issues/286)), fan speed restore on turn-on ([#275](https://github.com/RiDDiX/home-assistant-matter-hub/issues/275)), moisture sensor auto-map to HumiditySensor ([#273](https://github.com/RiDDiX/home-assistant-matter-hub/issues/273)), TV speaker override ([#293](https://github.com/RiDDiX/home-assistant-matter-hub/issues/293)), rain + radon sensor auto-mapping, composed sub-endpoint cleanup.
83
+
84
+ **Previously in v2.0.36:**
58
85
 
59
86
  | Feature | Description |
60
87
  |---------|-------------|
@@ -70,21 +97,12 @@ of port forwarding etc.
70
97
  | **🔥 Cooling-Only Thermostat Fix** | Prevent HeatingOnly on cooling-only thermostat ([#264](https://github.com/RiDDiX/home-assistant-matter-hub/issues/264)) |
71
98
  | **↔️ Per-Entity Cover Swap** | Individual coverSwapOpenClose per cover ([#263](https://github.com/RiDDiX/home-assistant-matter-hub/issues/263)) |
72
99
 
73
- **Previously in v2.0.35:**
74
-
75
- | Feature | Description |
76
- |---------|-------------|
77
- | **🏠 HA 2026.3 Clean Area Support** | Native support for the new `vacuum.clean_area` action |
78
- | **🤖 Valetudo Identifier Mapping** | Custom `valetudoIdentifier` for MQTT topic case mismatches |
79
- | **🔌 Plugin System Hardening** | Validation, API version check, tgz upload/local install |
80
- | **📖 Docusaurus Docs** | New documentation site with improved search and navigation |
81
-
82
100
  </details>
83
101
 
84
102
  <details>
85
103
  <summary><strong>🧪 Alpha Features (v2.1.0-alpha.x)</strong> - Click to expand</summary>
86
104
 
87
- **Alpha is currently in sync with Stable (v2.0.36).** All alpha features have been promoted to stable. New alpha features will appear here as development continues.
105
+ **Alpha is currently level with Stable (v2.0.38).** All alpha features from the v2.1.0-alpha.600 line have been promoted into v2.0.38. New alpha work continues from `v2.1.0-alpha.601` onward and will appear here as development progresses.
88
106
 
89
107
  </details>
90
108
 
@@ -110,6 +128,9 @@ of port forwarding etc.
110
128
  <details>
111
129
  <summary><strong>📜 Previous Stable Versions</strong> - Click to expand</summary>
112
130
 
131
+ ### v2.0.37
132
+ Aqara productNameFromNodeLabel flag, Matter.js 0.16.11, Swedish locale update
133
+
113
134
  ### v2.0.35
114
135
  HA 2026.3 Clean Area Support, Valetudo Identifier Mapping, Plugin System Hardening, Registry Fingerprint Fix, Roomba Battery Fix, Contact Sensor Fix, Script Momentary Fix, Docusaurus Docs
115
136
 
@@ -412,6 +433,7 @@ This project thrives thanks to the amazing community! Special thanks to everyone
412
433
  | [@markgaze](https://github.com/markgaze) | 🤖 **Code Contributor** - Ecovacs Deebot room support ([#118](https://github.com/RiDDiX/home-assistant-matter-hub/pull/118)) |
413
434
  | [@omerfaruk-aran](https://github.com/omerfaruk-aran) | 🔧 **Network Debugging Expert** - Systematic mDNS/multicast root cause analysis for "No Response" issues ([#129](https://github.com/RiDDiX/home-assistant-matter-hub/issues/129)) |
414
435
  | [@gustavakerstrom](https://github.com/gustavakerstrom) | 🤖 **Code Contributor** - Template description display fix ([#215](https://github.com/RiDDiX/home-assistant-matter-hub/pull/215)) |
436
+ | [@aetasoul](https://github.com/aetasoul) | 🤖 **Code Contributor** - Immediate force sync on startup to beat stale Alexa queues ([#282](https://github.com/RiDDiX/home-assistant-matter-hub/pull/282)) |
415
437
 
416
438
  <details>
417
439
  <summary><strong>📋 Issue Tracker - All Contributors</strong> (click to expand)</summary>
@@ -486,6 +508,8 @@ Thank you to everyone who helps improve this project by reporting issues!
486
508
 
487
509
  If you find this project useful, consider supporting its development:
488
510
 
511
+ [![GitHub Sponsors](https://img.shields.io/badge/GitHub%20Sponsors-Donate-ea4aaa?logo=githubsponsors&style=for-the-badge)](https://github.com/sponsors/RiDDiX)
512
+ [![Ko-fi](https://img.shields.io/badge/Ko--fi-Donate-ff5e5b?logo=kofi&logoColor=white&style=for-the-badge)](https://ko-fi.com/riddix)
489
513
  [![PayPal](https://img.shields.io/badge/PayPal-Donate-blue?logo=paypal&style=for-the-badge)](https://www.paypal.me/RiDDiX93)
490
514
 
491
515
  Your support helps cover hosting costs and motivates continued development. Thank you! ❤️
@@ -145640,11 +145640,11 @@ var init_service = __esm({
145640
145640
  constructor(serviceName) {
145641
145641
  this.serviceName = serviceName;
145642
145642
  }
145643
- construction = new Promise((resolve6) => {
145643
+ construction = new Promise((resolve6, reject) => {
145644
145644
  setImmediate(() => {
145645
145645
  const init = this.initialize?.bind(this) ?? (async () => {
145646
145646
  });
145647
- init().then(resolve6);
145647
+ init().then(resolve6, reject);
145648
145648
  });
145649
145649
  });
145650
145650
  };
@@ -152597,9 +152597,9 @@ var HomeAssistantRegistry = class extends Service {
152597
152597
  }
152598
152598
  async reload() {
152599
152599
  return await withRetry(() => this.fetchRegistries(), {
152600
- maxAttempts: 5,
152600
+ maxAttempts: 10,
152601
152601
  baseDelayMs: 2e3,
152602
- maxDelayMs: 15e3,
152602
+ maxDelayMs: 3e4,
152603
152603
  onRetry: (attempt, error, delayMs) => {
152604
152604
  logger145.warn(
152605
152605
  `Registry fetch failed (attempt ${attempt}), retrying in ${delayMs}ms:`,
@@ -152610,6 +152610,26 @@ var HomeAssistantRegistry = class extends Service {
152610
152610
  }
152611
152611
  async fetchRegistries() {
152612
152612
  const connection = this.client.connection;
152613
+ if (!connection.connected) {
152614
+ logger145.debug("Connection not ready, waiting for reconnect...");
152615
+ await new Promise((resolve6) => {
152616
+ const timeout = setTimeout(() => {
152617
+ connection.removeEventListener("ready", onReady);
152618
+ resolve6();
152619
+ }, 3e4);
152620
+ const onReady = () => {
152621
+ clearTimeout(timeout);
152622
+ connection.removeEventListener("ready", onReady);
152623
+ resolve6();
152624
+ };
152625
+ connection.addEventListener("ready", onReady);
152626
+ if (connection.connected) {
152627
+ clearTimeout(timeout);
152628
+ connection.removeEventListener("ready", onReady);
152629
+ resolve6();
152630
+ }
152631
+ });
152632
+ }
152613
152633
  const entityRegistry = await getRegistry(connection);
152614
152634
  const statesList = await getStates(connection);
152615
152635
  const deviceRegistry = await getDeviceRegistry(connection);
@@ -182355,9 +182375,7 @@ function registerFinalErrorHandlers() {
182355
182375
  });
182356
182376
  }
182357
182377
  async function startHandler(startOptions, webUiDist) {
182358
- Object.assign(globalThis, {
182359
- WebSocket: globalThis.WebSocket ?? ws.WebSocket
182360
- });
182378
+ Object.assign(globalThis, { WebSocket: ws.WebSocket });
182361
182379
  patchLevelControlTlv();
182362
182380
  const options = new Options({ ...startOptions, webUiDist });
182363
182381
  const rootEnv = configureDefaultEnvironment(options);