@riddix/hamh 2.1.0-alpha.438 → 2.1.0-alpha.440

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.29 | Production-ready, recommended for most users |
40
+ | **Stable** | `main` | v2.0.30 | 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,36 +52,30 @@ of port forwarding etc.
52
52
  ## 🎉 What's New
53
53
 
54
54
  <details>
55
- <summary><strong>📦 Stable Features (v2.0.29)</strong> - Click to expand</summary>
55
+ <summary><strong>📦 Stable Features (v2.0.30)</strong> - Click to expand</summary>
56
56
 
57
- **New in v2.0.29:**
57
+ **New in v2.0.30:**
58
58
 
59
59
  | Feature | Description |
60
60
  |---------|-------------|
61
- | **💡 Light currentLevel Fix** | Retain light currentLevel when off to prevent Apple Home 100% brightness on turn-on ([#225](https://github.com/RiDDiX/home-assistant-matter-hub/issues/225)) |
62
- | **🖥️ Bridge Config Save Fix** | Decouple save button from RJSF schema validation errors save works even with optional field warnings ([#232](https://github.com/RiDDiX/home-assistant-matter-hub/issues/232)) |
63
- | **🌀 Fan Device Feature Fix** | Correct FanDeviceFeature TURN_ON/TURN_OFF enum values to match Home Assistant |
64
- | **🌡️ Humidity Auto-Mapping Fix** | Correct autoHumidityMapping schema default to match runtime behavior |
61
+ | **� Mapped Entity Propagation Fix** | Propagate mapped entity changes (battery, humidity, etc.) to Matter endpoints fixes stale sensor readings |
62
+ | **🖥️ API Error Surfacing** | Surface API errors instead of silently swallowing them ([#232](https://github.com/RiDDiX/home-assistant-matter-hub/issues/232)) |
65
63
 
66
- **Previously in v2.0.28:**
64
+ **Previously in v2.0.29:**
67
65
 
68
66
  | Feature | Description |
69
67
  |---------|-------------|
70
- | **🖼️ Device Image Support** | Device cards show images from Zigbee2MQTT or custom uploads ([#221](https://github.com/RiDDiX/home-assistant-matter-hub/issues/221)) |
71
- | **🌀 Custom Fan Speed Mapping** | Define custom fan speed levels with named presets ([#226](https://github.com/RiDDiX/home-assistant-matter-hub/pull/226)) |
72
- | **📺 TV Source Selection** | MediaInput cluster added to VideoPlayerDevice for input switching ([#231](https://github.com/RiDDiX/home-assistant-matter-hub/issues/231)) |
73
- | **🔀 Reverse Proxy Base Path** | `--http-base-path` option for subfolder reverse proxy support ([#228](https://github.com/RiDDiX/home-assistant-matter-hub/issues/228)) |
74
- | **🌀 On/Off-Only Fans** | Fans without speed control correctly use OnOffPlugInUnit ([#229](https://github.com/RiDDiX/home-assistant-matter-hub/issues/229)) |
75
- | **💡 Light Brightness Fix** | Prevent brightness reset on turn-on by setting onLevel to null ([#225](https://github.com/RiDDiX/home-assistant-matter-hub/issues/225)) |
76
- | **🌀 Fan Speed Fixes** | speedMax cap raised from 10 to 100 (Matter spec max), retain speed when off ([#225](https://github.com/RiDDiX/home-assistant-matter-hub/issues/225)) |
77
- | **🌡️ Composed Air Purifier Fix** | Flatten to single endpoint for correct Apple Home primary tile ([#218](https://github.com/RiDDiX/home-assistant-matter-hub/issues/218)) |
68
+ | **� Light currentLevel Fix** | Retain light currentLevel when off to prevent Apple Home 100% brightness on turn-on ([#225](https://github.com/RiDDiX/home-assistant-matter-hub/issues/225)) |
69
+ | **�️ Bridge Config Save Fix** | Decouple save button from RJSF schema validation errors ([#232](https://github.com/RiDDiX/home-assistant-matter-hub/issues/232)) |
70
+ | **🌀 Fan Device Feature Fix** | Correct FanDeviceFeature TURN_ON/TURN_OFF enum values to match Home Assistant |
71
+ | **🌡️ Humidity Auto-Mapping Fix** | Correct autoHumidityMapping schema default to match runtime behavior |
78
72
 
79
73
  </details>
80
74
 
81
75
  <details>
82
76
  <summary><strong>🧪 Alpha Features (v2.1.0-alpha.x)</strong> - Click to expand</summary>
83
77
 
84
- **Alpha is currently in sync with Stable (v2.0.29).** All alpha features have been promoted to stable. New alpha features will appear here as development continues.
78
+ **Alpha is currently in sync with Stable (v2.0.30).** All alpha features have been promoted to stable. New alpha features will appear here as development continues.
85
79
 
86
80
  </details>
87
81
 
@@ -107,6 +101,9 @@ of port forwarding etc.
107
101
  <details>
108
102
  <summary><strong>📜 Previous Stable Versions</strong> - Click to expand</summary>
109
103
 
104
+ ### v2.0.29
105
+ Light currentLevel Fix, Bridge Config Save Fix, Fan Device Feature Fix, Humidity Auto-Mapping Fix
106
+
110
107
  ### v2.0.28
111
108
  Device Image Support, Custom Fan Speed Mapping, TV Source Selection, Reverse Proxy Base Path, On/Off-Only Fans, Light Brightness Fix, Fan Speed Fixes, Composed Air Purifier Fix, Dreame Multi-Floor Fix, Optimistic State Updates, Frontend Improvements
112
109
 
@@ -165933,12 +165933,8 @@ var FanControlServerBase = class extends FeaturedBase3 {
165933
165933
  return;
165934
165934
  }
165935
165935
  this.agent.asLocalActor(() => {
165936
- const percentSetting = Math.floor(speed / this.state.speedMax * 100);
165937
- this.targetPercentSettingChanged(
165938
- percentSetting,
165939
- this.state.percentSetting,
165940
- context
165941
- );
165936
+ const percentage = Math.floor(speed / this.state.speedMax * 100);
165937
+ this.applyPercentageAction(percentage);
165942
165938
  });
165943
165939
  }
165944
165940
  targetFanModeChanged(fanMode, _oldValue, context) {
@@ -165951,16 +165947,12 @@ var FanControlServerBase = class extends FeaturedBase3 {
165951
165947
  return;
165952
165948
  }
165953
165949
  const targetFanMode = FanMode.create(fanMode, this.state.fanModeSequence);
165954
- const config10 = this.state.config;
165955
165950
  if (targetFanMode.mode === FanControl3.FanMode.Auto) {
165956
- homeAssistant.callAction(config10.setAutoMode(void 0, this.agent));
165957
- } else {
165958
- const percentage = targetFanMode.speedPercent();
165959
- this.targetPercentSettingChanged(
165960
- percentage,
165961
- this.state.percentSetting,
165962
- context
165951
+ homeAssistant.callAction(
165952
+ this.state.config.setAutoMode(void 0, this.agent)
165963
165953
  );
165954
+ } else {
165955
+ this.applyPercentageAction(targetFanMode.speedPercent());
165964
165956
  }
165965
165957
  });
165966
165958
  }
@@ -165972,45 +165964,48 @@ var FanControlServerBase = class extends FeaturedBase3 {
165972
165964
  return;
165973
165965
  }
165974
165966
  this.agent.asLocalActor(() => {
165975
- const homeAssistant = this.agent.get(HomeAssistantEntityBehavior);
165976
- if (!homeAssistant.isAvailable) {
165977
- return;
165978
- }
165979
- const config10 = this.state.config;
165980
- const supportsPercentage = config10.supportsPercentage(
165967
+ this.applyPercentageAction(percentage);
165968
+ });
165969
+ }
165970
+ applyPercentageAction(percentage) {
165971
+ const homeAssistant = this.agent.get(HomeAssistantEntityBehavior);
165972
+ if (!homeAssistant.isAvailable) {
165973
+ return;
165974
+ }
165975
+ const config10 = this.state.config;
165976
+ const supportsPercentage = config10.supportsPercentage(
165977
+ homeAssistant.entity.state,
165978
+ this.agent
165979
+ );
165980
+ if (percentage === 0) {
165981
+ homeAssistant.callAction(config10.turnOff(void 0, this.agent));
165982
+ } else if (supportsPercentage) {
165983
+ const stepSize = config10.getStepSize(
165981
165984
  homeAssistant.entity.state,
165982
165985
  this.agent
165983
165986
  );
165984
- if (percentage === 0) {
165985
- homeAssistant.callAction(config10.turnOff(void 0, this.agent));
165986
- } else if (supportsPercentage) {
165987
- const stepSize = config10.getStepSize(
165988
- homeAssistant.entity.state,
165989
- this.agent
165990
- );
165991
- const roundedPercentage = stepSize && stepSize > 0 ? Math.round(percentage / stepSize) * stepSize : percentage;
165992
- const clampedPercentage = Math.max(
165993
- stepSize ?? 1,
165994
- Math.min(100, roundedPercentage)
165987
+ const roundedPercentage = stepSize && stepSize > 0 ? Math.round(percentage / stepSize) * stepSize : percentage;
165988
+ const clampedPercentage = Math.max(
165989
+ stepSize ?? 1,
165990
+ Math.min(100, roundedPercentage)
165991
+ );
165992
+ homeAssistant.callAction(config10.turnOn(clampedPercentage, this.agent));
165993
+ } else {
165994
+ const presetModes = config10.getPresetModes(homeAssistant.entity.state, this.agent) ?? [];
165995
+ const speedPresets = presetModes.filter(
165996
+ (m) => m.toLowerCase() !== "auto"
165997
+ );
165998
+ if (speedPresets.length > 0) {
165999
+ const presetIndex = Math.min(
166000
+ Math.floor(percentage / 100 * speedPresets.length),
166001
+ speedPresets.length - 1
165995
166002
  );
165996
- homeAssistant.callAction(config10.turnOn(clampedPercentage, this.agent));
165997
- } else {
165998
- const presetModes = config10.getPresetModes(homeAssistant.entity.state, this.agent) ?? [];
165999
- const speedPresets = presetModes.filter(
166000
- (m) => m.toLowerCase() !== "auto"
166003
+ const targetPreset = speedPresets[presetIndex];
166004
+ homeAssistant.callAction(
166005
+ config10.setPresetMode(targetPreset, this.agent)
166001
166006
  );
166002
- if (speedPresets.length > 0) {
166003
- const presetIndex = Math.min(
166004
- Math.floor(percentage / 100 * speedPresets.length),
166005
- speedPresets.length - 1
166006
- );
166007
- const targetPreset = speedPresets[presetIndex];
166008
- homeAssistant.callAction(
166009
- config10.setPresetMode(targetPreset, this.agent)
166010
- );
166011
- }
166012
166007
  }
166013
- });
166008
+ }
166014
166009
  }
166015
166010
  targetAirflowDirectionChanged(airflowDirection, _oldValue, context) {
166016
166011
  if (transactionIsOffline(context)) {