@camstack/addon-provider-tuya 0.2.142 → 0.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 +255 -120
- package/dist/addon.mjs +255 -120
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -6251,7 +6251,7 @@ var ZodIssueCode = {
|
|
|
6251
6251
|
var ZodFirstPartyTypeKind;
|
|
6252
6252
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6253
6253
|
//#endregion
|
|
6254
|
-
//#region ../types/dist/sleep-
|
|
6254
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
6255
6255
|
/**
|
|
6256
6256
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6257
6257
|
* window to float samples (D455).
|
|
@@ -9143,7 +9143,11 @@ var ContributionSectionSchema = object({
|
|
|
9143
9143
|
literal(4)
|
|
9144
9144
|
]).optional(),
|
|
9145
9145
|
tab: string().optional(),
|
|
9146
|
-
location: _enum([
|
|
9146
|
+
location: _enum([
|
|
9147
|
+
"settings",
|
|
9148
|
+
"top-tab",
|
|
9149
|
+
"hero"
|
|
9150
|
+
]).optional(),
|
|
9147
9151
|
order: number().optional(),
|
|
9148
9152
|
fields: array(any())
|
|
9149
9153
|
});
|
|
@@ -14076,7 +14080,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
14076
14080
|
literal(4)
|
|
14077
14081
|
]).optional(),
|
|
14078
14082
|
tab: string().optional(),
|
|
14079
|
-
location: _enum([
|
|
14083
|
+
location: _enum([
|
|
14084
|
+
"settings",
|
|
14085
|
+
"top-tab",
|
|
14086
|
+
"hero"
|
|
14087
|
+
]).optional(),
|
|
14080
14088
|
order: number().optional(),
|
|
14081
14089
|
fields: array(any())
|
|
14082
14090
|
});
|
|
@@ -17956,6 +17964,52 @@ var TierStatusSchema = object({
|
|
|
17956
17964
|
countedAt: number().nullable()
|
|
17957
17965
|
});
|
|
17958
17966
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17967
|
+
/**
|
|
17968
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17969
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17970
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17971
|
+
*/
|
|
17972
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17973
|
+
/** Rows held per stored tier. */
|
|
17974
|
+
var TierRowsSchema = object({
|
|
17975
|
+
raw: number().int(),
|
|
17976
|
+
"5m": number().int(),
|
|
17977
|
+
"1h": number().int(),
|
|
17978
|
+
"1d": number().int()
|
|
17979
|
+
});
|
|
17980
|
+
var OrphanSeriesSchema = object({
|
|
17981
|
+
seriesId: number().int(),
|
|
17982
|
+
deviceId: number().int(),
|
|
17983
|
+
key: string(),
|
|
17984
|
+
scope: string(),
|
|
17985
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17986
|
+
displayName: string().nullable(),
|
|
17987
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17988
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17989
|
+
missingSince: number().nullable(),
|
|
17990
|
+
firstTs: number(),
|
|
17991
|
+
lastTs: number(),
|
|
17992
|
+
rows: TierRowsSchema
|
|
17993
|
+
});
|
|
17994
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17995
|
+
"not-found",
|
|
17996
|
+
"not-orphan",
|
|
17997
|
+
"failed"
|
|
17998
|
+
]);
|
|
17999
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
18000
|
+
seriesId: number().int(),
|
|
18001
|
+
ok: literal(true),
|
|
18002
|
+
deleted: TierRowsSchema
|
|
18003
|
+
}), object({
|
|
18004
|
+
seriesId: number().int(),
|
|
18005
|
+
ok: literal(false),
|
|
18006
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
18007
|
+
})]);
|
|
18008
|
+
var OrphanListSchema = object({
|
|
18009
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
18010
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
18011
|
+
truncated: boolean()
|
|
18012
|
+
});
|
|
17959
18013
|
var DeviceHistoryStatusSchema = object({
|
|
17960
18014
|
startedAt: number(),
|
|
17961
18015
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -18053,7 +18107,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
18053
18107
|
}), object({ enabled: boolean() }), {
|
|
18054
18108
|
kind: "mutation",
|
|
18055
18109
|
auth: "admin"
|
|
18056
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
18110
|
+
}), 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() }), {
|
|
18111
|
+
kind: "mutation",
|
|
18112
|
+
auth: "admin"
|
|
18113
|
+
});
|
|
18057
18114
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
18058
18115
|
object({ state: literal("absent") }),
|
|
18059
18116
|
object({
|
|
@@ -51024,6 +51081,19 @@ var NodeInferenceDeviceSchema = object({
|
|
|
51024
51081
|
/** Whether the node's live probe reports the device as usable right now. */
|
|
51025
51082
|
available: boolean(),
|
|
51026
51083
|
/**
|
|
51084
|
+
* Is the device on the node at all (D919)? `present` — the live probe
|
|
51085
|
+
* reported it; `absent` — the probe ANSWERED and did not report it, so only
|
|
51086
|
+
* its stored settings remain (unplugged, moved to another node): never
|
|
51087
|
+
* eligible, whatever its stored `enabled`, and forgettable with
|
|
51088
|
+
* `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
|
|
51089
|
+
* claimed (D315). Optional only for an orchestrator older than the field.
|
|
51090
|
+
*/
|
|
51091
|
+
presence: _enum([
|
|
51092
|
+
"present",
|
|
51093
|
+
"absent",
|
|
51094
|
+
"unknown"
|
|
51095
|
+
]).optional(),
|
|
51096
|
+
/**
|
|
51027
51097
|
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
51028
51098
|
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
51029
51099
|
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
@@ -51249,7 +51319,13 @@ method(object({
|
|
|
51249
51319
|
}), object({ success: literal(true) }), {
|
|
51250
51320
|
kind: "mutation",
|
|
51251
51321
|
auth: "admin"
|
|
51252
|
-
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
51322
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
51323
|
+
agentNodeId: string(),
|
|
51324
|
+
deviceKey: string()
|
|
51325
|
+
}), object({ success: literal(true) }), {
|
|
51326
|
+
kind: "mutation",
|
|
51327
|
+
auth: "admin"
|
|
51328
|
+
}), method(object({ agentNodeId: string() }), object({
|
|
51253
51329
|
success: literal(true),
|
|
51254
51330
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
51255
51331
|
effectiveModelId: string().nullable(),
|
|
@@ -55921,17 +55997,69 @@ var connectivityCapability = {
|
|
|
55921
55997
|
volatileStateFields: ["lastChangedAt"]
|
|
55922
55998
|
};
|
|
55923
55999
|
/**
|
|
55924
|
-
* Generic device-consumables capability —
|
|
55925
|
-
*
|
|
55926
|
-
* descaling cycles,
|
|
55927
|
-
*
|
|
55928
|
-
*
|
|
55929
|
-
*
|
|
56000
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
56001
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
56002
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
56003
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
56004
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
56005
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
56006
|
+
* its device tracks consumables registers it; the provider names each item
|
|
56007
|
+
* verbatim and says which `kind` it is.
|
|
56008
|
+
*
|
|
56009
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
56010
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
56011
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
55930
56012
|
*
|
|
55931
56013
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
55932
56014
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
55933
56015
|
* "No consumables reported" placeholder when `items` is empty.
|
|
55934
56016
|
*/
|
|
56017
|
+
/**
|
|
56018
|
+
* What an item IS, which decides which direction is bad:
|
|
56019
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
56020
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
56021
|
+
* salt, rinse aid); low or empty is bad.
|
|
56022
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
56023
|
+
* bad.
|
|
56024
|
+
* Absent = `wear`.
|
|
56025
|
+
*/
|
|
56026
|
+
var ConsumableKindSchema = _enum([
|
|
56027
|
+
"wear",
|
|
56028
|
+
"supply",
|
|
56029
|
+
"waste"
|
|
56030
|
+
]);
|
|
56031
|
+
/**
|
|
56032
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
56033
|
+
* of `kind`, which decides which direction is bad:
|
|
56034
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
56035
|
+
* remaining time and a reset.
|
|
56036
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
56037
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
56038
|
+
* a stepped level and "refill".
|
|
56039
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
56040
|
+
* that warns when full.
|
|
56041
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
56042
|
+
*/
|
|
56043
|
+
var ConsumableFormSchema = _enum([
|
|
56044
|
+
"part",
|
|
56045
|
+
"tank",
|
|
56046
|
+
"product",
|
|
56047
|
+
"bin"
|
|
56048
|
+
]);
|
|
56049
|
+
/** The provider's own discrete verdict on an item. */
|
|
56050
|
+
var ConsumableStatusSchema = _enum([
|
|
56051
|
+
"ok",
|
|
56052
|
+
"low",
|
|
56053
|
+
"empty",
|
|
56054
|
+
"full",
|
|
56055
|
+
"replace"
|
|
56056
|
+
]);
|
|
56057
|
+
_enum([
|
|
56058
|
+
"ok",
|
|
56059
|
+
"low",
|
|
56060
|
+
"empty",
|
|
56061
|
+
"full"
|
|
56062
|
+
]);
|
|
55935
56063
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
55936
56064
|
* each. */
|
|
55937
56065
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -55946,18 +56074,23 @@ var ConsumableRemainingSchema = object({
|
|
|
55946
56074
|
unit: ConsumableRemainingUnitSchema
|
|
55947
56075
|
});
|
|
55948
56076
|
/** A single consumable item. Either a continuous `level` (remaining
|
|
55949
|
-
* life
|
|
55950
|
-
*
|
|
55951
|
-
* mutually exclusive; a provider may
|
|
56077
|
+
* life %, or fill % for a `supply` / `waste` item) or a discrete `status`
|
|
56078
|
+
* may be known — both may be null when a provider only knows the item
|
|
56079
|
+
* exists. `level` and `status` are not mutually exclusive; a provider may
|
|
56080
|
+
* report both. */
|
|
55952
56081
|
var ConsumableItemSchema = object({
|
|
55953
56082
|
/** Stable id, e.g. 'main-brush'. */
|
|
55954
56083
|
key: string().min(1),
|
|
55955
56084
|
/** Display name. */
|
|
55956
56085
|
label: string().min(1),
|
|
55957
|
-
/** Remaining life % when known (0..100). */
|
|
56086
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
55958
56087
|
level: number().min(0).max(100).nullable(),
|
|
55959
|
-
/**
|
|
55960
|
-
status:
|
|
56088
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
56089
|
+
status: ConsumableStatusSchema.nullable(),
|
|
56090
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
56091
|
+
kind: ConsumableKindSchema.optional(),
|
|
56092
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
56093
|
+
form: ConsumableFormSchema.optional(),
|
|
55961
56094
|
/** Ms epoch of the last replace, when known. */
|
|
55962
56095
|
lastResetAt: number().nullable(),
|
|
55963
56096
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -55980,7 +56113,7 @@ var consumablesCapability = {
|
|
|
55980
56113
|
kind: "widget",
|
|
55981
56114
|
widgetId: "host/consumables-panel",
|
|
55982
56115
|
tab: "consumables",
|
|
55983
|
-
|
|
56116
|
+
placement: "hero",
|
|
55984
56117
|
label: "Consumables",
|
|
55985
56118
|
order: 5
|
|
55986
56119
|
} },
|
|
@@ -56041,9 +56174,37 @@ reset: method(object({
|
|
|
56041
56174
|
*/
|
|
56042
56175
|
durability: "restored",
|
|
56043
56176
|
/**
|
|
56044
|
-
* History (D850):
|
|
56177
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
56178
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
56179
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
56180
|
+
* their provider reports them; an item that appears later gets its series.
|
|
56045
56181
|
*/
|
|
56046
|
-
history:
|
|
56182
|
+
history: {
|
|
56183
|
+
fields: {},
|
|
56184
|
+
items: {
|
|
56185
|
+
path: "items",
|
|
56186
|
+
key: "key",
|
|
56187
|
+
label: "label",
|
|
56188
|
+
fields: {
|
|
56189
|
+
level: {
|
|
56190
|
+
kind: "gauge",
|
|
56191
|
+
unit: "%",
|
|
56192
|
+
deadband: 2,
|
|
56193
|
+
displayName: "Level"
|
|
56194
|
+
},
|
|
56195
|
+
status: {
|
|
56196
|
+
kind: "enum",
|
|
56197
|
+
displayName: "Status"
|
|
56198
|
+
},
|
|
56199
|
+
"remaining.value": {
|
|
56200
|
+
kind: "gauge",
|
|
56201
|
+
unitFrom: "remaining.unit",
|
|
56202
|
+
deadband: 1,
|
|
56203
|
+
displayName: "Remaining"
|
|
56204
|
+
}
|
|
56205
|
+
}
|
|
56206
|
+
}
|
|
56207
|
+
},
|
|
56047
56208
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
56048
56209
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
56049
56210
|
};
|
|
@@ -56458,8 +56619,9 @@ onStatusChanged: { data: object({
|
|
|
56458
56619
|
volatileStateFields: ["lastChangedAt"]
|
|
56459
56620
|
};
|
|
56460
56621
|
/**
|
|
56461
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
56462
|
-
*
|
|
56622
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
56623
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
56624
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
56463
56625
|
*
|
|
56464
56626
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
56465
56627
|
* by any integration that exposes the same program / option surface.
|
|
@@ -56507,11 +56669,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
56507
56669
|
"offline",
|
|
56508
56670
|
"description-missing"
|
|
56509
56671
|
]);
|
|
56510
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
56511
|
-
"ok",
|
|
56512
|
-
"low",
|
|
56513
|
-
"empty"
|
|
56514
|
-
]);
|
|
56515
56672
|
var DishwasherStatusSchema = object({
|
|
56516
56673
|
availability: DishwasherAvailabilitySchema,
|
|
56517
56674
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -56544,8 +56701,6 @@ var DishwasherStatusSchema = object({
|
|
|
56544
56701
|
powerOn: boolean().nullable(),
|
|
56545
56702
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
56546
56703
|
powerState: string().nullable(),
|
|
56547
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56548
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56549
56704
|
/**
|
|
56550
56705
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
56551
56706
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -59421,7 +59576,7 @@ var motionTriggerCapability = {
|
|
|
59421
59576
|
enabled: boolean()
|
|
59422
59577
|
}), _void(), {
|
|
59423
59578
|
kind: "mutation",
|
|
59424
|
-
auth: "
|
|
59579
|
+
auth: "protected"
|
|
59425
59580
|
}) },
|
|
59426
59581
|
events: { onMotionTriggerChanged: { data: object({
|
|
59427
59582
|
deviceId: number(),
|
|
@@ -60151,6 +60306,13 @@ var TopologyNodeSchema = object({
|
|
|
60151
60306
|
cpuModel: string().nullable(),
|
|
60152
60307
|
cpuCores: number(),
|
|
60153
60308
|
memoryMB: number(),
|
|
60309
|
+
/**
|
|
60310
|
+
* The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
|
|
60311
|
+
* openvino, edgetpu …) — not its devices. An installed runtime says nothing
|
|
60312
|
+
* about whether its hardware is there (a Coral delegate stays installed
|
|
60313
|
+
* after the stick leaves, D919); the live device set is
|
|
60314
|
+
* `pipelineOrchestrator.getNodeInferenceDevices`.
|
|
60315
|
+
*/
|
|
60154
60316
|
engines: array(string()).readonly(),
|
|
60155
60317
|
isHub: boolean(),
|
|
60156
60318
|
isOnline: boolean(),
|
|
@@ -61268,7 +61430,28 @@ var ResolvedInferenceConfigSchema = object({
|
|
|
61268
61430
|
format: ModelFormatSchema,
|
|
61269
61431
|
reason: string()
|
|
61270
61432
|
});
|
|
61271
|
-
|
|
61433
|
+
/**
|
|
61434
|
+
* The answer of an accelerator rescan (D919): the node's device list after
|
|
61435
|
+
* the re-probe, what changed, and the evidence that decided the Coral answer
|
|
61436
|
+
* (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
|
|
61437
|
+
* bus, the installed-delegate fallback, or nothing).
|
|
61438
|
+
*/
|
|
61439
|
+
var AcceleratorRescanSchema = object({
|
|
61440
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly(),
|
|
61441
|
+
appeared: array(string()).readonly(),
|
|
61442
|
+
disappeared: array(string()).readonly(),
|
|
61443
|
+
usbBus: _enum(["observed", "unobservable"]),
|
|
61444
|
+
decidedBy: _enum([
|
|
61445
|
+
"usb-ids",
|
|
61446
|
+
"pci",
|
|
61447
|
+
"delegate-fallback",
|
|
61448
|
+
"none"
|
|
61449
|
+
])
|
|
61450
|
+
});
|
|
61451
|
+
method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
|
|
61452
|
+
kind: "mutation",
|
|
61453
|
+
auth: "admin"
|
|
61454
|
+
});
|
|
61272
61455
|
/**
|
|
61273
61456
|
* Multi-metric electrical meter. One slice can carry any combination
|
|
61274
61457
|
* of instantaneous power (W), cumulative energy (kWh), voltage (V),
|
|
@@ -65361,60 +65544,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
65361
65544
|
auth: "admin",
|
|
65362
65545
|
access: "delete"
|
|
65363
65546
|
});
|
|
65364
|
-
/**
|
|
65365
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
65366
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
65367
|
-
* optional fan-speed selector.
|
|
65368
|
-
*
|
|
65369
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
65370
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
65371
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
65372
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
65373
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
65374
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
65375
|
-
*
|
|
65376
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
65377
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
65378
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
65379
|
-
*
|
|
65380
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
65381
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
65382
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
65383
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
65384
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
65385
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
65386
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
65387
|
-
* so the HA provider leaves all four `null`.
|
|
65388
|
-
*/
|
|
65389
|
-
var VacuumStateSchema = _enum([
|
|
65390
|
-
"idle",
|
|
65391
|
-
"cleaning",
|
|
65392
|
-
"paused",
|
|
65393
|
-
"returning",
|
|
65394
|
-
"docked",
|
|
65395
|
-
"drying",
|
|
65396
|
-
"error"
|
|
65397
|
-
]);
|
|
65398
|
-
/**
|
|
65399
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
65400
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
65401
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
65402
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
65403
|
-
* hardware has no such tank at all.
|
|
65404
|
-
*/
|
|
65405
|
-
var TankStatusSchema = object({
|
|
65406
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
65407
|
-
level: number().min(0).max(100).nullable(),
|
|
65408
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
65409
|
-
status: _enum([
|
|
65410
|
-
"ok",
|
|
65411
|
-
"low",
|
|
65412
|
-
"full"
|
|
65413
|
-
]).nullable()
|
|
65414
|
-
});
|
|
65415
65547
|
var VacuumControlStatusSchema = object({
|
|
65416
65548
|
/** Lifecycle state of the vacuum. */
|
|
65417
|
-
state:
|
|
65549
|
+
state: _enum([
|
|
65550
|
+
"idle",
|
|
65551
|
+
"cleaning",
|
|
65552
|
+
"paused",
|
|
65553
|
+
"returning",
|
|
65554
|
+
"docked",
|
|
65555
|
+
"drying",
|
|
65556
|
+
"error"
|
|
65557
|
+
]),
|
|
65418
65558
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
65419
65559
|
* reading. */
|
|
65420
65560
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -65423,14 +65563,6 @@ var VacuumControlStatusSchema = object({
|
|
|
65423
65563
|
fanSpeed: string().nullable(),
|
|
65424
65564
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
65425
65565
|
availableFanSpeeds: array(string()),
|
|
65426
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
65427
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
65428
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
65429
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
65430
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
65431
|
-
detergent: TankStatusSchema.nullable(),
|
|
65432
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
65433
|
-
dustBin: TankStatusSchema.nullable(),
|
|
65434
65566
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
65435
65567
|
progressPercent: number().min(0).max(100).nullable(),
|
|
65436
65568
|
/** Current error code (0 / null = no error). */
|
|
@@ -65492,35 +65624,14 @@ var vacuumControlCapability = {
|
|
|
65492
65624
|
*/
|
|
65493
65625
|
durability: "session",
|
|
65494
65626
|
/**
|
|
65495
|
-
* History (D850): recorded series.
|
|
65627
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
65628
|
+
* items are keyed by runtime ids and record no history.
|
|
65496
65629
|
*/
|
|
65497
|
-
history: { fields: {
|
|
65498
|
-
|
|
65499
|
-
|
|
65500
|
-
|
|
65501
|
-
|
|
65502
|
-
},
|
|
65503
|
-
"cleanWater.level": {
|
|
65504
|
-
kind: "gauge",
|
|
65505
|
-
unit: "%",
|
|
65506
|
-
deadband: 2
|
|
65507
|
-
},
|
|
65508
|
-
"dirtyWater.level": {
|
|
65509
|
-
kind: "gauge",
|
|
65510
|
-
unit: "%",
|
|
65511
|
-
deadband: 2
|
|
65512
|
-
},
|
|
65513
|
-
"detergent.level": {
|
|
65514
|
-
kind: "gauge",
|
|
65515
|
-
unit: "%",
|
|
65516
|
-
deadband: 2
|
|
65517
|
-
},
|
|
65518
|
-
"dustBin.level": {
|
|
65519
|
-
kind: "gauge",
|
|
65520
|
-
unit: "%",
|
|
65521
|
-
deadband: 2
|
|
65522
|
-
}
|
|
65523
|
-
} }
|
|
65630
|
+
history: { fields: { batteryLevel: {
|
|
65631
|
+
kind: "gauge",
|
|
65632
|
+
unit: "%",
|
|
65633
|
+
deadband: 2
|
|
65634
|
+
} } }
|
|
65524
65635
|
};
|
|
65525
65636
|
var ValveStatusSchema = object({
|
|
65526
65637
|
/** Lifecycle state of the valve. */
|
|
@@ -69914,6 +70025,12 @@ Object.freeze({
|
|
|
69914
70025
|
addonId: null,
|
|
69915
70026
|
access: "create"
|
|
69916
70027
|
},
|
|
70028
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
70029
|
+
capName: "device-history",
|
|
70030
|
+
capScope: "system",
|
|
70031
|
+
addonId: null,
|
|
70032
|
+
access: "delete"
|
|
70033
|
+
},
|
|
69917
70034
|
"deviceHistory.getDeviceEnabled": {
|
|
69918
70035
|
capName: "device-history",
|
|
69919
70036
|
capScope: "system",
|
|
@@ -69932,6 +70049,12 @@ Object.freeze({
|
|
|
69932
70049
|
addonId: null,
|
|
69933
70050
|
access: "view"
|
|
69934
70051
|
},
|
|
70052
|
+
"deviceHistory.listOrphanSeries": {
|
|
70053
|
+
capName: "device-history",
|
|
70054
|
+
capScope: "system",
|
|
70055
|
+
addonId: null,
|
|
70056
|
+
access: "view"
|
|
70057
|
+
},
|
|
69935
70058
|
"deviceHistory.listSeries": {
|
|
69936
70059
|
capName: "device-history",
|
|
69937
70060
|
capScope: "system",
|
|
@@ -73556,6 +73679,12 @@ Object.freeze({
|
|
|
73556
73679
|
addonId: null,
|
|
73557
73680
|
access: "delete"
|
|
73558
73681
|
},
|
|
73682
|
+
"pipelineOrchestrator.forgetInferenceDevice": {
|
|
73683
|
+
capName: "pipeline-orchestrator",
|
|
73684
|
+
capScope: "system",
|
|
73685
|
+
addonId: null,
|
|
73686
|
+
access: "delete"
|
|
73687
|
+
},
|
|
73559
73688
|
"pipelineOrchestrator.getAgentLoad": {
|
|
73560
73689
|
capName: "pipeline-orchestrator",
|
|
73561
73690
|
capScope: "system",
|
|
@@ -74132,6 +74261,12 @@ Object.freeze({
|
|
|
74132
74261
|
addonId: null,
|
|
74133
74262
|
access: "view"
|
|
74134
74263
|
},
|
|
74264
|
+
"platformProbe.rescanAccelerators": {
|
|
74265
|
+
capName: "platform-probe",
|
|
74266
|
+
capScope: "system",
|
|
74267
|
+
addonId: null,
|
|
74268
|
+
access: "create"
|
|
74269
|
+
},
|
|
74135
74270
|
"platformProbe.resolveHwAccel": {
|
|
74136
74271
|
capName: "platform-probe",
|
|
74137
74272
|
capScope: "system",
|
|
@@ -79937,7 +80072,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
79937
80072
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
79938
80073
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
79939
80074
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
79940
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
80075
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
79941
80076
|
([...RULE_TEXT], [...TANK]),
|
|
79942
80077
|
[...RULE_TEXT],
|
|
79943
80078
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/dist/addon.mjs
CHANGED
|
@@ -6250,7 +6250,7 @@ var ZodIssueCode = {
|
|
|
6250
6250
|
var ZodFirstPartyTypeKind;
|
|
6251
6251
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6252
6252
|
//#endregion
|
|
6253
|
-
//#region ../types/dist/sleep-
|
|
6253
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
6254
6254
|
/**
|
|
6255
6255
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6256
6256
|
* window to float samples (D455).
|
|
@@ -9142,7 +9142,11 @@ var ContributionSectionSchema = object({
|
|
|
9142
9142
|
literal(4)
|
|
9143
9143
|
]).optional(),
|
|
9144
9144
|
tab: string().optional(),
|
|
9145
|
-
location: _enum([
|
|
9145
|
+
location: _enum([
|
|
9146
|
+
"settings",
|
|
9147
|
+
"top-tab",
|
|
9148
|
+
"hero"
|
|
9149
|
+
]).optional(),
|
|
9146
9150
|
order: number().optional(),
|
|
9147
9151
|
fields: array(any())
|
|
9148
9152
|
});
|
|
@@ -14075,7 +14079,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
14075
14079
|
literal(4)
|
|
14076
14080
|
]).optional(),
|
|
14077
14081
|
tab: string().optional(),
|
|
14078
|
-
location: _enum([
|
|
14082
|
+
location: _enum([
|
|
14083
|
+
"settings",
|
|
14084
|
+
"top-tab",
|
|
14085
|
+
"hero"
|
|
14086
|
+
]).optional(),
|
|
14079
14087
|
order: number().optional(),
|
|
14080
14088
|
fields: array(any())
|
|
14081
14089
|
});
|
|
@@ -17955,6 +17963,52 @@ var TierStatusSchema = object({
|
|
|
17955
17963
|
countedAt: number().nullable()
|
|
17956
17964
|
});
|
|
17957
17965
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17966
|
+
/**
|
|
17967
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17968
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17969
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17970
|
+
*/
|
|
17971
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17972
|
+
/** Rows held per stored tier. */
|
|
17973
|
+
var TierRowsSchema = object({
|
|
17974
|
+
raw: number().int(),
|
|
17975
|
+
"5m": number().int(),
|
|
17976
|
+
"1h": number().int(),
|
|
17977
|
+
"1d": number().int()
|
|
17978
|
+
});
|
|
17979
|
+
var OrphanSeriesSchema = object({
|
|
17980
|
+
seriesId: number().int(),
|
|
17981
|
+
deviceId: number().int(),
|
|
17982
|
+
key: string(),
|
|
17983
|
+
scope: string(),
|
|
17984
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17985
|
+
displayName: string().nullable(),
|
|
17986
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17987
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17988
|
+
missingSince: number().nullable(),
|
|
17989
|
+
firstTs: number(),
|
|
17990
|
+
lastTs: number(),
|
|
17991
|
+
rows: TierRowsSchema
|
|
17992
|
+
});
|
|
17993
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17994
|
+
"not-found",
|
|
17995
|
+
"not-orphan",
|
|
17996
|
+
"failed"
|
|
17997
|
+
]);
|
|
17998
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17999
|
+
seriesId: number().int(),
|
|
18000
|
+
ok: literal(true),
|
|
18001
|
+
deleted: TierRowsSchema
|
|
18002
|
+
}), object({
|
|
18003
|
+
seriesId: number().int(),
|
|
18004
|
+
ok: literal(false),
|
|
18005
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
18006
|
+
})]);
|
|
18007
|
+
var OrphanListSchema = object({
|
|
18008
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
18009
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
18010
|
+
truncated: boolean()
|
|
18011
|
+
});
|
|
17958
18012
|
var DeviceHistoryStatusSchema = object({
|
|
17959
18013
|
startedAt: number(),
|
|
17960
18014
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -18052,7 +18106,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
18052
18106
|
}), object({ enabled: boolean() }), {
|
|
18053
18107
|
kind: "mutation",
|
|
18054
18108
|
auth: "admin"
|
|
18055
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
18109
|
+
}), 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() }), {
|
|
18110
|
+
kind: "mutation",
|
|
18111
|
+
auth: "admin"
|
|
18112
|
+
});
|
|
18056
18113
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
18057
18114
|
object({ state: literal("absent") }),
|
|
18058
18115
|
object({
|
|
@@ -51023,6 +51080,19 @@ var NodeInferenceDeviceSchema = object({
|
|
|
51023
51080
|
/** Whether the node's live probe reports the device as usable right now. */
|
|
51024
51081
|
available: boolean(),
|
|
51025
51082
|
/**
|
|
51083
|
+
* Is the device on the node at all (D919)? `present` — the live probe
|
|
51084
|
+
* reported it; `absent` — the probe ANSWERED and did not report it, so only
|
|
51085
|
+
* its stored settings remain (unplugged, moved to another node): never
|
|
51086
|
+
* eligible, whatever its stored `enabled`, and forgettable with
|
|
51087
|
+
* `forgetInferenceDevice`; `unknown` — the probe did not answer, nothing is
|
|
51088
|
+
* claimed (D315). Optional only for an orchestrator older than the field.
|
|
51089
|
+
*/
|
|
51090
|
+
presence: _enum([
|
|
51091
|
+
"present",
|
|
51092
|
+
"absent",
|
|
51093
|
+
"unknown"
|
|
51094
|
+
]).optional(),
|
|
51095
|
+
/**
|
|
51026
51096
|
* Whether this device participates in dispatch. AUTO default (spec C2):
|
|
51027
51097
|
* accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
|
|
51028
51098
|
* entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
|
|
@@ -51248,7 +51318,13 @@ method(object({
|
|
|
51248
51318
|
}), object({ success: literal(true) }), {
|
|
51249
51319
|
kind: "mutation",
|
|
51250
51320
|
auth: "admin"
|
|
51251
|
-
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
51321
|
+
}), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({
|
|
51322
|
+
agentNodeId: string(),
|
|
51323
|
+
deviceKey: string()
|
|
51324
|
+
}), object({ success: literal(true) }), {
|
|
51325
|
+
kind: "mutation",
|
|
51326
|
+
auth: "admin"
|
|
51327
|
+
}), method(object({ agentNodeId: string() }), object({
|
|
51252
51328
|
success: literal(true),
|
|
51253
51329
|
/** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
|
|
51254
51330
|
effectiveModelId: string().nullable(),
|
|
@@ -55920,17 +55996,69 @@ var connectivityCapability = {
|
|
|
55920
55996
|
volatileStateFields: ["lastChangedAt"]
|
|
55921
55997
|
};
|
|
55922
55998
|
/**
|
|
55923
|
-
* Generic device-consumables capability —
|
|
55924
|
-
*
|
|
55925
|
-
* descaling cycles,
|
|
55926
|
-
*
|
|
55927
|
-
*
|
|
55928
|
-
*
|
|
55999
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
56000
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
56001
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
56002
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
56003
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
56004
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
56005
|
+
* its device tracks consumables registers it; the provider names each item
|
|
56006
|
+
* verbatim and says which `kind` it is.
|
|
56007
|
+
*
|
|
56008
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
56009
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
56010
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
55929
56011
|
*
|
|
55930
56012
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
55931
56013
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
55932
56014
|
* "No consumables reported" placeholder when `items` is empty.
|
|
55933
56015
|
*/
|
|
56016
|
+
/**
|
|
56017
|
+
* What an item IS, which decides which direction is bad:
|
|
56018
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
56019
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
56020
|
+
* salt, rinse aid); low or empty is bad.
|
|
56021
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
56022
|
+
* bad.
|
|
56023
|
+
* Absent = `wear`.
|
|
56024
|
+
*/
|
|
56025
|
+
var ConsumableKindSchema = _enum([
|
|
56026
|
+
"wear",
|
|
56027
|
+
"supply",
|
|
56028
|
+
"waste"
|
|
56029
|
+
]);
|
|
56030
|
+
/**
|
|
56031
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
56032
|
+
* of `kind`, which decides which direction is bad:
|
|
56033
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
56034
|
+
* remaining time and a reset.
|
|
56035
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
56036
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
56037
|
+
* a stepped level and "refill".
|
|
56038
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
56039
|
+
* that warns when full.
|
|
56040
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
56041
|
+
*/
|
|
56042
|
+
var ConsumableFormSchema = _enum([
|
|
56043
|
+
"part",
|
|
56044
|
+
"tank",
|
|
56045
|
+
"product",
|
|
56046
|
+
"bin"
|
|
56047
|
+
]);
|
|
56048
|
+
/** The provider's own discrete verdict on an item. */
|
|
56049
|
+
var ConsumableStatusSchema = _enum([
|
|
56050
|
+
"ok",
|
|
56051
|
+
"low",
|
|
56052
|
+
"empty",
|
|
56053
|
+
"full",
|
|
56054
|
+
"replace"
|
|
56055
|
+
]);
|
|
56056
|
+
_enum([
|
|
56057
|
+
"ok",
|
|
56058
|
+
"low",
|
|
56059
|
+
"empty",
|
|
56060
|
+
"full"
|
|
56061
|
+
]);
|
|
55934
56062
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
55935
56063
|
* each. */
|
|
55936
56064
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -55945,18 +56073,23 @@ var ConsumableRemainingSchema = object({
|
|
|
55945
56073
|
unit: ConsumableRemainingUnitSchema
|
|
55946
56074
|
});
|
|
55947
56075
|
/** A single consumable item. Either a continuous `level` (remaining
|
|
55948
|
-
* life
|
|
55949
|
-
*
|
|
55950
|
-
* mutually exclusive; a provider may
|
|
56076
|
+
* life %, or fill % for a `supply` / `waste` item) or a discrete `status`
|
|
56077
|
+
* may be known — both may be null when a provider only knows the item
|
|
56078
|
+
* exists. `level` and `status` are not mutually exclusive; a provider may
|
|
56079
|
+
* report both. */
|
|
55951
56080
|
var ConsumableItemSchema = object({
|
|
55952
56081
|
/** Stable id, e.g. 'main-brush'. */
|
|
55953
56082
|
key: string().min(1),
|
|
55954
56083
|
/** Display name. */
|
|
55955
56084
|
label: string().min(1),
|
|
55956
|
-
/** Remaining life % when known (0..100). */
|
|
56085
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
55957
56086
|
level: number().min(0).max(100).nullable(),
|
|
55958
|
-
/**
|
|
55959
|
-
status:
|
|
56087
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
56088
|
+
status: ConsumableStatusSchema.nullable(),
|
|
56089
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
56090
|
+
kind: ConsumableKindSchema.optional(),
|
|
56091
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
56092
|
+
form: ConsumableFormSchema.optional(),
|
|
55960
56093
|
/** Ms epoch of the last replace, when known. */
|
|
55961
56094
|
lastResetAt: number().nullable(),
|
|
55962
56095
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -55979,7 +56112,7 @@ var consumablesCapability = {
|
|
|
55979
56112
|
kind: "widget",
|
|
55980
56113
|
widgetId: "host/consumables-panel",
|
|
55981
56114
|
tab: "consumables",
|
|
55982
|
-
|
|
56115
|
+
placement: "hero",
|
|
55983
56116
|
label: "Consumables",
|
|
55984
56117
|
order: 5
|
|
55985
56118
|
} },
|
|
@@ -56040,9 +56173,37 @@ reset: method(object({
|
|
|
56040
56173
|
*/
|
|
56041
56174
|
durability: "restored",
|
|
56042
56175
|
/**
|
|
56043
|
-
* History (D850):
|
|
56176
|
+
* History (D850, D917): one series per (item field, item `key`) — the item key
|
|
56177
|
+
* is the series scope, the item `label` names it. A vacuum tank's fill, a
|
|
56178
|
+
* brush's remaining life and a dishwasher's salt are each recorded the moment
|
|
56179
|
+
* their provider reports them; an item that appears later gets its series.
|
|
56044
56180
|
*/
|
|
56045
|
-
history:
|
|
56181
|
+
history: {
|
|
56182
|
+
fields: {},
|
|
56183
|
+
items: {
|
|
56184
|
+
path: "items",
|
|
56185
|
+
key: "key",
|
|
56186
|
+
label: "label",
|
|
56187
|
+
fields: {
|
|
56188
|
+
level: {
|
|
56189
|
+
kind: "gauge",
|
|
56190
|
+
unit: "%",
|
|
56191
|
+
deadband: 2,
|
|
56192
|
+
displayName: "Level"
|
|
56193
|
+
},
|
|
56194
|
+
status: {
|
|
56195
|
+
kind: "enum",
|
|
56196
|
+
displayName: "Status"
|
|
56197
|
+
},
|
|
56198
|
+
"remaining.value": {
|
|
56199
|
+
kind: "gauge",
|
|
56200
|
+
unitFrom: "remaining.unit",
|
|
56201
|
+
deadband: 1,
|
|
56202
|
+
displayName: "Remaining"
|
|
56203
|
+
}
|
|
56204
|
+
}
|
|
56205
|
+
}
|
|
56206
|
+
},
|
|
56046
56207
|
/** Clocks, not content: a re-read that changed no item costs no commit. */
|
|
56047
56208
|
volatileStateFields: ["lastChangedAt", "lastFetchedAt"]
|
|
56048
56209
|
};
|
|
@@ -56457,8 +56618,9 @@ onStatusChanged: { data: object({
|
|
|
56457
56618
|
volatileStateFields: ["lastChangedAt"]
|
|
56458
56619
|
};
|
|
56459
56620
|
/**
|
|
56460
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
56461
|
-
*
|
|
56621
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
56622
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
56623
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
56462
56624
|
*
|
|
56463
56625
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
56464
56626
|
* by any integration that exposes the same program / option surface.
|
|
@@ -56506,11 +56668,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
56506
56668
|
"offline",
|
|
56507
56669
|
"description-missing"
|
|
56508
56670
|
]);
|
|
56509
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
56510
|
-
"ok",
|
|
56511
|
-
"low",
|
|
56512
|
-
"empty"
|
|
56513
|
-
]);
|
|
56514
56671
|
var DishwasherStatusSchema = object({
|
|
56515
56672
|
availability: DishwasherAvailabilitySchema,
|
|
56516
56673
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -56543,8 +56700,6 @@ var DishwasherStatusSchema = object({
|
|
|
56543
56700
|
powerOn: boolean().nullable(),
|
|
56544
56701
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
56545
56702
|
powerState: string().nullable(),
|
|
56546
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56547
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56548
56703
|
/**
|
|
56549
56704
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
56550
56705
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -59420,7 +59575,7 @@ var motionTriggerCapability = {
|
|
|
59420
59575
|
enabled: boolean()
|
|
59421
59576
|
}), _void(), {
|
|
59422
59577
|
kind: "mutation",
|
|
59423
|
-
auth: "
|
|
59578
|
+
auth: "protected"
|
|
59424
59579
|
}) },
|
|
59425
59580
|
events: { onMotionTriggerChanged: { data: object({
|
|
59426
59581
|
deviceId: number(),
|
|
@@ -60150,6 +60305,13 @@ var TopologyNodeSchema = object({
|
|
|
60150
60305
|
cpuModel: string().nullable(),
|
|
60151
60306
|
cpuCores: number(),
|
|
60152
60307
|
memoryMB: number(),
|
|
60308
|
+
/**
|
|
60309
|
+
* The inference RUNTIMES installed on the node (`pythonRuntimes`: onnx,
|
|
60310
|
+
* openvino, edgetpu …) — not its devices. An installed runtime says nothing
|
|
60311
|
+
* about whether its hardware is there (a Coral delegate stays installed
|
|
60312
|
+
* after the stick leaves, D919); the live device set is
|
|
60313
|
+
* `pipelineOrchestrator.getNodeInferenceDevices`.
|
|
60314
|
+
*/
|
|
60153
60315
|
engines: array(string()).readonly(),
|
|
60154
60316
|
isHub: boolean(),
|
|
60155
60317
|
isOnline: boolean(),
|
|
@@ -61267,7 +61429,28 @@ var ResolvedInferenceConfigSchema = object({
|
|
|
61267
61429
|
format: ModelFormatSchema,
|
|
61268
61430
|
reason: string()
|
|
61269
61431
|
});
|
|
61270
|
-
|
|
61432
|
+
/**
|
|
61433
|
+
* The answer of an accelerator rescan (D919): the node's device list after
|
|
61434
|
+
* the re-probe, what changed, and the evidence that decided the Coral answer
|
|
61435
|
+
* (`usbBus` — could the USB bus be read at all; `decidedBy` — USB ids, the PCI
|
|
61436
|
+
* bus, the installed-delegate fallback, or nothing).
|
|
61437
|
+
*/
|
|
61438
|
+
var AcceleratorRescanSchema = object({
|
|
61439
|
+
devices: array(InferenceDeviceDescriptorSchema).readonly(),
|
|
61440
|
+
appeared: array(string()).readonly(),
|
|
61441
|
+
disappeared: array(string()).readonly(),
|
|
61442
|
+
usbBus: _enum(["observed", "unobservable"]),
|
|
61443
|
+
decidedBy: _enum([
|
|
61444
|
+
"usb-ids",
|
|
61445
|
+
"pci",
|
|
61446
|
+
"delegate-fallback",
|
|
61447
|
+
"none"
|
|
61448
|
+
])
|
|
61449
|
+
});
|
|
61450
|
+
method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema), method(object({ requirements: array(ModelRequirementSchema).readonly() }), ResolvedInferenceConfigSchema), method(object({ prefer: HwAccelBackendInputSchema }), HwAccelResolutionSchema), method(_void(), AcceleratorRescanSchema, {
|
|
61451
|
+
kind: "mutation",
|
|
61452
|
+
auth: "admin"
|
|
61453
|
+
});
|
|
61271
61454
|
/**
|
|
61272
61455
|
* Multi-metric electrical meter. One slice can carry any combination
|
|
61273
61456
|
* of instantaneous power (W), cumulative energy (kWh), voltage (V),
|
|
@@ -65360,60 +65543,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
65360
65543
|
auth: "admin",
|
|
65361
65544
|
access: "delete"
|
|
65362
65545
|
});
|
|
65363
|
-
/**
|
|
65364
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
65365
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
65366
|
-
* optional fan-speed selector.
|
|
65367
|
-
*
|
|
65368
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
65369
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
65370
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
65371
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
65372
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
65373
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
65374
|
-
*
|
|
65375
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
65376
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
65377
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
65378
|
-
*
|
|
65379
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
65380
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
65381
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
65382
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
65383
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
65384
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
65385
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
65386
|
-
* so the HA provider leaves all four `null`.
|
|
65387
|
-
*/
|
|
65388
|
-
var VacuumStateSchema = _enum([
|
|
65389
|
-
"idle",
|
|
65390
|
-
"cleaning",
|
|
65391
|
-
"paused",
|
|
65392
|
-
"returning",
|
|
65393
|
-
"docked",
|
|
65394
|
-
"drying",
|
|
65395
|
-
"error"
|
|
65396
|
-
]);
|
|
65397
|
-
/**
|
|
65398
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
65399
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
65400
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
65401
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
65402
|
-
* hardware has no such tank at all.
|
|
65403
|
-
*/
|
|
65404
|
-
var TankStatusSchema = object({
|
|
65405
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
65406
|
-
level: number().min(0).max(100).nullable(),
|
|
65407
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
65408
|
-
status: _enum([
|
|
65409
|
-
"ok",
|
|
65410
|
-
"low",
|
|
65411
|
-
"full"
|
|
65412
|
-
]).nullable()
|
|
65413
|
-
});
|
|
65414
65546
|
var VacuumControlStatusSchema = object({
|
|
65415
65547
|
/** Lifecycle state of the vacuum. */
|
|
65416
|
-
state:
|
|
65548
|
+
state: _enum([
|
|
65549
|
+
"idle",
|
|
65550
|
+
"cleaning",
|
|
65551
|
+
"paused",
|
|
65552
|
+
"returning",
|
|
65553
|
+
"docked",
|
|
65554
|
+
"drying",
|
|
65555
|
+
"error"
|
|
65556
|
+
]),
|
|
65417
65557
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
65418
65558
|
* reading. */
|
|
65419
65559
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -65422,14 +65562,6 @@ var VacuumControlStatusSchema = object({
|
|
|
65422
65562
|
fanSpeed: string().nullable(),
|
|
65423
65563
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
65424
65564
|
availableFanSpeeds: array(string()),
|
|
65425
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
65426
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
65427
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
65428
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
65429
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
65430
|
-
detergent: TankStatusSchema.nullable(),
|
|
65431
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
65432
|
-
dustBin: TankStatusSchema.nullable(),
|
|
65433
65565
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
65434
65566
|
progressPercent: number().min(0).max(100).nullable(),
|
|
65435
65567
|
/** Current error code (0 / null = no error). */
|
|
@@ -65491,35 +65623,14 @@ var vacuumControlCapability = {
|
|
|
65491
65623
|
*/
|
|
65492
65624
|
durability: "session",
|
|
65493
65625
|
/**
|
|
65494
|
-
* History (D850): recorded series.
|
|
65626
|
+
* History (D850): recorded series. The tanks moved to `consumables` (D915), whose
|
|
65627
|
+
* items are keyed by runtime ids and record no history.
|
|
65495
65628
|
*/
|
|
65496
|
-
history: { fields: {
|
|
65497
|
-
|
|
65498
|
-
|
|
65499
|
-
|
|
65500
|
-
|
|
65501
|
-
},
|
|
65502
|
-
"cleanWater.level": {
|
|
65503
|
-
kind: "gauge",
|
|
65504
|
-
unit: "%",
|
|
65505
|
-
deadband: 2
|
|
65506
|
-
},
|
|
65507
|
-
"dirtyWater.level": {
|
|
65508
|
-
kind: "gauge",
|
|
65509
|
-
unit: "%",
|
|
65510
|
-
deadband: 2
|
|
65511
|
-
},
|
|
65512
|
-
"detergent.level": {
|
|
65513
|
-
kind: "gauge",
|
|
65514
|
-
unit: "%",
|
|
65515
|
-
deadband: 2
|
|
65516
|
-
},
|
|
65517
|
-
"dustBin.level": {
|
|
65518
|
-
kind: "gauge",
|
|
65519
|
-
unit: "%",
|
|
65520
|
-
deadband: 2
|
|
65521
|
-
}
|
|
65522
|
-
} }
|
|
65629
|
+
history: { fields: { batteryLevel: {
|
|
65630
|
+
kind: "gauge",
|
|
65631
|
+
unit: "%",
|
|
65632
|
+
deadband: 2
|
|
65633
|
+
} } }
|
|
65523
65634
|
};
|
|
65524
65635
|
var ValveStatusSchema = object({
|
|
65525
65636
|
/** Lifecycle state of the valve. */
|
|
@@ -69913,6 +70024,12 @@ Object.freeze({
|
|
|
69913
70024
|
addonId: null,
|
|
69914
70025
|
access: "create"
|
|
69915
70026
|
},
|
|
70027
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
70028
|
+
capName: "device-history",
|
|
70029
|
+
capScope: "system",
|
|
70030
|
+
addonId: null,
|
|
70031
|
+
access: "delete"
|
|
70032
|
+
},
|
|
69916
70033
|
"deviceHistory.getDeviceEnabled": {
|
|
69917
70034
|
capName: "device-history",
|
|
69918
70035
|
capScope: "system",
|
|
@@ -69931,6 +70048,12 @@ Object.freeze({
|
|
|
69931
70048
|
addonId: null,
|
|
69932
70049
|
access: "view"
|
|
69933
70050
|
},
|
|
70051
|
+
"deviceHistory.listOrphanSeries": {
|
|
70052
|
+
capName: "device-history",
|
|
70053
|
+
capScope: "system",
|
|
70054
|
+
addonId: null,
|
|
70055
|
+
access: "view"
|
|
70056
|
+
},
|
|
69934
70057
|
"deviceHistory.listSeries": {
|
|
69935
70058
|
capName: "device-history",
|
|
69936
70059
|
capScope: "system",
|
|
@@ -73555,6 +73678,12 @@ Object.freeze({
|
|
|
73555
73678
|
addonId: null,
|
|
73556
73679
|
access: "delete"
|
|
73557
73680
|
},
|
|
73681
|
+
"pipelineOrchestrator.forgetInferenceDevice": {
|
|
73682
|
+
capName: "pipeline-orchestrator",
|
|
73683
|
+
capScope: "system",
|
|
73684
|
+
addonId: null,
|
|
73685
|
+
access: "delete"
|
|
73686
|
+
},
|
|
73558
73687
|
"pipelineOrchestrator.getAgentLoad": {
|
|
73559
73688
|
capName: "pipeline-orchestrator",
|
|
73560
73689
|
capScope: "system",
|
|
@@ -74131,6 +74260,12 @@ Object.freeze({
|
|
|
74131
74260
|
addonId: null,
|
|
74132
74261
|
access: "view"
|
|
74133
74262
|
},
|
|
74263
|
+
"platformProbe.rescanAccelerators": {
|
|
74264
|
+
capName: "platform-probe",
|
|
74265
|
+
capScope: "system",
|
|
74266
|
+
addonId: null,
|
|
74267
|
+
access: "create"
|
|
74268
|
+
},
|
|
74134
74269
|
"platformProbe.resolveHwAccel": {
|
|
74135
74270
|
capName: "platform-probe",
|
|
74136
74271
|
capScope: "system",
|
|
@@ -79936,7 +80071,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
79936
80071
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
79937
80072
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
79938
80073
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
79939
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
80074
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
79940
80075
|
([...RULE_TEXT], [...TANK]),
|
|
79941
80076
|
[...RULE_TEXT],
|
|
79942
80077
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-tuya",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.144",
|
|
4
4
|
"description": "Tuya / Smart Life device-provider addon for CamStack — account-onboarded (Tuya IoT cloud fetch of device localKeys) + LOCAL DP control via the @apocaliss92/nodetuya encrypted-LAN client, exposing switch / water-heater-family kettle entities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|