@camstack/addon-provider-rtsp 1.2.143 → 1.2.144
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +193 -117
- package/dist/addon.mjs +193 -117
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5455,7 +5455,7 @@ var ZodIssueCode = {
|
|
|
5455
5455
|
var ZodFirstPartyTypeKind;
|
|
5456
5456
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5457
5457
|
//#endregion
|
|
5458
|
-
//#region ../types/dist/sleep-
|
|
5458
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5459
5459
|
/**
|
|
5460
5460
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5461
5461
|
* window to float samples (D455).
|
|
@@ -8347,7 +8347,11 @@ var ContributionSectionSchema = object({
|
|
|
8347
8347
|
literal(4)
|
|
8348
8348
|
]).optional(),
|
|
8349
8349
|
tab: string().optional(),
|
|
8350
|
-
location: _enum([
|
|
8350
|
+
location: _enum([
|
|
8351
|
+
"settings",
|
|
8352
|
+
"top-tab",
|
|
8353
|
+
"hero"
|
|
8354
|
+
]).optional(),
|
|
8351
8355
|
order: number().optional(),
|
|
8352
8356
|
fields: array(any())
|
|
8353
8357
|
});
|
|
@@ -13401,7 +13405,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13401
13405
|
literal(4)
|
|
13402
13406
|
]).optional(),
|
|
13403
13407
|
tab: string().optional(),
|
|
13404
|
-
location: _enum([
|
|
13408
|
+
location: _enum([
|
|
13409
|
+
"settings",
|
|
13410
|
+
"top-tab",
|
|
13411
|
+
"hero"
|
|
13412
|
+
]).optional(),
|
|
13405
13413
|
order: number().optional(),
|
|
13406
13414
|
fields: array(any())
|
|
13407
13415
|
});
|
|
@@ -17281,6 +17289,52 @@ var TierStatusSchema = object({
|
|
|
17281
17289
|
countedAt: number().nullable()
|
|
17282
17290
|
});
|
|
17283
17291
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17292
|
+
/**
|
|
17293
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17294
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17295
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17296
|
+
*/
|
|
17297
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17298
|
+
/** Rows held per stored tier. */
|
|
17299
|
+
var TierRowsSchema = object({
|
|
17300
|
+
raw: number().int(),
|
|
17301
|
+
"5m": number().int(),
|
|
17302
|
+
"1h": number().int(),
|
|
17303
|
+
"1d": number().int()
|
|
17304
|
+
});
|
|
17305
|
+
var OrphanSeriesSchema = object({
|
|
17306
|
+
seriesId: number().int(),
|
|
17307
|
+
deviceId: number().int(),
|
|
17308
|
+
key: string(),
|
|
17309
|
+
scope: string(),
|
|
17310
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17311
|
+
displayName: string().nullable(),
|
|
17312
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17313
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17314
|
+
missingSince: number().nullable(),
|
|
17315
|
+
firstTs: number(),
|
|
17316
|
+
lastTs: number(),
|
|
17317
|
+
rows: TierRowsSchema
|
|
17318
|
+
});
|
|
17319
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17320
|
+
"not-found",
|
|
17321
|
+
"not-orphan",
|
|
17322
|
+
"failed"
|
|
17323
|
+
]);
|
|
17324
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17325
|
+
seriesId: number().int(),
|
|
17326
|
+
ok: literal(true),
|
|
17327
|
+
deleted: TierRowsSchema
|
|
17328
|
+
}), object({
|
|
17329
|
+
seriesId: number().int(),
|
|
17330
|
+
ok: literal(false),
|
|
17331
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17332
|
+
})]);
|
|
17333
|
+
var OrphanListSchema = object({
|
|
17334
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17335
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17336
|
+
truncated: boolean()
|
|
17337
|
+
});
|
|
17284
17338
|
var DeviceHistoryStatusSchema = object({
|
|
17285
17339
|
startedAt: number(),
|
|
17286
17340
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17378,7 +17432,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17378
17432
|
}), object({ enabled: boolean() }), {
|
|
17379
17433
|
kind: "mutation",
|
|
17380
17434
|
auth: "admin"
|
|
17381
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17435
|
+
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" }), method(object({}), OrphanListSchema, { auth: "admin" }), method(object({ seriesIds: array(number().int()).min(1).max(50) }), object({ results: array(OrphanDeleteEntrySchema).readonly() }), {
|
|
17436
|
+
kind: "mutation",
|
|
17437
|
+
auth: "admin"
|
|
17438
|
+
});
|
|
17382
17439
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17383
17440
|
object({ state: literal("absent") }),
|
|
17384
17441
|
object({
|
|
@@ -55333,17 +55390,69 @@ var connectivityCapability = {
|
|
|
55333
55390
|
volatileStateFields: ["lastChangedAt"]
|
|
55334
55391
|
};
|
|
55335
55392
|
/**
|
|
55336
|
-
* Generic device-consumables capability —
|
|
55337
|
-
*
|
|
55338
|
-
* descaling cycles,
|
|
55339
|
-
*
|
|
55340
|
-
*
|
|
55341
|
-
*
|
|
55393
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
55394
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
55395
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
55396
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
55397
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
55398
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
55399
|
+
* its device tracks consumables registers it; the provider names each item
|
|
55400
|
+
* verbatim and says which `kind` it is.
|
|
55401
|
+
*
|
|
55402
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
55403
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
55404
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
55342
55405
|
*
|
|
55343
55406
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
55344
55407
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
55345
55408
|
* "No consumables reported" placeholder when `items` is empty.
|
|
55346
55409
|
*/
|
|
55410
|
+
/**
|
|
55411
|
+
* What an item IS, which decides which direction is bad:
|
|
55412
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
55413
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
55414
|
+
* salt, rinse aid); low or empty is bad.
|
|
55415
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
55416
|
+
* bad.
|
|
55417
|
+
* Absent = `wear`.
|
|
55418
|
+
*/
|
|
55419
|
+
var ConsumableKindSchema = _enum([
|
|
55420
|
+
"wear",
|
|
55421
|
+
"supply",
|
|
55422
|
+
"waste"
|
|
55423
|
+
]);
|
|
55424
|
+
/**
|
|
55425
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
55426
|
+
* of `kind`, which decides which direction is bad:
|
|
55427
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
55428
|
+
* remaining time and a reset.
|
|
55429
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
55430
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
55431
|
+
* a stepped level and "refill".
|
|
55432
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
55433
|
+
* that warns when full.
|
|
55434
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
55435
|
+
*/
|
|
55436
|
+
var ConsumableFormSchema = _enum([
|
|
55437
|
+
"part",
|
|
55438
|
+
"tank",
|
|
55439
|
+
"product",
|
|
55440
|
+
"bin"
|
|
55441
|
+
]);
|
|
55442
|
+
/** The provider's own discrete verdict on an item. */
|
|
55443
|
+
var ConsumableStatusSchema = _enum([
|
|
55444
|
+
"ok",
|
|
55445
|
+
"low",
|
|
55446
|
+
"empty",
|
|
55447
|
+
"full",
|
|
55448
|
+
"replace"
|
|
55449
|
+
]);
|
|
55450
|
+
_enum([
|
|
55451
|
+
"ok",
|
|
55452
|
+
"low",
|
|
55453
|
+
"empty",
|
|
55454
|
+
"full"
|
|
55455
|
+
]);
|
|
55347
55456
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
55348
55457
|
* each. */
|
|
55349
55458
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -55358,18 +55467,23 @@ var ConsumableRemainingSchema = object({
|
|
|
55358
55467
|
unit: ConsumableRemainingUnitSchema
|
|
55359
55468
|
});
|
|
55360
55469
|
/** A single consumable item. Either a continuous `level` (remaining
|
|
55361
|
-
* life
|
|
55362
|
-
*
|
|
55363
|
-
* mutually exclusive; a provider may
|
|
55470
|
+
* life %, or fill % for a `supply` / `waste` item) or a discrete `status`
|
|
55471
|
+
* may be known — both may be null when a provider only knows the item
|
|
55472
|
+
* exists. `level` and `status` are not mutually exclusive; a provider may
|
|
55473
|
+
* report both. */
|
|
55364
55474
|
var ConsumableItemSchema = object({
|
|
55365
55475
|
/** Stable id, e.g. 'main-brush'. */
|
|
55366
55476
|
key: string().min(1),
|
|
55367
55477
|
/** Display name. */
|
|
55368
55478
|
label: string().min(1),
|
|
55369
|
-
/** Remaining life % when known (0..100). */
|
|
55479
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
55370
55480
|
level: number().min(0).max(100).nullable(),
|
|
55371
|
-
/**
|
|
55372
|
-
status:
|
|
55481
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
55482
|
+
status: ConsumableStatusSchema.nullable(),
|
|
55483
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
55484
|
+
kind: ConsumableKindSchema.optional(),
|
|
55485
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
55486
|
+
form: ConsumableFormSchema.optional(),
|
|
55373
55487
|
/** Ms epoch of the last replace, when known. */
|
|
55374
55488
|
lastResetAt: number().nullable(),
|
|
55375
55489
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -55392,7 +55506,7 @@ var consumablesCapability = {
|
|
|
55392
55506
|
kind: "widget",
|
|
55393
55507
|
widgetId: "host/consumables-panel",
|
|
55394
55508
|
tab: "consumables",
|
|
55395
|
-
|
|
55509
|
+
placement: "hero",
|
|
55396
55510
|
label: "Consumables",
|
|
55397
55511
|
order: 5
|
|
55398
55512
|
} },
|
|
@@ -55453,9 +55567,37 @@ reset: method(object({
|
|
|
55453
55567
|
*/
|
|
55454
55568
|
durability: "restored",
|
|
55455
55569
|
/**
|
|
55456
|
-
* History (D850):
|
|
55570
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
55571
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
55572
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
55573
|
+
* their provider reports them; an item that appears later gets its series.
|
|
55457
55574
|
*/
|
|
55458
|
-
history:
|
|
55575
|
+
history: {
|
|
55576
|
+
fields: {},
|
|
55577
|
+
items: {
|
|
55578
|
+
path: "items",
|
|
55579
|
+
key: "key",
|
|
55580
|
+
label: "label",
|
|
55581
|
+
fields: {
|
|
55582
|
+
level: {
|
|
55583
|
+
kind: "gauge",
|
|
55584
|
+
unit: "%",
|
|
55585
|
+
deadband: 2,
|
|
55586
|
+
displayName: "Level"
|
|
55587
|
+
},
|
|
55588
|
+
status: {
|
|
55589
|
+
kind: "enum",
|
|
55590
|
+
displayName: "Status"
|
|
55591
|
+
},
|
|
55592
|
+
"remaining.value": {
|
|
55593
|
+
kind: "gauge",
|
|
55594
|
+
unitFrom: "remaining.unit",
|
|
55595
|
+
deadband: 1,
|
|
55596
|
+
displayName: "Remaining"
|
|
55597
|
+
}
|
|
55598
|
+
}
|
|
55599
|
+
}
|
|
55600
|
+
},
|
|
55459
55601
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
55460
55602
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
55461
55603
|
};
|
|
@@ -55870,8 +56012,9 @@ onStatusChanged: { data: object({
|
|
|
55870
56012
|
volatileStateFields: ["lastChangedAt"]
|
|
55871
56013
|
};
|
|
55872
56014
|
/**
|
|
55873
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
55874
|
-
*
|
|
56015
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
56016
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
56017
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
55875
56018
|
*
|
|
55876
56019
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
55877
56020
|
* by any integration that exposes the same program / option surface.
|
|
@@ -55919,11 +56062,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
55919
56062
|
"offline",
|
|
55920
56063
|
"description-missing"
|
|
55921
56064
|
]);
|
|
55922
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
55923
|
-
"ok",
|
|
55924
|
-
"low",
|
|
55925
|
-
"empty"
|
|
55926
|
-
]);
|
|
55927
56065
|
var DishwasherStatusSchema = object({
|
|
55928
56066
|
availability: DishwasherAvailabilitySchema,
|
|
55929
56067
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55956,8 +56094,6 @@ var DishwasherStatusSchema = object({
|
|
|
55956
56094
|
powerOn: boolean().nullable(),
|
|
55957
56095
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55958
56096
|
powerState: string().nullable(),
|
|
55959
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55960
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55961
56097
|
/**
|
|
55962
56098
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55963
56099
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -64773,60 +64909,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
64773
64909
|
auth: "admin",
|
|
64774
64910
|
access: "delete"
|
|
64775
64911
|
});
|
|
64776
|
-
/**
|
|
64777
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
64778
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
64779
|
-
* optional fan-speed selector.
|
|
64780
|
-
*
|
|
64781
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
64782
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
64783
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
64784
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
64785
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
64786
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
64787
|
-
*
|
|
64788
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
64789
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
64790
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
64791
|
-
*
|
|
64792
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
64793
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
64794
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
64795
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
64796
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
64797
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
64798
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
64799
|
-
* so the HA provider leaves all four `null`.
|
|
64800
|
-
*/
|
|
64801
|
-
var VacuumStateSchema = _enum([
|
|
64802
|
-
"idle",
|
|
64803
|
-
"cleaning",
|
|
64804
|
-
"paused",
|
|
64805
|
-
"returning",
|
|
64806
|
-
"docked",
|
|
64807
|
-
"drying",
|
|
64808
|
-
"error"
|
|
64809
|
-
]);
|
|
64810
|
-
/**
|
|
64811
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
64812
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
64813
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
64814
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
64815
|
-
* hardware has no such tank at all.
|
|
64816
|
-
*/
|
|
64817
|
-
var TankStatusSchema = object({
|
|
64818
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
64819
|
-
level: number().min(0).max(100).nullable(),
|
|
64820
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
64821
|
-
status: _enum([
|
|
64822
|
-
"ok",
|
|
64823
|
-
"low",
|
|
64824
|
-
"full"
|
|
64825
|
-
]).nullable()
|
|
64826
|
-
});
|
|
64827
64912
|
var VacuumControlStatusSchema = object({
|
|
64828
64913
|
/** Lifecycle state of the vacuum. */
|
|
64829
|
-
state:
|
|
64914
|
+
state: _enum([
|
|
64915
|
+
"idle",
|
|
64916
|
+
"cleaning",
|
|
64917
|
+
"paused",
|
|
64918
|
+
"returning",
|
|
64919
|
+
"docked",
|
|
64920
|
+
"drying",
|
|
64921
|
+
"error"
|
|
64922
|
+
]),
|
|
64830
64923
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
64831
64924
|
* reading. */
|
|
64832
64925
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -64835,14 +64928,6 @@ var VacuumControlStatusSchema = object({
|
|
|
64835
64928
|
fanSpeed: string().nullable(),
|
|
64836
64929
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
64837
64930
|
availableFanSpeeds: array(string()),
|
|
64838
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
64839
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
64840
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
64841
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
64842
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
64843
|
-
detergent: TankStatusSchema.nullable(),
|
|
64844
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
64845
|
-
dustBin: TankStatusSchema.nullable(),
|
|
64846
64931
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
64847
64932
|
progressPercent: number().min(0).max(100).nullable(),
|
|
64848
64933
|
/** Current error code (0 / null = no error). */
|
|
@@ -64904,35 +64989,14 @@ var vacuumControlCapability = {
|
|
|
64904
64989
|
*/
|
|
64905
64990
|
durability: "session",
|
|
64906
64991
|
/**
|
|
64907
|
-
* History (D850): recorded series.
|
|
64992
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
64993
|
+
* items are keyed by runtime ids and record no history.
|
|
64908
64994
|
*/
|
|
64909
|
-
history: { fields: {
|
|
64910
|
-
|
|
64911
|
-
|
|
64912
|
-
|
|
64913
|
-
|
|
64914
|
-
},
|
|
64915
|
-
"cleanWater.level": {
|
|
64916
|
-
kind: "gauge",
|
|
64917
|
-
unit: "%",
|
|
64918
|
-
deadband: 2
|
|
64919
|
-
},
|
|
64920
|
-
"dirtyWater.level": {
|
|
64921
|
-
kind: "gauge",
|
|
64922
|
-
unit: "%",
|
|
64923
|
-
deadband: 2
|
|
64924
|
-
},
|
|
64925
|
-
"detergent.level": {
|
|
64926
|
-
kind: "gauge",
|
|
64927
|
-
unit: "%",
|
|
64928
|
-
deadband: 2
|
|
64929
|
-
},
|
|
64930
|
-
"dustBin.level": {
|
|
64931
|
-
kind: "gauge",
|
|
64932
|
-
unit: "%",
|
|
64933
|
-
deadband: 2
|
|
64934
|
-
}
|
|
64935
|
-
} }
|
|
64995
|
+
history: { fields: { batteryLevel: {
|
|
64996
|
+
kind: "gauge",
|
|
64997
|
+
unit: "%",
|
|
64998
|
+
deadband: 2
|
|
64999
|
+
} } }
|
|
64936
65000
|
};
|
|
64937
65001
|
var ValveStatusSchema = object({
|
|
64938
65002
|
/** Lifecycle state of the valve. */
|
|
@@ -69326,6 +69390,12 @@ Object.freeze({
|
|
|
69326
69390
|
addonId: null,
|
|
69327
69391
|
access: "create"
|
|
69328
69392
|
},
|
|
69393
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
69394
|
+
capName: "device-history",
|
|
69395
|
+
capScope: "system",
|
|
69396
|
+
addonId: null,
|
|
69397
|
+
access: "delete"
|
|
69398
|
+
},
|
|
69329
69399
|
"deviceHistory.getDeviceEnabled": {
|
|
69330
69400
|
capName: "device-history",
|
|
69331
69401
|
capScope: "system",
|
|
@@ -69344,6 +69414,12 @@ Object.freeze({
|
|
|
69344
69414
|
addonId: null,
|
|
69345
69415
|
access: "view"
|
|
69346
69416
|
},
|
|
69417
|
+
"deviceHistory.listOrphanSeries": {
|
|
69418
|
+
capName: "device-history",
|
|
69419
|
+
capScope: "system",
|
|
69420
|
+
addonId: null,
|
|
69421
|
+
access: "view"
|
|
69422
|
+
},
|
|
69347
69423
|
"deviceHistory.listSeries": {
|
|
69348
69424
|
capName: "device-history",
|
|
69349
69425
|
capScope: "system",
|
|
@@ -79415,7 +79491,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
79415
79491
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
79416
79492
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
79417
79493
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
79418
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
79494
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
79419
79495
|
([...RULE_TEXT], [...TANK]),
|
|
79420
79496
|
[...RULE_TEXT],
|
|
79421
79497
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/dist/addon.mjs
CHANGED
|
@@ -5431,7 +5431,7 @@ var ZodIssueCode = {
|
|
|
5431
5431
|
var ZodFirstPartyTypeKind;
|
|
5432
5432
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5433
5433
|
//#endregion
|
|
5434
|
-
//#region ../types/dist/sleep-
|
|
5434
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5435
5435
|
/**
|
|
5436
5436
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5437
5437
|
* window to float samples (D455).
|
|
@@ -8323,7 +8323,11 @@ var ContributionSectionSchema = object({
|
|
|
8323
8323
|
literal(4)
|
|
8324
8324
|
]).optional(),
|
|
8325
8325
|
tab: string().optional(),
|
|
8326
|
-
location: _enum([
|
|
8326
|
+
location: _enum([
|
|
8327
|
+
"settings",
|
|
8328
|
+
"top-tab",
|
|
8329
|
+
"hero"
|
|
8330
|
+
]).optional(),
|
|
8327
8331
|
order: number().optional(),
|
|
8328
8332
|
fields: array(any())
|
|
8329
8333
|
});
|
|
@@ -13377,7 +13381,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13377
13381
|
literal(4)
|
|
13378
13382
|
]).optional(),
|
|
13379
13383
|
tab: string().optional(),
|
|
13380
|
-
location: _enum([
|
|
13384
|
+
location: _enum([
|
|
13385
|
+
"settings",
|
|
13386
|
+
"top-tab",
|
|
13387
|
+
"hero"
|
|
13388
|
+
]).optional(),
|
|
13381
13389
|
order: number().optional(),
|
|
13382
13390
|
fields: array(any())
|
|
13383
13391
|
});
|
|
@@ -17257,6 +17265,52 @@ var TierStatusSchema = object({
|
|
|
17257
17265
|
countedAt: number().nullable()
|
|
17258
17266
|
});
|
|
17259
17267
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17268
|
+
/**
|
|
17269
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17270
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17271
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17272
|
+
*/
|
|
17273
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17274
|
+
/** Rows held per stored tier. */
|
|
17275
|
+
var TierRowsSchema = object({
|
|
17276
|
+
raw: number().int(),
|
|
17277
|
+
"5m": number().int(),
|
|
17278
|
+
"1h": number().int(),
|
|
17279
|
+
"1d": number().int()
|
|
17280
|
+
});
|
|
17281
|
+
var OrphanSeriesSchema = object({
|
|
17282
|
+
seriesId: number().int(),
|
|
17283
|
+
deviceId: number().int(),
|
|
17284
|
+
key: string(),
|
|
17285
|
+
scope: string(),
|
|
17286
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17287
|
+
displayName: string().nullable(),
|
|
17288
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17289
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17290
|
+
missingSince: number().nullable(),
|
|
17291
|
+
firstTs: number(),
|
|
17292
|
+
lastTs: number(),
|
|
17293
|
+
rows: TierRowsSchema
|
|
17294
|
+
});
|
|
17295
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17296
|
+
"not-found",
|
|
17297
|
+
"not-orphan",
|
|
17298
|
+
"failed"
|
|
17299
|
+
]);
|
|
17300
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17301
|
+
seriesId: number().int(),
|
|
17302
|
+
ok: literal(true),
|
|
17303
|
+
deleted: TierRowsSchema
|
|
17304
|
+
}), object({
|
|
17305
|
+
seriesId: number().int(),
|
|
17306
|
+
ok: literal(false),
|
|
17307
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17308
|
+
})]);
|
|
17309
|
+
var OrphanListSchema = object({
|
|
17310
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17311
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17312
|
+
truncated: boolean()
|
|
17313
|
+
});
|
|
17260
17314
|
var DeviceHistoryStatusSchema = object({
|
|
17261
17315
|
startedAt: number(),
|
|
17262
17316
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17354,7 +17408,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17354
17408
|
}), object({ enabled: boolean() }), {
|
|
17355
17409
|
kind: "mutation",
|
|
17356
17410
|
auth: "admin"
|
|
17357
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17411
|
+
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" }), method(object({}), OrphanListSchema, { auth: "admin" }), method(object({ seriesIds: array(number().int()).min(1).max(50) }), object({ results: array(OrphanDeleteEntrySchema).readonly() }), {
|
|
17412
|
+
kind: "mutation",
|
|
17413
|
+
auth: "admin"
|
|
17414
|
+
});
|
|
17358
17415
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17359
17416
|
object({ state: literal("absent") }),
|
|
17360
17417
|
object({
|
|
@@ -55309,17 +55366,69 @@ var connectivityCapability = {
|
|
|
55309
55366
|
volatileStateFields: ["lastChangedAt"]
|
|
55310
55367
|
};
|
|
55311
55368
|
/**
|
|
55312
|
-
* Generic device-consumables capability —
|
|
55313
|
-
*
|
|
55314
|
-
* descaling cycles,
|
|
55315
|
-
*
|
|
55316
|
-
*
|
|
55317
|
-
*
|
|
55369
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
55370
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
55371
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
55372
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
55373
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
55374
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
55375
|
+
* its device tracks consumables registers it; the provider names each item
|
|
55376
|
+
* verbatim and says which `kind` it is.
|
|
55377
|
+
*
|
|
55378
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
55379
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
55380
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
55318
55381
|
*
|
|
55319
55382
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
55320
55383
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
55321
55384
|
* "No consumables reported" placeholder when `items` is empty.
|
|
55322
55385
|
*/
|
|
55386
|
+
/**
|
|
55387
|
+
* What an item IS, which decides which direction is bad:
|
|
55388
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
55389
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
55390
|
+
* salt, rinse aid); low or empty is bad.
|
|
55391
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
55392
|
+
* bad.
|
|
55393
|
+
* Absent = `wear`.
|
|
55394
|
+
*/
|
|
55395
|
+
var ConsumableKindSchema = _enum([
|
|
55396
|
+
"wear",
|
|
55397
|
+
"supply",
|
|
55398
|
+
"waste"
|
|
55399
|
+
]);
|
|
55400
|
+
/**
|
|
55401
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
55402
|
+
* of `kind`, which decides which direction is bad:
|
|
55403
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
55404
|
+
* remaining time and a reset.
|
|
55405
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
55406
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
55407
|
+
* a stepped level and "refill".
|
|
55408
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
55409
|
+
* that warns when full.
|
|
55410
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
55411
|
+
*/
|
|
55412
|
+
var ConsumableFormSchema = _enum([
|
|
55413
|
+
"part",
|
|
55414
|
+
"tank",
|
|
55415
|
+
"product",
|
|
55416
|
+
"bin"
|
|
55417
|
+
]);
|
|
55418
|
+
/** The provider's own discrete verdict on an item. */
|
|
55419
|
+
var ConsumableStatusSchema = _enum([
|
|
55420
|
+
"ok",
|
|
55421
|
+
"low",
|
|
55422
|
+
"empty",
|
|
55423
|
+
"full",
|
|
55424
|
+
"replace"
|
|
55425
|
+
]);
|
|
55426
|
+
_enum([
|
|
55427
|
+
"ok",
|
|
55428
|
+
"low",
|
|
55429
|
+
"empty",
|
|
55430
|
+
"full"
|
|
55431
|
+
]);
|
|
55323
55432
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
55324
55433
|
* each. */
|
|
55325
55434
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -55334,18 +55443,23 @@ var ConsumableRemainingSchema = object({
|
|
|
55334
55443
|
unit: ConsumableRemainingUnitSchema
|
|
55335
55444
|
});
|
|
55336
55445
|
/** A single consumable item. Either a continuous `level` (remaining
|
|
55337
|
-
* life
|
|
55338
|
-
*
|
|
55339
|
-
* mutually exclusive; a provider may
|
|
55446
|
+
* life %, or fill % for a `supply` / `waste` item) or a discrete `status`
|
|
55447
|
+
* may be known — both may be null when a provider only knows the item
|
|
55448
|
+
* exists. `level` and `status` are not mutually exclusive; a provider may
|
|
55449
|
+
* report both. */
|
|
55340
55450
|
var ConsumableItemSchema = object({
|
|
55341
55451
|
/** Stable id, e.g. 'main-brush'. */
|
|
55342
55452
|
key: string().min(1),
|
|
55343
55453
|
/** Display name. */
|
|
55344
55454
|
label: string().min(1),
|
|
55345
|
-
/** Remaining life % when known (0..100). */
|
|
55455
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
55346
55456
|
level: number().min(0).max(100).nullable(),
|
|
55347
|
-
/**
|
|
55348
|
-
status:
|
|
55457
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
55458
|
+
status: ConsumableStatusSchema.nullable(),
|
|
55459
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
55460
|
+
kind: ConsumableKindSchema.optional(),
|
|
55461
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
55462
|
+
form: ConsumableFormSchema.optional(),
|
|
55349
55463
|
/** Ms epoch of the last replace, when known. */
|
|
55350
55464
|
lastResetAt: number().nullable(),
|
|
55351
55465
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -55368,7 +55482,7 @@ var consumablesCapability = {
|
|
|
55368
55482
|
kind: "widget",
|
|
55369
55483
|
widgetId: "host/consumables-panel",
|
|
55370
55484
|
tab: "consumables",
|
|
55371
|
-
|
|
55485
|
+
placement: "hero",
|
|
55372
55486
|
label: "Consumables",
|
|
55373
55487
|
order: 5
|
|
55374
55488
|
} },
|
|
@@ -55429,9 +55543,37 @@ reset: method(object({
|
|
|
55429
55543
|
*/
|
|
55430
55544
|
durability: "restored",
|
|
55431
55545
|
/**
|
|
55432
|
-
* History (D850):
|
|
55546
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
55547
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
55548
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
55549
|
+
* their provider reports them; an item that appears later gets its series.
|
|
55433
55550
|
*/
|
|
55434
|
-
history:
|
|
55551
|
+
history: {
|
|
55552
|
+
fields: {},
|
|
55553
|
+
items: {
|
|
55554
|
+
path: "items",
|
|
55555
|
+
key: "key",
|
|
55556
|
+
label: "label",
|
|
55557
|
+
fields: {
|
|
55558
|
+
level: {
|
|
55559
|
+
kind: "gauge",
|
|
55560
|
+
unit: "%",
|
|
55561
|
+
deadband: 2,
|
|
55562
|
+
displayName: "Level"
|
|
55563
|
+
},
|
|
55564
|
+
status: {
|
|
55565
|
+
kind: "enum",
|
|
55566
|
+
displayName: "Status"
|
|
55567
|
+
},
|
|
55568
|
+
"remaining.value": {
|
|
55569
|
+
kind: "gauge",
|
|
55570
|
+
unitFrom: "remaining.unit",
|
|
55571
|
+
deadband: 1,
|
|
55572
|
+
displayName: "Remaining"
|
|
55573
|
+
}
|
|
55574
|
+
}
|
|
55575
|
+
}
|
|
55576
|
+
},
|
|
55435
55577
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
55436
55578
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
55437
55579
|
};
|
|
@@ -55846,8 +55988,9 @@ onStatusChanged: { data: object({
|
|
|
55846
55988
|
volatileStateFields: ["lastChangedAt"]
|
|
55847
55989
|
};
|
|
55848
55990
|
/**
|
|
55849
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
55850
|
-
*
|
|
55991
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
55992
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
55993
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
55851
55994
|
*
|
|
55852
55995
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
55853
55996
|
* by any integration that exposes the same program / option surface.
|
|
@@ -55895,11 +56038,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
55895
56038
|
"offline",
|
|
55896
56039
|
"description-missing"
|
|
55897
56040
|
]);
|
|
55898
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
55899
|
-
"ok",
|
|
55900
|
-
"low",
|
|
55901
|
-
"empty"
|
|
55902
|
-
]);
|
|
55903
56041
|
var DishwasherStatusSchema = object({
|
|
55904
56042
|
availability: DishwasherAvailabilitySchema,
|
|
55905
56043
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55932,8 +56070,6 @@ var DishwasherStatusSchema = object({
|
|
|
55932
56070
|
powerOn: boolean().nullable(),
|
|
55933
56071
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55934
56072
|
powerState: string().nullable(),
|
|
55935
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55936
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55937
56073
|
/**
|
|
55938
56074
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55939
56075
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -64749,60 +64885,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
64749
64885
|
auth: "admin",
|
|
64750
64886
|
access: "delete"
|
|
64751
64887
|
});
|
|
64752
|
-
/**
|
|
64753
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
64754
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
64755
|
-
* optional fan-speed selector.
|
|
64756
|
-
*
|
|
64757
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
64758
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
64759
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
64760
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
64761
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
64762
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
64763
|
-
*
|
|
64764
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
64765
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
64766
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
64767
|
-
*
|
|
64768
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
64769
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
64770
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
64771
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
64772
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
64773
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
64774
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
64775
|
-
* so the HA provider leaves all four `null`.
|
|
64776
|
-
*/
|
|
64777
|
-
var VacuumStateSchema = _enum([
|
|
64778
|
-
"idle",
|
|
64779
|
-
"cleaning",
|
|
64780
|
-
"paused",
|
|
64781
|
-
"returning",
|
|
64782
|
-
"docked",
|
|
64783
|
-
"drying",
|
|
64784
|
-
"error"
|
|
64785
|
-
]);
|
|
64786
|
-
/**
|
|
64787
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
64788
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
64789
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
64790
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
64791
|
-
* hardware has no such tank at all.
|
|
64792
|
-
*/
|
|
64793
|
-
var TankStatusSchema = object({
|
|
64794
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
64795
|
-
level: number().min(0).max(100).nullable(),
|
|
64796
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
64797
|
-
status: _enum([
|
|
64798
|
-
"ok",
|
|
64799
|
-
"low",
|
|
64800
|
-
"full"
|
|
64801
|
-
]).nullable()
|
|
64802
|
-
});
|
|
64803
64888
|
var VacuumControlStatusSchema = object({
|
|
64804
64889
|
/** Lifecycle state of the vacuum. */
|
|
64805
|
-
state:
|
|
64890
|
+
state: _enum([
|
|
64891
|
+
"idle",
|
|
64892
|
+
"cleaning",
|
|
64893
|
+
"paused",
|
|
64894
|
+
"returning",
|
|
64895
|
+
"docked",
|
|
64896
|
+
"drying",
|
|
64897
|
+
"error"
|
|
64898
|
+
]),
|
|
64806
64899
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
64807
64900
|
* reading. */
|
|
64808
64901
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -64811,14 +64904,6 @@ var VacuumControlStatusSchema = object({
|
|
|
64811
64904
|
fanSpeed: string().nullable(),
|
|
64812
64905
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
64813
64906
|
availableFanSpeeds: array(string()),
|
|
64814
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
64815
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
64816
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
64817
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
64818
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
64819
|
-
detergent: TankStatusSchema.nullable(),
|
|
64820
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
64821
|
-
dustBin: TankStatusSchema.nullable(),
|
|
64822
64907
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
64823
64908
|
progressPercent: number().min(0).max(100).nullable(),
|
|
64824
64909
|
/** Current error code (0 / null = no error). */
|
|
@@ -64880,35 +64965,14 @@ var vacuumControlCapability = {
|
|
|
64880
64965
|
*/
|
|
64881
64966
|
durability: "session",
|
|
64882
64967
|
/**
|
|
64883
|
-
* History (D850): recorded series.
|
|
64968
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
64969
|
+
* items are keyed by runtime ids and record no history.
|
|
64884
64970
|
*/
|
|
64885
|
-
history: { fields: {
|
|
64886
|
-
|
|
64887
|
-
|
|
64888
|
-
|
|
64889
|
-
|
|
64890
|
-
},
|
|
64891
|
-
"cleanWater.level": {
|
|
64892
|
-
kind: "gauge",
|
|
64893
|
-
unit: "%",
|
|
64894
|
-
deadband: 2
|
|
64895
|
-
},
|
|
64896
|
-
"dirtyWater.level": {
|
|
64897
|
-
kind: "gauge",
|
|
64898
|
-
unit: "%",
|
|
64899
|
-
deadband: 2
|
|
64900
|
-
},
|
|
64901
|
-
"detergent.level": {
|
|
64902
|
-
kind: "gauge",
|
|
64903
|
-
unit: "%",
|
|
64904
|
-
deadband: 2
|
|
64905
|
-
},
|
|
64906
|
-
"dustBin.level": {
|
|
64907
|
-
kind: "gauge",
|
|
64908
|
-
unit: "%",
|
|
64909
|
-
deadband: 2
|
|
64910
|
-
}
|
|
64911
|
-
} }
|
|
64971
|
+
history: { fields: { batteryLevel: {
|
|
64972
|
+
kind: "gauge",
|
|
64973
|
+
unit: "%",
|
|
64974
|
+
deadband: 2
|
|
64975
|
+
} } }
|
|
64912
64976
|
};
|
|
64913
64977
|
var ValveStatusSchema = object({
|
|
64914
64978
|
/** Lifecycle state of the valve. */
|
|
@@ -69302,6 +69366,12 @@ Object.freeze({
|
|
|
69302
69366
|
addonId: null,
|
|
69303
69367
|
access: "create"
|
|
69304
69368
|
},
|
|
69369
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
69370
|
+
capName: "device-history",
|
|
69371
|
+
capScope: "system",
|
|
69372
|
+
addonId: null,
|
|
69373
|
+
access: "delete"
|
|
69374
|
+
},
|
|
69305
69375
|
"deviceHistory.getDeviceEnabled": {
|
|
69306
69376
|
capName: "device-history",
|
|
69307
69377
|
capScope: "system",
|
|
@@ -69320,6 +69390,12 @@ Object.freeze({
|
|
|
69320
69390
|
addonId: null,
|
|
69321
69391
|
access: "view"
|
|
69322
69392
|
},
|
|
69393
|
+
"deviceHistory.listOrphanSeries": {
|
|
69394
|
+
capName: "device-history",
|
|
69395
|
+
capScope: "system",
|
|
69396
|
+
addonId: null,
|
|
69397
|
+
access: "view"
|
|
69398
|
+
},
|
|
69323
69399
|
"deviceHistory.listSeries": {
|
|
69324
69400
|
capName: "device-history",
|
|
69325
69401
|
capScope: "system",
|
|
@@ -79391,7 +79467,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
79391
79467
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
79392
79468
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
79393
79469
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
79394
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
79470
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
79395
79471
|
([...RULE_TEXT], [...TANK]),
|
|
79396
79472
|
[...RULE_TEXT],
|
|
79397
79473
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|