@riddix/hamh 2.1.0-alpha.639 β 2.1.0-alpha.641
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
|
@@ -56,9 +56,9 @@ of port forwarding etc.
|
|
|
56
56
|
|
|
57
57
|
**New in v2.0.42 (hotfix release):**
|
|
58
58
|
|
|
59
|
-
- π―π΅ Aqara bridge registration no longer stalls
|
|
59
|
+
- π―π΅ Aqara bridge registration no longer stalls, root `softwareVersionString` now matches the numeric `softwareVersion` ([#316](https://github.com/RiDDiX/home-assistant-matter-hub/issues/316))
|
|
60
60
|
- βοΈ Climate `auto` mode is clamped to `heat`/`cool` on devices without an `AutoMode` base ([#319](https://github.com/RiDDiX/home-assistant-matter-hub/issues/319))
|
|
61
|
-
- π Per-entity `disableClimateFanControl` mapping flag
|
|
61
|
+
- π Per-entity `disableClimateFanControl` mapping flag, falls back to `ThermostatDevice` when controllers like Aqara don't recognise `RoomAirConditioner` (`0x0072`) ([#318](https://github.com/RiDDiX/home-assistant-matter-hub/issues/318))
|
|
62
62
|
- πΊοΈ Vacuum service area `selectedAreas` is kept after dispatch instead of being cleared
|
|
63
63
|
|
|
64
64
|
**Previously in v2.0.41:**
|
|
@@ -68,13 +68,13 @@ of port forwarding etc.
|
|
|
68
68
|
| π‘οΈ Google Home AC offline fix | `DeadFrontBehavior` on climate OnOff cluster so RoomAirConditioner stops showing offline on Google Home ([#302](https://github.com/RiDDiX/home-assistant-matter-hub/issues/302)) |
|
|
69
69
|
| πͺ Cover device_class mapping | Map HA `garage`/`gate`/`window`/`awning`/etc. to the matching Matter WindowCovering type so voice commands hit the right device type ([#304](https://github.com/RiDDiX/home-assistant-matter-hub/issues/304)) |
|
|
70
70
|
| πΊ LG TV commissioning patch | Local patch on matter.js 0.16.11 to accept long NOC operational cert serials ([#305](https://github.com/RiDDiX/home-assistant-matter-hub/issues/305)) |
|
|
71
|
-
| π‘ Alexa brightness-reset behind flag | Old Alexa brightness-reset heuristic moved behind `alexaPreserveBrightnessOnTurnOn`, default off
|
|
71
|
+
| π‘ Alexa brightness-reset behind flag | Old Alexa brightness-reset heuristic moved behind `alexaPreserveBrightnessOnTurnOn`, default off, Apple Home "set room to 100%" works again ([#306](https://github.com/RiDDiX/home-assistant-matter-hub/issues/306)) |
|
|
72
72
|
| π Google Home fan speed | Uses `fan.set_percentage` so already-on fans pick up speed changes from Google Home ([#308](https://github.com/RiDDiX/home-assistant-matter-hub/issues/308)) |
|
|
73
73
|
| βοΈ Climate auto mode | Expose Matter Auto mode when HA reports `auto` in `hvac_modes` ([#309](https://github.com/RiDDiX/home-assistant-matter-hub/issues/309)) |
|
|
74
74
|
| π Server-mode root identity | Root identity now applies as a single transaction, so controllers don't drop devices mid-swap ([#311](https://github.com/RiDDiX/home-assistant-matter-hub/issues/311)) |
|
|
75
|
-
| πͺ Lift-only blinds | No more `TiltBlindTiltOnly` on covers without tilt
|
|
75
|
+
| πͺ Lift-only blinds | No more `TiltBlindTiltOnly` on covers without tilt, fixes Alexa routines for roller blinds ([#312](https://github.com/RiDDiX/home-assistant-matter-hub/issues/312)) |
|
|
76
76
|
| π·οΈ Per-entity `disableClimateOnOff` | Turn off the OnOff cluster on climate endpoints per entity for controllers that prefer mode-only control |
|
|
77
|
-
| π’ `serialNumberSuffix` per bridge | Append a suffix to every entity serial
|
|
77
|
+
| π’ `serialNumberSuffix` per bridge | Append a suffix to every entity serial, useful if controllers like Aqara cache stale device data |
|
|
78
78
|
| π `protocolLogLevel` option | Quiet matter.js logs independently from the app log level |
|
|
79
79
|
| π₯οΈ Bridge HW/SW version strings | HA device-registry `hw_version`/`sw_version` now show up in Matter BasicInformation on server-mode endpoints |
|
|
80
80
|
| π¨ Extended color light: XY + enhancedColorMode | XY feature added as mandatory, `enhancedColorMode` mirrors `colorMode` |
|
|
@@ -87,7 +87,7 @@ of port forwarding etc.
|
|
|
87
87
|
**Reliability & resilience:** parallel bridge stop in `stopAll`/`restartAll`, parallel HA registry fetches, serialized bridge start/stop lifecycle, serialized `updateStates` with plugin listener detach, HA reconnect retry on transient network errors, 30s timeout on `sendMessagePromise`, port-conflict reject on web-api start, graceful shutdown on `/api/backup/restart`, `AppEnvironment` disposal on SIGINT, stale optimistic state sweep, pending debouncer clear, healthcheck 401 fix under basic auth, deep-equal entity attribute comparison, overlap guard for auto-refresh, safer mireds conversion, aligned `colorMode` publishing, surfaced bridge import errors, corrected thermostat running state for unknown modes + drying, unified Node version across Dockerfiles, sourcemaps excluded from npm tarball, unused deps dropped (rxjs, strip-color, lodash), unused `config-validator` utility removed.
|
|
88
88
|
|
|
89
89
|
**Previously in v2.0.39 & v2.0.40 (hotfix releases):**
|
|
90
|
-
- 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))
|
|
90
|
+
- 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
|
|
91
91
|
- Fixed service initialization errors being silently swallowed, causing the process to hang instead of exiting
|
|
92
92
|
- Registry fetch now waits for WebSocket reconnect between retries and has increased retry tolerance
|
|
93
93
|
- Fixed `select`, `input_select`, `siren` domains showing as unsupported in filter preview ([#298](https://github.com/RiDDiX/home-assistant-matter-hub/issues/298))
|
|
@@ -161,7 +161,7 @@ of port forwarding etc.
|
|
|
161
161
|
<summary><strong>π Previous Stable Versions</strong> - Click to expand</summary>
|
|
162
162
|
|
|
163
163
|
### v2.0.40
|
|
164
|
-
Filter preview domain fix
|
|
164
|
+
Filter preview domain fix, `select`, `input_select`, `siren` now show as supported ([#298](https://github.com/RiDDiX/home-assistant-matter-hub/issues/298))
|
|
165
165
|
|
|
166
166
|
### v2.0.39
|
|
167
167
|
Node 22 WebSocket crash loop fix ([#297](https://github.com/RiDDiX/home-assistant-matter-hub/issues/297), [#299](https://github.com/RiDDiX/home-assistant-matter-hub/issues/299)), service init error surfacing, registry retry hardening, support link added
|
|
@@ -205,7 +205,7 @@ Vacuum mop intensity, vacuum auto-detection, Roborock room auto-detect, live ent
|
|
|
205
205
|
### v2.0.24
|
|
206
206
|
Dashboard landing page, composed devices, bridge wizard feature flags, entity autocomplete, light transitions, live diagnostics, vacuum suction level, thermostat auto-resume, vacuum docked state, memory leak fix
|
|
207
207
|
|
|
208
|
-
### v2.0.19
|
|
208
|
+
### v2.0.19-v2.0.23
|
|
209
209
|
Bridge templates, live filter preview, entity diagnostics, multi-bridge bulk operations, entity health indicators, diagnostic export, EntityLabel/DeviceLabel filters, Power & Energy Measurement, Event domain (GenericSwitch)
|
|
210
210
|
|
|
211
211
|
### v2.0.17 / v2.0.18
|
|
@@ -347,26 +347,26 @@ configuration options, known issues, limitations and guides.
|
|
|
347
347
|
## π§ Network Troubleshooting
|
|
348
348
|
|
|
349
349
|
<details>
|
|
350
|
-
<summary><strong>β οΈ "No Response" / Connection Drops
|
|
350
|
+
<summary><strong>β οΈ "No Response" / Connection Drops, Common Network Causes</strong> (click to expand)</summary>
|
|
351
351
|
|
|
352
352
|
### The Problem
|
|
353
353
|
|
|
354
|
-
Your Matter devices suddenly show **"No Response"** (Apple Home), **"Unavailable"** (Google Home), or become **unresponsive** after some time
|
|
354
|
+
Your Matter devices suddenly show **"No Response"** (Apple Home), **"Unavailable"** (Google Home), or become **unresponsive** after some time, even though the bridge is still running and other controllers (e.g., Alexa) continue to work fine.
|
|
355
355
|
|
|
356
356
|
### Root Cause: Network Equipment Blocking mDNS/Multicast
|
|
357
357
|
|
|
358
|
-
Matter relies heavily on **mDNS (multicast DNS)** for device discovery and reachability. Many routers, access points, and managed switches have features that **filter, throttle, or block multicast traffic
|
|
358
|
+
Matter relies heavily on **mDNS (multicast DNS)** for device discovery and reachability. Many routers, access points, and managed switches have features that **filter, throttle, or block multicast traffic**, which breaks Matter communication silently.
|
|
359
359
|
|
|
360
|
-
> **π‘ This was confirmed and documented thanks to the excellent systematic testing by [@omerfaruk-aran](https://github.com/omerfaruk-aran) in [#129](https://github.com/RiDDiX/home-assistant-matter-hub/issues/129).** The issue was traced to a TP-Link Archer AX50 (in AP mode) sitting between the Apple TV and the network
|
|
360
|
+
> **π‘ This was confirmed and documented thanks to the excellent systematic testing by [@omerfaruk-aran](https://github.com/omerfaruk-aran) in [#129](https://github.com/RiDDiX/home-assistant-matter-hub/issues/129).** The issue was traced to a TP-Link Archer AX50 (in AP mode) sitting between the Apple TV and the network, its default settings were blocking/limiting mDNS/Bonjour traffic over time.
|
|
361
361
|
|
|
362
362
|
### What to Check on Your Network Equipment
|
|
363
363
|
|
|
364
|
-
1. **IGMP Snooping
|
|
365
|
-
2. **Multicast Optimization / Multicast Enhancement
|
|
366
|
-
3. **AP Isolation / Client Isolation
|
|
367
|
-
4. **mDNS / Bonjour Forwarding
|
|
368
|
-
5. **DHCP Server on secondary devices
|
|
369
|
-
6. **Firmware Updates
|
|
364
|
+
1. **IGMP Snooping**, Disable or configure it to allow mDNS (`224.0.0.251` / `ff02::fb`)
|
|
365
|
+
2. **Multicast Optimization / Multicast Enhancement**, Disable (often called "Airtime Fairness" or "Multicast to Unicast")
|
|
366
|
+
3. **AP Isolation / Client Isolation**, Must be **disabled** so devices on the same network can communicate
|
|
367
|
+
4. **mDNS / Bonjour Forwarding**, Enable if available (some enterprise APs have this)
|
|
368
|
+
5. **DHCP Server on secondary devices**, Disable DHCP on access points / switches that are NOT your main router (multiple DHCP servers cause IP conflicts)
|
|
369
|
+
6. **Firmware Updates**, Update your router/AP firmware, as multicast handling is frequently improved
|
|
370
370
|
|
|
371
371
|
### Affected Equipment (Known Cases)
|
|
372
372
|
|
|
@@ -390,14 +390,14 @@ Matter relies heavily on **mDNS (multicast DNS)** for device discovery and reach
|
|
|
390
390
|
```
|
|
391
391
|
--mdns-network-interface eth0
|
|
392
392
|
```
|
|
393
|
-
(or `end0`, `enp0s18`, etc
|
|
393
|
+
(or `end0`, `enp0s18`, etc., check your system)
|
|
394
394
|
|
|
395
395
|
### Network Topology Tips
|
|
396
396
|
|
|
397
397
|
- **Keep the path simple**: Avoid placing access points or managed switches between your Matter bridge (Home Assistant) and your Home Hub (HomePod/Apple TV)
|
|
398
398
|
- **Use wired connections** where possible for Home Hubs and the Home Assistant host
|
|
399
399
|
- **Same subnet**: All Matter devices, controllers, and the bridge must be on the same Layer 2 network / subnet
|
|
400
|
-
- **IPv6**: Matter requires IPv6
|
|
400
|
+
- **IPv6**: Matter requires IPv6, do not disable it. For VLAN setups, configure **ULA addresses** (`fd00::/8`), not just link-local (`fe80::`). See [Troubleshooting](https://home-assistant-matter-hub.riddix.dev/guides/connectivity-issues#ipv6) and [Discussion #39](https://github.com/RiDDiX/home-assistant-matter-hub/discussions/39)
|
|
401
401
|
|
|
402
402
|
</details>
|
|
403
403
|
|
|
@@ -405,7 +405,7 @@ Matter relies heavily on **mDNS (multicast DNS)** for device discovery and reach
|
|
|
405
405
|
|
|
406
406
|
## Migration from t0bst4r
|
|
407
407
|
|
|
408
|
-
Migrating from the original `t0bst4r/home-assistant-matter-hub` is
|
|
408
|
+
Migrating from the original `t0bst4r/home-assistant-matter-hub` is easy. **Your Matter fabric connections and paired devices will be preserved!**
|
|
409
409
|
|
|
410
410
|
### Home Assistant Add-on
|
|
411
411
|
|
|
@@ -457,22 +457,29 @@ Your volume mounts stay the same - no data migration needed.
|
|
|
457
457
|
|
|
458
458
|
This project thrives thanks to the amazing community! Special thanks to everyone who contributes by reporting bugs, suggesting features, and helping others.
|
|
459
459
|
|
|
460
|
+
> Note: GitHub doesn't surface contributors on this repo because it's still a fork of the original. The list below is maintained by hand.
|
|
461
|
+
|
|
460
462
|
### π Top Contributors
|
|
461
463
|
|
|
464
|
+
Newest first.
|
|
465
|
+
|
|
462
466
|
| Contributor | Contributions |
|
|
463
467
|
|-------------|---------------|
|
|
464
|
-
| [@
|
|
468
|
+
| [@Yllelder](https://github.com/Yllelder) | π **Translator** - Spanish translation ([#314](https://github.com/RiDDiX/home-assistant-matter-hub/pull/314)) |
|
|
469
|
+
| [@MStankiewiczOfficial](https://github.com/MStankiewiczOfficial) | π **Translator** - Polish translation ([#288](https://github.com/RiDDiX/home-assistant-matter-hub/pull/288)) |
|
|
470
|
+
| [@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)) |
|
|
471
|
+
| [@omerfaruk-aran](https://github.com/omerfaruk-aran) | π Turkish translation ([#260](https://github.com/RiDDiX/home-assistant-matter-hub/pull/260)) + π§ Network debugging for "No Response" issues ([#129](https://github.com/RiDDiX/home-assistant-matter-hub/issues/129)) |
|
|
472
|
+
| [@gustavakerstrom](https://github.com/gustavakerstrom) | π€ **Code Contributor** - Custom fan speed mapping ([#226](https://github.com/RiDDiX/home-assistant-matter-hub/pull/226)), template description fix ([#215](https://github.com/RiDDiX/home-assistant-matter-hub/pull/215)) |
|
|
473
|
+
| [@AmineDjeghri](https://github.com/AmineDjeghri) | π Migration instructions for the addon data folder ([#171](https://github.com/RiDDiX/home-assistant-matter-hub/pull/171)) |
|
|
474
|
+
| [@markgaze](https://github.com/markgaze) | π€ **Code Contributor** - Ecovacs Deebot room support ([#118](https://github.com/RiDDiX/home-assistant-matter-hub/pull/118)) |
|
|
475
|
+
| [@codyc1515](https://github.com/codyc1515) | π₯ **Top Reporter** - Climate/thermostat bugs (#52, #24, #21, #20), README badge & install steps ([#285](https://github.com/RiDDiX/home-assistant-matter-hub/pull/285)), binary sensor classes ([#66](https://github.com/RiDDiX/home-assistant-matter-hub/pull/66)), fan control init ([#10](https://github.com/RiDDiX/home-assistant-matter-hub/pull/10)) |
|
|
476
|
+
| [@AymericLeFeyer](https://github.com/AymericLeFeyer) | π README YouTube video link |
|
|
477
|
+
| [@depahk](https://github.com/depahk) | π Migration docs ([#32](https://github.com/RiDDiX/home-assistant-matter-hub/pull/32)) |
|
|
465
478
|
| [@Hatton920](https://github.com/Hatton920) | π€ **Vacuum Expert** - Intensive testing of Robot Vacuum Server Mode, Apple Home & Siri validation |
|
|
466
|
-
| [@
|
|
479
|
+
| [@razzietheman](https://github.com/razzietheman) | π₯ **Active Tester** - Bridge icons (#101), sorting (#80), feature requests (#31, #30), extensive UI/UX feedback |
|
|
467
480
|
| [@SH1FT-W](https://github.com/SH1FT-W) | π **Sponsor** + Vacuum room selection feature request (#49) |
|
|
468
|
-
| [@
|
|
481
|
+
| [@Chrulf](https://github.com/Chrulf) | π Google Home brightness debugging (#41), detailed logs & testing |
|
|
469
482
|
| [@Fettkeewl](https://github.com/Fettkeewl) | π Script import bug (#26), Alias feature request (#25) |
|
|
470
|
-
| [@razzietheman](https://github.com/razzietheman) | π₯ **Active Tester** - Bridge icons (#101), sorting (#80), feature requests (#31, #30), extensive UI/UX feedback |
|
|
471
|
-
| [@markgaze](https://github.com/markgaze) | π€ **Code Contributor** - Ecovacs Deebot room support ([#118](https://github.com/RiDDiX/home-assistant-matter-hub/pull/118)) |
|
|
472
|
-
| [@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)) |
|
|
473
|
-
| [@gustavakerstrom](https://github.com/gustavakerstrom) | π€ **Code Contributor** - Template description display fix ([#215](https://github.com/RiDDiX/home-assistant-matter-hub/pull/215)) |
|
|
474
|
-
| [@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)) |
|
|
475
|
-
| [@Yllelder](https://github.com/Yllelder) | π **Translator** - Spanish translation ([#314](https://github.com/RiDDiX/home-assistant-matter-hub/pull/314)) |
|
|
476
483
|
|
|
477
484
|
<details>
|
|
478
485
|
<summary><strong>π Issue Tracker - All Contributors</strong> (click to expand)</summary>
|
|
@@ -516,7 +523,7 @@ Thank you to everyone who helps improve this project by reporting issues!
|
|
|
516
523
|
|
|
517
524
|
### π Sponsors
|
|
518
525
|
|
|
519
|
-
> **Donations are completely voluntary!** This project exists because of passion for open source, not money. Thank you to everyone who has supported it
|
|
526
|
+
> **Donations are completely voluntary!** This project exists because of passion for open source, not money. Thank you to everyone who has supported it, it truly means a lot! β€οΈ
|
|
520
527
|
|
|
521
528
|
π₯ **First Sponsor:** [@thorsten-gehrig](https://github.com/thorsten-gehrig)
|
|
522
529
|
|
|
@@ -568,3 +575,4 @@ Your support helps cover hosting costs and motivates continued development. Than
|
|
|
568
575
|
</div>
|
|
569
576
|
|
|
570
577
|
---
|
|
578
|
+
|
package/dist/backend/cli.js
CHANGED
|
@@ -146781,7 +146781,7 @@ var init_bridge_config_schema = __esm({
|
|
|
146781
146781
|
},
|
|
146782
146782
|
autoComposedDevices: {
|
|
146783
146783
|
title: "Auto Composed Devices",
|
|
146784
|
-
description: "Master toggle: combine related entities from the same Home Assistant device into a single Matter endpoint. Turns on battery, humidity, pressure, power, and energy auto-mapping at once
|
|
146784
|
+
description: "Master toggle: combine related entities from the same Home Assistant device into a single Matter endpoint. Turns on battery, humidity, pressure, power, and energy auto-mapping at once, a Shelly Plug shows up as one device with power monitoring instead of several siblings.",
|
|
146785
146785
|
type: "boolean",
|
|
146786
146786
|
default: false
|
|
146787
146787
|
},
|
|
@@ -146799,13 +146799,13 @@ var init_bridge_config_schema = __esm({
|
|
|
146799
146799
|
},
|
|
146800
146800
|
preferEntityRegistryName: {
|
|
146801
146801
|
title: "Prefer Entity Registry Name (HA 2026.4 workaround)",
|
|
146802
|
-
description: "Use the entity registry name (or original_name) as nodeLabel instead of the composed friendly_name. Since Home Assistant 2026.4, friendly_name is prefixed with the device name, which breaks voice commands that relied on the short entity name. Resolution order: customName \u2192 registry name \u2192 registry original_name \u2192 friendly_name \u2192 entity_id. Matter has no alias concept
|
|
146802
|
+
description: "Use the entity registry name (or original_name) as nodeLabel instead of the composed friendly_name. Since Home Assistant 2026.4, friendly_name is prefixed with the device name, which breaks voice commands that relied on the short entity name. Resolution order: customName \u2192 registry name \u2192 registry original_name \u2192 friendly_name \u2192 entity_id. Matter has no alias concept, this only changes which single name is reported.",
|
|
146803
146803
|
type: "boolean",
|
|
146804
146804
|
default: false
|
|
146805
146805
|
},
|
|
146806
146806
|
vacuumOnOff: {
|
|
146807
146807
|
title: "Vacuum: Include OnOff Cluster (Alexa)",
|
|
146808
|
-
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
|
|
146808
|
+
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, 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.",
|
|
146809
146809
|
type: "boolean"
|
|
146810
146810
|
},
|
|
146811
146811
|
alexaPreserveBrightnessOnTurnOn: {
|
|
@@ -152748,7 +152748,7 @@ var HomeAssistantRegistry = class extends Service {
|
|
|
152748
152748
|
let refreshing = false;
|
|
152749
152749
|
this.autoRefresh = setInterval(async () => {
|
|
152750
152750
|
if (refreshing) {
|
|
152751
|
-
logger146.debug("Skipping registry refresh
|
|
152751
|
+
logger146.debug("Skipping registry refresh, previous tick still running");
|
|
152752
152752
|
return;
|
|
152753
152753
|
}
|
|
152754
152754
|
refreshing = true;
|
|
@@ -165337,7 +165337,7 @@ var ServerModeServerNode = class extends ServerNode {
|
|
|
165337
165337
|
/**
|
|
165338
165338
|
* Update root-level BasicInformation with entity-specific data.
|
|
165339
165339
|
* In server mode, controllers (Apple Home, Alexa) read the root node's
|
|
165340
|
-
* BasicInformation
|
|
165340
|
+
* BasicInformation, not the device endpoint's BridgedDeviceBasicInformation.
|
|
165341
165341
|
* Without this, server-mode devices show bridge defaults (e.g. "riddix" / "MatterHub").
|
|
165342
165342
|
*/
|
|
165343
165343
|
async updateDeviceIdentity(entityId, device, mapping, friendlyName) {
|
|
@@ -167848,7 +167848,7 @@ ${e?.toString()}`);
|
|
|
167848
167848
|
);
|
|
167849
167849
|
if (totalSubs === 0 && sessions.length > 0) {
|
|
167850
167850
|
this.log.warn(
|
|
167851
|
-
`All subscriptions lost
|
|
167851
|
+
`All subscriptions lost, ${sessions.length} session(s) still active, waiting for controller to re-subscribe`
|
|
167852
167852
|
);
|
|
167853
167853
|
if (!this.deadSessionTimer) {
|
|
167854
167854
|
this.deadSessionTimer = setTimeout(() => {
|
|
@@ -167896,7 +167896,7 @@ ${e?.toString()}`);
|
|
|
167896
167896
|
for (const s of [...sessionManager.sessions]) {
|
|
167897
167897
|
if (s !== newSession && !s.isClosing && s.peerNodeId === newSession.peerNodeId && s.fabric?.fabricIndex === newSession.fabric?.fabricIndex && s.subscriptions.size === 0) {
|
|
167898
167898
|
this.log.info(
|
|
167899
|
-
`Closing stale session ${s.id} (peer ${s.peerNodeId}, 0 subs)
|
|
167899
|
+
`Closing stale session ${s.id} (peer ${s.peerNodeId}, 0 subs), replaced by session ${newSession.id}`
|
|
167900
167900
|
);
|
|
167901
167901
|
s.initiateForceClose().catch(() => {
|
|
167902
167902
|
});
|
|
@@ -169200,7 +169200,7 @@ var FeaturedBase5 = FanControlServer.with(
|
|
|
169200
169200
|
"Rocking",
|
|
169201
169201
|
"Wind"
|
|
169202
169202
|
).set({
|
|
169203
|
-
// rockSupport / windSupport are Fixed quality attributes
|
|
169203
|
+
// rockSupport / windSupport are Fixed quality attributes, they MUST be set
|
|
169204
169204
|
// via .set() at behavior creation time, NOT in initialize().
|
|
169205
169205
|
// Without these, controllers reject attempts to enable rocking/wind.
|
|
169206
169206
|
rockSupport: { rockUpDown: true },
|
|
@@ -171304,7 +171304,7 @@ var ThermostatServerBase = class extends FullFeaturedBase {
|
|
|
171304
171304
|
// Heat/Cool/Off but SKIPS Auto (see #handleSystemModeChange in Matter.js).
|
|
171305
171305
|
// Without this, switching HeatβAuto leaves runningMode stale at Heat.
|
|
171306
171306
|
// 889010b set for ALL modes (conflicted with reactor), 0678d35 set for NONE
|
|
171307
|
-
// (stale in Auto). da04b2e's Auto-only approach is correct
|
|
171307
|
+
// (stale in Auto). da04b2e's Auto-only approach is correct, the issues
|
|
171308
171308
|
// reported after it were caused by localTemperature fallback, not runningMode.
|
|
171309
171309
|
...this.features.heating && this.features.cooling && systemMode === Thermostat3.SystemMode.Auto ? { thermostatRunningMode: runningMode } : {}
|
|
171310
171310
|
});
|
|
@@ -171589,7 +171589,7 @@ var CoolingOnlyThermostatServerBase = class extends CoolingOnlyFeaturedBase {
|
|
|
171589
171589
|
static State = class extends CoolingOnlyFeaturedBase.State {
|
|
171590
171590
|
config;
|
|
171591
171591
|
};
|
|
171592
|
-
// Each variant MUST define its own initialize()
|
|
171592
|
+
// Each variant MUST define its own initialize(), see HeatingOnly comment above.
|
|
171593
171593
|
async initialize() {
|
|
171594
171594
|
thermostatPreInitialize(this);
|
|
171595
171595
|
await super.initialize();
|
|
@@ -171611,7 +171611,7 @@ var HeatingAndCoolingThermostatServerBase = class extends HeatingAndCoolingFeatu
|
|
|
171611
171611
|
static State = class extends HeatingAndCoolingFeaturedBase.State {
|
|
171612
171612
|
config;
|
|
171613
171613
|
};
|
|
171614
|
-
// Each variant MUST define its own initialize()
|
|
171614
|
+
// Each variant MUST define its own initialize(), see HeatingOnly comment above.
|
|
171615
171615
|
async initialize() {
|
|
171616
171616
|
thermostatPreInitialize(this);
|
|
171617
171617
|
await super.initialize();
|
|
@@ -172239,7 +172239,7 @@ var WindowCoveringServerBase = class _WindowCoveringServerBase extends FeaturedB
|
|
|
172239
172239
|
} else if (type === MovementType.Tilt) {
|
|
172240
172240
|
if (targetPercent100ths == null && this.lastLiftMovementDirection === direction && Date.now() - this.lastLiftMovementMs < 50) {
|
|
172241
172241
|
logger179.info(
|
|
172242
|
-
`Skipping tilt ${MovementDirection[direction]}
|
|
172242
|
+
`Skipping tilt ${MovementDirection[direction]}, lift already moving in same direction`
|
|
172243
172243
|
);
|
|
172244
172244
|
return;
|
|
172245
172245
|
}
|
|
@@ -174674,7 +174674,7 @@ var SpeakerLevelControlServerBase = class extends FeaturedBase8 {
|
|
|
174674
174674
|
*
|
|
174675
174675
|
* The base class registers a reactor on onOff$Changed that sets
|
|
174676
174676
|
* currentLevel = onLevel. This is designed for lights (restore brightness
|
|
174677
|
-
* on power-on) but is wrong for speakers
|
|
174677
|
+
* on power-on) but is wrong for speakers, it overwrites the correct
|
|
174678
174678
|
* volume (e.g. 191 for 75%) with a stale onLevel value, causing Google
|
|
174679
174679
|
* Home to display the wrong percentage (Issue #79).
|
|
174680
174680
|
*/
|
|
@@ -176679,7 +176679,7 @@ function SensorDevice(homeAssistantEntity) {
|
|
|
176679
176679
|
if (deviceClass) {
|
|
176680
176680
|
diagnosticEventBus.emit(
|
|
176681
176681
|
"entity_warning",
|
|
176682
|
-
`Sensor "${homeAssistantEntity.entity.entity_id}" has unsupported device_class "${deviceClass}"
|
|
176682
|
+
`Sensor "${homeAssistantEntity.entity.entity_id}" has unsupported device_class "${deviceClass}", skipped`,
|
|
176683
176683
|
{
|
|
176684
176684
|
entityId: homeAssistantEntity.entity.entity_id,
|
|
176685
176685
|
details: { device_class: deviceClass }
|
|
@@ -176795,7 +176795,7 @@ var VacuumIdentifyServer = class extends IdentifyServer2 {
|
|
|
176795
176795
|
return;
|
|
176796
176796
|
}
|
|
176797
176797
|
logger190.warn(
|
|
176798
|
-
`${source} for ${homeAssistant.entityId}
|
|
176798
|
+
`${source} for ${homeAssistant.entityId}, LOCATE not in supported_features (${features2}), trying vacuum.locate anyway`
|
|
176799
176799
|
);
|
|
176800
176800
|
homeAssistant.callAction({ action: "vacuum.locate" });
|
|
176801
176801
|
}
|
|
@@ -176925,7 +176925,7 @@ var RvcRunModeServerBase = class extends RvcRunModeServer {
|
|
|
176925
176925
|
if (!currentRoomEntityId) {
|
|
176926
176926
|
this.logShortCircuitOnce(
|
|
176927
176927
|
"no-mapping",
|
|
176928
|
-
"currentRoom sensor: no currentRoomEntity in mapping
|
|
176928
|
+
"currentRoom sensor: no currentRoomEntity in mapping, auto-detect did not run or sensor not on same HA device"
|
|
176929
176929
|
);
|
|
176930
176930
|
return;
|
|
176931
176931
|
}
|
|
@@ -176941,7 +176941,7 @@ var RvcRunModeServerBase = class extends RvcRunModeServer {
|
|
|
176941
176941
|
if (s.activeAreas.length === 0) {
|
|
176942
176942
|
this.logShortCircuitOnce(
|
|
176943
176943
|
"no-active-areas",
|
|
176944
|
-
`currentRoom sensor: activeAreas empty while cleaning
|
|
176944
|
+
`currentRoom sensor: activeAreas empty while cleaning, sensor=${currentRoomEntityId} state="${roomState.state}"`
|
|
176945
176945
|
);
|
|
176946
176946
|
return;
|
|
176947
176947
|
}
|
|
@@ -178306,42 +178306,24 @@ function buildSupportedModes3(fanSpeedList, mopIntensityList, cleaningModeOption
|
|
|
178306
178306
|
}
|
|
178307
178307
|
return modes;
|
|
178308
178308
|
}
|
|
178309
|
-
var
|
|
178310
|
-
|
|
178311
|
-
|
|
178312
|
-
|
|
178313
|
-
"Vacuuming",
|
|
178314
|
-
"Sweep",
|
|
178315
|
-
"vacuum",
|
|
178316
|
-
"sweeping",
|
|
178317
|
-
"sweep"
|
|
178318
|
-
],
|
|
178319
|
-
[1 /* Mopping */]: ["Mopping", "Mop", "mopping", "mop", "wet_mop"],
|
|
178320
|
-
[2 /* SweepingAndMopping */]: [
|
|
178321
|
-
"Sweeping and mopping",
|
|
178322
|
-
"Vacuum and mop",
|
|
178323
|
-
"Vacuum & Mop",
|
|
178324
|
-
"Vacuum & mop",
|
|
178325
|
-
"vacuum_and_mop",
|
|
178326
|
-
"sweeping_and_mopping",
|
|
178327
|
-
"Sweep Mop",
|
|
178328
|
-
"Sweep & Mop",
|
|
178329
|
-
"Sweep and Mop",
|
|
178330
|
-
"sweep_mop"
|
|
178331
|
-
],
|
|
178332
|
-
[3 /* MoppingAfterSweeping */]: [
|
|
178333
|
-
"Mopping after sweeping",
|
|
178334
|
-
"mopping_after_sweeping",
|
|
178335
|
-
"Vacuum then mop",
|
|
178336
|
-
"Mop after vacuum",
|
|
178337
|
-
"vacuum_then_mop",
|
|
178338
|
-
"mop_after_vacuum",
|
|
178339
|
-
"Sweep Before Mopping",
|
|
178340
|
-
"Sweep before Mop",
|
|
178341
|
-
"sweep_before_mopping",
|
|
178342
|
-
"sweep_then_mop"
|
|
178343
|
-
]
|
|
178309
|
+
var CLEAN_TOKENS = {
|
|
178310
|
+
vacuum: /\b(vacuum|vacuuming|sweep|sweeping|suction)\b/i,
|
|
178311
|
+
mop: /\b(mop|mopping|wipe|wet)\b/i,
|
|
178312
|
+
sequential: /\b(then|after|before|followed|following)\b/i
|
|
178344
178313
|
};
|
|
178314
|
+
function normalizeCleanLabel(s) {
|
|
178315
|
+
return s.toLowerCase().replace(/[_\-+&/]+/g, " ").replace(/\band\b/g, " ").trim();
|
|
178316
|
+
}
|
|
178317
|
+
function classifyCleanOption(option) {
|
|
178318
|
+
const s = normalizeCleanLabel(option);
|
|
178319
|
+
const hasVac = CLEAN_TOKENS.vacuum.test(s);
|
|
178320
|
+
const hasMop = CLEAN_TOKENS.mop.test(s);
|
|
178321
|
+
const hasSeq = CLEAN_TOKENS.sequential.test(s);
|
|
178322
|
+
if (hasVac && hasMop && hasSeq) return 3 /* MoppingAfterSweeping */;
|
|
178323
|
+
if (hasVac && hasMop) return 2 /* SweepingAndMopping */;
|
|
178324
|
+
if (hasMop) return 1 /* Mopping */;
|
|
178325
|
+
return 0 /* Sweeping */;
|
|
178326
|
+
}
|
|
178345
178327
|
var CLEAN_TYPE_LABELS = {
|
|
178346
178328
|
[0 /* Sweeping */]: "Sweeping",
|
|
178347
178329
|
[1 /* Mopping */]: "Mopping",
|
|
@@ -178474,19 +178456,7 @@ function matchMopIntensityOption(name, availableOptions) {
|
|
|
178474
178456
|
}
|
|
178475
178457
|
function parseCleanType(modeString) {
|
|
178476
178458
|
if (!modeString) return 0 /* Sweeping */;
|
|
178477
|
-
|
|
178478
|
-
if (s.includes("after sweeping") || s.includes("after sweep") || s.includes("after vacuum") || s.includes("then mop") || s.includes("before mop")) {
|
|
178479
|
-
return 3 /* MoppingAfterSweeping */;
|
|
178480
|
-
}
|
|
178481
|
-
const mentionsSweep = s.includes("sweep") || s.includes("vacuum");
|
|
178482
|
-
const mentionsMop = s.includes("mop");
|
|
178483
|
-
if (mentionsSweep && mentionsMop) {
|
|
178484
|
-
return 2 /* SweepingAndMopping */;
|
|
178485
|
-
}
|
|
178486
|
-
if (mentionsMop) {
|
|
178487
|
-
return 1 /* Mopping */;
|
|
178488
|
-
}
|
|
178489
|
-
return 0 /* Sweeping */;
|
|
178459
|
+
return classifyCleanOption(modeString);
|
|
178490
178460
|
}
|
|
178491
178461
|
function cleanTypeToModeId(ct) {
|
|
178492
178462
|
switch (ct) {
|
|
@@ -178527,30 +178497,20 @@ var CLEAN_TYPE_FALLBACK = {
|
|
|
178527
178497
|
[3 /* MoppingAfterSweeping */]: 2 /* SweepingAndMopping */
|
|
178528
178498
|
};
|
|
178529
178499
|
function findMatchingCleanOption(ct, availableOptions) {
|
|
178530
|
-
|
|
178531
|
-
|
|
178500
|
+
if (!availableOptions || availableOptions.length === 0) {
|
|
178501
|
+
return CLEAN_TYPE_LABELS[ct];
|
|
178502
|
+
}
|
|
178532
178503
|
const typesToTry = [ct];
|
|
178533
178504
|
const fallback = CLEAN_TYPE_FALLBACK[ct];
|
|
178534
178505
|
if (fallback !== void 0) typesToTry.push(fallback);
|
|
178535
178506
|
for (const type of typesToTry) {
|
|
178536
|
-
const
|
|
178537
|
-
|
|
178538
|
-
const match = availableOptions.find(
|
|
178539
|
-
(o) => o.toLowerCase() === alias.toLowerCase()
|
|
178540
|
-
);
|
|
178541
|
-
if (match) return match;
|
|
178542
|
-
}
|
|
178543
|
-
for (const alias of typeAliases) {
|
|
178544
|
-
const match = availableOptions.find(
|
|
178545
|
-
(o) => o.toLowerCase().includes(alias.toLowerCase())
|
|
178546
|
-
);
|
|
178547
|
-
if (match) return match;
|
|
178548
|
-
}
|
|
178507
|
+
const match = availableOptions.find((o) => classifyCleanOption(o) === type);
|
|
178508
|
+
if (match) return match;
|
|
178549
178509
|
}
|
|
178550
178510
|
logger196.warn(
|
|
178551
178511
|
`No match for ${CLEAN_TYPE_LABELS[ct]} in [${availableOptions.join(", ")}]`
|
|
178552
178512
|
);
|
|
178553
|
-
return
|
|
178513
|
+
return availableOptions[0];
|
|
178554
178514
|
}
|
|
178555
178515
|
function buildCleaningModeAction(targetCleanType, agent) {
|
|
178556
178516
|
const selectEntityId = getCleaningModeSelectEntity(agent);
|
|
@@ -178685,7 +178645,7 @@ function createCleanModeConfig(fanSpeedList, mopIntensityList, cleaningModeOptio
|
|
|
178685
178645
|
const vacuumEntityId = homeAssistant.entityId;
|
|
178686
178646
|
const mapping = homeAssistant.state.mapping;
|
|
178687
178647
|
logger196.info(
|
|
178688
|
-
`setCleanMode(${mode}) for ${vacuumEntityId}
|
|
178648
|
+
`setCleanMode(${mode}) for ${vacuumEntityId}, suctionEntity=${mapping?.suctionLevelEntity ?? "none"}, mopEntity=${mapping?.mopIntensityEntity ?? "none"}, fanSpeedList=${JSON.stringify(fanSpeedList ?? [])}, mopIntensityList=${JSON.stringify(mopIntensityList ?? [])}, customTags=${JSON.stringify(customFanSpeedTags ?? {})}`
|
|
178689
178649
|
);
|
|
178690
178650
|
if (mopIntensityList && mopIntensityList.length > 0 && isMopIntensityMode(mode)) {
|
|
178691
178651
|
const mopIndex = mode - MOP_INTENSITY_MODE_BASE;
|
|
@@ -180652,7 +180612,7 @@ var BridgeEndpointManager = class extends Service {
|
|
|
180652
180612
|
this.mappingFingerprints.delete(endpoint.entityId);
|
|
180653
180613
|
} else if (this.registry.isAutoComposedDevicesEnabled() && this.registry.isComposedSubEntityUsed(endpoint.entityId)) {
|
|
180654
180614
|
this.log.info(
|
|
180655
|
-
`Deleting standalone endpoint ${endpoint.entityId}
|
|
180615
|
+
`Deleting standalone endpoint ${endpoint.entityId}, consumed by composed device`
|
|
180656
180616
|
);
|
|
180657
180617
|
try {
|
|
180658
180618
|
await endpoint.delete();
|
|
@@ -180690,14 +180650,14 @@ var BridgeEndpointManager = class extends Service {
|
|
|
180690
180650
|
if (!memoryLimitReached && isHeapUnderPressure()) {
|
|
180691
180651
|
memoryLimitReached = true;
|
|
180692
180652
|
this.log.error(
|
|
180693
|
-
"Memory pressure detected
|
|
180653
|
+
"Memory pressure detected, skipping remaining entities to prevent OOM crash. Reduce the number of entities in this bridge or increase the Node.js heap size (NODE_OPTIONS=--max-old-space-size=1024)."
|
|
180694
180654
|
);
|
|
180695
180655
|
}
|
|
180696
180656
|
if (memoryLimitReached) {
|
|
180697
180657
|
if (!existingEndpoints.some((e) => e.entityId === entityId)) {
|
|
180698
180658
|
this._failedEntities.push({
|
|
180699
180659
|
entityId,
|
|
180700
|
-
reason: "Skipped due to memory pressure
|
|
180660
|
+
reason: "Skipped due to memory pressure, reduce entities or increase heap size"
|
|
180701
180661
|
});
|
|
180702
180662
|
}
|
|
180703
180663
|
continue;
|
|
@@ -180709,7 +180669,7 @@ var BridgeEndpointManager = class extends Service {
|
|
|
180709
180669
|
}
|
|
180710
180670
|
if (this.registry.isAutoComposedDevicesEnabled() && this.registry.isComposedSubEntityUsed(entityId)) {
|
|
180711
180671
|
this.log.debug(
|
|
180712
|
-
`Skipping ${entityId}
|
|
180672
|
+
`Skipping ${entityId}, already part of a composed device`
|
|
180713
180673
|
);
|
|
180714
180674
|
continue;
|
|
180715
180675
|
}
|
|
@@ -180809,7 +180769,7 @@ var BridgeEndpointManager = class extends Service {
|
|
|
180809
180769
|
}
|
|
180810
180770
|
/**
|
|
180811
180771
|
* Log detailed behavior error information for debugging "Behaviors have errors".
|
|
180812
|
-
* Matter.js EndpointBehaviorsError extends AggregateError
|
|
180772
|
+
* Matter.js EndpointBehaviorsError extends AggregateError, the `errors` array
|
|
180813
180773
|
* contains individual behavior crash errors (one per failed behavior).
|
|
180814
180774
|
*/
|
|
180815
180775
|
logDetailedError(entityId, error) {
|
|
@@ -180958,7 +180918,7 @@ var BridgeRegistry = class _BridgeRegistry {
|
|
|
180958
180918
|
* Check if auto composed devices mode is enabled.
|
|
180959
180919
|
* When enabled, temperature sensors with auto-mapped humidity/pressure/battery
|
|
180960
180920
|
* build real Matter Composed Devices (BridgedNodeEndpoint with sub-endpoints)
|
|
180961
|
-
* rather than stacking extra clusters onto a flat TemperatureSensor
|
|
180921
|
+
* rather than stacking extra clusters onto a flat TemperatureSensor.
|
|
180962
180922
|
* Apple Home, Google Home, and Alexa render each sub-endpoint using its
|
|
180963
180923
|
* own device type.
|
|
180964
180924
|
*/
|
|
@@ -181263,14 +181223,14 @@ var BridgeRegistry = class _BridgeRegistry {
|
|
|
181263
181223
|
const segments = areaMapping[haAreaId];
|
|
181264
181224
|
if (!segments || segments.length === 0) {
|
|
181265
181225
|
_BridgeRegistry.cleanAreaLogger.debug(
|
|
181266
|
-
`${entityId}: Skipping HA area ${haAreaId}
|
|
181226
|
+
`${entityId}: Skipping HA area ${haAreaId}, no segments mapped`
|
|
181267
181227
|
);
|
|
181268
181228
|
continue;
|
|
181269
181229
|
}
|
|
181270
181230
|
if (validSegmentIds && !segments.some((sid) => validSegmentIds.has(sid))) {
|
|
181271
181231
|
const areaName2 = this.registry.areas.get(haAreaId) ?? haAreaId;
|
|
181272
181232
|
_BridgeRegistry.cleanAreaLogger.info(
|
|
181273
|
-
`${entityId}: Skipping stale HA area "${areaName2}" (${haAreaId})
|
|
181233
|
+
`${entityId}: Skipping stale HA area "${areaName2}" (${haAreaId}), segments [${segments.join(", ")}] no longer exist on vacuum`
|
|
181274
181234
|
);
|
|
181275
181235
|
continue;
|
|
181276
181236
|
}
|
|
@@ -181746,7 +181706,7 @@ ${e?.toString()}`);
|
|
|
181746
181706
|
);
|
|
181747
181707
|
if (totalSubs === 0 && sessions.length > 0) {
|
|
181748
181708
|
this.log.warn(
|
|
181749
|
-
`All subscriptions lost
|
|
181709
|
+
`All subscriptions lost, ${sessions.length} session(s) still active, waiting for controller to re-subscribe`
|
|
181750
181710
|
);
|
|
181751
181711
|
if (!this.deadSessionTimer) {
|
|
181752
181712
|
this.deadSessionTimer = setTimeout(() => {
|
|
@@ -181785,7 +181745,7 @@ ${e?.toString()}`);
|
|
|
181785
181745
|
for (const s of [...sessionManager.sessions]) {
|
|
181786
181746
|
if (s !== newSession && !s.isClosing && s.peerNodeId === newSession.peerNodeId && s.fabric?.fabricIndex === newSession.fabric?.fabricIndex && s.subscriptions.size === 0) {
|
|
181787
181747
|
this.log.info(
|
|
181788
|
-
`Closing stale session ${s.id} (peer ${s.peerNodeId}, 0 subs)
|
|
181748
|
+
`Closing stale session ${s.id} (peer ${s.peerNodeId}, 0 subs), replaced by session ${newSession.id}`
|
|
181789
181749
|
);
|
|
181790
181750
|
s.initiateForceClose().catch(() => {
|
|
181791
181751
|
});
|
|
@@ -182206,7 +182166,7 @@ var ServerModeVacuumEndpoint = class _ServerModeVacuumEndpoint extends EntityEnd
|
|
|
182206
182166
|
}
|
|
182207
182167
|
}
|
|
182208
182168
|
} else {
|
|
182209
|
-
logger205.warn(`${entityId}: No device_id
|
|
182169
|
+
logger205.warn(`${entityId}: No device_id, cannot auto-assign battery`);
|
|
182210
182170
|
}
|
|
182211
182171
|
const payload = {
|
|
182212
182172
|
entity_id: entityId,
|
|
@@ -182262,7 +182222,7 @@ var ServerModeVacuumEndpoint = class _ServerModeVacuumEndpoint extends EntityEnd
|
|
|
182262
182222
|
* Previous approaches that pushed state through
|
|
182263
182223
|
* HomeAssistantEntityBehavior failed because the reactor writes
|
|
182264
182224
|
* (RvcOperationalStateServer.update()) run inside the postCommit
|
|
182265
|
-
* phase of the HAEntityBehavior transaction
|
|
182225
|
+
* phase of the HAEntityBehavior transaction, those writes are
|
|
182266
182226
|
* buffered but never committed, so no attrsChanged event reaches
|
|
182267
182227
|
* the ServerSubscription.
|
|
182268
182228
|
*
|
|
@@ -182508,11 +182468,11 @@ var ServerModeEndpointManager = class extends Service {
|
|
|
182508
182468
|
}
|
|
182509
182469
|
if (isHeapUnderPressure()) {
|
|
182510
182470
|
this.log.error(
|
|
182511
|
-
"Memory pressure detected
|
|
182471
|
+
"Memory pressure detected, cannot create device endpoint. Reduce entities on other bridges or increase the Node.js heap size (NODE_OPTIONS=--max-old-space-size=1024)."
|
|
182512
182472
|
);
|
|
182513
182473
|
this._failedEntities.push({
|
|
182514
182474
|
entityId,
|
|
182515
|
-
reason: "Skipped due to memory pressure
|
|
182475
|
+
reason: "Skipped due to memory pressure, reduce entities or increase heap size"
|
|
182516
182476
|
});
|
|
182517
182477
|
return;
|
|
182518
182478
|
}
|
|
@@ -182902,7 +182862,7 @@ function patchLevelControlTlv() {
|
|
|
182902
182862
|
);
|
|
182903
182863
|
} else {
|
|
182904
182864
|
logger206.warn(
|
|
182905
|
-
"Failed to patch LevelControl TLV schemas
|
|
182865
|
+
"Failed to patch LevelControl TLV schemas, field definitions not found. Google Home brightness adjustment may not work."
|
|
182906
182866
|
);
|
|
182907
182867
|
}
|
|
182908
182868
|
}
|