@camstack/addon-provider-homematic 1.2.136 → 1.2.138

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.
Files changed (3) hide show
  1. package/dist/addon.js +368 -10
  2. package/dist/addon.mjs +368 -10
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -5547,7 +5547,7 @@ var ZodIssueCode = {
5547
5547
  var ZodFirstPartyTypeKind;
5548
5548
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5549
5549
  //#endregion
5550
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5550
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5551
5551
  /**
5552
5552
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5553
5553
  * window to float samples (D455).
@@ -8766,7 +8766,7 @@ object({
8766
8766
  params: record(string(), union([string(), number()])).optional()
8767
8767
  });
8768
8768
  //#endregion
8769
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8769
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8770
8770
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8771
8771
  DeviceType["Camera"] = "camera";
8772
8772
  DeviceType["Hub"] = "hub";
@@ -8858,6 +8858,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8858
8858
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8859
8859
  * integrations sharing the same food/desiccant/hopper surface. */
8860
8860
  DeviceType["PetFeeder"] = "pet-feeder";
8861
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8862
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8863
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8864
+ DeviceType["Dishwasher"] = "dishwasher";
8861
8865
  return DeviceType;
8862
8866
  }({});
8863
8867
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -9115,7 +9119,7 @@ function errMsg(err) {
9115
9119
  return String(err);
9116
9120
  }
9117
9121
  //#endregion
9118
- //#region ../types/dist/composition-DOwQB_Ua.mjs
9122
+ //#region ../types/dist/composition-CB6PMT9p.mjs
9119
9123
  /**
9120
9124
  * The ffmpeg build every CamStack node downloads, per platform and arch.
9121
9125
  *
@@ -13501,8 +13505,13 @@ var AlertSeveritySchema = _enum([
13501
13505
  "info",
13502
13506
  "success",
13503
13507
  "warning",
13504
- "error"
13508
+ "error",
13509
+ "critical"
13505
13510
  ]);
13511
+ var AlertActionSchema = object({
13512
+ label: string(),
13513
+ href: string().optional()
13514
+ });
13506
13515
  var AlertStatusSchema = _enum([
13507
13516
  "active",
13508
13517
  "in-progress",
@@ -13520,6 +13529,7 @@ var AlertSchema = object({
13520
13529
  severity: AlertSeveritySchema,
13521
13530
  title: string(),
13522
13531
  message: string(),
13532
+ action: AlertActionSchema.optional(),
13523
13533
  status: AlertStatusSchema,
13524
13534
  progress: number().optional(),
13525
13535
  read: boolean(),
@@ -18043,7 +18053,11 @@ var deviceDiscoveryCapability = {
18043
18053
  };
18044
18054
  /**
18045
18055
  * `device-adoption` — generic discovery + adoption surface,
18046
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18056
+ * system-scoped collection (one provider per integration addon), routed
18057
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18058
+ * pin model as `connection-test`. The admin UI keeps using
18059
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18060
+ * successor to `ha-discovery`:
18047
18061
  * keyed by `integrationId` (the addon resolves integrationId → broker
18048
18062
  * internally) rather than a connection-specific `brokerId`, and it
18049
18063
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -18208,7 +18222,7 @@ var ResyncResultSchema = object({
18208
18222
  var deviceAdoptionCapability = {
18209
18223
  name: "device-adoption",
18210
18224
  scope: "system",
18211
- mode: "singleton",
18225
+ mode: "collection",
18212
18226
  status: {
18213
18227
  schema: AdoptionStatusSchema,
18214
18228
  kind: "poll"
@@ -54240,7 +54254,8 @@ var batteryCapability = {
54240
54254
  DeviceType.Button,
54241
54255
  DeviceType.Switch,
54242
54256
  DeviceType.PetFeeder,
54243
- DeviceType.Container
54257
+ DeviceType.Container,
54258
+ DeviceType.Thermostat
54244
54259
  ],
54245
54260
  methods: {
54246
54261
  /**
@@ -55713,6 +55728,161 @@ onStatusChanged: { data: object({
55713
55728
  * whether persisting is worth a SQLite commit. */
55714
55729
  volatileStateFields: ["lastChangedAt"]
55715
55730
  };
55731
+ /**
55732
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55733
+ * consumable levels (salt, rinse aid) and common program options.
55734
+ *
55735
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55736
+ * by any integration that exposes the same program / option surface.
55737
+ *
55738
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55739
+ * provider refreshes the slice on an interval and eagerly after commands.
55740
+ */
55741
+ var DishwasherStateSchema = _enum([
55742
+ "idle",
55743
+ "running",
55744
+ "paused",
55745
+ "finished",
55746
+ "error",
55747
+ "unavailable"
55748
+ ]);
55749
+ var DishwasherConsumableLevelSchema = _enum([
55750
+ "ok",
55751
+ "low",
55752
+ "empty"
55753
+ ]);
55754
+ var DishwasherStatusSchema = object({
55755
+ state: DishwasherStateSchema,
55756
+ /** Active program id/name, or null when none selected / unknown. */
55757
+ program: string().nullable(),
55758
+ /** Program tokens the hardware accepts — drives the UI selector. */
55759
+ availablePrograms: array(string()),
55760
+ /** Minutes remaining on the active cycle, or null when not running. */
55761
+ remainingMinutes: number().int().nonnegative().nullable(),
55762
+ /** Cycle completion 0..100, or null when not applicable. */
55763
+ progressPercent: number().min(0).max(100).nullable(),
55764
+ /** True when the door is reported open. */
55765
+ doorOpen: boolean(),
55766
+ /** True when remote start is allowed (door closed, power on, etc.). */
55767
+ remoteStartAllowed: boolean(),
55768
+ /** Main power / switched-on state. */
55769
+ powerOn: boolean(),
55770
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55771
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55772
+ halfLoad: boolean(),
55773
+ hygienePlus: boolean(),
55774
+ /** Extra dry option when the appliance exposes it. */
55775
+ extraDry: boolean(),
55776
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55777
+ intensiveZone: boolean(),
55778
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55779
+ varioSpeedPlus: boolean(),
55780
+ /** Child lock (controls disabled on the appliance). */
55781
+ childLock: boolean(),
55782
+ errorCode: number().nullable(),
55783
+ errorLabel: string().nullable(),
55784
+ lastFetchedAt: number()
55785
+ });
55786
+ var dishwasherCapability = {
55787
+ name: "dishwasher",
55788
+ scope: "device",
55789
+ deviceNative: true,
55790
+ mode: "singleton",
55791
+ deviceTypes: [DeviceType.Dishwasher],
55792
+ methods: {
55793
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55794
+ kind: "mutation",
55795
+ auth: "protected"
55796
+ }),
55797
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55798
+ kind: "mutation",
55799
+ auth: "protected"
55800
+ }),
55801
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55802
+ kind: "mutation",
55803
+ auth: "protected"
55804
+ }),
55805
+ setProgram: method(object({
55806
+ deviceId: number().int().nonnegative(),
55807
+ program: string().min(1)
55808
+ }), _void(), {
55809
+ kind: "mutation",
55810
+ auth: "protected"
55811
+ }),
55812
+ setPower: method(object({
55813
+ deviceId: number().int().nonnegative(),
55814
+ on: boolean()
55815
+ }), _void(), {
55816
+ kind: "mutation",
55817
+ auth: "protected"
55818
+ }),
55819
+ setHalfLoad: method(object({
55820
+ deviceId: number().int().nonnegative(),
55821
+ on: boolean()
55822
+ }), _void(), {
55823
+ kind: "mutation",
55824
+ auth: "protected"
55825
+ }),
55826
+ setHygienePlus: method(object({
55827
+ deviceId: number().int().nonnegative(),
55828
+ on: boolean()
55829
+ }), _void(), {
55830
+ kind: "mutation",
55831
+ auth: "protected"
55832
+ }),
55833
+ setExtraDry: method(object({
55834
+ deviceId: number().int().nonnegative(),
55835
+ on: boolean()
55836
+ }), _void(), {
55837
+ kind: "mutation",
55838
+ auth: "protected"
55839
+ }),
55840
+ setIntensiveZone: method(object({
55841
+ deviceId: number().int().nonnegative(),
55842
+ on: boolean()
55843
+ }), _void(), {
55844
+ kind: "mutation",
55845
+ auth: "protected"
55846
+ }),
55847
+ setVarioSpeedPlus: method(object({
55848
+ deviceId: number().int().nonnegative(),
55849
+ on: boolean()
55850
+ }), _void(), {
55851
+ kind: "mutation",
55852
+ auth: "protected"
55853
+ }),
55854
+ setChildLock: method(object({
55855
+ deviceId: number().int().nonnegative(),
55856
+ on: boolean()
55857
+ }), _void(), {
55858
+ kind: "mutation",
55859
+ auth: "protected"
55860
+ }),
55861
+ setOption: method(object({
55862
+ deviceId: number().int().nonnegative(),
55863
+ key: string().min(1),
55864
+ value: union([
55865
+ boolean(),
55866
+ string(),
55867
+ number()
55868
+ ])
55869
+ }), _void(), {
55870
+ kind: "mutation",
55871
+ auth: "protected"
55872
+ })
55873
+ },
55874
+ status: {
55875
+ schema: DishwasherStatusSchema,
55876
+ kind: "poll"
55877
+ },
55878
+ runtimeState: DishwasherStatusSchema,
55879
+ durability: "session",
55880
+ history: { fields: { progressPercent: {
55881
+ kind: "gauge",
55882
+ unit: "%",
55883
+ deadband: 2
55884
+ } } }
55885
+ };
55716
55886
  var DoorbellStatusSchema = object({
55717
55887
  /** Ms epoch of the last press. null = never observed since this provider started. */
55718
55888
  lastPressedAt: number().nullable(),
@@ -56515,6 +56685,32 @@ var gasCapability = {
56515
56685
  * whether persisting is worth a SQLite commit. */
56516
56686
  volatileStateFields: ["lastChangedAt"]
56517
56687
  };
56688
+ var HeatingValveStatusSchema = object({
56689
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56690
+ position: number().min(0).max(100).nullable(),
56691
+ /** Ms epoch when the slice was last updated (push or poll). */
56692
+ lastFetchedAt: number()
56693
+ });
56694
+ var heatingValveCapability = {
56695
+ name: "heating-valve",
56696
+ scope: "device",
56697
+ deviceNative: true,
56698
+ mode: "singleton",
56699
+ deviceTypes: [DeviceType.Thermostat],
56700
+ methods: {},
56701
+ status: {
56702
+ schema: HeatingValveStatusSchema,
56703
+ kind: "push"
56704
+ },
56705
+ runtimeState: HeatingValveStatusSchema,
56706
+ durability: "session",
56707
+ history: { fields: { position: {
56708
+ kind: "gauge",
56709
+ unit: "%",
56710
+ deadband: 1
56711
+ } } },
56712
+ volatileStateFields: ["lastFetchedAt"]
56713
+ };
56518
56714
  /**
56519
56715
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56520
56716
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65935,6 +66131,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65935
66131
  dayNight: dayNightCapability,
65936
66132
  deviceDiscovery: deviceDiscoveryCapability,
65937
66133
  deviceStatus: deviceStatusCapability,
66134
+ dishwasher: dishwasherCapability,
65938
66135
  doorbell: doorbellCapability,
65939
66136
  enumSensor: enumSensorCapability,
65940
66137
  eventEmitter: eventEmitterCapability,
@@ -65942,6 +66139,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65942
66139
  featureProbe: featureProbeCapability,
65943
66140
  flood: floodCapability,
65944
66141
  gas: gasCapability,
66142
+ heatingValve: heatingValveCapability,
65945
66143
  humidifier: humidifierCapability,
65946
66144
  humiditySensor: humiditySensorCapability,
65947
66145
  image: imageCapability,
@@ -66667,6 +66865,12 @@ var BaseDeviceProvider = class extends BaseAddon {
66667
66865
  provider: this
66668
66866
  }];
66669
66867
  }
66868
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
66869
+ providerRegistrationsFromSuper(result) {
66870
+ if (Array.isArray(result)) return result;
66871
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
66872
+ return [];
66873
+ }
66670
66874
  async onShutdown() {
66671
66875
  this._restoreShuttingDown = true;
66672
66876
  this.cancelRestoreRetries();
@@ -67193,7 +67397,7 @@ var BaseDeviceProvider = class extends BaseAddon {
67193
67397
  return toDeviceSummary(device, this.addonId);
67194
67398
  }
67195
67399
  };
67196
- DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
67400
+ DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
67197
67401
  new Set(Object.values(DeviceType));
67198
67402
  Object.freeze({
67199
67403
  "accessories.getStatus": {
@@ -69614,6 +69818,84 @@ Object.freeze({
69614
69818
  addonId: null,
69615
69819
  access: "view"
69616
69820
  },
69821
+ "dishwasher.getStatus": {
69822
+ capName: "dishwasher",
69823
+ capScope: "device",
69824
+ addonId: null,
69825
+ access: "view"
69826
+ },
69827
+ "dishwasher.pause": {
69828
+ capName: "dishwasher",
69829
+ capScope: "device",
69830
+ addonId: null,
69831
+ access: "create"
69832
+ },
69833
+ "dishwasher.setChildLock": {
69834
+ capName: "dishwasher",
69835
+ capScope: "device",
69836
+ addonId: null,
69837
+ access: "create"
69838
+ },
69839
+ "dishwasher.setExtraDry": {
69840
+ capName: "dishwasher",
69841
+ capScope: "device",
69842
+ addonId: null,
69843
+ access: "create"
69844
+ },
69845
+ "dishwasher.setHalfLoad": {
69846
+ capName: "dishwasher",
69847
+ capScope: "device",
69848
+ addonId: null,
69849
+ access: "create"
69850
+ },
69851
+ "dishwasher.setHygienePlus": {
69852
+ capName: "dishwasher",
69853
+ capScope: "device",
69854
+ addonId: null,
69855
+ access: "create"
69856
+ },
69857
+ "dishwasher.setIntensiveZone": {
69858
+ capName: "dishwasher",
69859
+ capScope: "device",
69860
+ addonId: null,
69861
+ access: "create"
69862
+ },
69863
+ "dishwasher.setOption": {
69864
+ capName: "dishwasher",
69865
+ capScope: "device",
69866
+ addonId: null,
69867
+ access: "create"
69868
+ },
69869
+ "dishwasher.setPower": {
69870
+ capName: "dishwasher",
69871
+ capScope: "device",
69872
+ addonId: null,
69873
+ access: "create"
69874
+ },
69875
+ "dishwasher.setProgram": {
69876
+ capName: "dishwasher",
69877
+ capScope: "device",
69878
+ addonId: null,
69879
+ access: "create"
69880
+ },
69881
+ "dishwasher.setVarioSpeedPlus": {
69882
+ capName: "dishwasher",
69883
+ capScope: "device",
69884
+ addonId: null,
69885
+ access: "create"
69886
+ },
69887
+ "dishwasher.start": {
69888
+ capName: "dishwasher",
69889
+ capScope: "device",
69890
+ addonId: null,
69891
+ access: "create"
69892
+ },
69893
+ "dishwasher.stop": {
69894
+ capName: "dishwasher",
69895
+ capScope: "device",
69896
+ addonId: null,
69897
+ access: "create"
69898
+ },
69617
69899
  "doorbell.getStatus": {
69618
69900
  capName: "doorbell",
69619
69901
  capScope: "device",
@@ -69824,6 +70106,12 @@ Object.freeze({
69824
70106
  addonId: null,
69825
70107
  access: "view"
69826
70108
  },
70109
+ "heatingValve.getStatus": {
70110
+ capName: "heating-valve",
70111
+ capScope: "device",
70112
+ addonId: null,
70113
+ access: "view"
70114
+ },
69827
70115
  "humidifier.getStatus": {
69828
70116
  capName: "humidifier",
69829
70117
  capScope: "device",
@@ -75411,7 +75699,7 @@ Object.freeze({
75411
75699
  access: "create"
75412
75700
  }
75413
75701
  });
75414
- DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
75702
+ DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
75415
75703
  DeviceFeature.BatteryOperated;
75416
75704
  Object.freeze({
75417
75705
  "accessories.getStatus": [{
@@ -76235,6 +76523,71 @@ Object.freeze({
76235
76523
  form: "single",
76236
76524
  optional: false
76237
76525
  }],
76526
+ "dishwasher.getStatus": [{
76527
+ name: "deviceId",
76528
+ form: "single",
76529
+ optional: false
76530
+ }],
76531
+ "dishwasher.pause": [{
76532
+ name: "deviceId",
76533
+ form: "single",
76534
+ optional: false
76535
+ }],
76536
+ "dishwasher.setChildLock": [{
76537
+ name: "deviceId",
76538
+ form: "single",
76539
+ optional: false
76540
+ }],
76541
+ "dishwasher.setExtraDry": [{
76542
+ name: "deviceId",
76543
+ form: "single",
76544
+ optional: false
76545
+ }],
76546
+ "dishwasher.setHalfLoad": [{
76547
+ name: "deviceId",
76548
+ form: "single",
76549
+ optional: false
76550
+ }],
76551
+ "dishwasher.setHygienePlus": [{
76552
+ name: "deviceId",
76553
+ form: "single",
76554
+ optional: false
76555
+ }],
76556
+ "dishwasher.setIntensiveZone": [{
76557
+ name: "deviceId",
76558
+ form: "single",
76559
+ optional: false
76560
+ }],
76561
+ "dishwasher.setOption": [{
76562
+ name: "deviceId",
76563
+ form: "single",
76564
+ optional: false
76565
+ }],
76566
+ "dishwasher.setPower": [{
76567
+ name: "deviceId",
76568
+ form: "single",
76569
+ optional: false
76570
+ }],
76571
+ "dishwasher.setProgram": [{
76572
+ name: "deviceId",
76573
+ form: "single",
76574
+ optional: false
76575
+ }],
76576
+ "dishwasher.setVarioSpeedPlus": [{
76577
+ name: "deviceId",
76578
+ form: "single",
76579
+ optional: false
76580
+ }],
76581
+ "dishwasher.start": [{
76582
+ name: "deviceId",
76583
+ form: "single",
76584
+ optional: false
76585
+ }],
76586
+ "dishwasher.stop": [{
76587
+ name: "deviceId",
76588
+ form: "single",
76589
+ optional: false
76590
+ }],
76238
76591
  "doorbell.getStatus": [{
76239
76592
  name: "deviceId",
76240
76593
  form: "single",
@@ -76304,6 +76657,11 @@ Object.freeze({
76304
76657
  form: "single",
76305
76658
  optional: false
76306
76659
  }],
76660
+ "heatingValve.getStatus": [{
76661
+ name: "deviceId",
76662
+ form: "single",
76663
+ optional: false
76664
+ }],
76307
76665
  "humidifier.getStatus": [{
76308
76666
  name: "deviceId",
76309
76667
  form: "single",
@@ -105315,7 +105673,7 @@ var HomematicProviderAddon = class extends BaseDeviceProvider {
105315
105673
  super({ ...DEFAULTS });
105316
105674
  }
105317
105675
  async onInitialize() {
105318
- const regs = await super.onInitialize();
105676
+ const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
105319
105677
  const migrated = migrateLegacyConfig(await this.resolveGlobalStore());
105320
105678
  if (this.brokersDiffer(migrated.brokers, this.config.brokers)) await this.updateGlobalSettings({ brokers: migrated.brokers });
105321
105679
  const records = this.ctx.records;
package/dist/addon.mjs CHANGED
@@ -5548,7 +5548,7 @@ var ZodIssueCode = {
5548
5548
  var ZodFirstPartyTypeKind;
5549
5549
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5550
5550
  //#endregion
5551
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5551
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5552
5552
  /**
5553
5553
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5554
5554
  * window to float samples (D455).
@@ -8767,7 +8767,7 @@ object({
8767
8767
  params: record(string(), union([string(), number()])).optional()
8768
8768
  });
8769
8769
  //#endregion
8770
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8770
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8771
8771
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8772
8772
  DeviceType["Camera"] = "camera";
8773
8773
  DeviceType["Hub"] = "hub";
@@ -8859,6 +8859,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8859
8859
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8860
8860
  * integrations sharing the same food/desiccant/hopper surface. */
8861
8861
  DeviceType["PetFeeder"] = "pet-feeder";
8862
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8863
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8864
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8865
+ DeviceType["Dishwasher"] = "dishwasher";
8862
8866
  return DeviceType;
8863
8867
  }({});
8864
8868
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -9116,7 +9120,7 @@ function errMsg(err) {
9116
9120
  return String(err);
9117
9121
  }
9118
9122
  //#endregion
9119
- //#region ../types/dist/composition-DOwQB_Ua.mjs
9123
+ //#region ../types/dist/composition-CB6PMT9p.mjs
9120
9124
  /**
9121
9125
  * The ffmpeg build every CamStack node downloads, per platform and arch.
9122
9126
  *
@@ -13502,8 +13506,13 @@ var AlertSeveritySchema = _enum([
13502
13506
  "info",
13503
13507
  "success",
13504
13508
  "warning",
13505
- "error"
13509
+ "error",
13510
+ "critical"
13506
13511
  ]);
13512
+ var AlertActionSchema = object({
13513
+ label: string(),
13514
+ href: string().optional()
13515
+ });
13507
13516
  var AlertStatusSchema = _enum([
13508
13517
  "active",
13509
13518
  "in-progress",
@@ -13521,6 +13530,7 @@ var AlertSchema = object({
13521
13530
  severity: AlertSeveritySchema,
13522
13531
  title: string(),
13523
13532
  message: string(),
13533
+ action: AlertActionSchema.optional(),
13524
13534
  status: AlertStatusSchema,
13525
13535
  progress: number().optional(),
13526
13536
  read: boolean(),
@@ -18044,7 +18054,11 @@ var deviceDiscoveryCapability = {
18044
18054
  };
18045
18055
  /**
18046
18056
  * `device-adoption` — generic discovery + adoption surface,
18047
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18057
+ * system-scoped collection (one provider per integration addon), routed
18058
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18059
+ * pin model as `connection-test`. The admin UI keeps using
18060
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18061
+ * successor to `ha-discovery`:
18048
18062
  * keyed by `integrationId` (the addon resolves integrationId → broker
18049
18063
  * internally) rather than a connection-specific `brokerId`, and it
18050
18064
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -18209,7 +18223,7 @@ var ResyncResultSchema = object({
18209
18223
  var deviceAdoptionCapability = {
18210
18224
  name: "device-adoption",
18211
18225
  scope: "system",
18212
- mode: "singleton",
18226
+ mode: "collection",
18213
18227
  status: {
18214
18228
  schema: AdoptionStatusSchema,
18215
18229
  kind: "poll"
@@ -54241,7 +54255,8 @@ var batteryCapability = {
54241
54255
  DeviceType.Button,
54242
54256
  DeviceType.Switch,
54243
54257
  DeviceType.PetFeeder,
54244
- DeviceType.Container
54258
+ DeviceType.Container,
54259
+ DeviceType.Thermostat
54245
54260
  ],
54246
54261
  methods: {
54247
54262
  /**
@@ -55714,6 +55729,161 @@ onStatusChanged: { data: object({
55714
55729
  * whether persisting is worth a SQLite commit. */
55715
55730
  volatileStateFields: ["lastChangedAt"]
55716
55731
  };
55732
+ /**
55733
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55734
+ * consumable levels (salt, rinse aid) and common program options.
55735
+ *
55736
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55737
+ * by any integration that exposes the same program / option surface.
55738
+ *
55739
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55740
+ * provider refreshes the slice on an interval and eagerly after commands.
55741
+ */
55742
+ var DishwasherStateSchema = _enum([
55743
+ "idle",
55744
+ "running",
55745
+ "paused",
55746
+ "finished",
55747
+ "error",
55748
+ "unavailable"
55749
+ ]);
55750
+ var DishwasherConsumableLevelSchema = _enum([
55751
+ "ok",
55752
+ "low",
55753
+ "empty"
55754
+ ]);
55755
+ var DishwasherStatusSchema = object({
55756
+ state: DishwasherStateSchema,
55757
+ /** Active program id/name, or null when none selected / unknown. */
55758
+ program: string().nullable(),
55759
+ /** Program tokens the hardware accepts — drives the UI selector. */
55760
+ availablePrograms: array(string()),
55761
+ /** Minutes remaining on the active cycle, or null when not running. */
55762
+ remainingMinutes: number().int().nonnegative().nullable(),
55763
+ /** Cycle completion 0..100, or null when not applicable. */
55764
+ progressPercent: number().min(0).max(100).nullable(),
55765
+ /** True when the door is reported open. */
55766
+ doorOpen: boolean(),
55767
+ /** True when remote start is allowed (door closed, power on, etc.). */
55768
+ remoteStartAllowed: boolean(),
55769
+ /** Main power / switched-on state. */
55770
+ powerOn: boolean(),
55771
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55772
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55773
+ halfLoad: boolean(),
55774
+ hygienePlus: boolean(),
55775
+ /** Extra dry option when the appliance exposes it. */
55776
+ extraDry: boolean(),
55777
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55778
+ intensiveZone: boolean(),
55779
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55780
+ varioSpeedPlus: boolean(),
55781
+ /** Child lock (controls disabled on the appliance). */
55782
+ childLock: boolean(),
55783
+ errorCode: number().nullable(),
55784
+ errorLabel: string().nullable(),
55785
+ lastFetchedAt: number()
55786
+ });
55787
+ var dishwasherCapability = {
55788
+ name: "dishwasher",
55789
+ scope: "device",
55790
+ deviceNative: true,
55791
+ mode: "singleton",
55792
+ deviceTypes: [DeviceType.Dishwasher],
55793
+ methods: {
55794
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55795
+ kind: "mutation",
55796
+ auth: "protected"
55797
+ }),
55798
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55799
+ kind: "mutation",
55800
+ auth: "protected"
55801
+ }),
55802
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55803
+ kind: "mutation",
55804
+ auth: "protected"
55805
+ }),
55806
+ setProgram: method(object({
55807
+ deviceId: number().int().nonnegative(),
55808
+ program: string().min(1)
55809
+ }), _void(), {
55810
+ kind: "mutation",
55811
+ auth: "protected"
55812
+ }),
55813
+ setPower: method(object({
55814
+ deviceId: number().int().nonnegative(),
55815
+ on: boolean()
55816
+ }), _void(), {
55817
+ kind: "mutation",
55818
+ auth: "protected"
55819
+ }),
55820
+ setHalfLoad: method(object({
55821
+ deviceId: number().int().nonnegative(),
55822
+ on: boolean()
55823
+ }), _void(), {
55824
+ kind: "mutation",
55825
+ auth: "protected"
55826
+ }),
55827
+ setHygienePlus: method(object({
55828
+ deviceId: number().int().nonnegative(),
55829
+ on: boolean()
55830
+ }), _void(), {
55831
+ kind: "mutation",
55832
+ auth: "protected"
55833
+ }),
55834
+ setExtraDry: method(object({
55835
+ deviceId: number().int().nonnegative(),
55836
+ on: boolean()
55837
+ }), _void(), {
55838
+ kind: "mutation",
55839
+ auth: "protected"
55840
+ }),
55841
+ setIntensiveZone: method(object({
55842
+ deviceId: number().int().nonnegative(),
55843
+ on: boolean()
55844
+ }), _void(), {
55845
+ kind: "mutation",
55846
+ auth: "protected"
55847
+ }),
55848
+ setVarioSpeedPlus: method(object({
55849
+ deviceId: number().int().nonnegative(),
55850
+ on: boolean()
55851
+ }), _void(), {
55852
+ kind: "mutation",
55853
+ auth: "protected"
55854
+ }),
55855
+ setChildLock: method(object({
55856
+ deviceId: number().int().nonnegative(),
55857
+ on: boolean()
55858
+ }), _void(), {
55859
+ kind: "mutation",
55860
+ auth: "protected"
55861
+ }),
55862
+ setOption: method(object({
55863
+ deviceId: number().int().nonnegative(),
55864
+ key: string().min(1),
55865
+ value: union([
55866
+ boolean(),
55867
+ string(),
55868
+ number()
55869
+ ])
55870
+ }), _void(), {
55871
+ kind: "mutation",
55872
+ auth: "protected"
55873
+ })
55874
+ },
55875
+ status: {
55876
+ schema: DishwasherStatusSchema,
55877
+ kind: "poll"
55878
+ },
55879
+ runtimeState: DishwasherStatusSchema,
55880
+ durability: "session",
55881
+ history: { fields: { progressPercent: {
55882
+ kind: "gauge",
55883
+ unit: "%",
55884
+ deadband: 2
55885
+ } } }
55886
+ };
55717
55887
  var DoorbellStatusSchema = object({
55718
55888
  /** Ms epoch of the last press. null = never observed since this provider started. */
55719
55889
  lastPressedAt: number().nullable(),
@@ -56516,6 +56686,32 @@ var gasCapability = {
56516
56686
  * whether persisting is worth a SQLite commit. */
56517
56687
  volatileStateFields: ["lastChangedAt"]
56518
56688
  };
56689
+ var HeatingValveStatusSchema = object({
56690
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56691
+ position: number().min(0).max(100).nullable(),
56692
+ /** Ms epoch when the slice was last updated (push or poll). */
56693
+ lastFetchedAt: number()
56694
+ });
56695
+ var heatingValveCapability = {
56696
+ name: "heating-valve",
56697
+ scope: "device",
56698
+ deviceNative: true,
56699
+ mode: "singleton",
56700
+ deviceTypes: [DeviceType.Thermostat],
56701
+ methods: {},
56702
+ status: {
56703
+ schema: HeatingValveStatusSchema,
56704
+ kind: "push"
56705
+ },
56706
+ runtimeState: HeatingValveStatusSchema,
56707
+ durability: "session",
56708
+ history: { fields: { position: {
56709
+ kind: "gauge",
56710
+ unit: "%",
56711
+ deadband: 1
56712
+ } } },
56713
+ volatileStateFields: ["lastFetchedAt"]
56714
+ };
56519
56715
  /**
56520
56716
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56521
56717
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65936,6 +66132,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65936
66132
  dayNight: dayNightCapability,
65937
66133
  deviceDiscovery: deviceDiscoveryCapability,
65938
66134
  deviceStatus: deviceStatusCapability,
66135
+ dishwasher: dishwasherCapability,
65939
66136
  doorbell: doorbellCapability,
65940
66137
  enumSensor: enumSensorCapability,
65941
66138
  eventEmitter: eventEmitterCapability,
@@ -65943,6 +66140,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65943
66140
  featureProbe: featureProbeCapability,
65944
66141
  flood: floodCapability,
65945
66142
  gas: gasCapability,
66143
+ heatingValve: heatingValveCapability,
65946
66144
  humidifier: humidifierCapability,
65947
66145
  humiditySensor: humiditySensorCapability,
65948
66146
  image: imageCapability,
@@ -66668,6 +66866,12 @@ var BaseDeviceProvider = class extends BaseAddon {
66668
66866
  provider: this
66669
66867
  }];
66670
66868
  }
66869
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
66870
+ providerRegistrationsFromSuper(result) {
66871
+ if (Array.isArray(result)) return result;
66872
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
66873
+ return [];
66874
+ }
66671
66875
  async onShutdown() {
66672
66876
  this._restoreShuttingDown = true;
66673
66877
  this.cancelRestoreRetries();
@@ -67194,7 +67398,7 @@ var BaseDeviceProvider = class extends BaseAddon {
67194
67398
  return toDeviceSummary(device, this.addonId);
67195
67399
  }
67196
67400
  };
67197
- DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
67401
+ DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
67198
67402
  new Set(Object.values(DeviceType));
67199
67403
  Object.freeze({
67200
67404
  "accessories.getStatus": {
@@ -69615,6 +69819,84 @@ Object.freeze({
69615
69819
  addonId: null,
69616
69820
  access: "view"
69617
69821
  },
69822
+ "dishwasher.getStatus": {
69823
+ capName: "dishwasher",
69824
+ capScope: "device",
69825
+ addonId: null,
69826
+ access: "view"
69827
+ },
69828
+ "dishwasher.pause": {
69829
+ capName: "dishwasher",
69830
+ capScope: "device",
69831
+ addonId: null,
69832
+ access: "create"
69833
+ },
69834
+ "dishwasher.setChildLock": {
69835
+ capName: "dishwasher",
69836
+ capScope: "device",
69837
+ addonId: null,
69838
+ access: "create"
69839
+ },
69840
+ "dishwasher.setExtraDry": {
69841
+ capName: "dishwasher",
69842
+ capScope: "device",
69843
+ addonId: null,
69844
+ access: "create"
69845
+ },
69846
+ "dishwasher.setHalfLoad": {
69847
+ capName: "dishwasher",
69848
+ capScope: "device",
69849
+ addonId: null,
69850
+ access: "create"
69851
+ },
69852
+ "dishwasher.setHygienePlus": {
69853
+ capName: "dishwasher",
69854
+ capScope: "device",
69855
+ addonId: null,
69856
+ access: "create"
69857
+ },
69858
+ "dishwasher.setIntensiveZone": {
69859
+ capName: "dishwasher",
69860
+ capScope: "device",
69861
+ addonId: null,
69862
+ access: "create"
69863
+ },
69864
+ "dishwasher.setOption": {
69865
+ capName: "dishwasher",
69866
+ capScope: "device",
69867
+ addonId: null,
69868
+ access: "create"
69869
+ },
69870
+ "dishwasher.setPower": {
69871
+ capName: "dishwasher",
69872
+ capScope: "device",
69873
+ addonId: null,
69874
+ access: "create"
69875
+ },
69876
+ "dishwasher.setProgram": {
69877
+ capName: "dishwasher",
69878
+ capScope: "device",
69879
+ addonId: null,
69880
+ access: "create"
69881
+ },
69882
+ "dishwasher.setVarioSpeedPlus": {
69883
+ capName: "dishwasher",
69884
+ capScope: "device",
69885
+ addonId: null,
69886
+ access: "create"
69887
+ },
69888
+ "dishwasher.start": {
69889
+ capName: "dishwasher",
69890
+ capScope: "device",
69891
+ addonId: null,
69892
+ access: "create"
69893
+ },
69894
+ "dishwasher.stop": {
69895
+ capName: "dishwasher",
69896
+ capScope: "device",
69897
+ addonId: null,
69898
+ access: "create"
69899
+ },
69618
69900
  "doorbell.getStatus": {
69619
69901
  capName: "doorbell",
69620
69902
  capScope: "device",
@@ -69825,6 +70107,12 @@ Object.freeze({
69825
70107
  addonId: null,
69826
70108
  access: "view"
69827
70109
  },
70110
+ "heatingValve.getStatus": {
70111
+ capName: "heating-valve",
70112
+ capScope: "device",
70113
+ addonId: null,
70114
+ access: "view"
70115
+ },
69828
70116
  "humidifier.getStatus": {
69829
70117
  capName: "humidifier",
69830
70118
  capScope: "device",
@@ -75412,7 +75700,7 @@ Object.freeze({
75412
75700
  access: "create"
75413
75701
  }
75414
75702
  });
75415
- DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
75703
+ DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
75416
75704
  DeviceFeature.BatteryOperated;
75417
75705
  Object.freeze({
75418
75706
  "accessories.getStatus": [{
@@ -76236,6 +76524,71 @@ Object.freeze({
76236
76524
  form: "single",
76237
76525
  optional: false
76238
76526
  }],
76527
+ "dishwasher.getStatus": [{
76528
+ name: "deviceId",
76529
+ form: "single",
76530
+ optional: false
76531
+ }],
76532
+ "dishwasher.pause": [{
76533
+ name: "deviceId",
76534
+ form: "single",
76535
+ optional: false
76536
+ }],
76537
+ "dishwasher.setChildLock": [{
76538
+ name: "deviceId",
76539
+ form: "single",
76540
+ optional: false
76541
+ }],
76542
+ "dishwasher.setExtraDry": [{
76543
+ name: "deviceId",
76544
+ form: "single",
76545
+ optional: false
76546
+ }],
76547
+ "dishwasher.setHalfLoad": [{
76548
+ name: "deviceId",
76549
+ form: "single",
76550
+ optional: false
76551
+ }],
76552
+ "dishwasher.setHygienePlus": [{
76553
+ name: "deviceId",
76554
+ form: "single",
76555
+ optional: false
76556
+ }],
76557
+ "dishwasher.setIntensiveZone": [{
76558
+ name: "deviceId",
76559
+ form: "single",
76560
+ optional: false
76561
+ }],
76562
+ "dishwasher.setOption": [{
76563
+ name: "deviceId",
76564
+ form: "single",
76565
+ optional: false
76566
+ }],
76567
+ "dishwasher.setPower": [{
76568
+ name: "deviceId",
76569
+ form: "single",
76570
+ optional: false
76571
+ }],
76572
+ "dishwasher.setProgram": [{
76573
+ name: "deviceId",
76574
+ form: "single",
76575
+ optional: false
76576
+ }],
76577
+ "dishwasher.setVarioSpeedPlus": [{
76578
+ name: "deviceId",
76579
+ form: "single",
76580
+ optional: false
76581
+ }],
76582
+ "dishwasher.start": [{
76583
+ name: "deviceId",
76584
+ form: "single",
76585
+ optional: false
76586
+ }],
76587
+ "dishwasher.stop": [{
76588
+ name: "deviceId",
76589
+ form: "single",
76590
+ optional: false
76591
+ }],
76239
76592
  "doorbell.getStatus": [{
76240
76593
  name: "deviceId",
76241
76594
  form: "single",
@@ -76305,6 +76658,11 @@ Object.freeze({
76305
76658
  form: "single",
76306
76659
  optional: false
76307
76660
  }],
76661
+ "heatingValve.getStatus": [{
76662
+ name: "deviceId",
76663
+ form: "single",
76664
+ optional: false
76665
+ }],
76308
76666
  "humidifier.getStatus": [{
76309
76667
  name: "deviceId",
76310
76668
  form: "single",
@@ -105316,7 +105674,7 @@ var HomematicProviderAddon = class extends BaseDeviceProvider {
105316
105674
  super({ ...DEFAULTS });
105317
105675
  }
105318
105676
  async onInitialize() {
105319
- const regs = await super.onInitialize();
105677
+ const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
105320
105678
  const migrated = migrateLegacyConfig(await this.resolveGlobalStore());
105321
105679
  if (this.brokersDiffer(migrated.brokers, this.config.brokers)) await this.updateGlobalSettings({ brokers: migrated.brokers });
105322
105680
  const records = this.ctx.records;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homematic",
3
- "version": "1.2.136",
3
+ "version": "1.2.138",
4
4
  "description": "Homematic / HomematicIP (CCU3 / RaspberryMatic) device-provider addon for CamStack — wraps the nodehomematic library",
5
5
  "keywords": [
6
6
  "camstack",