@camstack/addon-provider-mqtt-ha 0.1.5 → 0.1.7

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 +341 -37
  2. package/dist/addon.mjs +341 -37
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -33,7 +33,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
33
33
  }) : target, mod));
34
34
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
35
  //#endregion
36
- //#region ../types/dist/event-category-BvOFi6PY.mjs
36
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
37
37
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
38
38
  EventCategory["SystemBoot"] = "system.boot";
39
39
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -112,9 +112,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
112
112
  /**
113
113
  * The node's one-shot runner boot check (D877): planned runners against the
114
114
  * process service, `degraded` when any is failed, refused or missing. The
115
- * alert centre turns it into one alert and a direct critical push.
115
+ * alert centre turns it into one critical alert.
116
116
  */
117
117
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
118
+ /**
119
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
120
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
121
+ * centre sends no notification of its own: Notification Center turns this
122
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
123
+ * system-event kinds, and reconciles from the alerts store because a bus
124
+ * event may be dropped (D8, D11).
125
+ */
126
+ EventCategory["AlertEpisode"] = "alert.episode";
118
127
  EventCategory["AddonError"] = "addon.error";
119
128
  EventCategory["AddonPageReady"] = "addon.page-ready";
120
129
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5439,7 +5448,7 @@ var ZodIssueCode = {
5439
5448
  var ZodFirstPartyTypeKind;
5440
5449
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5441
5450
  //#endregion
5442
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5451
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5443
5452
  /**
5444
5453
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5445
5454
  * window to float samples (D455).
@@ -13202,7 +13211,14 @@ var AlertSeveritySchema = _enum([
13202
13211
  ]);
13203
13212
  var AlertActionSchema = object({
13204
13213
  label: string(),
13205
- href: string().optional()
13214
+ href: string().optional(),
13215
+ /**
13216
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13217
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13218
+ * start) — the browser must leave the SPA with a full navigation, because
13219
+ * the SPA has no such route and would bounce to the home page.
13220
+ */
13221
+ navigation: _enum(["app", "server"]).optional()
13206
13222
  });
13207
13223
  var AlertStatusSchema = _enum([
13208
13224
  "active",
@@ -17583,7 +17599,11 @@ var deviceDiscoveryCapability = {
17583
17599
  };
17584
17600
  /**
17585
17601
  * `device-adoption` — generic discovery + adoption surface,
17586
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17602
+ * system-scoped collection (one provider per integration addon), routed
17603
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17604
+ * pin model as `connection-test`. The admin UI keeps using
17605
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17606
+ * successor to `ha-discovery`:
17587
17607
  * keyed by `integrationId` (the addon resolves integrationId → broker
17588
17608
  * internally) rather than a connection-specific `brokerId`, and it
17589
17609
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -17748,7 +17768,7 @@ var ResyncResultSchema = object({
17748
17768
  var deviceAdoptionCapability = {
17749
17769
  name: "device-adoption",
17750
17770
  scope: "system",
17751
- mode: "singleton",
17771
+ mode: "collection",
17752
17772
  status: {
17753
17773
  schema: AdoptionStatusSchema,
17754
17774
  kind: "poll"
@@ -41931,6 +41951,9 @@ var NcSystemEventKindSchema = _enum([
41931
41951
  "server-updated",
41932
41952
  "export-completed",
41933
41953
  "backup-completed",
41954
+ "alert-critical",
41955
+ "alert-error",
41956
+ "alert-critical-resolved",
41934
41957
  "camera-online",
41935
41958
  "camera-offline",
41936
41959
  "camera-disabled",
@@ -51007,7 +51030,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51007
51030
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51008
51031
  kind: "mutation",
51009
51032
  auth: "admin"
51010
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51033
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51034
+ clear: boolean(),
51035
+ repointLocationId: string().optional()
51036
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51011
51037
  kind: "mutation",
51012
51038
  auth: "admin"
51013
51039
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55263,6 +55289,11 @@ onStatusChanged: { data: object({
55263
55289
  *
55264
55290
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55265
55291
  * provider refreshes the slice on an interval and eagerly after commands.
55292
+ *
55293
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55294
+ * nullable: `null` means "not known right now" (the appliance has not said,
55295
+ * the link is down, or the description does not carry it) and is never
55296
+ * rendered or exported as `false` / `0`. `availability` says why.
55266
55297
  */
55267
55298
  var DishwasherStateSchema = _enum([
55268
55299
  "idle",
@@ -55272,35 +55303,155 @@ var DishwasherStateSchema = _enum([
55272
55303
  "error",
55273
55304
  "unavailable"
55274
55305
  ]);
55306
+ /**
55307
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55308
+ * view for compact surfaces; this is what the appliance said.
55309
+ */
55310
+ var DishwasherOperationStateSchema = _enum([
55311
+ "Inactive",
55312
+ "Ready",
55313
+ "DelayedStart",
55314
+ "Run",
55315
+ "Pause",
55316
+ "ActionRequired",
55317
+ "Finished",
55318
+ "Error",
55319
+ "Aborting"
55320
+ ]);
55321
+ /**
55322
+ * Why fields may be `null`:
55323
+ * - `available` — the link is up and the description is loaded;
55324
+ * - `offline` — the local link is down (values are unknown, not last-known);
55325
+ * - `description-missing` — the link is up but the appliance's description could not
55326
+ * be loaded, so its values cannot be decoded.
55327
+ */
55328
+ var DishwasherAvailabilitySchema = _enum([
55329
+ "available",
55330
+ "offline",
55331
+ "description-missing"
55332
+ ]);
55275
55333
  var DishwasherConsumableLevelSchema = _enum([
55276
55334
  "ok",
55277
55335
  "low",
55278
55336
  "empty"
55279
55337
  ]);
55280
55338
  var DishwasherStatusSchema = object({
55339
+ availability: DishwasherAvailabilitySchema,
55340
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55281
55341
  state: DishwasherStateSchema,
55282
- /** Active program id/name, or null when none selected / unknown. */
55342
+ /** The appliance's operation state as reported; null when not known. */
55343
+ operationState: DishwasherOperationStateSchema.nullable(),
55344
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55283
55345
  program: string().nullable(),
55284
- /** Program tokens the hardware accepts — drives the UI selector. */
55346
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55347
+ selectedProgram: string().nullable(),
55348
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55285
55349
  availablePrograms: array(string()),
55286
- /** Minutes remaining on the active cycle, or null when not running. */
55287
- remainingMinutes: number().int().nonnegative().nullable(),
55350
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55351
+ remainingSeconds: number().int().nonnegative().nullable(),
55352
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55353
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55288
55354
  /** Cycle completion 0..100, or null when not applicable. */
55289
55355
  progressPercent: number().min(0).max(100).nullable(),
55290
- /** True when the door is reported open. */
55291
- doorOpen: boolean(),
55292
- /** True when remote start is allowed (door closed, power on, etc.). */
55293
- remoteStartAllowed: boolean(),
55294
- /** Main power / switched-on state. */
55295
- powerOn: boolean(),
55356
+ /** True when the door is reported open; null when the door state is not known. */
55357
+ doorOpen: boolean().nullable(),
55358
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55359
+ doorLocked: boolean().nullable(),
55360
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55361
+ remoteStartAllowed: boolean().nullable(),
55362
+ /** True when the appliance accepts remote control now; null when not known. */
55363
+ remoteControlActive: boolean().nullable(),
55364
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55365
+ localControlActive: boolean().nullable(),
55366
+ /** Main power / switched-on state; null when not known. */
55367
+ powerOn: boolean().nullable(),
55368
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55369
+ powerState: string().nullable(),
55296
55370
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55297
55371
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55298
- halfLoad: boolean(),
55299
- hygienePlus: boolean(),
55372
+ /** Option states: null when the appliance does not expose the option or has not said. */
55373
+ halfLoad: boolean().nullable(),
55374
+ hygienePlus: boolean().nullable(),
55375
+ /** Extra dry option when the appliance exposes it. */
55376
+ extraDry: boolean().nullable(),
55377
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55378
+ intensiveZone: boolean().nullable(),
55379
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55380
+ varioSpeedPlus: boolean().nullable(),
55381
+ /** Child lock (controls disabled on the appliance); null when not known. */
55382
+ childLock: boolean().nullable(),
55383
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55384
+ activeEvents: array(string()),
55385
+ /** Numeric error code when the appliance reports one; null otherwise. */
55300
55386
  errorCode: number().nullable(),
55387
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55301
55388
  errorLabel: string().nullable(),
55389
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55302
55390
  lastFetchedAt: number()
55303
55391
  });
55392
+ var DeviceIdSchema = number().int().nonnegative();
55393
+ /** A value a program option or setting can take. */
55394
+ var DishwasherValueSchema = union([
55395
+ boolean(),
55396
+ string(),
55397
+ number()
55398
+ ]);
55399
+ var DishwasherAccessSchema = _enum([
55400
+ "none",
55401
+ "read",
55402
+ "readWrite",
55403
+ "writeOnly",
55404
+ "readStatic"
55405
+ ]);
55406
+ /**
55407
+ * One option or setting the appliance declares, with the constraints its description
55408
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55409
+ */
55410
+ var DishwasherOptionDescriptorSchema = object({
55411
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55412
+ key: string(),
55413
+ /** Last segment of the key, for display. */
55414
+ name: string(),
55415
+ type: _enum([
55416
+ "boolean",
55417
+ "number",
55418
+ "enum",
55419
+ "string"
55420
+ ]),
55421
+ access: DishwasherAccessSchema,
55422
+ /** The appliance reports this entity as currently available. */
55423
+ available: boolean(),
55424
+ /** Unit the description declares for a number; null when it declares none. */
55425
+ unit: string().nullable(),
55426
+ min: number().nullable(),
55427
+ max: number().nullable(),
55428
+ step: number().nullable(),
55429
+ /** Allowed members of an enum; null for other types. */
55430
+ enumValues: array(string()).nullable(),
55431
+ defaultValue: DishwasherValueSchema.nullable()
55432
+ });
55433
+ var DishwasherProgramSchema = object({
55434
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55435
+ key: string(),
55436
+ name: string(),
55437
+ /** The appliance currently offers this program. */
55438
+ available: boolean(),
55439
+ /** The options this program lists, with the program-level access / availability / default. */
55440
+ options: array(DishwasherOptionDescriptorSchema)
55441
+ });
55442
+ var DishwasherOptionsSchema = object({
55443
+ availability: DishwasherAvailabilitySchema,
55444
+ /** What the appliance can be told to do, from the commands its description declares. */
55445
+ supportsStart: boolean(),
55446
+ supportsPause: boolean(),
55447
+ supportsResume: boolean(),
55448
+ supportsStop: boolean(),
55449
+ supportsPower: boolean(),
55450
+ /** Every program the description lists, with its options. */
55451
+ programs: array(DishwasherProgramSchema),
55452
+ /** Every option and setting entity the description lists (programs reference these by key). */
55453
+ options: array(DishwasherOptionDescriptorSchema)
55454
+ });
55304
55455
  var dishwasherCapability = {
55305
55456
  name: "dishwasher",
55306
55457
  scope: "device",
@@ -55308,58 +55459,102 @@ var dishwasherCapability = {
55308
55459
  mode: "singleton",
55309
55460
  deviceTypes: [DeviceType.Dishwasher],
55310
55461
  methods: {
55311
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55462
+ /**
55463
+ * Start a program. Without `program` the selected one starts. `options` are
55464
+ * option feature keys; each is checked against the program's constraints.
55465
+ */
55466
+ start: method(object({
55467
+ deviceId: DeviceIdSchema,
55468
+ program: string().min(1).optional(),
55469
+ options: record(string(), DishwasherValueSchema).optional()
55470
+ }), _void(), {
55312
55471
  kind: "mutation",
55313
55472
  auth: "protected"
55314
55473
  }),
55315
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55474
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55316
55475
  kind: "mutation",
55317
55476
  auth: "protected"
55318
55477
  }),
55319
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55478
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55320
55479
  kind: "mutation",
55321
55480
  auth: "protected"
55322
55481
  }),
55482
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55483
+ kind: "mutation",
55484
+ auth: "protected"
55485
+ }),
55486
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55323
55487
  setProgram: method(object({
55324
- deviceId: number().int().nonnegative(),
55488
+ deviceId: DeviceIdSchema,
55325
55489
  program: string().min(1)
55326
55490
  }), _void(), {
55327
55491
  kind: "mutation",
55328
55492
  auth: "protected"
55329
55493
  }),
55330
55494
  setPower: method(object({
55331
- deviceId: number().int().nonnegative(),
55495
+ deviceId: DeviceIdSchema,
55332
55496
  on: boolean()
55333
55497
  }), _void(), {
55334
55498
  kind: "mutation",
55335
55499
  auth: "protected"
55336
55500
  }),
55337
55501
  setHalfLoad: method(object({
55338
- deviceId: number().int().nonnegative(),
55502
+ deviceId: DeviceIdSchema,
55339
55503
  on: boolean()
55340
55504
  }), _void(), {
55341
55505
  kind: "mutation",
55342
55506
  auth: "protected"
55343
55507
  }),
55344
55508
  setHygienePlus: method(object({
55345
- deviceId: number().int().nonnegative(),
55509
+ deviceId: DeviceIdSchema,
55346
55510
  on: boolean()
55347
55511
  }), _void(), {
55348
55512
  kind: "mutation",
55349
55513
  auth: "protected"
55350
55514
  }),
55515
+ setExtraDry: method(object({
55516
+ deviceId: DeviceIdSchema,
55517
+ on: boolean()
55518
+ }), _void(), {
55519
+ kind: "mutation",
55520
+ auth: "protected"
55521
+ }),
55522
+ setIntensiveZone: method(object({
55523
+ deviceId: DeviceIdSchema,
55524
+ on: boolean()
55525
+ }), _void(), {
55526
+ kind: "mutation",
55527
+ auth: "protected"
55528
+ }),
55529
+ setVarioSpeedPlus: method(object({
55530
+ deviceId: DeviceIdSchema,
55531
+ on: boolean()
55532
+ }), _void(), {
55533
+ kind: "mutation",
55534
+ auth: "protected"
55535
+ }),
55536
+ setChildLock: method(object({
55537
+ deviceId: DeviceIdSchema,
55538
+ on: boolean()
55539
+ }), _void(), {
55540
+ kind: "mutation",
55541
+ auth: "protected"
55542
+ }),
55543
+ /**
55544
+ * Write any option or setting by feature key. Refused when the description does
55545
+ * not list it, it is not writable or not available now, or the value is outside
55546
+ * its declared range / members.
55547
+ */
55351
55548
  setOption: method(object({
55352
- deviceId: number().int().nonnegative(),
55549
+ deviceId: DeviceIdSchema,
55353
55550
  key: string().min(1),
55354
- value: union([
55355
- boolean(),
55356
- string(),
55357
- number()
55358
- ])
55551
+ value: DishwasherValueSchema
55359
55552
  }), _void(), {
55360
55553
  kind: "mutation",
55361
55554
  auth: "protected"
55362
- })
55555
+ }),
55556
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55557
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55363
55558
  },
55364
55559
  status: {
55365
55560
  schema: DishwasherStatusSchema,
@@ -69308,6 +69503,12 @@ Object.freeze({
69308
69503
  addonId: null,
69309
69504
  access: "view"
69310
69505
  },
69506
+ "dishwasher.getOptions": {
69507
+ capName: "dishwasher",
69508
+ capScope: "device",
69509
+ addonId: null,
69510
+ access: "view"
69511
+ },
69311
69512
  "dishwasher.getStatus": {
69312
69513
  capName: "dishwasher",
69313
69514
  capScope: "device",
@@ -69320,6 +69521,24 @@ Object.freeze({
69320
69521
  addonId: null,
69321
69522
  access: "create"
69322
69523
  },
69524
+ "dishwasher.resume": {
69525
+ capName: "dishwasher",
69526
+ capScope: "device",
69527
+ addonId: null,
69528
+ access: "create"
69529
+ },
69530
+ "dishwasher.setChildLock": {
69531
+ capName: "dishwasher",
69532
+ capScope: "device",
69533
+ addonId: null,
69534
+ access: "create"
69535
+ },
69536
+ "dishwasher.setExtraDry": {
69537
+ capName: "dishwasher",
69538
+ capScope: "device",
69539
+ addonId: null,
69540
+ access: "create"
69541
+ },
69323
69542
  "dishwasher.setHalfLoad": {
69324
69543
  capName: "dishwasher",
69325
69544
  capScope: "device",
@@ -69332,6 +69551,12 @@ Object.freeze({
69332
69551
  addonId: null,
69333
69552
  access: "create"
69334
69553
  },
69554
+ "dishwasher.setIntensiveZone": {
69555
+ capName: "dishwasher",
69556
+ capScope: "device",
69557
+ addonId: null,
69558
+ access: "create"
69559
+ },
69335
69560
  "dishwasher.setOption": {
69336
69561
  capName: "dishwasher",
69337
69562
  capScope: "device",
@@ -69350,6 +69575,12 @@ Object.freeze({
69350
69575
  addonId: null,
69351
69576
  access: "create"
69352
69577
  },
69578
+ "dishwasher.setVarioSpeedPlus": {
69579
+ capName: "dishwasher",
69580
+ capScope: "device",
69581
+ addonId: null,
69582
+ access: "create"
69583
+ },
69353
69584
  "dishwasher.start": {
69354
69585
  capName: "dishwasher",
69355
69586
  capScope: "device",
@@ -73796,6 +74027,12 @@ Object.freeze({
73796
74027
  addonId: null,
73797
74028
  access: "view"
73798
74029
  },
74030
+ "storageMigration.moverClearance": {
74031
+ capName: "storage-migration",
74032
+ capScope: "system",
74033
+ addonId: null,
74034
+ access: "view"
74035
+ },
73799
74036
  "storageMigration.movers": {
73800
74037
  capName: "storage-migration",
73801
74038
  capScope: "system",
@@ -75989,6 +76226,11 @@ Object.freeze({
75989
76226
  form: "single",
75990
76227
  optional: false
75991
76228
  }],
76229
+ "dishwasher.getOptions": [{
76230
+ name: "deviceId",
76231
+ form: "single",
76232
+ optional: false
76233
+ }],
75992
76234
  "dishwasher.getStatus": [{
75993
76235
  name: "deviceId",
75994
76236
  form: "single",
@@ -75999,6 +76241,21 @@ Object.freeze({
75999
76241
  form: "single",
76000
76242
  optional: false
76001
76243
  }],
76244
+ "dishwasher.resume": [{
76245
+ name: "deviceId",
76246
+ form: "single",
76247
+ optional: false
76248
+ }],
76249
+ "dishwasher.setChildLock": [{
76250
+ name: "deviceId",
76251
+ form: "single",
76252
+ optional: false
76253
+ }],
76254
+ "dishwasher.setExtraDry": [{
76255
+ name: "deviceId",
76256
+ form: "single",
76257
+ optional: false
76258
+ }],
76002
76259
  "dishwasher.setHalfLoad": [{
76003
76260
  name: "deviceId",
76004
76261
  form: "single",
@@ -76009,6 +76266,11 @@ Object.freeze({
76009
76266
  form: "single",
76010
76267
  optional: false
76011
76268
  }],
76269
+ "dishwasher.setIntensiveZone": [{
76270
+ name: "deviceId",
76271
+ form: "single",
76272
+ optional: false
76273
+ }],
76012
76274
  "dishwasher.setOption": [{
76013
76275
  name: "deviceId",
76014
76276
  form: "single",
@@ -76024,6 +76286,11 @@ Object.freeze({
76024
76286
  form: "single",
76025
76287
  optional: false
76026
76288
  }],
76289
+ "dishwasher.setVarioSpeedPlus": [{
76290
+ name: "deviceId",
76291
+ form: "single",
76292
+ optional: false
76293
+ }],
76027
76294
  "dishwasher.start": [{
76028
76295
  name: "deviceId",
76029
76296
  form: "single",
@@ -78065,6 +78332,9 @@ new Map(Object.entries({
78065
78332
  "wrapper-update-available": "system",
78066
78333
  "backup-completed": "system",
78067
78334
  "export-completed": "system",
78335
+ "alert-critical": "system",
78336
+ "alert-error": "system",
78337
+ "alert-critical-resolved": "system",
78068
78338
  "storage-location-low": "system",
78069
78339
  "storage-location-critical": "system",
78070
78340
  "storage-location-ok": "system",
@@ -78189,6 +78459,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78189
78459
  "storage-location-ok"
78190
78460
  ]
78191
78461
  },
78462
+ {
78463
+ id: "alerts",
78464
+ family: "system",
78465
+ label: "Alerts",
78466
+ kinds: [
78467
+ "alert-critical",
78468
+ "alert-error",
78469
+ "alert-critical-resolved"
78470
+ ]
78471
+ },
78192
78472
  {
78193
78473
  id: "alarm",
78194
78474
  family: "alarm",
@@ -78233,6 +78513,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78233
78513
  return [[descriptor.kind, field]];
78234
78514
  })));
78235
78515
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78516
+ object({
78517
+ phase: _enum(["raised", "resolved"]),
78518
+ episodeId: string().min(1),
78519
+ alertId: string().min(1),
78520
+ severity: AlertSeveritySchema,
78521
+ category: string(),
78522
+ title: string(),
78523
+ message: string(),
78524
+ sourceType: string().optional(),
78525
+ sourceId: string().optional(),
78526
+ nodeId: string().optional(),
78527
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78528
+ actionUrl: string().optional(),
78529
+ at: number()
78530
+ });
78236
78531
  var RULE_BODY_ONLY = ["body"];
78237
78532
  var RULE_TEXT = ["title", "body"];
78238
78533
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78242,6 +78537,11 @@ var TANK = [
78242
78537
  "device-tank-full",
78243
78538
  "device-tank-normal"
78244
78539
  ];
78540
+ var ALERT_EPISODE = [
78541
+ "alert-critical",
78542
+ "alert-error",
78543
+ "alert-critical-resolved"
78544
+ ];
78245
78545
  var UPDATES = [
78246
78546
  "addon-update-available",
78247
78547
  "server-update-available",
@@ -78434,14 +78734,14 @@ var STATE_SUMMARY_VARS = [
78434
78734
  ([...RULE_TEXT], [...CONSUMABLE]),
78435
78735
  ([...RULE_TEXT], [...TANK]),
78436
78736
  [...RULE_TEXT],
78437
- ([...RULE_TEXT], [...UPDATES]),
78438
- ([...RULE_TEXT], [...UPDATES]),
78439
- [...RULE_TEXT],
78737
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78738
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78440
78739
  [...RULE_TEXT],
78441
78740
  [...RULE_TEXT],
78442
78741
  [...RULE_TEXT],
78443
78742
  [...RULE_TEXT],
78444
78743
  [...RULE_TEXT],
78744
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78445
78745
  [...RULE_TEXT],
78446
78746
  [...RULE_TEXT],
78447
78747
  [...RULE_TEXT],
@@ -78459,7 +78759,11 @@ var STATE_SUMMARY_VARS = [
78459
78759
  [...RULE_TEXT],
78460
78760
  [...RULE_TEXT],
78461
78761
  [...RULE_TEXT],
78462
- [...RULE_TEXT],
78762
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78763
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78764
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78765
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78766
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78463
78767
  [...RULE_TEXT],
78464
78768
  [...RULE_TEXT],
78465
78769
  [...RULE_TEXT],
package/dist/addon.mjs CHANGED
@@ -34,7 +34,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
34
34
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
35
35
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
36
36
  //#endregion
37
- //#region ../types/dist/event-category-BvOFi6PY.mjs
37
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
38
38
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
39
39
  EventCategory["SystemBoot"] = "system.boot";
40
40
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -113,9 +113,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
113
113
  /**
114
114
  * The node's one-shot runner boot check (D877): planned runners against the
115
115
  * process service, `degraded` when any is failed, refused or missing. The
116
- * alert centre turns it into one alert and a direct critical push.
116
+ * alert centre turns it into one critical alert.
117
117
  */
118
118
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
119
+ /**
120
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
121
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
122
+ * centre sends no notification of its own: Notification Center turns this
123
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
124
+ * system-event kinds, and reconciles from the alerts store because a bus
125
+ * event may be dropped (D8, D11).
126
+ */
127
+ EventCategory["AlertEpisode"] = "alert.episode";
119
128
  EventCategory["AddonError"] = "addon.error";
120
129
  EventCategory["AddonPageReady"] = "addon.page-ready";
121
130
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5440,7 +5449,7 @@ var ZodIssueCode = {
5440
5449
  var ZodFirstPartyTypeKind;
5441
5450
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5442
5451
  //#endregion
5443
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5452
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5444
5453
  /**
5445
5454
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5446
5455
  * window to float samples (D455).
@@ -13203,7 +13212,14 @@ var AlertSeveritySchema = _enum([
13203
13212
  ]);
13204
13213
  var AlertActionSchema = object({
13205
13214
  label: string(),
13206
- href: string().optional()
13215
+ href: string().optional(),
13216
+ /**
13217
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13218
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13219
+ * start) — the browser must leave the SPA with a full navigation, because
13220
+ * the SPA has no such route and would bounce to the home page.
13221
+ */
13222
+ navigation: _enum(["app", "server"]).optional()
13207
13223
  });
13208
13224
  var AlertStatusSchema = _enum([
13209
13225
  "active",
@@ -17584,7 +17600,11 @@ var deviceDiscoveryCapability = {
17584
17600
  };
17585
17601
  /**
17586
17602
  * `device-adoption` — generic discovery + adoption surface,
17587
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17603
+ * system-scoped collection (one provider per integration addon), routed
17604
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17605
+ * pin model as `connection-test`. The admin UI keeps using
17606
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17607
+ * successor to `ha-discovery`:
17588
17608
  * keyed by `integrationId` (the addon resolves integrationId → broker
17589
17609
  * internally) rather than a connection-specific `brokerId`, and it
17590
17610
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -17749,7 +17769,7 @@ var ResyncResultSchema = object({
17749
17769
  var deviceAdoptionCapability = {
17750
17770
  name: "device-adoption",
17751
17771
  scope: "system",
17752
- mode: "singleton",
17772
+ mode: "collection",
17753
17773
  status: {
17754
17774
  schema: AdoptionStatusSchema,
17755
17775
  kind: "poll"
@@ -41932,6 +41952,9 @@ var NcSystemEventKindSchema = _enum([
41932
41952
  "server-updated",
41933
41953
  "export-completed",
41934
41954
  "backup-completed",
41955
+ "alert-critical",
41956
+ "alert-error",
41957
+ "alert-critical-resolved",
41935
41958
  "camera-online",
41936
41959
  "camera-offline",
41937
41960
  "camera-disabled",
@@ -51008,7 +51031,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51008
51031
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51009
51032
  kind: "mutation",
51010
51033
  auth: "admin"
51011
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51034
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51035
+ clear: boolean(),
51036
+ repointLocationId: string().optional()
51037
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51012
51038
  kind: "mutation",
51013
51039
  auth: "admin"
51014
51040
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55264,6 +55290,11 @@ onStatusChanged: { data: object({
55264
55290
  *
55265
55291
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55266
55292
  * provider refreshes the slice on an interval and eagerly after commands.
55293
+ *
55294
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55295
+ * nullable: `null` means "not known right now" (the appliance has not said,
55296
+ * the link is down, or the description does not carry it) and is never
55297
+ * rendered or exported as `false` / `0`. `availability` says why.
55267
55298
  */
55268
55299
  var DishwasherStateSchema = _enum([
55269
55300
  "idle",
@@ -55273,35 +55304,155 @@ var DishwasherStateSchema = _enum([
55273
55304
  "error",
55274
55305
  "unavailable"
55275
55306
  ]);
55307
+ /**
55308
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55309
+ * view for compact surfaces; this is what the appliance said.
55310
+ */
55311
+ var DishwasherOperationStateSchema = _enum([
55312
+ "Inactive",
55313
+ "Ready",
55314
+ "DelayedStart",
55315
+ "Run",
55316
+ "Pause",
55317
+ "ActionRequired",
55318
+ "Finished",
55319
+ "Error",
55320
+ "Aborting"
55321
+ ]);
55322
+ /**
55323
+ * Why fields may be `null`:
55324
+ * - `available` — the link is up and the description is loaded;
55325
+ * - `offline` — the local link is down (values are unknown, not last-known);
55326
+ * - `description-missing` — the link is up but the appliance's description could not
55327
+ * be loaded, so its values cannot be decoded.
55328
+ */
55329
+ var DishwasherAvailabilitySchema = _enum([
55330
+ "available",
55331
+ "offline",
55332
+ "description-missing"
55333
+ ]);
55276
55334
  var DishwasherConsumableLevelSchema = _enum([
55277
55335
  "ok",
55278
55336
  "low",
55279
55337
  "empty"
55280
55338
  ]);
55281
55339
  var DishwasherStatusSchema = object({
55340
+ availability: DishwasherAvailabilitySchema,
55341
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55282
55342
  state: DishwasherStateSchema,
55283
- /** Active program id/name, or null when none selected / unknown. */
55343
+ /** The appliance's operation state as reported; null when not known. */
55344
+ operationState: DishwasherOperationStateSchema.nullable(),
55345
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55284
55346
  program: string().nullable(),
55285
- /** Program tokens the hardware accepts — drives the UI selector. */
55347
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55348
+ selectedProgram: string().nullable(),
55349
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55286
55350
  availablePrograms: array(string()),
55287
- /** Minutes remaining on the active cycle, or null when not running. */
55288
- remainingMinutes: number().int().nonnegative().nullable(),
55351
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55352
+ remainingSeconds: number().int().nonnegative().nullable(),
55353
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55354
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55289
55355
  /** Cycle completion 0..100, or null when not applicable. */
55290
55356
  progressPercent: number().min(0).max(100).nullable(),
55291
- /** True when the door is reported open. */
55292
- doorOpen: boolean(),
55293
- /** True when remote start is allowed (door closed, power on, etc.). */
55294
- remoteStartAllowed: boolean(),
55295
- /** Main power / switched-on state. */
55296
- powerOn: boolean(),
55357
+ /** True when the door is reported open; null when the door state is not known. */
55358
+ doorOpen: boolean().nullable(),
55359
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55360
+ doorLocked: boolean().nullable(),
55361
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55362
+ remoteStartAllowed: boolean().nullable(),
55363
+ /** True when the appliance accepts remote control now; null when not known. */
55364
+ remoteControlActive: boolean().nullable(),
55365
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55366
+ localControlActive: boolean().nullable(),
55367
+ /** Main power / switched-on state; null when not known. */
55368
+ powerOn: boolean().nullable(),
55369
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55370
+ powerState: string().nullable(),
55297
55371
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55298
55372
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55299
- halfLoad: boolean(),
55300
- hygienePlus: boolean(),
55373
+ /** Option states: null when the appliance does not expose the option or has not said. */
55374
+ halfLoad: boolean().nullable(),
55375
+ hygienePlus: boolean().nullable(),
55376
+ /** Extra dry option when the appliance exposes it. */
55377
+ extraDry: boolean().nullable(),
55378
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55379
+ intensiveZone: boolean().nullable(),
55380
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55381
+ varioSpeedPlus: boolean().nullable(),
55382
+ /** Child lock (controls disabled on the appliance); null when not known. */
55383
+ childLock: boolean().nullable(),
55384
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55385
+ activeEvents: array(string()),
55386
+ /** Numeric error code when the appliance reports one; null otherwise. */
55301
55387
  errorCode: number().nullable(),
55388
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55302
55389
  errorLabel: string().nullable(),
55390
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55303
55391
  lastFetchedAt: number()
55304
55392
  });
55393
+ var DeviceIdSchema = number().int().nonnegative();
55394
+ /** A value a program option or setting can take. */
55395
+ var DishwasherValueSchema = union([
55396
+ boolean(),
55397
+ string(),
55398
+ number()
55399
+ ]);
55400
+ var DishwasherAccessSchema = _enum([
55401
+ "none",
55402
+ "read",
55403
+ "readWrite",
55404
+ "writeOnly",
55405
+ "readStatic"
55406
+ ]);
55407
+ /**
55408
+ * One option or setting the appliance declares, with the constraints its description
55409
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55410
+ */
55411
+ var DishwasherOptionDescriptorSchema = object({
55412
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55413
+ key: string(),
55414
+ /** Last segment of the key, for display. */
55415
+ name: string(),
55416
+ type: _enum([
55417
+ "boolean",
55418
+ "number",
55419
+ "enum",
55420
+ "string"
55421
+ ]),
55422
+ access: DishwasherAccessSchema,
55423
+ /** The appliance reports this entity as currently available. */
55424
+ available: boolean(),
55425
+ /** Unit the description declares for a number; null when it declares none. */
55426
+ unit: string().nullable(),
55427
+ min: number().nullable(),
55428
+ max: number().nullable(),
55429
+ step: number().nullable(),
55430
+ /** Allowed members of an enum; null for other types. */
55431
+ enumValues: array(string()).nullable(),
55432
+ defaultValue: DishwasherValueSchema.nullable()
55433
+ });
55434
+ var DishwasherProgramSchema = object({
55435
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55436
+ key: string(),
55437
+ name: string(),
55438
+ /** The appliance currently offers this program. */
55439
+ available: boolean(),
55440
+ /** The options this program lists, with the program-level access / availability / default. */
55441
+ options: array(DishwasherOptionDescriptorSchema)
55442
+ });
55443
+ var DishwasherOptionsSchema = object({
55444
+ availability: DishwasherAvailabilitySchema,
55445
+ /** What the appliance can be told to do, from the commands its description declares. */
55446
+ supportsStart: boolean(),
55447
+ supportsPause: boolean(),
55448
+ supportsResume: boolean(),
55449
+ supportsStop: boolean(),
55450
+ supportsPower: boolean(),
55451
+ /** Every program the description lists, with its options. */
55452
+ programs: array(DishwasherProgramSchema),
55453
+ /** Every option and setting entity the description lists (programs reference these by key). */
55454
+ options: array(DishwasherOptionDescriptorSchema)
55455
+ });
55305
55456
  var dishwasherCapability = {
55306
55457
  name: "dishwasher",
55307
55458
  scope: "device",
@@ -55309,58 +55460,102 @@ var dishwasherCapability = {
55309
55460
  mode: "singleton",
55310
55461
  deviceTypes: [DeviceType.Dishwasher],
55311
55462
  methods: {
55312
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55463
+ /**
55464
+ * Start a program. Without `program` the selected one starts. `options` are
55465
+ * option feature keys; each is checked against the program's constraints.
55466
+ */
55467
+ start: method(object({
55468
+ deviceId: DeviceIdSchema,
55469
+ program: string().min(1).optional(),
55470
+ options: record(string(), DishwasherValueSchema).optional()
55471
+ }), _void(), {
55313
55472
  kind: "mutation",
55314
55473
  auth: "protected"
55315
55474
  }),
55316
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55475
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55317
55476
  kind: "mutation",
55318
55477
  auth: "protected"
55319
55478
  }),
55320
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55479
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55321
55480
  kind: "mutation",
55322
55481
  auth: "protected"
55323
55482
  }),
55483
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55484
+ kind: "mutation",
55485
+ auth: "protected"
55486
+ }),
55487
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55324
55488
  setProgram: method(object({
55325
- deviceId: number().int().nonnegative(),
55489
+ deviceId: DeviceIdSchema,
55326
55490
  program: string().min(1)
55327
55491
  }), _void(), {
55328
55492
  kind: "mutation",
55329
55493
  auth: "protected"
55330
55494
  }),
55331
55495
  setPower: method(object({
55332
- deviceId: number().int().nonnegative(),
55496
+ deviceId: DeviceIdSchema,
55333
55497
  on: boolean()
55334
55498
  }), _void(), {
55335
55499
  kind: "mutation",
55336
55500
  auth: "protected"
55337
55501
  }),
55338
55502
  setHalfLoad: method(object({
55339
- deviceId: number().int().nonnegative(),
55503
+ deviceId: DeviceIdSchema,
55340
55504
  on: boolean()
55341
55505
  }), _void(), {
55342
55506
  kind: "mutation",
55343
55507
  auth: "protected"
55344
55508
  }),
55345
55509
  setHygienePlus: method(object({
55346
- deviceId: number().int().nonnegative(),
55510
+ deviceId: DeviceIdSchema,
55347
55511
  on: boolean()
55348
55512
  }), _void(), {
55349
55513
  kind: "mutation",
55350
55514
  auth: "protected"
55351
55515
  }),
55516
+ setExtraDry: method(object({
55517
+ deviceId: DeviceIdSchema,
55518
+ on: boolean()
55519
+ }), _void(), {
55520
+ kind: "mutation",
55521
+ auth: "protected"
55522
+ }),
55523
+ setIntensiveZone: method(object({
55524
+ deviceId: DeviceIdSchema,
55525
+ on: boolean()
55526
+ }), _void(), {
55527
+ kind: "mutation",
55528
+ auth: "protected"
55529
+ }),
55530
+ setVarioSpeedPlus: method(object({
55531
+ deviceId: DeviceIdSchema,
55532
+ on: boolean()
55533
+ }), _void(), {
55534
+ kind: "mutation",
55535
+ auth: "protected"
55536
+ }),
55537
+ setChildLock: method(object({
55538
+ deviceId: DeviceIdSchema,
55539
+ on: boolean()
55540
+ }), _void(), {
55541
+ kind: "mutation",
55542
+ auth: "protected"
55543
+ }),
55544
+ /**
55545
+ * Write any option or setting by feature key. Refused when the description does
55546
+ * not list it, it is not writable or not available now, or the value is outside
55547
+ * its declared range / members.
55548
+ */
55352
55549
  setOption: method(object({
55353
- deviceId: number().int().nonnegative(),
55550
+ deviceId: DeviceIdSchema,
55354
55551
  key: string().min(1),
55355
- value: union([
55356
- boolean(),
55357
- string(),
55358
- number()
55359
- ])
55552
+ value: DishwasherValueSchema
55360
55553
  }), _void(), {
55361
55554
  kind: "mutation",
55362
55555
  auth: "protected"
55363
- })
55556
+ }),
55557
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55558
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55364
55559
  },
55365
55560
  status: {
55366
55561
  schema: DishwasherStatusSchema,
@@ -69309,6 +69504,12 @@ Object.freeze({
69309
69504
  addonId: null,
69310
69505
  access: "view"
69311
69506
  },
69507
+ "dishwasher.getOptions": {
69508
+ capName: "dishwasher",
69509
+ capScope: "device",
69510
+ addonId: null,
69511
+ access: "view"
69512
+ },
69312
69513
  "dishwasher.getStatus": {
69313
69514
  capName: "dishwasher",
69314
69515
  capScope: "device",
@@ -69321,6 +69522,24 @@ Object.freeze({
69321
69522
  addonId: null,
69322
69523
  access: "create"
69323
69524
  },
69525
+ "dishwasher.resume": {
69526
+ capName: "dishwasher",
69527
+ capScope: "device",
69528
+ addonId: null,
69529
+ access: "create"
69530
+ },
69531
+ "dishwasher.setChildLock": {
69532
+ capName: "dishwasher",
69533
+ capScope: "device",
69534
+ addonId: null,
69535
+ access: "create"
69536
+ },
69537
+ "dishwasher.setExtraDry": {
69538
+ capName: "dishwasher",
69539
+ capScope: "device",
69540
+ addonId: null,
69541
+ access: "create"
69542
+ },
69324
69543
  "dishwasher.setHalfLoad": {
69325
69544
  capName: "dishwasher",
69326
69545
  capScope: "device",
@@ -69333,6 +69552,12 @@ Object.freeze({
69333
69552
  addonId: null,
69334
69553
  access: "create"
69335
69554
  },
69555
+ "dishwasher.setIntensiveZone": {
69556
+ capName: "dishwasher",
69557
+ capScope: "device",
69558
+ addonId: null,
69559
+ access: "create"
69560
+ },
69336
69561
  "dishwasher.setOption": {
69337
69562
  capName: "dishwasher",
69338
69563
  capScope: "device",
@@ -69351,6 +69576,12 @@ Object.freeze({
69351
69576
  addonId: null,
69352
69577
  access: "create"
69353
69578
  },
69579
+ "dishwasher.setVarioSpeedPlus": {
69580
+ capName: "dishwasher",
69581
+ capScope: "device",
69582
+ addonId: null,
69583
+ access: "create"
69584
+ },
69354
69585
  "dishwasher.start": {
69355
69586
  capName: "dishwasher",
69356
69587
  capScope: "device",
@@ -73797,6 +74028,12 @@ Object.freeze({
73797
74028
  addonId: null,
73798
74029
  access: "view"
73799
74030
  },
74031
+ "storageMigration.moverClearance": {
74032
+ capName: "storage-migration",
74033
+ capScope: "system",
74034
+ addonId: null,
74035
+ access: "view"
74036
+ },
73800
74037
  "storageMigration.movers": {
73801
74038
  capName: "storage-migration",
73802
74039
  capScope: "system",
@@ -75990,6 +76227,11 @@ Object.freeze({
75990
76227
  form: "single",
75991
76228
  optional: false
75992
76229
  }],
76230
+ "dishwasher.getOptions": [{
76231
+ name: "deviceId",
76232
+ form: "single",
76233
+ optional: false
76234
+ }],
75993
76235
  "dishwasher.getStatus": [{
75994
76236
  name: "deviceId",
75995
76237
  form: "single",
@@ -76000,6 +76242,21 @@ Object.freeze({
76000
76242
  form: "single",
76001
76243
  optional: false
76002
76244
  }],
76245
+ "dishwasher.resume": [{
76246
+ name: "deviceId",
76247
+ form: "single",
76248
+ optional: false
76249
+ }],
76250
+ "dishwasher.setChildLock": [{
76251
+ name: "deviceId",
76252
+ form: "single",
76253
+ optional: false
76254
+ }],
76255
+ "dishwasher.setExtraDry": [{
76256
+ name: "deviceId",
76257
+ form: "single",
76258
+ optional: false
76259
+ }],
76003
76260
  "dishwasher.setHalfLoad": [{
76004
76261
  name: "deviceId",
76005
76262
  form: "single",
@@ -76010,6 +76267,11 @@ Object.freeze({
76010
76267
  form: "single",
76011
76268
  optional: false
76012
76269
  }],
76270
+ "dishwasher.setIntensiveZone": [{
76271
+ name: "deviceId",
76272
+ form: "single",
76273
+ optional: false
76274
+ }],
76013
76275
  "dishwasher.setOption": [{
76014
76276
  name: "deviceId",
76015
76277
  form: "single",
@@ -76025,6 +76287,11 @@ Object.freeze({
76025
76287
  form: "single",
76026
76288
  optional: false
76027
76289
  }],
76290
+ "dishwasher.setVarioSpeedPlus": [{
76291
+ name: "deviceId",
76292
+ form: "single",
76293
+ optional: false
76294
+ }],
76028
76295
  "dishwasher.start": [{
76029
76296
  name: "deviceId",
76030
76297
  form: "single",
@@ -78066,6 +78333,9 @@ new Map(Object.entries({
78066
78333
  "wrapper-update-available": "system",
78067
78334
  "backup-completed": "system",
78068
78335
  "export-completed": "system",
78336
+ "alert-critical": "system",
78337
+ "alert-error": "system",
78338
+ "alert-critical-resolved": "system",
78069
78339
  "storage-location-low": "system",
78070
78340
  "storage-location-critical": "system",
78071
78341
  "storage-location-ok": "system",
@@ -78190,6 +78460,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78190
78460
  "storage-location-ok"
78191
78461
  ]
78192
78462
  },
78463
+ {
78464
+ id: "alerts",
78465
+ family: "system",
78466
+ label: "Alerts",
78467
+ kinds: [
78468
+ "alert-critical",
78469
+ "alert-error",
78470
+ "alert-critical-resolved"
78471
+ ]
78472
+ },
78193
78473
  {
78194
78474
  id: "alarm",
78195
78475
  family: "alarm",
@@ -78234,6 +78514,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78234
78514
  return [[descriptor.kind, field]];
78235
78515
  })));
78236
78516
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78517
+ object({
78518
+ phase: _enum(["raised", "resolved"]),
78519
+ episodeId: string().min(1),
78520
+ alertId: string().min(1),
78521
+ severity: AlertSeveritySchema,
78522
+ category: string(),
78523
+ title: string(),
78524
+ message: string(),
78525
+ sourceType: string().optional(),
78526
+ sourceId: string().optional(),
78527
+ nodeId: string().optional(),
78528
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78529
+ actionUrl: string().optional(),
78530
+ at: number()
78531
+ });
78237
78532
  var RULE_BODY_ONLY = ["body"];
78238
78533
  var RULE_TEXT = ["title", "body"];
78239
78534
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78243,6 +78538,11 @@ var TANK = [
78243
78538
  "device-tank-full",
78244
78539
  "device-tank-normal"
78245
78540
  ];
78541
+ var ALERT_EPISODE = [
78542
+ "alert-critical",
78543
+ "alert-error",
78544
+ "alert-critical-resolved"
78545
+ ];
78246
78546
  var UPDATES = [
78247
78547
  "addon-update-available",
78248
78548
  "server-update-available",
@@ -78435,14 +78735,14 @@ var STATE_SUMMARY_VARS = [
78435
78735
  ([...RULE_TEXT], [...CONSUMABLE]),
78436
78736
  ([...RULE_TEXT], [...TANK]),
78437
78737
  [...RULE_TEXT],
78438
- ([...RULE_TEXT], [...UPDATES]),
78439
- ([...RULE_TEXT], [...UPDATES]),
78440
- [...RULE_TEXT],
78738
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78739
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78441
78740
  [...RULE_TEXT],
78442
78741
  [...RULE_TEXT],
78443
78742
  [...RULE_TEXT],
78444
78743
  [...RULE_TEXT],
78445
78744
  [...RULE_TEXT],
78745
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78446
78746
  [...RULE_TEXT],
78447
78747
  [...RULE_TEXT],
78448
78748
  [...RULE_TEXT],
@@ -78460,7 +78760,11 @@ var STATE_SUMMARY_VARS = [
78460
78760
  [...RULE_TEXT],
78461
78761
  [...RULE_TEXT],
78462
78762
  [...RULE_TEXT],
78463
- [...RULE_TEXT],
78763
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78764
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78765
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78766
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78767
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78464
78768
  [...RULE_TEXT],
78465
78769
  [...RULE_TEXT],
78466
78770
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-mqtt-ha",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Home Assistant MQTT discovery import provider for CamStack — adopts entities published on homeassistant/+/+/config",
5
5
  "keywords": [
6
6
  "camstack",