@camstack/addon-provider-unifi 0.2.143 → 0.2.145
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 +255 -120
- package/dist/addon.mjs +255 -120
- package/package.json +1 -1
package/dist/addon.js
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
|
});
|
|
@@ -13270,7 +13274,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13270
13274
|
literal(4)
|
|
13271
13275
|
]).optional(),
|
|
13272
13276
|
tab: string().optional(),
|
|
13273
|
-
location: _enum([
|
|
13277
|
+
location: _enum([
|
|
13278
|
+
"settings",
|
|
13279
|
+
"top-tab",
|
|
13280
|
+
"hero"
|
|
13281
|
+
]).optional(),
|
|
13274
13282
|
order: number().optional(),
|
|
13275
13283
|
fields: array(any())
|
|
13276
13284
|
});
|
|
@@ -17150,6 +17158,52 @@ var TierStatusSchema = object({
|
|
|
17150
17158
|
countedAt: number().nullable()
|
|
17151
17159
|
});
|
|
17152
17160
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17161
|
+
/**
|
|
17162
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17163
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17164
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17165
|
+
*/
|
|
17166
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17167
|
+
/** Rows held per stored tier. */
|
|
17168
|
+
var TierRowsSchema = object({
|
|
17169
|
+
raw: number().int(),
|
|
17170
|
+
"5m": number().int(),
|
|
17171
|
+
"1h": number().int(),
|
|
17172
|
+
"1d": number().int()
|
|
17173
|
+
});
|
|
17174
|
+
var OrphanSeriesSchema = object({
|
|
17175
|
+
seriesId: number().int(),
|
|
17176
|
+
deviceId: number().int(),
|
|
17177
|
+
key: string(),
|
|
17178
|
+
scope: string(),
|
|
17179
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17180
|
+
displayName: string().nullable(),
|
|
17181
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17182
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17183
|
+
missingSince: number().nullable(),
|
|
17184
|
+
firstTs: number(),
|
|
17185
|
+
lastTs: number(),
|
|
17186
|
+
rows: TierRowsSchema
|
|
17187
|
+
});
|
|
17188
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17189
|
+
"not-found",
|
|
17190
|
+
"not-orphan",
|
|
17191
|
+
"failed"
|
|
17192
|
+
]);
|
|
17193
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17194
|
+
seriesId: number().int(),
|
|
17195
|
+
ok: literal(true),
|
|
17196
|
+
deleted: TierRowsSchema
|
|
17197
|
+
}), object({
|
|
17198
|
+
seriesId: number().int(),
|
|
17199
|
+
ok: literal(false),
|
|
17200
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17201
|
+
})]);
|
|
17202
|
+
var OrphanListSchema = object({
|
|
17203
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17204
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17205
|
+
truncated: boolean()
|
|
17206
|
+
});
|
|
17153
17207
|
var DeviceHistoryStatusSchema = object({
|
|
17154
17208
|
startedAt: number(),
|
|
17155
17209
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17247,7 +17301,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17247
17301
|
}), object({ enabled: boolean() }), {
|
|
17248
17302
|
kind: "mutation",
|
|
17249
17303
|
auth: "admin"
|
|
17250
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17304
|
+
}), 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() }), {
|
|
17305
|
+
kind: "mutation",
|
|
17306
|
+
auth: "admin"
|
|
17307
|
+
});
|
|
17251
17308
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17252
17309
|
object({ state: literal("absent") }),
|
|
17253
17310
|
object({
|
|
@@ -50314,6 +50371,19 @@ var NodeInferenceDeviceSchema = object({
|
|
|
50314
50371
|
/** Whether the node's live probe reports the device as usable right now. */
|
|
50315
50372
|
available: boolean(),
|
|
50316
50373
|
/**
|
|
50374
|
+
* Is the device on the node at all (D919)? `present` — the live probe
|
|
50375
|
+
* reported it; `absent` — the probe ANSWERED and did not report it, so only
|
|
50376
|
+
* its stored settings remain (unplugged, moved to another node): never
|
|
50377
|
+
* eligible, whatever its stored `enabled`, and forgettable with
|
|
50378
|
+
* `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
|
|
50379
|
+
* claimed (D315). Optional only for an orchestrator older than the field.
|
|
50380
|
+
*/
|
|
50381
|
+
presence: _enum([
|
|
50382
|
+
"present",
|
|
50383
|
+
"absent",
|
|
50384
|
+
"unknown"
|
|
50385
|
+
]).optional(),
|
|
50386
|
+
/**
|
|
50317
50387
|
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
50318
50388
|
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
50319
50389
|
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
@@ -50539,7 +50609,13 @@ method(object({
|
|
|
50539
50609
|
}), object({ success: literal(true) }), {
|
|
50540
50610
|
kind: "mutation",
|
|
50541
50611
|
auth: "admin"
|
|
50542
|
-
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
50612
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
50613
|
+
agentNodeId: string(),
|
|
50614
|
+
deviceKey: string()
|
|
50615
|
+
}), object({ success: literal(true) }), {
|
|
50616
|
+
kind: "mutation",
|
|
50617
|
+
auth: "admin"
|
|
50618
|
+
}), method(object({ agentNodeId: string() }), object({
|
|
50543
50619
|
success: literal(true),
|
|
50544
50620
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
50545
50621
|
effectiveModelId: string().nullable(),
|
|
@@ -55220,17 +55296,69 @@ var connectivityCapability = {
|
|
|
55220
55296
|
volatileStateFields: ["lastChangedAt"]
|
|
55221
55297
|
};
|
|
55222
55298
|
/**
|
|
55223
|
-
* Generic device-consumables capability —
|
|
55224
|
-
*
|
|
55225
|
-
* descaling cycles,
|
|
55226
|
-
*
|
|
55227
|
-
*
|
|
55228
|
-
*
|
|
55299
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
55300
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
55301
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
55302
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
55303
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
55304
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
55305
|
+
* its device tracks consumables registers it; the provider names each item
|
|
55306
|
+
* verbatim and says which `kind` it is.
|
|
55307
|
+
*
|
|
55308
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
55309
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
55310
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
55229
55311
|
*
|
|
55230
55312
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
55231
55313
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
55232
55314
|
* "No consumables reported" placeholder when `items` is empty.
|
|
55233
55315
|
*/
|
|
55316
|
+
/**
|
|
55317
|
+
* What an item IS, which decides which direction is bad:
|
|
55318
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
55319
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
55320
|
+
* salt, rinse aid); low or empty is bad.
|
|
55321
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
55322
|
+
* bad.
|
|
55323
|
+
* Absent = `wear`.
|
|
55324
|
+
*/
|
|
55325
|
+
var ConsumableKindSchema = _enum([
|
|
55326
|
+
"wear",
|
|
55327
|
+
"supply",
|
|
55328
|
+
"waste"
|
|
55329
|
+
]);
|
|
55330
|
+
/**
|
|
55331
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
55332
|
+
* of `kind`, which decides which direction is bad:
|
|
55333
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
55334
|
+
* remaining time and a reset.
|
|
55335
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
55336
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
55337
|
+
* a stepped level and "refill".
|
|
55338
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
55339
|
+
* that warns when full.
|
|
55340
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
55341
|
+
*/
|
|
55342
|
+
var ConsumableFormSchema = _enum([
|
|
55343
|
+
"part",
|
|
55344
|
+
"tank",
|
|
55345
|
+
"product",
|
|
55346
|
+
"bin"
|
|
55347
|
+
]);
|
|
55348
|
+
/** The provider's own discrete verdict on an item. */
|
|
55349
|
+
var ConsumableStatusSchema = _enum([
|
|
55350
|
+
"ok",
|
|
55351
|
+
"low",
|
|
55352
|
+
"empty",
|
|
55353
|
+
"full",
|
|
55354
|
+
"replace"
|
|
55355
|
+
]);
|
|
55356
|
+
_enum([
|
|
55357
|
+
"ok",
|
|
55358
|
+
"low",
|
|
55359
|
+
"empty",
|
|
55360
|
+
"full"
|
|
55361
|
+
]);
|
|
55234
55362
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
55235
55363
|
* each. */
|
|
55236
55364
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -55245,18 +55373,23 @@ var ConsumableRemainingSchema = object({
|
|
|
55245
55373
|
unit: ConsumableRemainingUnitSchema
|
|
55246
55374
|
});
|
|
55247
55375
|
/** A single consumable item. Either a continuous `level` (remaining
|
|
55248
|
-
* life
|
|
55249
|
-
*
|
|
55250
|
-
* mutually exclusive; a provider may
|
|
55376
|
+
* life %, or fill % for a `supply` / `waste` item) or a discrete `status`
|
|
55377
|
+
* may be known — both may be null when a provider only knows the item
|
|
55378
|
+
* exists. `level` and `status` are not mutually exclusive; a provider may
|
|
55379
|
+
* report both. */
|
|
55251
55380
|
var ConsumableItemSchema = object({
|
|
55252
55381
|
/** Stable id, e.g. 'main-brush'. */
|
|
55253
55382
|
key: string().min(1),
|
|
55254
55383
|
/** Display name. */
|
|
55255
55384
|
label: string().min(1),
|
|
55256
|
-
/** Remaining life % when known (0..100). */
|
|
55385
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
55257
55386
|
level: number().min(0).max(100).nullable(),
|
|
55258
|
-
/**
|
|
55259
|
-
status:
|
|
55387
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
55388
|
+
status: ConsumableStatusSchema.nullable(),
|
|
55389
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
55390
|
+
kind: ConsumableKindSchema.optional(),
|
|
55391
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
55392
|
+
form: ConsumableFormSchema.optional(),
|
|
55260
55393
|
/** Ms epoch of the last replace, when known. */
|
|
55261
55394
|
lastResetAt: number().nullable(),
|
|
55262
55395
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -55279,7 +55412,7 @@ var consumablesCapability = {
|
|
|
55279
55412
|
kind: "widget",
|
|
55280
55413
|
widgetId: "host/consumables-panel",
|
|
55281
55414
|
tab: "consumables",
|
|
55282
|
-
|
|
55415
|
+
placement: "hero",
|
|
55283
55416
|
label: "Consumables",
|
|
55284
55417
|
order: 5
|
|
55285
55418
|
} },
|
|
@@ -55340,9 +55473,37 @@ reset: method(object({
|
|
|
55340
55473
|
*/
|
|
55341
55474
|
durability: "restored",
|
|
55342
55475
|
/**
|
|
55343
|
-
* History (D850):
|
|
55476
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
55477
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
55478
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
55479
|
+
* their provider reports them; an item that appears later gets its series.
|
|
55344
55480
|
*/
|
|
55345
|
-
history:
|
|
55481
|
+
history: {
|
|
55482
|
+
fields: {},
|
|
55483
|
+
items: {
|
|
55484
|
+
path: "items",
|
|
55485
|
+
key: "key",
|
|
55486
|
+
label: "label",
|
|
55487
|
+
fields: {
|
|
55488
|
+
level: {
|
|
55489
|
+
kind: "gauge",
|
|
55490
|
+
unit: "%",
|
|
55491
|
+
deadband: 2,
|
|
55492
|
+
displayName: "Level"
|
|
55493
|
+
},
|
|
55494
|
+
status: {
|
|
55495
|
+
kind: "enum",
|
|
55496
|
+
displayName: "Status"
|
|
55497
|
+
},
|
|
55498
|
+
"remaining.value": {
|
|
55499
|
+
kind: "gauge",
|
|
55500
|
+
unitFrom: "remaining.unit",
|
|
55501
|
+
deadband: 1,
|
|
55502
|
+
displayName: "Remaining"
|
|
55503
|
+
}
|
|
55504
|
+
}
|
|
55505
|
+
}
|
|
55506
|
+
},
|
|
55346
55507
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
55347
55508
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
55348
55509
|
};
|
|
@@ -55757,8 +55918,9 @@ onStatusChanged: { data: object({
|
|
|
55757
55918
|
volatileStateFields: ["lastChangedAt"]
|
|
55758
55919
|
};
|
|
55759
55920
|
/**
|
|
55760
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
55761
|
-
*
|
|
55921
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
55922
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
55923
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
55762
55924
|
*
|
|
55763
55925
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
55764
55926
|
* by any integration that exposes the same program / option surface.
|
|
@@ -55806,11 +55968,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
55806
55968
|
"offline",
|
|
55807
55969
|
"description-missing"
|
|
55808
55970
|
]);
|
|
55809
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
55810
|
-
"ok",
|
|
55811
|
-
"low",
|
|
55812
|
-
"empty"
|
|
55813
|
-
]);
|
|
55814
55971
|
var DishwasherStatusSchema = object({
|
|
55815
55972
|
availability: DishwasherAvailabilitySchema,
|
|
55816
55973
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55843,8 +56000,6 @@ var DishwasherStatusSchema = object({
|
|
|
55843
56000
|
powerOn: boolean().nullable(),
|
|
55844
56001
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55845
56002
|
powerState: string().nullable(),
|
|
55846
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55847
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55848
56003
|
/**
|
|
55849
56004
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55850
56005
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -58720,7 +58875,7 @@ var motionTriggerCapability = {
|
|
|
58720
58875
|
enabled: boolean()
|
|
58721
58876
|
}), _void(), {
|
|
58722
58877
|
kind: "mutation",
|
|
58723
|
-
auth: "
|
|
58878
|
+
auth: "protected"
|
|
58724
58879
|
}) },
|
|
58725
58880
|
events: { onMotionTriggerChanged: { data: object({
|
|
58726
58881
|
deviceId: number(),
|
|
@@ -59450,6 +59605,13 @@ var TopologyNodeSchema = object({
|
|
|
59450
59605
|
cpuModel: string().nullable(),
|
|
59451
59606
|
cpuCores: number(),
|
|
59452
59607
|
memoryMB: number(),
|
|
59608
|
+
/**
|
|
59609
|
+
* The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
|
|
59610
|
+
* openvino, edgetpu …) — not its devices. An installed runtime says nothing
|
|
59611
|
+
* about whether its hardware is there (a Coral delegate stays installed
|
|
59612
|
+
* after the stick leaves, D919); the live device set is
|
|
59613
|
+
* `pipelineOrchestrator.getNodeInferenceDevices`.
|
|
59614
|
+
*/
|
|
59453
59615
|
engines: array(string()).readonly(),
|
|
59454
59616
|
isHub: boolean(),
|
|
59455
59617
|
isOnline: boolean(),
|
|
@@ -60567,7 +60729,28 @@ var ResolvedInferenceConfigSchema = object({
|
|
|
60567
60729
|
format: ModelFormatSchema,
|
|
60568
60730
|
reason: string()
|
|
60569
60731
|
});
|
|
60570
|
-
|
|
60732
|
+
/**
|
|
60733
|
+
* The answer of an accelerator rescan (D919): the node's device list after
|
|
60734
|
+
* the re-probe, what changed, and the evidence that decided the Coral answer
|
|
60735
|
+
* (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
|
|
60736
|
+
* bus, the installed-delegate fallback, or nothing).
|
|
60737
|
+
*/
|
|
60738
|
+
var AcceleratorRescanSchema = object({
|
|
60739
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly(),
|
|
60740
|
+
appeared: array(string()).readonly(),
|
|
60741
|
+
disappeared: array(string()).readonly(),
|
|
60742
|
+
usbBus: _enum(["observed", "unobservable"]),
|
|
60743
|
+
decidedBy: _enum([
|
|
60744
|
+
"usb-ids",
|
|
60745
|
+
"pci",
|
|
60746
|
+
"delegate-fallback",
|
|
60747
|
+
"none"
|
|
60748
|
+
])
|
|
60749
|
+
});
|
|
60750
|
+
method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
|
|
60751
|
+
kind: "mutation",
|
|
60752
|
+
auth: "admin"
|
|
60753
|
+
});
|
|
60571
60754
|
/**
|
|
60572
60755
|
* Multi-metric electrical meter. One slice can carry any combination
|
|
60573
60756
|
* of instantaneous power (W), cumulative energy (kWh), voltage (V),
|
|
@@ -64660,60 +64843,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
64660
64843
|
auth: "admin",
|
|
64661
64844
|
access: "delete"
|
|
64662
64845
|
});
|
|
64663
|
-
/**
|
|
64664
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
64665
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
64666
|
-
* optional fan-speed selector.
|
|
64667
|
-
*
|
|
64668
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
64669
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
64670
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
64671
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
64672
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
64673
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
64674
|
-
*
|
|
64675
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
64676
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
64677
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
64678
|
-
*
|
|
64679
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
64680
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
64681
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
64682
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
64683
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
64684
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
64685
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
64686
|
-
* so the HA provider leaves all four `null`.
|
|
64687
|
-
*/
|
|
64688
|
-
var VacuumStateSchema = _enum([
|
|
64689
|
-
"idle",
|
|
64690
|
-
"cleaning",
|
|
64691
|
-
"paused",
|
|
64692
|
-
"returning",
|
|
64693
|
-
"docked",
|
|
64694
|
-
"drying",
|
|
64695
|
-
"error"
|
|
64696
|
-
]);
|
|
64697
|
-
/**
|
|
64698
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
64699
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
64700
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
64701
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
64702
|
-
* hardware has no such tank at all.
|
|
64703
|
-
*/
|
|
64704
|
-
var TankStatusSchema = object({
|
|
64705
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
64706
|
-
level: number().min(0).max(100).nullable(),
|
|
64707
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
64708
|
-
status: _enum([
|
|
64709
|
-
"ok",
|
|
64710
|
-
"low",
|
|
64711
|
-
"full"
|
|
64712
|
-
]).nullable()
|
|
64713
|
-
});
|
|
64714
64846
|
var VacuumControlStatusSchema = object({
|
|
64715
64847
|
/** Lifecycle state of the vacuum. */
|
|
64716
|
-
state:
|
|
64848
|
+
state: _enum([
|
|
64849
|
+
"idle",
|
|
64850
|
+
"cleaning",
|
|
64851
|
+
"paused",
|
|
64852
|
+
"returning",
|
|
64853
|
+
"docked",
|
|
64854
|
+
"drying",
|
|
64855
|
+
"error"
|
|
64856
|
+
]),
|
|
64717
64857
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
64718
64858
|
* reading. */
|
|
64719
64859
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -64722,14 +64862,6 @@ var VacuumControlStatusSchema = object({
|
|
|
64722
64862
|
fanSpeed: string().nullable(),
|
|
64723
64863
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
64724
64864
|
availableFanSpeeds: array(string()),
|
|
64725
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
64726
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
64727
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
64728
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
64729
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
64730
|
-
detergent: TankStatusSchema.nullable(),
|
|
64731
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
64732
|
-
dustBin: TankStatusSchema.nullable(),
|
|
64733
64865
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
64734
64866
|
progressPercent: number().min(0).max(100).nullable(),
|
|
64735
64867
|
/** Current error code (0 / null = no error). */
|
|
@@ -64791,35 +64923,14 @@ var vacuumControlCapability = {
|
|
|
64791
64923
|
*/
|
|
64792
64924
|
durability: "session",
|
|
64793
64925
|
/**
|
|
64794
|
-
* History (D850): recorded series.
|
|
64926
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
64927
|
+
* items are keyed by runtime ids and record no history.
|
|
64795
64928
|
*/
|
|
64796
|
-
history: { fields: {
|
|
64797
|
-
|
|
64798
|
-
|
|
64799
|
-
|
|
64800
|
-
|
|
64801
|
-
},
|
|
64802
|
-
"cleanWater.level": {
|
|
64803
|
-
kind: "gauge",
|
|
64804
|
-
unit: "%",
|
|
64805
|
-
deadband: 2
|
|
64806
|
-
},
|
|
64807
|
-
"dirtyWater.level": {
|
|
64808
|
-
kind: "gauge",
|
|
64809
|
-
unit: "%",
|
|
64810
|
-
deadband: 2
|
|
64811
|
-
},
|
|
64812
|
-
"detergent.level": {
|
|
64813
|
-
kind: "gauge",
|
|
64814
|
-
unit: "%",
|
|
64815
|
-
deadband: 2
|
|
64816
|
-
},
|
|
64817
|
-
"dustBin.level": {
|
|
64818
|
-
kind: "gauge",
|
|
64819
|
-
unit: "%",
|
|
64820
|
-
deadband: 2
|
|
64821
|
-
}
|
|
64822
|
-
} }
|
|
64929
|
+
history: { fields: { batteryLevel: {
|
|
64930
|
+
kind: "gauge",
|
|
64931
|
+
unit: "%",
|
|
64932
|
+
deadband: 2
|
|
64933
|
+
} } }
|
|
64823
64934
|
};
|
|
64824
64935
|
var ValveStatusSchema = object({
|
|
64825
64936
|
/** Lifecycle state of the valve. */
|
|
@@ -69213,6 +69324,12 @@ Object.freeze({
|
|
|
69213
69324
|
addonId: null,
|
|
69214
69325
|
access: "create"
|
|
69215
69326
|
},
|
|
69327
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
69328
|
+
capName: "device-history",
|
|
69329
|
+
capScope: "system",
|
|
69330
|
+
addonId: null,
|
|
69331
|
+
access: "delete"
|
|
69332
|
+
},
|
|
69216
69333
|
"deviceHistory.getDeviceEnabled": {
|
|
69217
69334
|
capName: "device-history",
|
|
69218
69335
|
capScope: "system",
|
|
@@ -69231,6 +69348,12 @@ Object.freeze({
|
|
|
69231
69348
|
addonId: null,
|
|
69232
69349
|
access: "view"
|
|
69233
69350
|
},
|
|
69351
|
+
"deviceHistory.listOrphanSeries": {
|
|
69352
|
+
capName: "device-history",
|
|
69353
|
+
capScope: "system",
|
|
69354
|
+
addonId: null,
|
|
69355
|
+
access: "view"
|
|
69356
|
+
},
|
|
69234
69357
|
"deviceHistory.listSeries": {
|
|
69235
69358
|
capName: "device-history",
|
|
69236
69359
|
capScope: "system",
|
|
@@ -72855,6 +72978,12 @@ Object.freeze({
|
|
|
72855
72978
|
addonId: null,
|
|
72856
72979
|
access: "delete"
|
|
72857
72980
|
},
|
|
72981
|
+
"pipelineOrchestrator.forgetInferenceDevice": {
|
|
72982
|
+
capName: "pipeline-orchestrator",
|
|
72983
|
+
capScope: "system",
|
|
72984
|
+
addonId: null,
|
|
72985
|
+
access: "delete"
|
|
72986
|
+
},
|
|
72858
72987
|
"pipelineOrchestrator.getAgentLoad": {
|
|
72859
72988
|
capName: "pipeline-orchestrator",
|
|
72860
72989
|
capScope: "system",
|
|
@@ -73431,6 +73560,12 @@ Object.freeze({
|
|
|
73431
73560
|
addonId: null,
|
|
73432
73561
|
access: "view"
|
|
73433
73562
|
},
|
|
73563
|
+
"platformProbe.rescanAccelerators": {
|
|
73564
|
+
capName: "platform-probe",
|
|
73565
|
+
capScope: "system",
|
|
73566
|
+
addonId: null,
|
|
73567
|
+
access: "create"
|
|
73568
|
+
},
|
|
73434
73569
|
"platformProbe.resolveHwAccel": {
|
|
73435
73570
|
capName: "platform-probe",
|
|
73436
73571
|
capScope: "system",
|
|
@@ -79236,7 +79371,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
79236
79371
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
79237
79372
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
79238
79373
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
79239
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
79374
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
79240
79375
|
([...RULE_TEXT], [...TANK]),
|
|
79241
79376
|
[...RULE_TEXT],
|
|
79242
79377
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/dist/addon.mjs
CHANGED
|
@@ -5430,7 +5430,7 @@ var ZodIssueCode = {
|
|
|
5430
5430
|
var ZodFirstPartyTypeKind;
|
|
5431
5431
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5432
5432
|
//#endregion
|
|
5433
|
-
//#region ../types/dist/sleep-
|
|
5433
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5434
5434
|
/**
|
|
5435
5435
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5436
5436
|
* window to float samples (D455).
|
|
@@ -8322,7 +8322,11 @@ var ContributionSectionSchema = object({
|
|
|
8322
8322
|
literal(4)
|
|
8323
8323
|
]).optional(),
|
|
8324
8324
|
tab: string().optional(),
|
|
8325
|
-
location: _enum([
|
|
8325
|
+
location: _enum([
|
|
8326
|
+
"settings",
|
|
8327
|
+
"top-tab",
|
|
8328
|
+
"hero"
|
|
8329
|
+
]).optional(),
|
|
8326
8330
|
order: number().optional(),
|
|
8327
8331
|
fields: array(any())
|
|
8328
8332
|
});
|
|
@@ -13269,7 +13273,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13269
13273
|
literal(4)
|
|
13270
13274
|
]).optional(),
|
|
13271
13275
|
tab: string().optional(),
|
|
13272
|
-
location: _enum([
|
|
13276
|
+
location: _enum([
|
|
13277
|
+
"settings",
|
|
13278
|
+
"top-tab",
|
|
13279
|
+
"hero"
|
|
13280
|
+
]).optional(),
|
|
13273
13281
|
order: number().optional(),
|
|
13274
13282
|
fields: array(any())
|
|
13275
13283
|
});
|
|
@@ -17149,6 +17157,52 @@ var TierStatusSchema = object({
|
|
|
17149
17157
|
countedAt: number().nullable()
|
|
17150
17158
|
});
|
|
17151
17159
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17160
|
+
/**
|
|
17161
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17162
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17163
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17164
|
+
*/
|
|
17165
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17166
|
+
/** Rows held per stored tier. */
|
|
17167
|
+
var TierRowsSchema = object({
|
|
17168
|
+
raw: number().int(),
|
|
17169
|
+
"5m": number().int(),
|
|
17170
|
+
"1h": number().int(),
|
|
17171
|
+
"1d": number().int()
|
|
17172
|
+
});
|
|
17173
|
+
var OrphanSeriesSchema = object({
|
|
17174
|
+
seriesId: number().int(),
|
|
17175
|
+
deviceId: number().int(),
|
|
17176
|
+
key: string(),
|
|
17177
|
+
scope: string(),
|
|
17178
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17179
|
+
displayName: string().nullable(),
|
|
17180
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17181
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17182
|
+
missingSince: number().nullable(),
|
|
17183
|
+
firstTs: number(),
|
|
17184
|
+
lastTs: number(),
|
|
17185
|
+
rows: TierRowsSchema
|
|
17186
|
+
});
|
|
17187
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17188
|
+
"not-found",
|
|
17189
|
+
"not-orphan",
|
|
17190
|
+
"failed"
|
|
17191
|
+
]);
|
|
17192
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17193
|
+
seriesId: number().int(),
|
|
17194
|
+
ok: literal(true),
|
|
17195
|
+
deleted: TierRowsSchema
|
|
17196
|
+
}), object({
|
|
17197
|
+
seriesId: number().int(),
|
|
17198
|
+
ok: literal(false),
|
|
17199
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17200
|
+
})]);
|
|
17201
|
+
var OrphanListSchema = object({
|
|
17202
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17203
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17204
|
+
truncated: boolean()
|
|
17205
|
+
});
|
|
17152
17206
|
var DeviceHistoryStatusSchema = object({
|
|
17153
17207
|
startedAt: number(),
|
|
17154
17208
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17246,7 +17300,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17246
17300
|
}), object({ enabled: boolean() }), {
|
|
17247
17301
|
kind: "mutation",
|
|
17248
17302
|
auth: "admin"
|
|
17249
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17303
|
+
}), 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() }), {
|
|
17304
|
+
kind: "mutation",
|
|
17305
|
+
auth: "admin"
|
|
17306
|
+
});
|
|
17250
17307
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17251
17308
|
object({ state: literal("absent") }),
|
|
17252
17309
|
object({
|
|
@@ -50313,6 +50370,19 @@ var NodeInferenceDeviceSchema = object({
|
|
|
50313
50370
|
/** Whether the node's live probe reports the device as usable right now. */
|
|
50314
50371
|
available: boolean(),
|
|
50315
50372
|
/**
|
|
50373
|
+
* Is the device on the node at all (D919)? `present` — the live probe
|
|
50374
|
+
* reported it; `absent` — the probe ANSWERED and did not report it, so only
|
|
50375
|
+
* its stored settings remain (unplugged, moved to another node): never
|
|
50376
|
+
* eligible, whatever its stored `enabled`, and forgettable with
|
|
50377
|
+
* `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
|
|
50378
|
+
* claimed (D315). Optional only for an orchestrator older than the field.
|
|
50379
|
+
*/
|
|
50380
|
+
presence: _enum([
|
|
50381
|
+
"present",
|
|
50382
|
+
"absent",
|
|
50383
|
+
"unknown"
|
|
50384
|
+
]).optional(),
|
|
50385
|
+
/**
|
|
50316
50386
|
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
50317
50387
|
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
50318
50388
|
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
@@ -50538,7 +50608,13 @@ method(object({
|
|
|
50538
50608
|
}), object({ success: literal(true) }), {
|
|
50539
50609
|
kind: "mutation",
|
|
50540
50610
|
auth: "admin"
|
|
50541
|
-
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
50611
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
50612
|
+
agentNodeId: string(),
|
|
50613
|
+
deviceKey: string()
|
|
50614
|
+
}), object({ success: literal(true) }), {
|
|
50615
|
+
kind: "mutation",
|
|
50616
|
+
auth: "admin"
|
|
50617
|
+
}), method(object({ agentNodeId: string() }), object({
|
|
50542
50618
|
success: literal(true),
|
|
50543
50619
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
50544
50620
|
effectiveModelId: string().nullable(),
|
|
@@ -55219,17 +55295,69 @@ var connectivityCapability = {
|
|
|
55219
55295
|
volatileStateFields: ["lastChangedAt"]
|
|
55220
55296
|
};
|
|
55221
55297
|
/**
|
|
55222
|
-
* Generic device-consumables capability —
|
|
55223
|
-
*
|
|
55224
|
-
* descaling cycles,
|
|
55225
|
-
*
|
|
55226
|
-
*
|
|
55227
|
-
*
|
|
55298
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
55299
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
55300
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
55301
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
55302
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
55303
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
55304
|
+
* its device tracks consumables registers it; the provider names each item
|
|
55305
|
+
* verbatim and says which `kind` it is.
|
|
55306
|
+
*
|
|
55307
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
55308
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
55309
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
55228
55310
|
*
|
|
55229
55311
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
55230
55312
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
55231
55313
|
* "No consumables reported" placeholder when `items` is empty.
|
|
55232
55314
|
*/
|
|
55315
|
+
/**
|
|
55316
|
+
* What an item IS, which decides which direction is bad:
|
|
55317
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
55318
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
55319
|
+
* salt, rinse aid); low or empty is bad.
|
|
55320
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
55321
|
+
* bad.
|
|
55322
|
+
* Absent = `wear`.
|
|
55323
|
+
*/
|
|
55324
|
+
var ConsumableKindSchema = _enum([
|
|
55325
|
+
"wear",
|
|
55326
|
+
"supply",
|
|
55327
|
+
"waste"
|
|
55328
|
+
]);
|
|
55329
|
+
/**
|
|
55330
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
55331
|
+
* of `kind`, which decides which direction is bad:
|
|
55332
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
55333
|
+
* remaining time and a reset.
|
|
55334
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
55335
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
55336
|
+
* a stepped level and "refill".
|
|
55337
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
55338
|
+
* that warns when full.
|
|
55339
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
55340
|
+
*/
|
|
55341
|
+
var ConsumableFormSchema = _enum([
|
|
55342
|
+
"part",
|
|
55343
|
+
"tank",
|
|
55344
|
+
"product",
|
|
55345
|
+
"bin"
|
|
55346
|
+
]);
|
|
55347
|
+
/** The provider's own discrete verdict on an item. */
|
|
55348
|
+
var ConsumableStatusSchema = _enum([
|
|
55349
|
+
"ok",
|
|
55350
|
+
"low",
|
|
55351
|
+
"empty",
|
|
55352
|
+
"full",
|
|
55353
|
+
"replace"
|
|
55354
|
+
]);
|
|
55355
|
+
_enum([
|
|
55356
|
+
"ok",
|
|
55357
|
+
"low",
|
|
55358
|
+
"empty",
|
|
55359
|
+
"full"
|
|
55360
|
+
]);
|
|
55233
55361
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
55234
55362
|
* each. */
|
|
55235
55363
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -55244,18 +55372,23 @@ var ConsumableRemainingSchema = object({
|
|
|
55244
55372
|
unit: ConsumableRemainingUnitSchema
|
|
55245
55373
|
});
|
|
55246
55374
|
/** A single consumable item. Either a continuous `level` (remaining
|
|
55247
|
-
* life
|
|
55248
|
-
*
|
|
55249
|
-
* mutually exclusive; a provider may
|
|
55375
|
+
* life %, or fill % for a `supply` / `waste` item) or a discrete `status`
|
|
55376
|
+
* may be known — both may be null when a provider only knows the item
|
|
55377
|
+
* exists. `level` and `status` are not mutually exclusive; a provider may
|
|
55378
|
+
* report both. */
|
|
55250
55379
|
var ConsumableItemSchema = object({
|
|
55251
55380
|
/** Stable id, e.g. 'main-brush'. */
|
|
55252
55381
|
key: string().min(1),
|
|
55253
55382
|
/** Display name. */
|
|
55254
55383
|
label: string().min(1),
|
|
55255
|
-
/** Remaining life % when known (0..100). */
|
|
55384
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
55256
55385
|
level: number().min(0).max(100).nullable(),
|
|
55257
|
-
/**
|
|
55258
|
-
status:
|
|
55386
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
55387
|
+
status: ConsumableStatusSchema.nullable(),
|
|
55388
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
55389
|
+
kind: ConsumableKindSchema.optional(),
|
|
55390
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
55391
|
+
form: ConsumableFormSchema.optional(),
|
|
55259
55392
|
/** Ms epoch of the last replace, when known. */
|
|
55260
55393
|
lastResetAt: number().nullable(),
|
|
55261
55394
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -55278,7 +55411,7 @@ var consumablesCapability = {
|
|
|
55278
55411
|
kind: "widget",
|
|
55279
55412
|
widgetId: "host/consumables-panel",
|
|
55280
55413
|
tab: "consumables",
|
|
55281
|
-
|
|
55414
|
+
placement: "hero",
|
|
55282
55415
|
label: "Consumables",
|
|
55283
55416
|
order: 5
|
|
55284
55417
|
} },
|
|
@@ -55339,9 +55472,37 @@ reset: method(object({
|
|
|
55339
55472
|
*/
|
|
55340
55473
|
durability: "restored",
|
|
55341
55474
|
/**
|
|
55342
|
-
* History (D850):
|
|
55475
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
55476
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
55477
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
55478
|
+
* their provider reports them; an item that appears later gets its series.
|
|
55343
55479
|
*/
|
|
55344
|
-
history:
|
|
55480
|
+
history: {
|
|
55481
|
+
fields: {},
|
|
55482
|
+
items: {
|
|
55483
|
+
path: "items",
|
|
55484
|
+
key: "key",
|
|
55485
|
+
label: "label",
|
|
55486
|
+
fields: {
|
|
55487
|
+
level: {
|
|
55488
|
+
kind: "gauge",
|
|
55489
|
+
unit: "%",
|
|
55490
|
+
deadband: 2,
|
|
55491
|
+
displayName: "Level"
|
|
55492
|
+
},
|
|
55493
|
+
status: {
|
|
55494
|
+
kind: "enum",
|
|
55495
|
+
displayName: "Status"
|
|
55496
|
+
},
|
|
55497
|
+
"remaining.value": {
|
|
55498
|
+
kind: "gauge",
|
|
55499
|
+
unitFrom: "remaining.unit",
|
|
55500
|
+
deadband: 1,
|
|
55501
|
+
displayName: "Remaining"
|
|
55502
|
+
}
|
|
55503
|
+
}
|
|
55504
|
+
}
|
|
55505
|
+
},
|
|
55345
55506
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
55346
55507
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
55347
55508
|
};
|
|
@@ -55756,8 +55917,9 @@ onStatusChanged: { data: object({
|
|
|
55756
55917
|
volatileStateFields: ["lastChangedAt"]
|
|
55757
55918
|
};
|
|
55758
55919
|
/**
|
|
55759
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
55760
|
-
*
|
|
55920
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
55921
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
55922
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
55761
55923
|
*
|
|
55762
55924
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
55763
55925
|
* by any integration that exposes the same program / option surface.
|
|
@@ -55805,11 +55967,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
55805
55967
|
"offline",
|
|
55806
55968
|
"description-missing"
|
|
55807
55969
|
]);
|
|
55808
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
55809
|
-
"ok",
|
|
55810
|
-
"low",
|
|
55811
|
-
"empty"
|
|
55812
|
-
]);
|
|
55813
55970
|
var DishwasherStatusSchema = object({
|
|
55814
55971
|
availability: DishwasherAvailabilitySchema,
|
|
55815
55972
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55842,8 +55999,6 @@ var DishwasherStatusSchema = object({
|
|
|
55842
55999
|
powerOn: boolean().nullable(),
|
|
55843
56000
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55844
56001
|
powerState: string().nullable(),
|
|
55845
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55846
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55847
56002
|
/**
|
|
55848
56003
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55849
56004
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -58719,7 +58874,7 @@ var motionTriggerCapability = {
|
|
|
58719
58874
|
enabled: boolean()
|
|
58720
58875
|
}), _void(), {
|
|
58721
58876
|
kind: "mutation",
|
|
58722
|
-
auth: "
|
|
58877
|
+
auth: "protected"
|
|
58723
58878
|
}) },
|
|
58724
58879
|
events: { onMotionTriggerChanged: { data: object({
|
|
58725
58880
|
deviceId: number(),
|
|
@@ -59449,6 +59604,13 @@ var TopologyNodeSchema = object({
|
|
|
59449
59604
|
cpuModel: string().nullable(),
|
|
59450
59605
|
cpuCores: number(),
|
|
59451
59606
|
memoryMB: number(),
|
|
59607
|
+
/**
|
|
59608
|
+
* The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
|
|
59609
|
+
* openvino, edgetpu …) — not its devices. An installed runtime says nothing
|
|
59610
|
+
* about whether its hardware is there (a Coral delegate stays installed
|
|
59611
|
+
* after the stick leaves, D919); the live device set is
|
|
59612
|
+
* `pipelineOrchestrator.getNodeInferenceDevices`.
|
|
59613
|
+
*/
|
|
59452
59614
|
engines: array(string()).readonly(),
|
|
59453
59615
|
isHub: boolean(),
|
|
59454
59616
|
isOnline: boolean(),
|
|
@@ -60566,7 +60728,28 @@ var ResolvedInferenceConfigSchema = object({
|
|
|
60566
60728
|
format: ModelFormatSchema,
|
|
60567
60729
|
reason: string()
|
|
60568
60730
|
});
|
|
60569
|
-
|
|
60731
|
+
/**
|
|
60732
|
+
* The answer of an accelerator rescan (D919): the node's device list after
|
|
60733
|
+
* the re-probe, what changed, and the evidence that decided the Coral answer
|
|
60734
|
+
* (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
|
|
60735
|
+
* bus, the installed-delegate fallback, or nothing).
|
|
60736
|
+
*/
|
|
60737
|
+
var AcceleratorRescanSchema = object({
|
|
60738
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly(),
|
|
60739
|
+
appeared: array(string()).readonly(),
|
|
60740
|
+
disappeared: array(string()).readonly(),
|
|
60741
|
+
usbBus: _enum(["observed", "unobservable"]),
|
|
60742
|
+
decidedBy: _enum([
|
|
60743
|
+
"usb-ids",
|
|
60744
|
+
"pci",
|
|
60745
|
+
"delegate-fallback",
|
|
60746
|
+
"none"
|
|
60747
|
+
])
|
|
60748
|
+
});
|
|
60749
|
+
method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
|
|
60750
|
+
kind: "mutation",
|
|
60751
|
+
auth: "admin"
|
|
60752
|
+
});
|
|
60570
60753
|
/**
|
|
60571
60754
|
* Multi-metric electrical meter. One slice can carry any combination
|
|
60572
60755
|
* of instantaneous power (W), cumulative energy (kWh), voltage (V),
|
|
@@ -64659,60 +64842,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
64659
64842
|
auth: "admin",
|
|
64660
64843
|
access: "delete"
|
|
64661
64844
|
});
|
|
64662
|
-
/**
|
|
64663
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
64664
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
64665
|
-
* optional fan-speed selector.
|
|
64666
|
-
*
|
|
64667
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
64668
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
64669
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
64670
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
64671
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
64672
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
64673
|
-
*
|
|
64674
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
64675
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
64676
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
64677
|
-
*
|
|
64678
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
64679
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
64680
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
64681
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
64682
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
64683
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
64684
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
64685
|
-
* so the HA provider leaves all four `null`.
|
|
64686
|
-
*/
|
|
64687
|
-
var VacuumStateSchema = _enum([
|
|
64688
|
-
"idle",
|
|
64689
|
-
"cleaning",
|
|
64690
|
-
"paused",
|
|
64691
|
-
"returning",
|
|
64692
|
-
"docked",
|
|
64693
|
-
"drying",
|
|
64694
|
-
"error"
|
|
64695
|
-
]);
|
|
64696
|
-
/**
|
|
64697
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
64698
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
64699
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
64700
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
64701
|
-
* hardware has no such tank at all.
|
|
64702
|
-
*/
|
|
64703
|
-
var TankStatusSchema = object({
|
|
64704
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
64705
|
-
level: number().min(0).max(100).nullable(),
|
|
64706
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
64707
|
-
status: _enum([
|
|
64708
|
-
"ok",
|
|
64709
|
-
"low",
|
|
64710
|
-
"full"
|
|
64711
|
-
]).nullable()
|
|
64712
|
-
});
|
|
64713
64845
|
var VacuumControlStatusSchema = object({
|
|
64714
64846
|
/** Lifecycle state of the vacuum. */
|
|
64715
|
-
state:
|
|
64847
|
+
state: _enum([
|
|
64848
|
+
"idle",
|
|
64849
|
+
"cleaning",
|
|
64850
|
+
"paused",
|
|
64851
|
+
"returning",
|
|
64852
|
+
"docked",
|
|
64853
|
+
"drying",
|
|
64854
|
+
"error"
|
|
64855
|
+
]),
|
|
64716
64856
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
64717
64857
|
* reading. */
|
|
64718
64858
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -64721,14 +64861,6 @@ var VacuumControlStatusSchema = object({
|
|
|
64721
64861
|
fanSpeed: string().nullable(),
|
|
64722
64862
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
64723
64863
|
availableFanSpeeds: array(string()),
|
|
64724
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
64725
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
64726
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
64727
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
64728
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
64729
|
-
detergent: TankStatusSchema.nullable(),
|
|
64730
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
64731
|
-
dustBin: TankStatusSchema.nullable(),
|
|
64732
64864
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
64733
64865
|
progressPercent: number().min(0).max(100).nullable(),
|
|
64734
64866
|
/** Current error code (0 / null = no error). */
|
|
@@ -64790,35 +64922,14 @@ var vacuumControlCapability = {
|
|
|
64790
64922
|
*/
|
|
64791
64923
|
durability: "session",
|
|
64792
64924
|
/**
|
|
64793
|
-
* History (D850): recorded series.
|
|
64925
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
64926
|
+
* items are keyed by runtime ids and record no history.
|
|
64794
64927
|
*/
|
|
64795
|
-
history: { fields: {
|
|
64796
|
-
|
|
64797
|
-
|
|
64798
|
-
|
|
64799
|
-
|
|
64800
|
-
},
|
|
64801
|
-
"cleanWater.level": {
|
|
64802
|
-
kind: "gauge",
|
|
64803
|
-
unit: "%",
|
|
64804
|
-
deadband: 2
|
|
64805
|
-
},
|
|
64806
|
-
"dirtyWater.level": {
|
|
64807
|
-
kind: "gauge",
|
|
64808
|
-
unit: "%",
|
|
64809
|
-
deadband: 2
|
|
64810
|
-
},
|
|
64811
|
-
"detergent.level": {
|
|
64812
|
-
kind: "gauge",
|
|
64813
|
-
unit: "%",
|
|
64814
|
-
deadband: 2
|
|
64815
|
-
},
|
|
64816
|
-
"dustBin.level": {
|
|
64817
|
-
kind: "gauge",
|
|
64818
|
-
unit: "%",
|
|
64819
|
-
deadband: 2
|
|
64820
|
-
}
|
|
64821
|
-
} }
|
|
64928
|
+
history: { fields: { batteryLevel: {
|
|
64929
|
+
kind: "gauge",
|
|
64930
|
+
unit: "%",
|
|
64931
|
+
deadband: 2
|
|
64932
|
+
} } }
|
|
64822
64933
|
};
|
|
64823
64934
|
var ValveStatusSchema = object({
|
|
64824
64935
|
/** Lifecycle state of the valve. */
|
|
@@ -69212,6 +69323,12 @@ Object.freeze({
|
|
|
69212
69323
|
addonId: null,
|
|
69213
69324
|
access: "create"
|
|
69214
69325
|
},
|
|
69326
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
69327
|
+
capName: "device-history",
|
|
69328
|
+
capScope: "system",
|
|
69329
|
+
addonId: null,
|
|
69330
|
+
access: "delete"
|
|
69331
|
+
},
|
|
69215
69332
|
"deviceHistory.getDeviceEnabled": {
|
|
69216
69333
|
capName: "device-history",
|
|
69217
69334
|
capScope: "system",
|
|
@@ -69230,6 +69347,12 @@ Object.freeze({
|
|
|
69230
69347
|
addonId: null,
|
|
69231
69348
|
access: "view"
|
|
69232
69349
|
},
|
|
69350
|
+
"deviceHistory.listOrphanSeries": {
|
|
69351
|
+
capName: "device-history",
|
|
69352
|
+
capScope: "system",
|
|
69353
|
+
addonId: null,
|
|
69354
|
+
access: "view"
|
|
69355
|
+
},
|
|
69233
69356
|
"deviceHistory.listSeries": {
|
|
69234
69357
|
capName: "device-history",
|
|
69235
69358
|
capScope: "system",
|
|
@@ -72854,6 +72977,12 @@ Object.freeze({
|
|
|
72854
72977
|
addonId: null,
|
|
72855
72978
|
access: "delete"
|
|
72856
72979
|
},
|
|
72980
|
+
"pipelineOrchestrator.forgetInferenceDevice": {
|
|
72981
|
+
capName: "pipeline-orchestrator",
|
|
72982
|
+
capScope: "system",
|
|
72983
|
+
addonId: null,
|
|
72984
|
+
access: "delete"
|
|
72985
|
+
},
|
|
72857
72986
|
"pipelineOrchestrator.getAgentLoad": {
|
|
72858
72987
|
capName: "pipeline-orchestrator",
|
|
72859
72988
|
capScope: "system",
|
|
@@ -73430,6 +73559,12 @@ Object.freeze({
|
|
|
73430
73559
|
addonId: null,
|
|
73431
73560
|
access: "view"
|
|
73432
73561
|
},
|
|
73562
|
+
"platformProbe.rescanAccelerators": {
|
|
73563
|
+
capName: "platform-probe",
|
|
73564
|
+
capScope: "system",
|
|
73565
|
+
addonId: null,
|
|
73566
|
+
access: "create"
|
|
73567
|
+
},
|
|
73433
73568
|
"platformProbe.resolveHwAccel": {
|
|
73434
73569
|
capName: "platform-probe",
|
|
73435
73570
|
capScope: "system",
|
|
@@ -79235,7 +79370,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
79235
79370
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
79236
79371
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
79237
79372
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
79238
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
79373
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
79239
79374
|
([...RULE_TEXT], [...TANK]),
|
|
79240
79375
|
[...RULE_TEXT],
|
|
79241
79376
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-unifi",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.145",
|
|
4
4
|
"description": "UniFi Network controller device-provider addon for CamStack — local-controller infra switches/APs (as containers) + network-client presence. NO cameras/Protect.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|