@riddix/hamh 2.1.0-alpha.599 → 2.1.0-alpha.601
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.
|
|
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,30 @@ of port forwarding etc.
|
|
|
52
52
|
## 🎉 What's New
|
|
53
53
|
|
|
54
54
|
<details>
|
|
55
|
-
<summary><strong>📦 Stable Features (v2.0.
|
|
55
|
+
<summary><strong>📦 Stable Features (v2.0.38)</strong> - Click to expand</summary>
|
|
56
56
|
|
|
57
|
-
**New in v2.0.
|
|
57
|
+
**New in v2.0.38:**
|
|
58
|
+
|
|
59
|
+
| Feature | Description |
|
|
60
|
+
|---------|-------------|
|
|
61
|
+
| **🏷️ 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)) |
|
|
62
|
+
| **🪟 Garage & Gate Open/Close** | Discrete Open/Close mode for garage and gate covers ([#55](https://github.com/RiDDiX/home-assistant-matter-hub/issues/55)) |
|
|
63
|
+
| **🚿 Dishwasher Device Type** | Dishwasher override for switch entities |
|
|
64
|
+
| **🚨 Siren Support** | Siren domain as OnOff Plug-in Unit |
|
|
65
|
+
| **🏷️ productNameFromNodeLabel Flag** | Report node label as Matter productName for Aqara controllers |
|
|
66
|
+
| **🤖 Vacuum Room Progress** | Dynamic room progress tracking via `currentRoomEntity` sensor |
|
|
67
|
+
| **⚡ Startup Force Sync** | Immediate force sync on startup to beat stale Alexa queues ([#282](https://github.com/RiDDiX/home-assistant-matter-hub/pull/282)) |
|
|
68
|
+
| **🌐 Network Diagnostic API** | mDNS/network diagnostic endpoint with dashboard card |
|
|
69
|
+
| **🔌 Energy on Composed Devices** | Energy/power measurement clusters on composed endpoints |
|
|
70
|
+
| **🩺 Multi-Admin Fabric Diagnostics** | Per-fabric session info in health API |
|
|
71
|
+
| **🩺 Docker HEALTHCHECK** | Native healthcheck in standalone and addon images |
|
|
72
|
+
| **🔒 Admin Password Hashing** | Admin password stored hashed, `timingSafeEqual` for lock PIN verification |
|
|
73
|
+
| **🧵 Matter.js 0.16.11** | Updated Matter stack |
|
|
74
|
+
| **🌍 Polish + Traditional Chinese** | New `pl` and `zh-tw` locales |
|
|
75
|
+
|
|
76
|
+
**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.
|
|
77
|
+
|
|
78
|
+
**Previously in v2.0.36:**
|
|
58
79
|
|
|
59
80
|
| Feature | Description |
|
|
60
81
|
|---------|-------------|
|
|
@@ -70,21 +91,12 @@ of port forwarding etc.
|
|
|
70
91
|
| **🔥 Cooling-Only Thermostat Fix** | Prevent HeatingOnly on cooling-only thermostat ([#264](https://github.com/RiDDiX/home-assistant-matter-hub/issues/264)) |
|
|
71
92
|
| **↔️ Per-Entity Cover Swap** | Individual coverSwapOpenClose per cover ([#263](https://github.com/RiDDiX/home-assistant-matter-hub/issues/263)) |
|
|
72
93
|
|
|
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
94
|
</details>
|
|
83
95
|
|
|
84
96
|
<details>
|
|
85
97
|
<summary><strong>🧪 Alpha Features (v2.1.0-alpha.x)</strong> - Click to expand</summary>
|
|
86
98
|
|
|
87
|
-
**Alpha is currently
|
|
99
|
+
**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
100
|
|
|
89
101
|
</details>
|
|
90
102
|
|
|
@@ -110,6 +122,9 @@ of port forwarding etc.
|
|
|
110
122
|
<details>
|
|
111
123
|
<summary><strong>📜 Previous Stable Versions</strong> - Click to expand</summary>
|
|
112
124
|
|
|
125
|
+
### v2.0.37
|
|
126
|
+
Aqara productNameFromNodeLabel flag, Matter.js 0.16.11, Swedish locale update
|
|
127
|
+
|
|
113
128
|
### v2.0.35
|
|
114
129
|
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
130
|
|
|
@@ -412,6 +427,7 @@ This project thrives thanks to the amazing community! Special thanks to everyone
|
|
|
412
427
|
| [@markgaze](https://github.com/markgaze) | 🤖 **Code Contributor** - Ecovacs Deebot room support ([#118](https://github.com/RiDDiX/home-assistant-matter-hub/pull/118)) |
|
|
413
428
|
| [@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
429
|
| [@gustavakerstrom](https://github.com/gustavakerstrom) | 🤖 **Code Contributor** - Template description display fix ([#215](https://github.com/RiDDiX/home-assistant-matter-hub/pull/215)) |
|
|
430
|
+
| [@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
431
|
|
|
416
432
|
<details>
|
|
417
433
|
<summary><strong>📋 Issue Tracker - All Contributors</strong> (click to expand)</summary>
|
|
@@ -486,6 +502,8 @@ Thank you to everyone who helps improve this project by reporting issues!
|
|
|
486
502
|
|
|
487
503
|
If you find this project useful, consider supporting its development:
|
|
488
504
|
|
|
505
|
+
[](https://github.com/sponsors/RiDDiX)
|
|
506
|
+
[](https://ko-fi.com/riddix)
|
|
489
507
|
[](https://www.paypal.me/RiDDiX93)
|
|
490
508
|
|
|
491
509
|
Your support helps cover hosting costs and motivates continued development. Thank you! ❤️
|
package/dist/backend/cli.js
CHANGED
|
@@ -146788,6 +146788,12 @@ var init_bridge_config_schema = __esm({
|
|
|
146788
146788
|
type: "boolean",
|
|
146789
146789
|
default: false
|
|
146790
146790
|
},
|
|
146791
|
+
productNameFromNodeLabel: {
|
|
146792
|
+
title: "Product Name from Node Label",
|
|
146793
|
+
description: "Report the entity's node label (custom name / friendly name / entity id) as the Matter productName. Useful for controllers like Aqara that display productName as the device name instead of nodeLabel. A per-entity customProductName still takes precedence.",
|
|
146794
|
+
type: "boolean",
|
|
146795
|
+
default: false
|
|
146796
|
+
},
|
|
146791
146797
|
vacuumOnOff: {
|
|
146792
146798
|
title: "Vacuum: Include OnOff Cluster (Alexa)",
|
|
146793
146799
|
description: "Add an OnOff cluster to robot vacuum endpoints. Alexa REQUIRES this (PowerController) to show robotic vacuums in the app. Without it, Alexa commissions the device but never displays it. In Server Mode this is enabled automatically \u2014 only check this for bridge mode. WARNING: OnOff is NOT part of the Matter RVC device type specification. Enabling this may break Apple Home (shows 'Updating') and Google Home.",
|
|
@@ -165135,6 +165141,7 @@ function trimToLength(value, maxLength, suffix) {
|
|
|
165135
165141
|
// src/matter/endpoints/server-mode-server-node.ts
|
|
165136
165142
|
var ServerModeServerNode = class extends ServerNode {
|
|
165137
165143
|
deviceEndpoint;
|
|
165144
|
+
featureFlags;
|
|
165138
165145
|
constructor(env, bridgeData) {
|
|
165139
165146
|
super({
|
|
165140
165147
|
id: bridgeData.id,
|
|
@@ -165163,6 +165170,7 @@ var ServerModeServerNode = class extends ServerNode {
|
|
|
165163
165170
|
persistenceEnabled: false
|
|
165164
165171
|
}
|
|
165165
165172
|
});
|
|
165173
|
+
this.featureFlags = bridgeData.featureFlags;
|
|
165166
165174
|
}
|
|
165167
165175
|
/**
|
|
165168
165176
|
* Add the device endpoint to this server node.
|
|
@@ -165190,11 +165198,13 @@ var ServerModeServerNode = class extends ServerNode {
|
|
|
165190
165198
|
* Without this, server-mode devices show bridge defaults (e.g. "riddix" / "MatterHub").
|
|
165191
165199
|
*/
|
|
165192
165200
|
updateDeviceIdentity(entityId, device, mapping, friendlyName) {
|
|
165201
|
+
const nodeLabel = trimToLength(mapping?.customName, 32, "...") ?? trimToLength(friendlyName, 32, "...") ?? trimToLength(entityId, 32, "...");
|
|
165202
|
+
const productNameFromNodeLabel = this.featureFlags?.productNameFromNodeLabel === true ? nodeLabel : void 0;
|
|
165193
165203
|
applyPatchState(this.state.basicInformation, {
|
|
165194
165204
|
vendorName: trimToLength(mapping?.customVendorName, 32, "...") ?? trimToLength(device?.manufacturer, 32, "..."),
|
|
165195
|
-
productName: trimToLength(mapping?.customProductName, 32, "...") ?? trimToLength(device?.model_id, 32, "...") ?? trimToLength(device?.model, 32, "..."),
|
|
165205
|
+
productName: trimToLength(mapping?.customProductName, 32, "...") ?? productNameFromNodeLabel ?? trimToLength(device?.model_id, 32, "...") ?? trimToLength(device?.model, 32, "..."),
|
|
165196
165206
|
productLabel: trimToLength(device?.model, 64, "..."),
|
|
165197
|
-
nodeLabel
|
|
165207
|
+
nodeLabel,
|
|
165198
165208
|
serialNumber: trimToLength(mapping?.customSerialNumber, 32, "..."),
|
|
165199
165209
|
hardwareVersionString: trimToLength(device?.hw_version, 64, "..."),
|
|
165200
165210
|
softwareVersionString: trimToLength(device?.sw_version, 64, "...")
|
|
@@ -168067,20 +168077,22 @@ var BasicInformationServer2 = class extends BridgedDeviceBasicInformationServer
|
|
|
168067
168077
|
if (!entity.state || !entity.state.attributes) {
|
|
168068
168078
|
return;
|
|
168069
168079
|
}
|
|
168070
|
-
const { basicInformation } = this.env.get(BridgeDataProvider);
|
|
168080
|
+
const { basicInformation, featureFlags } = this.env.get(BridgeDataProvider);
|
|
168071
168081
|
const homeAssistant = this.agent.get(HomeAssistantEntityBehavior);
|
|
168072
168082
|
const device = entity.deviceRegistry;
|
|
168073
168083
|
const mapping = homeAssistant.state.mapping;
|
|
168084
|
+
const nodeLabel = ellipse(32, homeAssistant.state.customName) ?? ellipse(32, entity.state?.attributes?.friendly_name) ?? ellipse(32, entity.entity_id);
|
|
168085
|
+
const productNameFromNodeLabel = featureFlags?.productNameFromNodeLabel === true ? nodeLabel : void 0;
|
|
168074
168086
|
applyPatchState(this.state, {
|
|
168075
168087
|
vendorId: VendorId(basicInformation.vendorId),
|
|
168076
168088
|
vendorName: ellipse(32, mapping?.customVendorName) ?? ellipse(32, device?.manufacturer) ?? hash(32, basicInformation.vendorName),
|
|
168077
|
-
productName: ellipse(32, mapping?.customProductName) ?? ellipse(32, device?.model_id) ?? ellipse(32, device?.model) ?? hash(32, basicInformation.productName),
|
|
168089
|
+
productName: ellipse(32, mapping?.customProductName) ?? productNameFromNodeLabel ?? ellipse(32, device?.model_id) ?? ellipse(32, device?.model) ?? hash(32, basicInformation.productName),
|
|
168078
168090
|
productLabel: ellipse(64, device?.model) ?? hash(64, basicInformation.productLabel),
|
|
168079
168091
|
hardwareVersion: basicInformation.hardwareVersion,
|
|
168080
168092
|
softwareVersion: basicInformation.softwareVersion,
|
|
168081
168093
|
hardwareVersionString: ellipse(64, device?.hw_version),
|
|
168082
168094
|
softwareVersionString: ellipse(64, device?.sw_version),
|
|
168083
|
-
nodeLabel
|
|
168095
|
+
nodeLabel,
|
|
168084
168096
|
reachable: entity.state?.state != null && entity.state.state !== "unavailable",
|
|
168085
168097
|
serialNumber: ellipse(32, mapping?.customSerialNumber) ?? hash(32, entity.entity_id),
|
|
168086
168098
|
// UniqueId helps controllers (especially Alexa) identify devices across
|