@riddix/hamh 2.1.0-alpha.826 → 2.1.0-alpha.828

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.
@@ -132607,6 +132607,7 @@ WARNING: ${includeIdentity ? "This backup contains sensitive Matter identity dat
132607
132607
  humidityEntity: config11.humidityEntity,
132608
132608
  pressureEntity: config11.pressureEntity,
132609
132609
  batteryEntity: config11.batteryEntity,
132610
+ disableBatteryMapping: config11.disableBatteryMapping,
132610
132611
  roomEntities: config11.roomEntities,
132611
132612
  disableLockPin: config11.disableLockPin,
132612
132613
  lockUsercodeService: config11.lockUsercodeService,
@@ -132627,7 +132628,8 @@ WARNING: ${includeIdentity ? "This backup contains sensitive Matter identity dat
132627
132628
  customFanSpeedTags: config11.customFanSpeedTags,
132628
132629
  fanWindPresets: config11.fanWindPresets,
132629
132630
  fanRestoreSpeedOnPowerOn: config11.fanRestoreSpeedOnPowerOn,
132630
- composedEntities: config11.composedEntities
132631
+ composedEntities: config11.composedEntities,
132632
+ disableMomentaryFlip: config11.disableMomentaryFlip
132631
132633
  });
132632
132634
  mappingsRestored++;
132633
132635
  }
@@ -132762,6 +132764,7 @@ WARNING: ${includeIdentity ? "This backup contains sensitive Matter identity dat
132762
132764
  humidityEntity: config11.humidityEntity,
132763
132765
  pressureEntity: config11.pressureEntity,
132764
132766
  batteryEntity: config11.batteryEntity,
132767
+ disableBatteryMapping: config11.disableBatteryMapping,
132765
132768
  roomEntities: config11.roomEntities,
132766
132769
  disableLockPin: config11.disableLockPin,
132767
132770
  lockUsercodeService: config11.lockUsercodeService,
@@ -132782,7 +132785,8 @@ WARNING: ${includeIdentity ? "This backup contains sensitive Matter identity dat
132782
132785
  customServiceAreas: config11.customServiceAreas,
132783
132786
  customFanSpeedTags: config11.customFanSpeedTags,
132784
132787
  fanWindPresets: config11.fanWindPresets,
132785
- composedEntities: config11.composedEntities
132788
+ composedEntities: config11.composedEntities,
132789
+ disableMomentaryFlip: config11.disableMomentaryFlip
132786
132790
  });
132787
132791
  mappingsRestored++;
132788
132792
  }
@@ -133607,6 +133611,7 @@ function entityMappingApi(mappingStorage) {
133607
133611
  humidityEntity: body.humidityEntity,
133608
133612
  pressureEntity: body.pressureEntity,
133609
133613
  batteryEntity: body.batteryEntity,
133614
+ disableBatteryMapping: body.disableBatteryMapping,
133610
133615
  chargingStateEntity: body.chargingStateEntity,
133611
133616
  roomEntities: body.roomEntities,
133612
133617
  disableLockPin: body.disableLockPin,
@@ -133638,7 +133643,8 @@ function entityMappingApi(mappingStorage) {
133638
133643
  climateKeepModeOnIdle: body.climateKeepModeOnIdle,
133639
133644
  climateExposeFan: body.climateExposeFan,
133640
133645
  climateAutoMode: body.climateAutoMode,
133641
- composedEntities: body.composedEntities
133646
+ composedEntities: body.composedEntities,
133647
+ disableMomentaryFlip: body.disableMomentaryFlip
133642
133648
  };
133643
133649
  const config11 = await mappingStorage.setMapping(request);
133644
133650
  res.status(200).json(config11);
@@ -134102,6 +134108,7 @@ function configToProfileEntry(config11) {
134102
134108
  humidityEntity: config11.humidityEntity,
134103
134109
  pressureEntity: config11.pressureEntity,
134104
134110
  batteryEntity: config11.batteryEntity,
134111
+ disableBatteryMapping: config11.disableBatteryMapping,
134105
134112
  roomEntities: config11.roomEntities,
134106
134113
  disableLockPin: config11.disableLockPin,
134107
134114
  lockUsercodeService: config11.lockUsercodeService,
@@ -134123,7 +134130,8 @@ function configToProfileEntry(config11) {
134123
134130
  disableClimateFanControl: config11.disableClimateFanControl,
134124
134131
  climateKeepModeOnIdle: config11.climateKeepModeOnIdle,
134125
134132
  climateExposeFan: config11.climateExposeFan,
134126
- climateAutoMode: config11.climateAutoMode
134133
+ climateAutoMode: config11.climateAutoMode,
134134
+ disableMomentaryFlip: config11.disableMomentaryFlip
134127
134135
  };
134128
134136
  }
134129
134137
  function mappingProfileApi(mappingStorage) {
@@ -134235,6 +134243,7 @@ function mappingProfileApi(mappingStorage) {
134235
134243
  humidityEntity: entry.humidityEntity,
134236
134244
  pressureEntity: entry.pressureEntity,
134237
134245
  batteryEntity: entry.batteryEntity,
134246
+ disableBatteryMapping: entry.disableBatteryMapping,
134238
134247
  roomEntities: entry.roomEntities,
134239
134248
  disableLockPin: entry.disableLockPin,
134240
134249
  lockUsercodeService: entry.lockUsercodeService,
@@ -134256,7 +134265,8 @@ function mappingProfileApi(mappingStorage) {
134256
134265
  disableClimateFanControl: entry.disableClimateFanControl,
134257
134266
  climateKeepModeOnIdle: entry.climateKeepModeOnIdle,
134258
134267
  climateExposeFan: entry.climateExposeFan,
134259
- climateAutoMode: entry.climateAutoMode
134268
+ climateAutoMode: entry.climateAutoMode,
134269
+ disableMomentaryFlip: entry.disableMomentaryFlip
134260
134270
  });
134261
134271
  applied++;
134262
134272
  } catch (e) {
@@ -138435,6 +138445,7 @@ var EntityMappingStorage = class extends Service {
138435
138445
  temperatureEntity: request.temperatureEntity?.trim() || void 0,
138436
138446
  humidityEntity: request.humidityEntity?.trim() || void 0,
138437
138447
  batteryEntity: request.batteryEntity?.trim() || void 0,
138448
+ disableBatteryMapping: request.disableBatteryMapping || void 0,
138438
138449
  chargingStateEntity: request.chargingStateEntity?.trim() || void 0,
138439
138450
  roomEntities: roomEntities.length > 0 ? roomEntities : void 0,
138440
138451
  disableLockPin: request.disableLockPin || void 0,
@@ -138469,9 +138480,10 @@ var EntityMappingStorage = class extends Service {
138469
138480
  climateKeepModeOnIdle: request.climateKeepModeOnIdle || void 0,
138470
138481
  climateExposeFan: request.climateExposeFan || void 0,
138471
138482
  climateAutoMode: request.climateAutoMode || void 0,
138472
- composedEntities: request.composedEntities?.filter((e) => e.entityId?.trim()) ?? void 0
138483
+ composedEntities: request.composedEntities?.filter((e) => e.entityId?.trim()) ?? void 0,
138484
+ disableMomentaryFlip: request.disableMomentaryFlip || void 0
138473
138485
  };
138474
- if (!config11.matterDeviceType && !config11.customName && !config11.customProductName && !config11.customVendorName && !config11.customSerialNumber && config11.customVendorId === void 0 && config11.disabled !== true && !config11.filterLifeEntity && !config11.cleaningModeEntity && !config11.temperatureEntity && !config11.humidityEntity && !config11.batteryEntity && !config11.chargingStateEntity && !config11.roomEntities && !config11.disableLockPin && !config11.lockUsercodeService && config11.lockUsercodeSlot === void 0 && config11.lockPinMinLength === void 0 && config11.lockPinMaxLength === void 0 && !config11.powerEntity && !config11.energyEntity && !config11.pressureEntity && !config11.suctionLevelEntity && !config11.mopIntensityEntity && (!config11.customServiceAreas || config11.customServiceAreas.length === 0) && (!config11.customFanSpeedTags || Object.keys(config11.customFanSpeedTags).length === 0) && (!config11.fanWindPresets || (config11.fanWindPresets.natural?.length ?? 0) === 0 && (config11.fanWindPresets.sleep?.length ?? 0) === 0) && !config11.fanRestoreSpeedOnPowerOn && !config11.currentRoomEntity && !config11.cleanedAreaEntity && !config11.disableCustomAreaRoomModes && !config11.valetudoIdentifier && !config11.coverSwapOpenClose && !config11.coverExposeAsDimmableLight && !config11.selectExposeAsSwitch && !config11.selectSwitchOnOption && !config11.selectSwitchOffOption && !config11.coverSliderDebounceMs && !config11.updateThrottleMs && !config11.disableClimateOnOff && !config11.disableClimateFanControl && !config11.climateKeepModeOnIdle && !config11.climateExposeFan && !config11.climateAutoMode && (!config11.composedEntities || config11.composedEntities.length === 0)) {
138486
+ if (!config11.matterDeviceType && !config11.customName && !config11.customProductName && !config11.customVendorName && !config11.customSerialNumber && config11.customVendorId === void 0 && config11.disabled !== true && !config11.filterLifeEntity && !config11.cleaningModeEntity && !config11.temperatureEntity && !config11.humidityEntity && !config11.batteryEntity && !config11.disableBatteryMapping && !config11.chargingStateEntity && !config11.roomEntities && !config11.disableLockPin && !config11.lockUsercodeService && config11.lockUsercodeSlot === void 0 && config11.lockPinMinLength === void 0 && config11.lockPinMaxLength === void 0 && !config11.powerEntity && !config11.energyEntity && !config11.pressureEntity && !config11.suctionLevelEntity && !config11.mopIntensityEntity && (!config11.customServiceAreas || config11.customServiceAreas.length === 0) && (!config11.customFanSpeedTags || Object.keys(config11.customFanSpeedTags).length === 0) && (!config11.fanWindPresets || (config11.fanWindPresets.natural?.length ?? 0) === 0 && (config11.fanWindPresets.sleep?.length ?? 0) === 0) && !config11.fanRestoreSpeedOnPowerOn && !config11.currentRoomEntity && !config11.cleanedAreaEntity && !config11.disableCustomAreaRoomModes && !config11.valetudoIdentifier && !config11.coverSwapOpenClose && !config11.coverExposeAsDimmableLight && !config11.selectExposeAsSwitch && !config11.selectSwitchOnOption && !config11.selectSwitchOffOption && !config11.coverSliderDebounceMs && !config11.updateThrottleMs && !config11.disableClimateOnOff && !config11.disableClimateFanControl && !config11.climateKeepModeOnIdle && !config11.climateExposeFan && !config11.climateAutoMode && (!config11.composedEntities || config11.composedEntities.length === 0) && !config11.disableMomentaryFlip) {
138475
138487
  bridgeMap.delete(request.entityId);
138476
138488
  } else {
138477
138489
  bridgeMap.set(request.entityId, config11);
@@ -156992,7 +157004,9 @@ function createEndpointId(entityId, customName) {
156992
157004
  function getMappedEntityIds(mapping) {
156993
157005
  if (!mapping) return [];
156994
157006
  const ids = [];
156995
- if (mapping.batteryEntity) ids.push(mapping.batteryEntity);
157007
+ if (mapping.batteryEntity && !mapping.disableBatteryMapping) {
157008
+ ids.push(mapping.batteryEntity);
157009
+ }
156996
157010
  if (mapping.faultEntity) ids.push(mapping.faultEntity);
156997
157011
  if (mapping.chargingStateEntity) ids.push(mapping.chargingStateEntity);
156998
157012
  if (mapping.temperatureEntity) ids.push(mapping.temperatureEntity);
@@ -157683,6 +157697,9 @@ function PowerSourceServer2(config11) {
157683
157697
  var defaultBatteryConfig = {
157684
157698
  getBatteryPercent: (entity, agent) => {
157685
157699
  const homeAssistant = agent.get(HomeAssistantEntityBehavior);
157700
+ if (homeAssistant.state.mapping?.disableBatteryMapping) {
157701
+ return null;
157702
+ }
157686
157703
  const batteryEntity = homeAssistant.state.mapping?.batteryEntity;
157687
157704
  if (batteryEntity) {
157688
157705
  const stateProvider = agent.env.get(EntityStateProvider);
@@ -158270,20 +158287,25 @@ var OnOffServerBase = class extends OnOffServer {
158270
158287
  }
158271
158288
  const homeAssistant = this.agent.get(HomeAssistantEntityBehavior);
158272
158289
  const action = turnOn ? turnOn(void 0, this.agent) : defaultOnOffAction(homeAssistant.entityId, true);
158273
- applyPatchState(this.state, { onOff: true });
158290
+ const skipMomentaryFlip = turnOff === null && homeAssistant.state.mapping?.disableMomentaryFlip;
158291
+ if (!skipMomentaryFlip) {
158292
+ applyPatchState(this.state, { onOff: true });
158293
+ }
158274
158294
  if (!action) {
158275
158295
  return;
158276
158296
  }
158277
158297
  logger207.info(`[${homeAssistant.entityId}] Turning ON -> ${action.action}`);
158278
158298
  notifyLightTurnedOn(homeAssistant.entityId);
158279
- const now = Date.now();
158280
- sweepOptimisticOnOff(now);
158281
- optimisticOnOffState.set(homeAssistant.entityId, {
158282
- expectedOnOff: true,
158283
- timestamp: now
158284
- });
158299
+ if (!skipMomentaryFlip) {
158300
+ const now = Date.now();
158301
+ sweepOptimisticOnOff(now);
158302
+ optimisticOnOffState.set(homeAssistant.entityId, {
158303
+ expectedOnOff: true,
158304
+ timestamp: now
158305
+ });
158306
+ }
158285
158307
  homeAssistant.callAction(action);
158286
- if (turnOff === null) {
158308
+ if (turnOff === null && !skipMomentaryFlip) {
158287
158309
  setTimeout(this.callback(this.autoReset), 1e3);
158288
158310
  }
158289
158311
  }
@@ -161532,6 +161554,9 @@ init_nodejs();
161532
161554
  init_home_assistant_entity_behavior();
161533
161555
  function getBatteryPercent(entity, agent) {
161534
161556
  const homeAssistant = agent.get(HomeAssistantEntityBehavior);
161557
+ if (homeAssistant.state.mapping?.disableBatteryMapping) {
161558
+ return null;
161559
+ }
161535
161560
  const batteryEntity = homeAssistant.state.mapping?.batteryEntity;
161536
161561
  if (batteryEntity) {
161537
161562
  const stateProvider = agent.env.get(EntityStateProvider);
@@ -161754,6 +161779,9 @@ var ButtonOnOffServerBase = class extends OnOffServer {
161754
161779
  on() {
161755
161780
  const homeAssistant = this.agent.get(HomeAssistantEntityBehavior);
161756
161781
  homeAssistant.callAction({ action: "button.press" });
161782
+ if (homeAssistant.state.mapping?.disableMomentaryFlip) {
161783
+ return;
161784
+ }
161757
161785
  setTimeout(this.callback(this.resetToOff), 1e3);
161758
161786
  }
161759
161787
  off() {
@@ -168740,7 +168768,9 @@ init_dist();
168740
168768
  // src/matter/endpoints/legacy/vacuum/behaviors/vacuum-battery.ts
168741
168769
  init_home_assistant_entity_behavior();
168742
168770
  function getVacuumBatteryPercent(entity, agent) {
168743
- const mapped = agent.get(HomeAssistantEntityBehavior).state.mapping?.batteryEntity;
168771
+ const mapping = agent.get(HomeAssistantEntityBehavior).state.mapping;
168772
+ if (mapping?.disableBatteryMapping) return null;
168773
+ const mapped = mapping?.batteryEntity;
168744
168774
  if (mapped) {
168745
168775
  const battery = agent.env.get(EntityStateProvider).getBatteryPercent(mapped);
168746
168776
  if (battery != null) return Math.max(0, Math.min(100, battery));
@@ -169931,6 +169961,16 @@ function WeatherDevice(homeAssistant) {
169931
169961
  // src/matter/endpoints/legacy/create-legacy-endpoint-type.ts
169932
169962
  var legacyLogger = Logger.get("LegacyEndpointType");
169933
169963
  function createLegacyEndpointType(entity, mapping, areaName, options) {
169964
+ if (mapping?.disableBatteryMapping) {
169965
+ entity = {
169966
+ ...entity,
169967
+ state: {
169968
+ ...entity.state,
169969
+ attributes: stripBatteryAttributes(entity.state.attributes)
169970
+ }
169971
+ };
169972
+ mapping = { ...mapping, batteryEntity: void 0 };
169973
+ }
169934
169974
  const domain = entity.entity_id.split(".")[0];
169935
169975
  const customName = mapping?.customName;
169936
169976
  let type;
@@ -169994,6 +170034,12 @@ function addFixedLabel(type, areaName) {
169994
170034
  function hasPowerSource(type) {
169995
170035
  return "powerSource" in type.behaviors;
169996
170036
  }
170037
+ function stripBatteryAttributes(attributes9) {
170038
+ const stripped = { ...attributes9 };
170039
+ delete stripped.battery;
170040
+ delete stripped.battery_level;
170041
+ return stripped;
170042
+ }
169997
170043
  function addPowerSource(type) {
169998
170044
  const mutable = type;
169999
170045
  if (typeof mutable.with === "function") {
@@ -170136,14 +170182,15 @@ var UserComposedEndpoint = class _UserComposedEndpoint extends Endpoint {
170136
170182
  })
170137
170183
  );
170138
170184
  }
170139
- if (config11.mapping?.batteryEntity) {
170185
+ const hasParentBattery = !!config11.mapping?.batteryEntity && !config11.mapping?.disableBatteryMapping;
170186
+ if (hasParentBattery) {
170140
170187
  parentType = parentType.with(DefaultPowerSourceServer);
170141
170188
  }
170142
170189
  const endpointId = createEndpointId5(primaryEntityId, config11.customName);
170143
170190
  const parts = [];
170144
170191
  const subEndpointMap = /* @__PURE__ */ new Map();
170145
170192
  const mappedIds = [];
170146
- if (config11.mapping?.batteryEntity) {
170193
+ if (hasParentBattery && config11.mapping?.batteryEntity) {
170147
170194
  mappedIds.push(config11.mapping.batteryEntity);
170148
170195
  }
170149
170196
  let primaryMapping = config11.mapping;
@@ -170411,7 +170458,7 @@ var LegacyEndpoint = class _LegacyEndpoint extends EntityEndpoint {
170411
170458
  }
170412
170459
  }
170413
170460
  const isVacuum = entityId.startsWith("vacuum.");
170414
- if ((registry2.isAutoBatteryMappingEnabled() || isVacuum) && !mapping?.batteryEntity) {
170461
+ if ((registry2.isAutoBatteryMappingEnabled() || isVacuum) && !mapping?.batteryEntity && !mapping?.disableBatteryMapping) {
170415
170462
  const batteryEntityId = registry2.findBatteryEntityForDevice(
170416
170463
  entity.device_id
170417
170464
  );
@@ -170610,7 +170657,7 @@ var LegacyEndpoint = class _LegacyEndpoint extends EntityEndpoint {
170610
170657
  primaryEntityId: entityId,
170611
170658
  humidityEntityId: effectiveMapping?.humidityEntity,
170612
170659
  pressureEntityId: effectiveMapping?.pressureEntity,
170613
- batteryEntityId: effectiveMapping?.batteryEntity,
170660
+ batteryEntityId: effectiveMapping?.disableBatteryMapping ? void 0 : effectiveMapping?.batteryEntity,
170614
170661
  powerEntityId: effectiveMapping?.powerEntity,
170615
170662
  energyEntityId: effectiveMapping?.energyEntity,
170616
170663
  customName: effectiveMapping?.customName,
@@ -170629,7 +170676,7 @@ var LegacyEndpoint = class _LegacyEndpoint extends EntityEndpoint {
170629
170676
  primaryEntityId: entityId,
170630
170677
  temperatureEntityId,
170631
170678
  humidityEntityId,
170632
- batteryEntityId: effectiveMapping?.batteryEntity,
170679
+ batteryEntityId: effectiveMapping?.disableBatteryMapping ? void 0 : effectiveMapping?.batteryEntity,
170633
170680
  powerEntityId: effectiveMapping?.powerEntity,
170634
170681
  energyEntityId: effectiveMapping?.energyEntity,
170635
170682
  mapping: effectiveMapping,
@@ -173866,11 +173913,14 @@ var ServerModeVacuumEndpoint = class _ServerModeVacuumEndpoint extends EntityEnd
173866
173913
  return void 0;
173867
173914
  }
173868
173915
  let effectiveMapping = mapping;
173916
+ if (mapping?.disableBatteryMapping && mapping.batteryEntity) {
173917
+ effectiveMapping = { ...mapping, batteryEntity: void 0 };
173918
+ }
173869
173919
  logger243.info(
173870
173920
  `${entityId}: device_id=${entity.device_id}, manualBattery=${mapping?.batteryEntity ?? "none"}`
173871
173921
  );
173872
173922
  if (entity.device_id) {
173873
- if (!mapping?.batteryEntity) {
173923
+ if (!mapping?.batteryEntity && !mapping?.disableBatteryMapping) {
173874
173924
  const batteryEntityId = registry2.findBatteryEntityForDevice(
173875
173925
  entity.device_id
173876
173926
  );