@camstack/addon-provider-mqtt-ha 0.1.4 → 0.1.6

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
@@ -5439,7 +5439,7 @@ var ZodIssueCode = {
5439
5439
  var ZodFirstPartyTypeKind;
5440
5440
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5441
5441
  //#endregion
5442
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5442
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5443
5443
  /**
5444
5444
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5445
5445
  * window to float samples (D455).
@@ -8458,7 +8458,7 @@ object({
8458
8458
  params: record(string(), union([string(), number()])).optional()
8459
8459
  });
8460
8460
  //#endregion
8461
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8461
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8462
8462
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8463
8463
  DeviceType["Camera"] = "camera";
8464
8464
  DeviceType["Hub"] = "hub";
@@ -8550,6 +8550,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8550
8550
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8551
8551
  * integrations sharing the same food/desiccant/hopper surface. */
8552
8552
  DeviceType["PetFeeder"] = "pet-feeder";
8553
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8554
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8555
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8556
+ DeviceType["Dishwasher"] = "dishwasher";
8553
8557
  return DeviceType;
8554
8558
  }({});
8555
8559
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8807,7 +8811,7 @@ function errMsg(err) {
8807
8811
  return String(err);
8808
8812
  }
8809
8813
  //#endregion
8810
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8814
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8811
8815
  /**
8812
8816
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8813
8817
  *
@@ -13193,8 +13197,13 @@ var AlertSeveritySchema = _enum([
13193
13197
  "info",
13194
13198
  "success",
13195
13199
  "warning",
13196
- "error"
13200
+ "error",
13201
+ "critical"
13197
13202
  ]);
13203
+ var AlertActionSchema = object({
13204
+ label: string(),
13205
+ href: string().optional()
13206
+ });
13198
13207
  var AlertStatusSchema = _enum([
13199
13208
  "active",
13200
13209
  "in-progress",
@@ -13212,6 +13221,7 @@ var AlertSchema = object({
13212
13221
  severity: AlertSeveritySchema,
13213
13222
  title: string(),
13214
13223
  message: string(),
13224
+ action: AlertActionSchema.optional(),
13215
13225
  status: AlertStatusSchema,
13216
13226
  progress: number().optional(),
13217
13227
  read: boolean(),
@@ -17573,7 +17583,11 @@ var deviceDiscoveryCapability = {
17573
17583
  };
17574
17584
  /**
17575
17585
  * `device-adoption` — generic discovery + adoption surface,
17576
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17586
+ * system-scoped collection (one provider per integration addon), routed
17587
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17588
+ * pin model as `connection-test`. The admin UI keeps using
17589
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17590
+ * successor to `ha-discovery`:
17577
17591
  * keyed by `integrationId` (the addon resolves integrationId → broker
17578
17592
  * internally) rather than a connection-specific `brokerId`, and it
17579
17593
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -17738,7 +17752,7 @@ var ResyncResultSchema = object({
17738
17752
  var deviceAdoptionCapability = {
17739
17753
  name: "device-adoption",
17740
17754
  scope: "system",
17741
- mode: "singleton",
17755
+ mode: "collection",
17742
17756
  status: {
17743
17757
  schema: AdoptionStatusSchema,
17744
17758
  kind: "poll"
@@ -53770,7 +53784,8 @@ var batteryCapability = {
53770
53784
  DeviceType.Button,
53771
53785
  DeviceType.Switch,
53772
53786
  DeviceType.PetFeeder,
53773
- DeviceType.Container
53787
+ DeviceType.Container,
53788
+ DeviceType.Thermostat
53774
53789
  ],
53775
53790
  methods: {
53776
53791
  /**
@@ -55243,6 +55258,161 @@ onStatusChanged: { data: object({
55243
55258
  * whether persisting is worth a SQLite commit. */
55244
55259
  volatileStateFields: ["lastChangedAt"]
55245
55260
  };
55261
+ /**
55262
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55263
+ * consumable levels (salt, rinse aid) and common program options.
55264
+ *
55265
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55266
+ * by any integration that exposes the same program / option surface.
55267
+ *
55268
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55269
+ * provider refreshes the slice on an interval and eagerly after commands.
55270
+ */
55271
+ var DishwasherStateSchema = _enum([
55272
+ "idle",
55273
+ "running",
55274
+ "paused",
55275
+ "finished",
55276
+ "error",
55277
+ "unavailable"
55278
+ ]);
55279
+ var DishwasherConsumableLevelSchema = _enum([
55280
+ "ok",
55281
+ "low",
55282
+ "empty"
55283
+ ]);
55284
+ var DishwasherStatusSchema = object({
55285
+ state: DishwasherStateSchema,
55286
+ /** Active program id/name, or null when none selected / unknown. */
55287
+ program: string().nullable(),
55288
+ /** Program tokens the hardware accepts — drives the UI selector. */
55289
+ availablePrograms: array(string()),
55290
+ /** Minutes remaining on the active cycle, or null when not running. */
55291
+ remainingMinutes: number().int().nonnegative().nullable(),
55292
+ /** Cycle completion 0..100, or null when not applicable. */
55293
+ progressPercent: number().min(0).max(100).nullable(),
55294
+ /** True when the door is reported open. */
55295
+ doorOpen: boolean(),
55296
+ /** True when remote start is allowed (door closed, power on, etc.). */
55297
+ remoteStartAllowed: boolean(),
55298
+ /** Main power / switched-on state. */
55299
+ powerOn: boolean(),
55300
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55301
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55302
+ halfLoad: boolean(),
55303
+ hygienePlus: boolean(),
55304
+ /** Extra dry option when the appliance exposes it. */
55305
+ extraDry: boolean(),
55306
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55307
+ intensiveZone: boolean(),
55308
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55309
+ varioSpeedPlus: boolean(),
55310
+ /** Child lock (controls disabled on the appliance). */
55311
+ childLock: boolean(),
55312
+ errorCode: number().nullable(),
55313
+ errorLabel: string().nullable(),
55314
+ lastFetchedAt: number()
55315
+ });
55316
+ var dishwasherCapability = {
55317
+ name: "dishwasher",
55318
+ scope: "device",
55319
+ deviceNative: true,
55320
+ mode: "singleton",
55321
+ deviceTypes: [DeviceType.Dishwasher],
55322
+ methods: {
55323
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55324
+ kind: "mutation",
55325
+ auth: "protected"
55326
+ }),
55327
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55328
+ kind: "mutation",
55329
+ auth: "protected"
55330
+ }),
55331
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55332
+ kind: "mutation",
55333
+ auth: "protected"
55334
+ }),
55335
+ setProgram: method(object({
55336
+ deviceId: number().int().nonnegative(),
55337
+ program: string().min(1)
55338
+ }), _void(), {
55339
+ kind: "mutation",
55340
+ auth: "protected"
55341
+ }),
55342
+ setPower: method(object({
55343
+ deviceId: number().int().nonnegative(),
55344
+ on: boolean()
55345
+ }), _void(), {
55346
+ kind: "mutation",
55347
+ auth: "protected"
55348
+ }),
55349
+ setHalfLoad: method(object({
55350
+ deviceId: number().int().nonnegative(),
55351
+ on: boolean()
55352
+ }), _void(), {
55353
+ kind: "mutation",
55354
+ auth: "protected"
55355
+ }),
55356
+ setHygienePlus: method(object({
55357
+ deviceId: number().int().nonnegative(),
55358
+ on: boolean()
55359
+ }), _void(), {
55360
+ kind: "mutation",
55361
+ auth: "protected"
55362
+ }),
55363
+ setExtraDry: method(object({
55364
+ deviceId: number().int().nonnegative(),
55365
+ on: boolean()
55366
+ }), _void(), {
55367
+ kind: "mutation",
55368
+ auth: "protected"
55369
+ }),
55370
+ setIntensiveZone: method(object({
55371
+ deviceId: number().int().nonnegative(),
55372
+ on: boolean()
55373
+ }), _void(), {
55374
+ kind: "mutation",
55375
+ auth: "protected"
55376
+ }),
55377
+ setVarioSpeedPlus: method(object({
55378
+ deviceId: number().int().nonnegative(),
55379
+ on: boolean()
55380
+ }), _void(), {
55381
+ kind: "mutation",
55382
+ auth: "protected"
55383
+ }),
55384
+ setChildLock: method(object({
55385
+ deviceId: number().int().nonnegative(),
55386
+ on: boolean()
55387
+ }), _void(), {
55388
+ kind: "mutation",
55389
+ auth: "protected"
55390
+ }),
55391
+ setOption: method(object({
55392
+ deviceId: number().int().nonnegative(),
55393
+ key: string().min(1),
55394
+ value: union([
55395
+ boolean(),
55396
+ string(),
55397
+ number()
55398
+ ])
55399
+ }), _void(), {
55400
+ kind: "mutation",
55401
+ auth: "protected"
55402
+ })
55403
+ },
55404
+ status: {
55405
+ schema: DishwasherStatusSchema,
55406
+ kind: "poll"
55407
+ },
55408
+ runtimeState: DishwasherStatusSchema,
55409
+ durability: "session",
55410
+ history: { fields: { progressPercent: {
55411
+ kind: "gauge",
55412
+ unit: "%",
55413
+ deadband: 2
55414
+ } } }
55415
+ };
55246
55416
  var DoorbellStatusSchema = object({
55247
55417
  /** Ms epoch of the last press. null = never observed since this provider started. */
55248
55418
  lastPressedAt: number().nullable(),
@@ -56045,6 +56215,32 @@ var gasCapability = {
56045
56215
  * whether persisting is worth a SQLite commit. */
56046
56216
  volatileStateFields: ["lastChangedAt"]
56047
56217
  };
56218
+ var HeatingValveStatusSchema = object({
56219
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56220
+ position: number().min(0).max(100).nullable(),
56221
+ /** Ms epoch when the slice was last updated (push or poll). */
56222
+ lastFetchedAt: number()
56223
+ });
56224
+ var heatingValveCapability = {
56225
+ name: "heating-valve",
56226
+ scope: "device",
56227
+ deviceNative: true,
56228
+ mode: "singleton",
56229
+ deviceTypes: [DeviceType.Thermostat],
56230
+ methods: {},
56231
+ status: {
56232
+ schema: HeatingValveStatusSchema,
56233
+ kind: "push"
56234
+ },
56235
+ runtimeState: HeatingValveStatusSchema,
56236
+ durability: "session",
56237
+ history: { fields: { position: {
56238
+ kind: "gauge",
56239
+ unit: "%",
56240
+ deadband: 1
56241
+ } } },
56242
+ volatileStateFields: ["lastFetchedAt"]
56243
+ };
56048
56244
  /**
56049
56245
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56050
56246
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65465,6 +65661,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65465
65661
  dayNight: dayNightCapability,
65466
65662
  deviceDiscovery: deviceDiscoveryCapability,
65467
65663
  deviceStatus: deviceStatusCapability,
65664
+ dishwasher: dishwasherCapability,
65468
65665
  doorbell: doorbellCapability,
65469
65666
  enumSensor: enumSensorCapability,
65470
65667
  eventEmitter: eventEmitterCapability,
@@ -65472,6 +65669,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65472
65669
  featureProbe: featureProbeCapability,
65473
65670
  flood: floodCapability,
65474
65671
  gas: gasCapability,
65672
+ heatingValve: heatingValveCapability,
65475
65673
  humidifier: humidifierCapability,
65476
65674
  humiditySensor: humiditySensorCapability,
65477
65675
  image: imageCapability,
@@ -66197,6 +66395,12 @@ var BaseDeviceProvider = class extends BaseAddon {
66197
66395
  provider: this
66198
66396
  }];
66199
66397
  }
66398
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
66399
+ providerRegistrationsFromSuper(result) {
66400
+ if (Array.isArray(result)) return result;
66401
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
66402
+ return [];
66403
+ }
66200
66404
  async onShutdown() {
66201
66405
  this._restoreShuttingDown = true;
66202
66406
  this.cancelRestoreRetries();
@@ -66723,7 +66927,7 @@ var BaseDeviceProvider = class extends BaseAddon {
66723
66927
  return toDeviceSummary(device, this.addonId);
66724
66928
  }
66725
66929
  };
66726
- 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;
66930
+ 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;
66727
66931
  new Set(Object.values(DeviceType));
66728
66932
  Object.freeze({
66729
66933
  "accessories.getStatus": {
@@ -69144,6 +69348,84 @@ Object.freeze({
69144
69348
  addonId: null,
69145
69349
  access: "view"
69146
69350
  },
69351
+ "dishwasher.getStatus": {
69352
+ capName: "dishwasher",
69353
+ capScope: "device",
69354
+ addonId: null,
69355
+ access: "view"
69356
+ },
69357
+ "dishwasher.pause": {
69358
+ capName: "dishwasher",
69359
+ capScope: "device",
69360
+ addonId: null,
69361
+ access: "create"
69362
+ },
69363
+ "dishwasher.setChildLock": {
69364
+ capName: "dishwasher",
69365
+ capScope: "device",
69366
+ addonId: null,
69367
+ access: "create"
69368
+ },
69369
+ "dishwasher.setExtraDry": {
69370
+ capName: "dishwasher",
69371
+ capScope: "device",
69372
+ addonId: null,
69373
+ access: "create"
69374
+ },
69375
+ "dishwasher.setHalfLoad": {
69376
+ capName: "dishwasher",
69377
+ capScope: "device",
69378
+ addonId: null,
69379
+ access: "create"
69380
+ },
69381
+ "dishwasher.setHygienePlus": {
69382
+ capName: "dishwasher",
69383
+ capScope: "device",
69384
+ addonId: null,
69385
+ access: "create"
69386
+ },
69387
+ "dishwasher.setIntensiveZone": {
69388
+ capName: "dishwasher",
69389
+ capScope: "device",
69390
+ addonId: null,
69391
+ access: "create"
69392
+ },
69393
+ "dishwasher.setOption": {
69394
+ capName: "dishwasher",
69395
+ capScope: "device",
69396
+ addonId: null,
69397
+ access: "create"
69398
+ },
69399
+ "dishwasher.setPower": {
69400
+ capName: "dishwasher",
69401
+ capScope: "device",
69402
+ addonId: null,
69403
+ access: "create"
69404
+ },
69405
+ "dishwasher.setProgram": {
69406
+ capName: "dishwasher",
69407
+ capScope: "device",
69408
+ addonId: null,
69409
+ access: "create"
69410
+ },
69411
+ "dishwasher.setVarioSpeedPlus": {
69412
+ capName: "dishwasher",
69413
+ capScope: "device",
69414
+ addonId: null,
69415
+ access: "create"
69416
+ },
69417
+ "dishwasher.start": {
69418
+ capName: "dishwasher",
69419
+ capScope: "device",
69420
+ addonId: null,
69421
+ access: "create"
69422
+ },
69423
+ "dishwasher.stop": {
69424
+ capName: "dishwasher",
69425
+ capScope: "device",
69426
+ addonId: null,
69427
+ access: "create"
69428
+ },
69147
69429
  "doorbell.getStatus": {
69148
69430
  capName: "doorbell",
69149
69431
  capScope: "device",
@@ -69354,6 +69636,12 @@ Object.freeze({
69354
69636
  addonId: null,
69355
69637
  access: "view"
69356
69638
  },
69639
+ "heatingValve.getStatus": {
69640
+ capName: "heating-valve",
69641
+ capScope: "device",
69642
+ addonId: null,
69643
+ access: "view"
69644
+ },
69357
69645
  "humidifier.getStatus": {
69358
69646
  capName: "humidifier",
69359
69647
  capScope: "device",
@@ -74941,7 +75229,7 @@ Object.freeze({
74941
75229
  access: "create"
74942
75230
  }
74943
75231
  });
74944
- 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;
75232
+ 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;
74945
75233
  DeviceFeature.BatteryOperated;
74946
75234
  Object.freeze({
74947
75235
  "accessories.getStatus": [{
@@ -75765,6 +76053,71 @@ Object.freeze({
75765
76053
  form: "single",
75766
76054
  optional: false
75767
76055
  }],
76056
+ "dishwasher.getStatus": [{
76057
+ name: "deviceId",
76058
+ form: "single",
76059
+ optional: false
76060
+ }],
76061
+ "dishwasher.pause": [{
76062
+ name: "deviceId",
76063
+ form: "single",
76064
+ optional: false
76065
+ }],
76066
+ "dishwasher.setChildLock": [{
76067
+ name: "deviceId",
76068
+ form: "single",
76069
+ optional: false
76070
+ }],
76071
+ "dishwasher.setExtraDry": [{
76072
+ name: "deviceId",
76073
+ form: "single",
76074
+ optional: false
76075
+ }],
76076
+ "dishwasher.setHalfLoad": [{
76077
+ name: "deviceId",
76078
+ form: "single",
76079
+ optional: false
76080
+ }],
76081
+ "dishwasher.setHygienePlus": [{
76082
+ name: "deviceId",
76083
+ form: "single",
76084
+ optional: false
76085
+ }],
76086
+ "dishwasher.setIntensiveZone": [{
76087
+ name: "deviceId",
76088
+ form: "single",
76089
+ optional: false
76090
+ }],
76091
+ "dishwasher.setOption": [{
76092
+ name: "deviceId",
76093
+ form: "single",
76094
+ optional: false
76095
+ }],
76096
+ "dishwasher.setPower": [{
76097
+ name: "deviceId",
76098
+ form: "single",
76099
+ optional: false
76100
+ }],
76101
+ "dishwasher.setProgram": [{
76102
+ name: "deviceId",
76103
+ form: "single",
76104
+ optional: false
76105
+ }],
76106
+ "dishwasher.setVarioSpeedPlus": [{
76107
+ name: "deviceId",
76108
+ form: "single",
76109
+ optional: false
76110
+ }],
76111
+ "dishwasher.start": [{
76112
+ name: "deviceId",
76113
+ form: "single",
76114
+ optional: false
76115
+ }],
76116
+ "dishwasher.stop": [{
76117
+ name: "deviceId",
76118
+ form: "single",
76119
+ optional: false
76120
+ }],
75768
76121
  "doorbell.getStatus": [{
75769
76122
  name: "deviceId",
75770
76123
  form: "single",
@@ -75834,6 +76187,11 @@ Object.freeze({
75834
76187
  form: "single",
75835
76188
  optional: false
75836
76189
  }],
76190
+ "heatingValve.getStatus": [{
76191
+ name: "deviceId",
76192
+ form: "single",
76193
+ optional: false
76194
+ }],
75837
76195
  "humidifier.getStatus": [{
75838
76196
  name: "deviceId",
75839
76197
  form: "single",
@@ -103320,7 +103678,7 @@ var MqttHaProviderAddon = class extends BaseDeviceProvider {
103320
103678
  super({});
103321
103679
  }
103322
103680
  async onInitialize() {
103323
- const regs = await super.onInitialize();
103681
+ const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
103324
103682
  wireMqttHaDiscoveryStore(this.discoveryStore);
103325
103683
  this.sessionManager = new MqttHaBrokerSessionManager({
103326
103684
  addonId: this.ctx.id,
package/dist/addon.mjs CHANGED
@@ -5440,7 +5440,7 @@ var ZodIssueCode = {
5440
5440
  var ZodFirstPartyTypeKind;
5441
5441
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5442
5442
  //#endregion
5443
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5443
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5444
5444
  /**
5445
5445
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5446
5446
  * window to float samples (D455).
@@ -8459,7 +8459,7 @@ object({
8459
8459
  params: record(string(), union([string(), number()])).optional()
8460
8460
  });
8461
8461
  //#endregion
8462
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8462
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8463
8463
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8464
8464
  DeviceType["Camera"] = "camera";
8465
8465
  DeviceType["Hub"] = "hub";
@@ -8551,6 +8551,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8551
8551
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8552
8552
  * integrations sharing the same food/desiccant/hopper surface. */
8553
8553
  DeviceType["PetFeeder"] = "pet-feeder";
8554
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8555
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8556
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8557
+ DeviceType["Dishwasher"] = "dishwasher";
8554
8558
  return DeviceType;
8555
8559
  }({});
8556
8560
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8808,7 +8812,7 @@ function errMsg(err) {
8808
8812
  return String(err);
8809
8813
  }
8810
8814
  //#endregion
8811
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8815
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8812
8816
  /**
8813
8817
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8814
8818
  *
@@ -13194,8 +13198,13 @@ var AlertSeveritySchema = _enum([
13194
13198
  "info",
13195
13199
  "success",
13196
13200
  "warning",
13197
- "error"
13201
+ "error",
13202
+ "critical"
13198
13203
  ]);
13204
+ var AlertActionSchema = object({
13205
+ label: string(),
13206
+ href: string().optional()
13207
+ });
13199
13208
  var AlertStatusSchema = _enum([
13200
13209
  "active",
13201
13210
  "in-progress",
@@ -13213,6 +13222,7 @@ var AlertSchema = object({
13213
13222
  severity: AlertSeveritySchema,
13214
13223
  title: string(),
13215
13224
  message: string(),
13225
+ action: AlertActionSchema.optional(),
13216
13226
  status: AlertStatusSchema,
13217
13227
  progress: number().optional(),
13218
13228
  read: boolean(),
@@ -17574,7 +17584,11 @@ var deviceDiscoveryCapability = {
17574
17584
  };
17575
17585
  /**
17576
17586
  * `device-adoption` — generic discovery + adoption surface,
17577
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17587
+ * system-scoped collection (one provider per integration addon), routed
17588
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17589
+ * pin model as `connection-test`. The admin UI keeps using
17590
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17591
+ * successor to `ha-discovery`:
17578
17592
  * keyed by `integrationId` (the addon resolves integrationId → broker
17579
17593
  * internally) rather than a connection-specific `brokerId`, and it
17580
17594
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -17739,7 +17753,7 @@ var ResyncResultSchema = object({
17739
17753
  var deviceAdoptionCapability = {
17740
17754
  name: "device-adoption",
17741
17755
  scope: "system",
17742
- mode: "singleton",
17756
+ mode: "collection",
17743
17757
  status: {
17744
17758
  schema: AdoptionStatusSchema,
17745
17759
  kind: "poll"
@@ -53771,7 +53785,8 @@ var batteryCapability = {
53771
53785
  DeviceType.Button,
53772
53786
  DeviceType.Switch,
53773
53787
  DeviceType.PetFeeder,
53774
- DeviceType.Container
53788
+ DeviceType.Container,
53789
+ DeviceType.Thermostat
53775
53790
  ],
53776
53791
  methods: {
53777
53792
  /**
@@ -55244,6 +55259,161 @@ onStatusChanged: { data: object({
55244
55259
  * whether persisting is worth a SQLite commit. */
55245
55260
  volatileStateFields: ["lastChangedAt"]
55246
55261
  };
55262
+ /**
55263
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
55264
+ * consumable levels (salt, rinse aid) and common program options.
55265
+ *
55266
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
55267
+ * by any integration that exposes the same program / option surface.
55268
+ *
55269
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55270
+ * provider refreshes the slice on an interval and eagerly after commands.
55271
+ */
55272
+ var DishwasherStateSchema = _enum([
55273
+ "idle",
55274
+ "running",
55275
+ "paused",
55276
+ "finished",
55277
+ "error",
55278
+ "unavailable"
55279
+ ]);
55280
+ var DishwasherConsumableLevelSchema = _enum([
55281
+ "ok",
55282
+ "low",
55283
+ "empty"
55284
+ ]);
55285
+ var DishwasherStatusSchema = object({
55286
+ state: DishwasherStateSchema,
55287
+ /** Active program id/name, or null when none selected / unknown. */
55288
+ program: string().nullable(),
55289
+ /** Program tokens the hardware accepts — drives the UI selector. */
55290
+ availablePrograms: array(string()),
55291
+ /** Minutes remaining on the active cycle, or null when not running. */
55292
+ remainingMinutes: number().int().nonnegative().nullable(),
55293
+ /** Cycle completion 0..100, or null when not applicable. */
55294
+ progressPercent: number().min(0).max(100).nullable(),
55295
+ /** True when the door is reported open. */
55296
+ doorOpen: boolean(),
55297
+ /** True when remote start is allowed (door closed, power on, etc.). */
55298
+ remoteStartAllowed: boolean(),
55299
+ /** Main power / switched-on state. */
55300
+ powerOn: boolean(),
55301
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
55302
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55303
+ halfLoad: boolean(),
55304
+ hygienePlus: boolean(),
55305
+ /** Extra dry option when the appliance exposes it. */
55306
+ extraDry: boolean(),
55307
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55308
+ intensiveZone: boolean(),
55309
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55310
+ varioSpeedPlus: boolean(),
55311
+ /** Child lock (controls disabled on the appliance). */
55312
+ childLock: boolean(),
55313
+ errorCode: number().nullable(),
55314
+ errorLabel: string().nullable(),
55315
+ lastFetchedAt: number()
55316
+ });
55317
+ var dishwasherCapability = {
55318
+ name: "dishwasher",
55319
+ scope: "device",
55320
+ deviceNative: true,
55321
+ mode: "singleton",
55322
+ deviceTypes: [DeviceType.Dishwasher],
55323
+ methods: {
55324
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55325
+ kind: "mutation",
55326
+ auth: "protected"
55327
+ }),
55328
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55329
+ kind: "mutation",
55330
+ auth: "protected"
55331
+ }),
55332
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55333
+ kind: "mutation",
55334
+ auth: "protected"
55335
+ }),
55336
+ setProgram: method(object({
55337
+ deviceId: number().int().nonnegative(),
55338
+ program: string().min(1)
55339
+ }), _void(), {
55340
+ kind: "mutation",
55341
+ auth: "protected"
55342
+ }),
55343
+ setPower: method(object({
55344
+ deviceId: number().int().nonnegative(),
55345
+ on: boolean()
55346
+ }), _void(), {
55347
+ kind: "mutation",
55348
+ auth: "protected"
55349
+ }),
55350
+ setHalfLoad: method(object({
55351
+ deviceId: number().int().nonnegative(),
55352
+ on: boolean()
55353
+ }), _void(), {
55354
+ kind: "mutation",
55355
+ auth: "protected"
55356
+ }),
55357
+ setHygienePlus: method(object({
55358
+ deviceId: number().int().nonnegative(),
55359
+ on: boolean()
55360
+ }), _void(), {
55361
+ kind: "mutation",
55362
+ auth: "protected"
55363
+ }),
55364
+ setExtraDry: method(object({
55365
+ deviceId: number().int().nonnegative(),
55366
+ on: boolean()
55367
+ }), _void(), {
55368
+ kind: "mutation",
55369
+ auth: "protected"
55370
+ }),
55371
+ setIntensiveZone: method(object({
55372
+ deviceId: number().int().nonnegative(),
55373
+ on: boolean()
55374
+ }), _void(), {
55375
+ kind: "mutation",
55376
+ auth: "protected"
55377
+ }),
55378
+ setVarioSpeedPlus: method(object({
55379
+ deviceId: number().int().nonnegative(),
55380
+ on: boolean()
55381
+ }), _void(), {
55382
+ kind: "mutation",
55383
+ auth: "protected"
55384
+ }),
55385
+ setChildLock: method(object({
55386
+ deviceId: number().int().nonnegative(),
55387
+ on: boolean()
55388
+ }), _void(), {
55389
+ kind: "mutation",
55390
+ auth: "protected"
55391
+ }),
55392
+ setOption: method(object({
55393
+ deviceId: number().int().nonnegative(),
55394
+ key: string().min(1),
55395
+ value: union([
55396
+ boolean(),
55397
+ string(),
55398
+ number()
55399
+ ])
55400
+ }), _void(), {
55401
+ kind: "mutation",
55402
+ auth: "protected"
55403
+ })
55404
+ },
55405
+ status: {
55406
+ schema: DishwasherStatusSchema,
55407
+ kind: "poll"
55408
+ },
55409
+ runtimeState: DishwasherStatusSchema,
55410
+ durability: "session",
55411
+ history: { fields: { progressPercent: {
55412
+ kind: "gauge",
55413
+ unit: "%",
55414
+ deadband: 2
55415
+ } } }
55416
+ };
55247
55417
  var DoorbellStatusSchema = object({
55248
55418
  /** Ms epoch of the last press. null = never observed since this provider started. */
55249
55419
  lastPressedAt: number().nullable(),
@@ -56046,6 +56216,32 @@ var gasCapability = {
56046
56216
  * whether persisting is worth a SQLite commit. */
56047
56217
  volatileStateFields: ["lastChangedAt"]
56048
56218
  };
56219
+ var HeatingValveStatusSchema = object({
56220
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
56221
+ position: number().min(0).max(100).nullable(),
56222
+ /** Ms epoch when the slice was last updated (push or poll). */
56223
+ lastFetchedAt: number()
56224
+ });
56225
+ var heatingValveCapability = {
56226
+ name: "heating-valve",
56227
+ scope: "device",
56228
+ deviceNative: true,
56229
+ mode: "singleton",
56230
+ deviceTypes: [DeviceType.Thermostat],
56231
+ methods: {},
56232
+ status: {
56233
+ schema: HeatingValveStatusSchema,
56234
+ kind: "push"
56235
+ },
56236
+ runtimeState: HeatingValveStatusSchema,
56237
+ durability: "session",
56238
+ history: { fields: { position: {
56239
+ kind: "gauge",
56240
+ unit: "%",
56241
+ deadband: 1
56242
+ } } },
56243
+ volatileStateFields: ["lastFetchedAt"]
56244
+ };
56049
56245
  /**
56050
56246
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
56051
56247
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -65466,6 +65662,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65466
65662
  dayNight: dayNightCapability,
65467
65663
  deviceDiscovery: deviceDiscoveryCapability,
65468
65664
  deviceStatus: deviceStatusCapability,
65665
+ dishwasher: dishwasherCapability,
65469
65666
  doorbell: doorbellCapability,
65470
65667
  enumSensor: enumSensorCapability,
65471
65668
  eventEmitter: eventEmitterCapability,
@@ -65473,6 +65670,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
65473
65670
  featureProbe: featureProbeCapability,
65474
65671
  flood: floodCapability,
65475
65672
  gas: gasCapability,
65673
+ heatingValve: heatingValveCapability,
65476
65674
  humidifier: humidifierCapability,
65477
65675
  humiditySensor: humiditySensorCapability,
65478
65676
  image: imageCapability,
@@ -66198,6 +66396,12 @@ var BaseDeviceProvider = class extends BaseAddon {
66198
66396
  provider: this
66199
66397
  }];
66200
66398
  }
66399
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
66400
+ providerRegistrationsFromSuper(result) {
66401
+ if (Array.isArray(result)) return result;
66402
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
66403
+ return [];
66404
+ }
66201
66405
  async onShutdown() {
66202
66406
  this._restoreShuttingDown = true;
66203
66407
  this.cancelRestoreRetries();
@@ -66724,7 +66928,7 @@ var BaseDeviceProvider = class extends BaseAddon {
66724
66928
  return toDeviceSummary(device, this.addonId);
66725
66929
  }
66726
66930
  };
66727
- 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;
66931
+ 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;
66728
66932
  new Set(Object.values(DeviceType));
66729
66933
  Object.freeze({
66730
66934
  "accessories.getStatus": {
@@ -69145,6 +69349,84 @@ Object.freeze({
69145
69349
  addonId: null,
69146
69350
  access: "view"
69147
69351
  },
69352
+ "dishwasher.getStatus": {
69353
+ capName: "dishwasher",
69354
+ capScope: "device",
69355
+ addonId: null,
69356
+ access: "view"
69357
+ },
69358
+ "dishwasher.pause": {
69359
+ capName: "dishwasher",
69360
+ capScope: "device",
69361
+ addonId: null,
69362
+ access: "create"
69363
+ },
69364
+ "dishwasher.setChildLock": {
69365
+ capName: "dishwasher",
69366
+ capScope: "device",
69367
+ addonId: null,
69368
+ access: "create"
69369
+ },
69370
+ "dishwasher.setExtraDry": {
69371
+ capName: "dishwasher",
69372
+ capScope: "device",
69373
+ addonId: null,
69374
+ access: "create"
69375
+ },
69376
+ "dishwasher.setHalfLoad": {
69377
+ capName: "dishwasher",
69378
+ capScope: "device",
69379
+ addonId: null,
69380
+ access: "create"
69381
+ },
69382
+ "dishwasher.setHygienePlus": {
69383
+ capName: "dishwasher",
69384
+ capScope: "device",
69385
+ addonId: null,
69386
+ access: "create"
69387
+ },
69388
+ "dishwasher.setIntensiveZone": {
69389
+ capName: "dishwasher",
69390
+ capScope: "device",
69391
+ addonId: null,
69392
+ access: "create"
69393
+ },
69394
+ "dishwasher.setOption": {
69395
+ capName: "dishwasher",
69396
+ capScope: "device",
69397
+ addonId: null,
69398
+ access: "create"
69399
+ },
69400
+ "dishwasher.setPower": {
69401
+ capName: "dishwasher",
69402
+ capScope: "device",
69403
+ addonId: null,
69404
+ access: "create"
69405
+ },
69406
+ "dishwasher.setProgram": {
69407
+ capName: "dishwasher",
69408
+ capScope: "device",
69409
+ addonId: null,
69410
+ access: "create"
69411
+ },
69412
+ "dishwasher.setVarioSpeedPlus": {
69413
+ capName: "dishwasher",
69414
+ capScope: "device",
69415
+ addonId: null,
69416
+ access: "create"
69417
+ },
69418
+ "dishwasher.start": {
69419
+ capName: "dishwasher",
69420
+ capScope: "device",
69421
+ addonId: null,
69422
+ access: "create"
69423
+ },
69424
+ "dishwasher.stop": {
69425
+ capName: "dishwasher",
69426
+ capScope: "device",
69427
+ addonId: null,
69428
+ access: "create"
69429
+ },
69148
69430
  "doorbell.getStatus": {
69149
69431
  capName: "doorbell",
69150
69432
  capScope: "device",
@@ -69355,6 +69637,12 @@ Object.freeze({
69355
69637
  addonId: null,
69356
69638
  access: "view"
69357
69639
  },
69640
+ "heatingValve.getStatus": {
69641
+ capName: "heating-valve",
69642
+ capScope: "device",
69643
+ addonId: null,
69644
+ access: "view"
69645
+ },
69358
69646
  "humidifier.getStatus": {
69359
69647
  capName: "humidifier",
69360
69648
  capScope: "device",
@@ -74942,7 +75230,7 @@ Object.freeze({
74942
75230
  access: "create"
74943
75231
  }
74944
75232
  });
74945
- 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;
75233
+ 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;
74946
75234
  DeviceFeature.BatteryOperated;
74947
75235
  Object.freeze({
74948
75236
  "accessories.getStatus": [{
@@ -75766,6 +76054,71 @@ Object.freeze({
75766
76054
  form: "single",
75767
76055
  optional: false
75768
76056
  }],
76057
+ "dishwasher.getStatus": [{
76058
+ name: "deviceId",
76059
+ form: "single",
76060
+ optional: false
76061
+ }],
76062
+ "dishwasher.pause": [{
76063
+ name: "deviceId",
76064
+ form: "single",
76065
+ optional: false
76066
+ }],
76067
+ "dishwasher.setChildLock": [{
76068
+ name: "deviceId",
76069
+ form: "single",
76070
+ optional: false
76071
+ }],
76072
+ "dishwasher.setExtraDry": [{
76073
+ name: "deviceId",
76074
+ form: "single",
76075
+ optional: false
76076
+ }],
76077
+ "dishwasher.setHalfLoad": [{
76078
+ name: "deviceId",
76079
+ form: "single",
76080
+ optional: false
76081
+ }],
76082
+ "dishwasher.setHygienePlus": [{
76083
+ name: "deviceId",
76084
+ form: "single",
76085
+ optional: false
76086
+ }],
76087
+ "dishwasher.setIntensiveZone": [{
76088
+ name: "deviceId",
76089
+ form: "single",
76090
+ optional: false
76091
+ }],
76092
+ "dishwasher.setOption": [{
76093
+ name: "deviceId",
76094
+ form: "single",
76095
+ optional: false
76096
+ }],
76097
+ "dishwasher.setPower": [{
76098
+ name: "deviceId",
76099
+ form: "single",
76100
+ optional: false
76101
+ }],
76102
+ "dishwasher.setProgram": [{
76103
+ name: "deviceId",
76104
+ form: "single",
76105
+ optional: false
76106
+ }],
76107
+ "dishwasher.setVarioSpeedPlus": [{
76108
+ name: "deviceId",
76109
+ form: "single",
76110
+ optional: false
76111
+ }],
76112
+ "dishwasher.start": [{
76113
+ name: "deviceId",
76114
+ form: "single",
76115
+ optional: false
76116
+ }],
76117
+ "dishwasher.stop": [{
76118
+ name: "deviceId",
76119
+ form: "single",
76120
+ optional: false
76121
+ }],
75769
76122
  "doorbell.getStatus": [{
75770
76123
  name: "deviceId",
75771
76124
  form: "single",
@@ -75835,6 +76188,11 @@ Object.freeze({
75835
76188
  form: "single",
75836
76189
  optional: false
75837
76190
  }],
76191
+ "heatingValve.getStatus": [{
76192
+ name: "deviceId",
76193
+ form: "single",
76194
+ optional: false
76195
+ }],
75838
76196
  "humidifier.getStatus": [{
75839
76197
  name: "deviceId",
75840
76198
  form: "single",
@@ -103321,7 +103679,7 @@ var MqttHaProviderAddon = class extends BaseDeviceProvider {
103321
103679
  super({});
103322
103680
  }
103323
103681
  async onInitialize() {
103324
- const regs = await super.onInitialize();
103682
+ const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
103325
103683
  wireMqttHaDiscoveryStore(this.discoveryStore);
103326
103684
  this.sessionManager = new MqttHaBrokerSessionManager({
103327
103685
  addonId: this.ctx.id,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-mqtt-ha",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Home Assistant MQTT discovery import provider for CamStack — adopts entities published on homeassistant/+/+/config",
5
5
  "keywords": [
6
6
  "camstack",