@camstack/addon-provider-tuya 0.2.126 → 0.2.128
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 +341 -37
- package/dist/addon.mjs +341 -37
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -819,7 +819,7 @@ async function discoverDevices(options = {}, binder = createDgramBinder()) {
|
|
|
819
819
|
return [...byId.values()];
|
|
820
820
|
}
|
|
821
821
|
//#endregion
|
|
822
|
-
//#region ../types/dist/event-category-
|
|
822
|
+
//#region ../types/dist/event-category-DOl51-Ij.mjs
|
|
823
823
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
824
824
|
EventCategory["SystemBoot"] = "system.boot";
|
|
825
825
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -898,9 +898,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
898
898
|
/**
|
|
899
899
|
* The node's one-shot runner boot check (D877): planned runners against the
|
|
900
900
|
* process service, `degraded` when any is failed, refused or missing. The
|
|
901
|
-
* alert centre turns it into one
|
|
901
|
+
* alert centre turns it into one critical alert.
|
|
902
902
|
*/
|
|
903
903
|
EventCategory["SystemRunnerCheck"] = "system.runner-check";
|
|
904
|
+
/**
|
|
905
|
+
* An alert EPISODE opened or closed, emitted by the alert centre for alerts
|
|
906
|
+
* of severity `critical` or `error` (`AlertEpisodePayload`). The alert
|
|
907
|
+
* centre sends no notification of its own: Notification Center turns this
|
|
908
|
+
* into the `alert-critical` / `alert-error` / `alert-critical-resolved`
|
|
909
|
+
* system-event kinds, and reconciles from the alerts store because a bus
|
|
910
|
+
* event may be dropped (D8, D11).
|
|
911
|
+
*/
|
|
912
|
+
EventCategory["AlertEpisode"] = "alert.episode";
|
|
904
913
|
EventCategory["AddonError"] = "addon.error";
|
|
905
914
|
EventCategory["AddonPageReady"] = "addon.page-ready";
|
|
906
915
|
EventCategory["AddonWidgetReady"] = "addon.widget-ready";
|
|
@@ -6225,7 +6234,7 @@ var ZodIssueCode = {
|
|
|
6225
6234
|
var ZodFirstPartyTypeKind;
|
|
6226
6235
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6227
6236
|
//#endregion
|
|
6228
|
-
//#region ../types/dist/sleep-
|
|
6237
|
+
//#region ../types/dist/sleep-BxjU_fJM.mjs
|
|
6229
6238
|
/**
|
|
6230
6239
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6231
6240
|
* window to float samples (D455).
|
|
@@ -13988,7 +13997,14 @@ var AlertSeveritySchema = _enum([
|
|
|
13988
13997
|
]);
|
|
13989
13998
|
var AlertActionSchema = object({
|
|
13990
13999
|
label: string(),
|
|
13991
|
-
href: string().optional()
|
|
14000
|
+
href: string().optional(),
|
|
14001
|
+
/**
|
|
14002
|
+
* How `href` is followed. Absent / `app`: an admin-ui route (client-side).
|
|
14003
|
+
* `server`: a route the HUB serves (an addon HTTP route such as an OAuth
|
|
14004
|
+
* start) — the browser must leave the SPA with a full navigation, because
|
|
14005
|
+
* the SPA has no such route and would bounce to the home page.
|
|
14006
|
+
*/
|
|
14007
|
+
navigation: _enum(["app", "server"]).optional()
|
|
13992
14008
|
});
|
|
13993
14009
|
var AlertStatusSchema = _enum([
|
|
13994
14010
|
"active",
|
|
@@ -18369,7 +18385,11 @@ var deviceDiscoveryCapability = {
|
|
|
18369
18385
|
};
|
|
18370
18386
|
/**
|
|
18371
18387
|
* `device-adoption` — generic discovery + adoption surface,
|
|
18372
|
-
* system-scoped
|
|
18388
|
+
* system-scoped collection (one provider per integration addon), routed
|
|
18389
|
+
* by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
|
|
18390
|
+
* pin model as `connection-test`. The admin UI keeps using
|
|
18391
|
+
* `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
|
|
18392
|
+
* successor to `ha-discovery`:
|
|
18373
18393
|
* keyed by `integrationId` (the addon resolves integrationId → broker
|
|
18374
18394
|
* internally) rather than a connection-specific `brokerId`, and it
|
|
18375
18395
|
* REUSES the shared `DiscoveredChildDevice` candidate type from
|
|
@@ -18534,7 +18554,7 @@ var ResyncResultSchema = object({
|
|
|
18534
18554
|
var deviceAdoptionCapability = {
|
|
18535
18555
|
name: "device-adoption",
|
|
18536
18556
|
scope: "system",
|
|
18537
|
-
mode: "
|
|
18557
|
+
mode: "collection",
|
|
18538
18558
|
status: {
|
|
18539
18559
|
schema: AdoptionStatusSchema,
|
|
18540
18560
|
kind: "poll"
|
|
@@ -42717,6 +42737,9 @@ var NcSystemEventKindSchema = _enum([
|
|
|
42717
42737
|
"server-updated",
|
|
42718
42738
|
"export-completed",
|
|
42719
42739
|
"backup-completed",
|
|
42740
|
+
"alert-critical",
|
|
42741
|
+
"alert-error",
|
|
42742
|
+
"alert-critical-resolved",
|
|
42720
42743
|
"camera-online",
|
|
42721
42744
|
"camera-offline",
|
|
42722
42745
|
"camera-disabled",
|
|
@@ -51793,7 +51816,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
51793
51816
|
}), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
51794
51817
|
kind: "mutation",
|
|
51795
51818
|
auth: "admin"
|
|
51796
|
-
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({
|
|
51819
|
+
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
|
|
51820
|
+
clear: boolean(),
|
|
51821
|
+
repointLocationId: string().optional()
|
|
51822
|
+
}), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
51797
51823
|
kind: "mutation",
|
|
51798
51824
|
auth: "admin"
|
|
51799
51825
|
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
@@ -56057,6 +56083,11 @@ onStatusChanged: { data: object({
|
|
|
56057
56083
|
*
|
|
56058
56084
|
* `kind: 'poll'` — cloud REST APIs typically have no push channel; the
|
|
56059
56085
|
* provider refreshes the slice on an interval and eagerly after commands.
|
|
56086
|
+
*
|
|
56087
|
+
* UNKNOWN IS NOT OFF. Every field the appliance reports separately is
|
|
56088
|
+
* nullable: `null` means "not known right now" (the appliance has not said,
|
|
56089
|
+
* the link is down, or the description does not carry it) and is never
|
|
56090
|
+
* rendered or exported as `false` / `0`. `availability` says why.
|
|
56060
56091
|
*/
|
|
56061
56092
|
var DishwasherStateSchema = _enum([
|
|
56062
56093
|
"idle",
|
|
@@ -56066,35 +56097,155 @@ var DishwasherStateSchema = _enum([
|
|
|
56066
56097
|
"error",
|
|
56067
56098
|
"unavailable"
|
|
56068
56099
|
]);
|
|
56100
|
+
/**
|
|
56101
|
+
* The appliance's own operation state, uncollapsed. `state` above is the coarse
|
|
56102
|
+
* view for compact surfaces; this is what the appliance said.
|
|
56103
|
+
*/
|
|
56104
|
+
var DishwasherOperationStateSchema = _enum([
|
|
56105
|
+
"Inactive",
|
|
56106
|
+
"Ready",
|
|
56107
|
+
"DelayedStart",
|
|
56108
|
+
"Run",
|
|
56109
|
+
"Pause",
|
|
56110
|
+
"ActionRequired",
|
|
56111
|
+
"Finished",
|
|
56112
|
+
"Error",
|
|
56113
|
+
"Aborting"
|
|
56114
|
+
]);
|
|
56115
|
+
/**
|
|
56116
|
+
* Why fields may be `null`:
|
|
56117
|
+
* - `available` — the link is up and the description is loaded;
|
|
56118
|
+
* - `offline` — the local link is down (values are unknown, not last-known);
|
|
56119
|
+
* - `description-missing` — the link is up but the appliance's description could not
|
|
56120
|
+
* be loaded, so its values cannot be decoded.
|
|
56121
|
+
*/
|
|
56122
|
+
var DishwasherAvailabilitySchema = _enum([
|
|
56123
|
+
"available",
|
|
56124
|
+
"offline",
|
|
56125
|
+
"description-missing"
|
|
56126
|
+
]);
|
|
56069
56127
|
var DishwasherConsumableLevelSchema = _enum([
|
|
56070
56128
|
"ok",
|
|
56071
56129
|
"low",
|
|
56072
56130
|
"empty"
|
|
56073
56131
|
]);
|
|
56074
56132
|
var DishwasherStatusSchema = object({
|
|
56133
|
+
availability: DishwasherAvailabilitySchema,
|
|
56134
|
+
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
56075
56135
|
state: DishwasherStateSchema,
|
|
56076
|
-
/**
|
|
56136
|
+
/** The appliance's operation state as reported; null when not known. */
|
|
56137
|
+
operationState: DishwasherOperationStateSchema.nullable(),
|
|
56138
|
+
/** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
|
|
56077
56139
|
program: string().nullable(),
|
|
56078
|
-
/**
|
|
56140
|
+
/** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
|
|
56141
|
+
selectedProgram: string().nullable(),
|
|
56142
|
+
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
56079
56143
|
availablePrograms: array(string()),
|
|
56080
|
-
/**
|
|
56081
|
-
|
|
56144
|
+
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
56145
|
+
remainingSeconds: number().int().nonnegative().nullable(),
|
|
56146
|
+
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
56147
|
+
delayedStartSeconds: number().int().nonnegative().nullable(),
|
|
56082
56148
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
56083
56149
|
progressPercent: number().min(0).max(100).nullable(),
|
|
56084
|
-
/** True when the door is reported open. */
|
|
56085
|
-
doorOpen: boolean(),
|
|
56086
|
-
/** True when
|
|
56087
|
-
|
|
56088
|
-
/**
|
|
56089
|
-
|
|
56150
|
+
/** True when the door is reported open; null when the door state is not known. */
|
|
56151
|
+
doorOpen: boolean().nullable(),
|
|
56152
|
+
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
56153
|
+
doorLocked: boolean().nullable(),
|
|
56154
|
+
/** True when remote start is allowed (door closed, power on, etc.); null when not known. */
|
|
56155
|
+
remoteStartAllowed: boolean().nullable(),
|
|
56156
|
+
/** True when the appliance accepts remote control now; null when not known. */
|
|
56157
|
+
remoteControlActive: boolean().nullable(),
|
|
56158
|
+
/** True while somebody operates the appliance at its panel; null when not reported. */
|
|
56159
|
+
localControlActive: boolean().nullable(),
|
|
56160
|
+
/** Main power / switched-on state; null when not known. */
|
|
56161
|
+
powerOn: boolean().nullable(),
|
|
56162
|
+
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
56163
|
+
powerState: string().nullable(),
|
|
56090
56164
|
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56091
56165
|
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56092
|
-
|
|
56093
|
-
|
|
56166
|
+
/** Option states: null when the appliance does not expose the option or has not said. */
|
|
56167
|
+
halfLoad: boolean().nullable(),
|
|
56168
|
+
hygienePlus: boolean().nullable(),
|
|
56169
|
+
/** Extra dry option when the appliance exposes it. */
|
|
56170
|
+
extraDry: boolean().nullable(),
|
|
56171
|
+
/** Intensive zone (lower basket) when the appliance exposes it. */
|
|
56172
|
+
intensiveZone: boolean().nullable(),
|
|
56173
|
+
/** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
|
|
56174
|
+
varioSpeedPlus: boolean().nullable(),
|
|
56175
|
+
/** Child lock (controls disabled on the appliance); null when not known. */
|
|
56176
|
+
childLock: boolean().nullable(),
|
|
56177
|
+
/** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
|
|
56178
|
+
activeEvents: array(string()),
|
|
56179
|
+
/** Numeric error code when the appliance reports one; null otherwise. */
|
|
56094
56180
|
errorCode: number().nullable(),
|
|
56181
|
+
/** Name of the raised alert-level event while the appliance is in error; null otherwise. */
|
|
56095
56182
|
errorLabel: string().nullable(),
|
|
56183
|
+
/** Ms epoch of the last value received from the appliance; 0 = never. */
|
|
56096
56184
|
lastFetchedAt: number()
|
|
56097
56185
|
});
|
|
56186
|
+
var DeviceIdSchema = number().int().nonnegative();
|
|
56187
|
+
/** A value a program option or setting can take. */
|
|
56188
|
+
var DishwasherValueSchema = union([
|
|
56189
|
+
boolean(),
|
|
56190
|
+
string(),
|
|
56191
|
+
number()
|
|
56192
|
+
]);
|
|
56193
|
+
var DishwasherAccessSchema = _enum([
|
|
56194
|
+
"none",
|
|
56195
|
+
"read",
|
|
56196
|
+
"readWrite",
|
|
56197
|
+
"writeOnly",
|
|
56198
|
+
"readStatic"
|
|
56199
|
+
]);
|
|
56200
|
+
/**
|
|
56201
|
+
* One option or setting the appliance declares, with the constraints its description
|
|
56202
|
+
* gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
|
|
56203
|
+
*/
|
|
56204
|
+
var DishwasherOptionDescriptorSchema = object({
|
|
56205
|
+
/** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
|
|
56206
|
+
key: string(),
|
|
56207
|
+
/** Last segment of the key, for display. */
|
|
56208
|
+
name: string(),
|
|
56209
|
+
type: _enum([
|
|
56210
|
+
"boolean",
|
|
56211
|
+
"number",
|
|
56212
|
+
"enum",
|
|
56213
|
+
"string"
|
|
56214
|
+
]),
|
|
56215
|
+
access: DishwasherAccessSchema,
|
|
56216
|
+
/** The appliance reports this entity as currently available. */
|
|
56217
|
+
available: boolean(),
|
|
56218
|
+
/** Unit the description declares for a number; null when it declares none. */
|
|
56219
|
+
unit: string().nullable(),
|
|
56220
|
+
min: number().nullable(),
|
|
56221
|
+
max: number().nullable(),
|
|
56222
|
+
step: number().nullable(),
|
|
56223
|
+
/** Allowed members of an enum; null for other types. */
|
|
56224
|
+
enumValues: array(string()).nullable(),
|
|
56225
|
+
defaultValue: DishwasherValueSchema.nullable()
|
|
56226
|
+
});
|
|
56227
|
+
var DishwasherProgramSchema = object({
|
|
56228
|
+
/** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
|
|
56229
|
+
key: string(),
|
|
56230
|
+
name: string(),
|
|
56231
|
+
/** The appliance currently offers this program. */
|
|
56232
|
+
available: boolean(),
|
|
56233
|
+
/** The options this program lists, with the program-level access / availability / default. */
|
|
56234
|
+
options: array(DishwasherOptionDescriptorSchema)
|
|
56235
|
+
});
|
|
56236
|
+
var DishwasherOptionsSchema = object({
|
|
56237
|
+
availability: DishwasherAvailabilitySchema,
|
|
56238
|
+
/** What the appliance can be told to do, from the commands its description declares. */
|
|
56239
|
+
supportsStart: boolean(),
|
|
56240
|
+
supportsPause: boolean(),
|
|
56241
|
+
supportsResume: boolean(),
|
|
56242
|
+
supportsStop: boolean(),
|
|
56243
|
+
supportsPower: boolean(),
|
|
56244
|
+
/** Every program the description lists, with its options. */
|
|
56245
|
+
programs: array(DishwasherProgramSchema),
|
|
56246
|
+
/** Every option and setting entity the description lists (programs reference these by key). */
|
|
56247
|
+
options: array(DishwasherOptionDescriptorSchema)
|
|
56248
|
+
});
|
|
56098
56249
|
var dishwasherCapability = {
|
|
56099
56250
|
name: "dishwasher",
|
|
56100
56251
|
scope: "device",
|
|
@@ -56102,58 +56253,102 @@ var dishwasherCapability = {
|
|
|
56102
56253
|
mode: "singleton",
|
|
56103
56254
|
deviceTypes: [DeviceType.Dishwasher],
|
|
56104
56255
|
methods: {
|
|
56105
|
-
|
|
56256
|
+
/**
|
|
56257
|
+
* Start a program. Without `program` the selected one starts. `options` are
|
|
56258
|
+
* option feature keys; each is checked against the program's constraints.
|
|
56259
|
+
*/
|
|
56260
|
+
start: method(object({
|
|
56261
|
+
deviceId: DeviceIdSchema,
|
|
56262
|
+
program: string().min(1).optional(),
|
|
56263
|
+
options: record(string(), DishwasherValueSchema).optional()
|
|
56264
|
+
}), _void(), {
|
|
56106
56265
|
kind: "mutation",
|
|
56107
56266
|
auth: "protected"
|
|
56108
56267
|
}),
|
|
56109
|
-
pause: method(object({ deviceId:
|
|
56268
|
+
pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
56110
56269
|
kind: "mutation",
|
|
56111
56270
|
auth: "protected"
|
|
56112
56271
|
}),
|
|
56113
|
-
|
|
56272
|
+
resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
56114
56273
|
kind: "mutation",
|
|
56115
56274
|
auth: "protected"
|
|
56116
56275
|
}),
|
|
56276
|
+
stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
56277
|
+
kind: "mutation",
|
|
56278
|
+
auth: "protected"
|
|
56279
|
+
}),
|
|
56280
|
+
/** Select (not start) a program; refused when the appliance does not offer it. */
|
|
56117
56281
|
setProgram: method(object({
|
|
56118
|
-
deviceId:
|
|
56282
|
+
deviceId: DeviceIdSchema,
|
|
56119
56283
|
program: string().min(1)
|
|
56120
56284
|
}), _void(), {
|
|
56121
56285
|
kind: "mutation",
|
|
56122
56286
|
auth: "protected"
|
|
56123
56287
|
}),
|
|
56124
56288
|
setPower: method(object({
|
|
56125
|
-
deviceId:
|
|
56289
|
+
deviceId: DeviceIdSchema,
|
|
56126
56290
|
on: boolean()
|
|
56127
56291
|
}), _void(), {
|
|
56128
56292
|
kind: "mutation",
|
|
56129
56293
|
auth: "protected"
|
|
56130
56294
|
}),
|
|
56131
56295
|
setHalfLoad: method(object({
|
|
56132
|
-
deviceId:
|
|
56296
|
+
deviceId: DeviceIdSchema,
|
|
56133
56297
|
on: boolean()
|
|
56134
56298
|
}), _void(), {
|
|
56135
56299
|
kind: "mutation",
|
|
56136
56300
|
auth: "protected"
|
|
56137
56301
|
}),
|
|
56138
56302
|
setHygienePlus: method(object({
|
|
56139
|
-
deviceId:
|
|
56303
|
+
deviceId: DeviceIdSchema,
|
|
56140
56304
|
on: boolean()
|
|
56141
56305
|
}), _void(), {
|
|
56142
56306
|
kind: "mutation",
|
|
56143
56307
|
auth: "protected"
|
|
56144
56308
|
}),
|
|
56309
|
+
setExtraDry: method(object({
|
|
56310
|
+
deviceId: DeviceIdSchema,
|
|
56311
|
+
on: boolean()
|
|
56312
|
+
}), _void(), {
|
|
56313
|
+
kind: "mutation",
|
|
56314
|
+
auth: "protected"
|
|
56315
|
+
}),
|
|
56316
|
+
setIntensiveZone: method(object({
|
|
56317
|
+
deviceId: DeviceIdSchema,
|
|
56318
|
+
on: boolean()
|
|
56319
|
+
}), _void(), {
|
|
56320
|
+
kind: "mutation",
|
|
56321
|
+
auth: "protected"
|
|
56322
|
+
}),
|
|
56323
|
+
setVarioSpeedPlus: method(object({
|
|
56324
|
+
deviceId: DeviceIdSchema,
|
|
56325
|
+
on: boolean()
|
|
56326
|
+
}), _void(), {
|
|
56327
|
+
kind: "mutation",
|
|
56328
|
+
auth: "protected"
|
|
56329
|
+
}),
|
|
56330
|
+
setChildLock: method(object({
|
|
56331
|
+
deviceId: DeviceIdSchema,
|
|
56332
|
+
on: boolean()
|
|
56333
|
+
}), _void(), {
|
|
56334
|
+
kind: "mutation",
|
|
56335
|
+
auth: "protected"
|
|
56336
|
+
}),
|
|
56337
|
+
/**
|
|
56338
|
+
* Write any option or setting by feature key. Refused when the description does
|
|
56339
|
+
* not list it, it is not writable or not available now, or the value is outside
|
|
56340
|
+
* its declared range / members.
|
|
56341
|
+
*/
|
|
56145
56342
|
setOption: method(object({
|
|
56146
|
-
deviceId:
|
|
56343
|
+
deviceId: DeviceIdSchema,
|
|
56147
56344
|
key: string().min(1),
|
|
56148
|
-
value:
|
|
56149
|
-
boolean(),
|
|
56150
|
-
string(),
|
|
56151
|
-
number()
|
|
56152
|
-
])
|
|
56345
|
+
value: DishwasherValueSchema
|
|
56153
56346
|
}), _void(), {
|
|
56154
56347
|
kind: "mutation",
|
|
56155
56348
|
auth: "protected"
|
|
56156
|
-
})
|
|
56349
|
+
}),
|
|
56350
|
+
/** What this appliance can do, from its own description — the UI is derived from it. */
|
|
56351
|
+
getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
|
|
56157
56352
|
},
|
|
56158
56353
|
status: {
|
|
56159
56354
|
schema: DishwasherStatusSchema,
|
|
@@ -70102,6 +70297,12 @@ Object.freeze({
|
|
|
70102
70297
|
addonId: null,
|
|
70103
70298
|
access: "view"
|
|
70104
70299
|
},
|
|
70300
|
+
"dishwasher.getOptions": {
|
|
70301
|
+
capName: "dishwasher",
|
|
70302
|
+
capScope: "device",
|
|
70303
|
+
addonId: null,
|
|
70304
|
+
access: "view"
|
|
70305
|
+
},
|
|
70105
70306
|
"dishwasher.getStatus": {
|
|
70106
70307
|
capName: "dishwasher",
|
|
70107
70308
|
capScope: "device",
|
|
@@ -70114,6 +70315,24 @@ Object.freeze({
|
|
|
70114
70315
|
addonId: null,
|
|
70115
70316
|
access: "create"
|
|
70116
70317
|
},
|
|
70318
|
+
"dishwasher.resume": {
|
|
70319
|
+
capName: "dishwasher",
|
|
70320
|
+
capScope: "device",
|
|
70321
|
+
addonId: null,
|
|
70322
|
+
access: "create"
|
|
70323
|
+
},
|
|
70324
|
+
"dishwasher.setChildLock": {
|
|
70325
|
+
capName: "dishwasher",
|
|
70326
|
+
capScope: "device",
|
|
70327
|
+
addonId: null,
|
|
70328
|
+
access: "create"
|
|
70329
|
+
},
|
|
70330
|
+
"dishwasher.setExtraDry": {
|
|
70331
|
+
capName: "dishwasher",
|
|
70332
|
+
capScope: "device",
|
|
70333
|
+
addonId: null,
|
|
70334
|
+
access: "create"
|
|
70335
|
+
},
|
|
70117
70336
|
"dishwasher.setHalfLoad": {
|
|
70118
70337
|
capName: "dishwasher",
|
|
70119
70338
|
capScope: "device",
|
|
@@ -70126,6 +70345,12 @@ Object.freeze({
|
|
|
70126
70345
|
addonId: null,
|
|
70127
70346
|
access: "create"
|
|
70128
70347
|
},
|
|
70348
|
+
"dishwasher.setIntensiveZone": {
|
|
70349
|
+
capName: "dishwasher",
|
|
70350
|
+
capScope: "device",
|
|
70351
|
+
addonId: null,
|
|
70352
|
+
access: "create"
|
|
70353
|
+
},
|
|
70129
70354
|
"dishwasher.setOption": {
|
|
70130
70355
|
capName: "dishwasher",
|
|
70131
70356
|
capScope: "device",
|
|
@@ -70144,6 +70369,12 @@ Object.freeze({
|
|
|
70144
70369
|
addonId: null,
|
|
70145
70370
|
access: "create"
|
|
70146
70371
|
},
|
|
70372
|
+
"dishwasher.setVarioSpeedPlus": {
|
|
70373
|
+
capName: "dishwasher",
|
|
70374
|
+
capScope: "device",
|
|
70375
|
+
addonId: null,
|
|
70376
|
+
access: "create"
|
|
70377
|
+
},
|
|
70147
70378
|
"dishwasher.start": {
|
|
70148
70379
|
capName: "dishwasher",
|
|
70149
70380
|
capScope: "device",
|
|
@@ -74590,6 +74821,12 @@ Object.freeze({
|
|
|
74590
74821
|
addonId: null,
|
|
74591
74822
|
access: "view"
|
|
74592
74823
|
},
|
|
74824
|
+
"storageMigration.moverClearance": {
|
|
74825
|
+
capName: "storage-migration",
|
|
74826
|
+
capScope: "system",
|
|
74827
|
+
addonId: null,
|
|
74828
|
+
access: "view"
|
|
74829
|
+
},
|
|
74593
74830
|
"storageMigration.movers": {
|
|
74594
74831
|
capName: "storage-migration",
|
|
74595
74832
|
capScope: "system",
|
|
@@ -76783,6 +77020,11 @@ Object.freeze({
|
|
|
76783
77020
|
form: "single",
|
|
76784
77021
|
optional: false
|
|
76785
77022
|
}],
|
|
77023
|
+
"dishwasher.getOptions": [{
|
|
77024
|
+
name: "deviceId",
|
|
77025
|
+
form: "single",
|
|
77026
|
+
optional: false
|
|
77027
|
+
}],
|
|
76786
77028
|
"dishwasher.getStatus": [{
|
|
76787
77029
|
name: "deviceId",
|
|
76788
77030
|
form: "single",
|
|
@@ -76793,6 +77035,21 @@ Object.freeze({
|
|
|
76793
77035
|
form: "single",
|
|
76794
77036
|
optional: false
|
|
76795
77037
|
}],
|
|
77038
|
+
"dishwasher.resume": [{
|
|
77039
|
+
name: "deviceId",
|
|
77040
|
+
form: "single",
|
|
77041
|
+
optional: false
|
|
77042
|
+
}],
|
|
77043
|
+
"dishwasher.setChildLock": [{
|
|
77044
|
+
name: "deviceId",
|
|
77045
|
+
form: "single",
|
|
77046
|
+
optional: false
|
|
77047
|
+
}],
|
|
77048
|
+
"dishwasher.setExtraDry": [{
|
|
77049
|
+
name: "deviceId",
|
|
77050
|
+
form: "single",
|
|
77051
|
+
optional: false
|
|
77052
|
+
}],
|
|
76796
77053
|
"dishwasher.setHalfLoad": [{
|
|
76797
77054
|
name: "deviceId",
|
|
76798
77055
|
form: "single",
|
|
@@ -76803,6 +77060,11 @@ Object.freeze({
|
|
|
76803
77060
|
form: "single",
|
|
76804
77061
|
optional: false
|
|
76805
77062
|
}],
|
|
77063
|
+
"dishwasher.setIntensiveZone": [{
|
|
77064
|
+
name: "deviceId",
|
|
77065
|
+
form: "single",
|
|
77066
|
+
optional: false
|
|
77067
|
+
}],
|
|
76806
77068
|
"dishwasher.setOption": [{
|
|
76807
77069
|
name: "deviceId",
|
|
76808
77070
|
form: "single",
|
|
@@ -76818,6 +77080,11 @@ Object.freeze({
|
|
|
76818
77080
|
form: "single",
|
|
76819
77081
|
optional: false
|
|
76820
77082
|
}],
|
|
77083
|
+
"dishwasher.setVarioSpeedPlus": [{
|
|
77084
|
+
name: "deviceId",
|
|
77085
|
+
form: "single",
|
|
77086
|
+
optional: false
|
|
77087
|
+
}],
|
|
76821
77088
|
"dishwasher.start": [{
|
|
76822
77089
|
name: "deviceId",
|
|
76823
77090
|
form: "single",
|
|
@@ -78859,6 +79126,9 @@ new Map(Object.entries({
|
|
|
78859
79126
|
"wrapper-update-available": "system",
|
|
78860
79127
|
"backup-completed": "system",
|
|
78861
79128
|
"export-completed": "system",
|
|
79129
|
+
"alert-critical": "system",
|
|
79130
|
+
"alert-error": "system",
|
|
79131
|
+
"alert-critical-resolved": "system",
|
|
78862
79132
|
"storage-location-low": "system",
|
|
78863
79133
|
"storage-location-critical": "system",
|
|
78864
79134
|
"storage-location-ok": "system",
|
|
@@ -78983,6 +79253,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
78983
79253
|
"storage-location-ok"
|
|
78984
79254
|
]
|
|
78985
79255
|
},
|
|
79256
|
+
{
|
|
79257
|
+
id: "alerts",
|
|
79258
|
+
family: "system",
|
|
79259
|
+
label: "Alerts",
|
|
79260
|
+
kinds: [
|
|
79261
|
+
"alert-critical",
|
|
79262
|
+
"alert-error",
|
|
79263
|
+
"alert-critical-resolved"
|
|
79264
|
+
]
|
|
79265
|
+
},
|
|
78986
79266
|
{
|
|
78987
79267
|
id: "alarm",
|
|
78988
79268
|
family: "alarm",
|
|
@@ -79027,6 +79307,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
|
|
|
79027
79307
|
return [[descriptor.kind, field]];
|
|
79028
79308
|
})));
|
|
79029
79309
|
Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
|
|
79310
|
+
object({
|
|
79311
|
+
phase: _enum(["raised", "resolved"]),
|
|
79312
|
+
episodeId: string().min(1),
|
|
79313
|
+
alertId: string().min(1),
|
|
79314
|
+
severity: AlertSeveritySchema,
|
|
79315
|
+
category: string(),
|
|
79316
|
+
title: string(),
|
|
79317
|
+
message: string(),
|
|
79318
|
+
sourceType: string().optional(),
|
|
79319
|
+
sourceId: string().optional(),
|
|
79320
|
+
nodeId: string().optional(),
|
|
79321
|
+
/** The alert's own action link (where the operator acts on it), when it has one. */
|
|
79322
|
+
actionUrl: string().optional(),
|
|
79323
|
+
at: number()
|
|
79324
|
+
});
|
|
79030
79325
|
var RULE_BODY_ONLY = ["body"];
|
|
79031
79326
|
var RULE_TEXT = ["title", "body"];
|
|
79032
79327
|
var BATTERY = ["device-battery-low", "device-battery-normal"];
|
|
@@ -79036,6 +79331,11 @@ var TANK = [
|
|
|
79036
79331
|
"device-tank-full",
|
|
79037
79332
|
"device-tank-normal"
|
|
79038
79333
|
];
|
|
79334
|
+
var ALERT_EPISODE = [
|
|
79335
|
+
"alert-critical",
|
|
79336
|
+
"alert-error",
|
|
79337
|
+
"alert-critical-resolved"
|
|
79338
|
+
];
|
|
79039
79339
|
var UPDATES = [
|
|
79040
79340
|
"addon-update-available",
|
|
79041
79341
|
"server-update-available",
|
|
@@ -79228,14 +79528,14 @@ var STATE_SUMMARY_VARS = [
|
|
|
79228
79528
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
79229
79529
|
([...RULE_TEXT], [...TANK]),
|
|
79230
79530
|
[...RULE_TEXT],
|
|
79231
|
-
([...RULE_TEXT], [...UPDATES]),
|
|
79232
|
-
([...RULE_TEXT], [...UPDATES]),
|
|
79233
|
-
[...RULE_TEXT],
|
|
79531
|
+
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
|
79532
|
+
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
|
79234
79533
|
[...RULE_TEXT],
|
|
79235
79534
|
[...RULE_TEXT],
|
|
79236
79535
|
[...RULE_TEXT],
|
|
79237
79536
|
[...RULE_TEXT],
|
|
79238
79537
|
[...RULE_TEXT],
|
|
79538
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79239
79539
|
[...RULE_TEXT],
|
|
79240
79540
|
[...RULE_TEXT],
|
|
79241
79541
|
[...RULE_TEXT],
|
|
@@ -79253,7 +79553,11 @@ var STATE_SUMMARY_VARS = [
|
|
|
79253
79553
|
[...RULE_TEXT],
|
|
79254
79554
|
[...RULE_TEXT],
|
|
79255
79555
|
[...RULE_TEXT],
|
|
79256
|
-
[...RULE_TEXT],
|
|
79556
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79557
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79558
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79559
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79560
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79257
79561
|
[...RULE_TEXT],
|
|
79258
79562
|
[...RULE_TEXT],
|
|
79259
79563
|
[...RULE_TEXT],
|
package/dist/addon.mjs
CHANGED
|
@@ -818,7 +818,7 @@ async function discoverDevices(options = {}, binder = createDgramBinder()) {
|
|
|
818
818
|
return [...byId.values()];
|
|
819
819
|
}
|
|
820
820
|
//#endregion
|
|
821
|
-
//#region ../types/dist/event-category-
|
|
821
|
+
//#region ../types/dist/event-category-DOl51-Ij.mjs
|
|
822
822
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
823
823
|
EventCategory["SystemBoot"] = "system.boot";
|
|
824
824
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -897,9 +897,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
897
897
|
/**
|
|
898
898
|
* The node's one-shot runner boot check (D877): planned runners against the
|
|
899
899
|
* process service, `degraded` when any is failed, refused or missing. The
|
|
900
|
-
* alert centre turns it into one
|
|
900
|
+
* alert centre turns it into one critical alert.
|
|
901
901
|
*/
|
|
902
902
|
EventCategory["SystemRunnerCheck"] = "system.runner-check";
|
|
903
|
+
/**
|
|
904
|
+
* An alert EPISODE opened or closed, emitted by the alert centre for alerts
|
|
905
|
+
* of severity `critical` or `error` (`AlertEpisodePayload`). The alert
|
|
906
|
+
* centre sends no notification of its own: Notification Center turns this
|
|
907
|
+
* into the `alert-critical` / `alert-error` / `alert-critical-resolved`
|
|
908
|
+
* system-event kinds, and reconciles from the alerts store because a bus
|
|
909
|
+
* event may be dropped (D8, D11).
|
|
910
|
+
*/
|
|
911
|
+
EventCategory["AlertEpisode"] = "alert.episode";
|
|
903
912
|
EventCategory["AddonError"] = "addon.error";
|
|
904
913
|
EventCategory["AddonPageReady"] = "addon.page-ready";
|
|
905
914
|
EventCategory["AddonWidgetReady"] = "addon.widget-ready";
|
|
@@ -6224,7 +6233,7 @@ var ZodIssueCode = {
|
|
|
6224
6233
|
var ZodFirstPartyTypeKind;
|
|
6225
6234
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
6226
6235
|
//#endregion
|
|
6227
|
-
//#region ../types/dist/sleep-
|
|
6236
|
+
//#region ../types/dist/sleep-BxjU_fJM.mjs
|
|
6228
6237
|
/**
|
|
6229
6238
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
6230
6239
|
* window to float samples (D455).
|
|
@@ -13987,7 +13996,14 @@ var AlertSeveritySchema = _enum([
|
|
|
13987
13996
|
]);
|
|
13988
13997
|
var AlertActionSchema = object({
|
|
13989
13998
|
label: string(),
|
|
13990
|
-
href: string().optional()
|
|
13999
|
+
href: string().optional(),
|
|
14000
|
+
/**
|
|
14001
|
+
* How `href` is followed. Absent / `app`: an admin-ui route (client-side).
|
|
14002
|
+
* `server`: a route the HUB serves (an addon HTTP route such as an OAuth
|
|
14003
|
+
* start) — the browser must leave the SPA with a full navigation, because
|
|
14004
|
+
* the SPA has no such route and would bounce to the home page.
|
|
14005
|
+
*/
|
|
14006
|
+
navigation: _enum(["app", "server"]).optional()
|
|
13991
14007
|
});
|
|
13992
14008
|
var AlertStatusSchema = _enum([
|
|
13993
14009
|
"active",
|
|
@@ -18368,7 +18384,11 @@ var deviceDiscoveryCapability = {
|
|
|
18368
18384
|
};
|
|
18369
18385
|
/**
|
|
18370
18386
|
* `device-adoption` — generic discovery + adoption surface,
|
|
18371
|
-
* system-scoped
|
|
18387
|
+
* system-scoped collection (one provider per integration addon), routed
|
|
18388
|
+
* by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
|
|
18389
|
+
* pin model as `connection-test`. The admin UI keeps using
|
|
18390
|
+
* `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
|
|
18391
|
+
* successor to `ha-discovery`:
|
|
18372
18392
|
* keyed by `integrationId` (the addon resolves integrationId → broker
|
|
18373
18393
|
* internally) rather than a connection-specific `brokerId`, and it
|
|
18374
18394
|
* REUSES the shared `DiscoveredChildDevice` candidate type from
|
|
@@ -18533,7 +18553,7 @@ var ResyncResultSchema = object({
|
|
|
18533
18553
|
var deviceAdoptionCapability = {
|
|
18534
18554
|
name: "device-adoption",
|
|
18535
18555
|
scope: "system",
|
|
18536
|
-
mode: "
|
|
18556
|
+
mode: "collection",
|
|
18537
18557
|
status: {
|
|
18538
18558
|
schema: AdoptionStatusSchema,
|
|
18539
18559
|
kind: "poll"
|
|
@@ -42716,6 +42736,9 @@ var NcSystemEventKindSchema = _enum([
|
|
|
42716
42736
|
"server-updated",
|
|
42717
42737
|
"export-completed",
|
|
42718
42738
|
"backup-completed",
|
|
42739
|
+
"alert-critical",
|
|
42740
|
+
"alert-error",
|
|
42741
|
+
"alert-critical-resolved",
|
|
42719
42742
|
"camera-online",
|
|
42720
42743
|
"camera-offline",
|
|
42721
42744
|
"camera-disabled",
|
|
@@ -51792,7 +51815,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
51792
51815
|
}), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
51793
51816
|
kind: "mutation",
|
|
51794
51817
|
auth: "admin"
|
|
51795
|
-
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({
|
|
51818
|
+
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
|
|
51819
|
+
clear: boolean(),
|
|
51820
|
+
repointLocationId: string().optional()
|
|
51821
|
+
}), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
51796
51822
|
kind: "mutation",
|
|
51797
51823
|
auth: "admin"
|
|
51798
51824
|
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
@@ -56056,6 +56082,11 @@ onStatusChanged: { data: object({
|
|
|
56056
56082
|
*
|
|
56057
56083
|
* `kind: 'poll'` — cloud REST APIs typically have no push channel; the
|
|
56058
56084
|
* provider refreshes the slice on an interval and eagerly after commands.
|
|
56085
|
+
*
|
|
56086
|
+
* UNKNOWN IS NOT OFF. Every field the appliance reports separately is
|
|
56087
|
+
* nullable: `null` means "not known right now" (the appliance has not said,
|
|
56088
|
+
* the link is down, or the description does not carry it) and is never
|
|
56089
|
+
* rendered or exported as `false` / `0`. `availability` says why.
|
|
56059
56090
|
*/
|
|
56060
56091
|
var DishwasherStateSchema = _enum([
|
|
56061
56092
|
"idle",
|
|
@@ -56065,35 +56096,155 @@ var DishwasherStateSchema = _enum([
|
|
|
56065
56096
|
"error",
|
|
56066
56097
|
"unavailable"
|
|
56067
56098
|
]);
|
|
56099
|
+
/**
|
|
56100
|
+
* The appliance's own operation state, uncollapsed. `state` above is the coarse
|
|
56101
|
+
* view for compact surfaces; this is what the appliance said.
|
|
56102
|
+
*/
|
|
56103
|
+
var DishwasherOperationStateSchema = _enum([
|
|
56104
|
+
"Inactive",
|
|
56105
|
+
"Ready",
|
|
56106
|
+
"DelayedStart",
|
|
56107
|
+
"Run",
|
|
56108
|
+
"Pause",
|
|
56109
|
+
"ActionRequired",
|
|
56110
|
+
"Finished",
|
|
56111
|
+
"Error",
|
|
56112
|
+
"Aborting"
|
|
56113
|
+
]);
|
|
56114
|
+
/**
|
|
56115
|
+
* Why fields may be `null`:
|
|
56116
|
+
* - `available` — the link is up and the description is loaded;
|
|
56117
|
+
* - `offline` — the local link is down (values are unknown, not last-known);
|
|
56118
|
+
* - `description-missing` — the link is up but the appliance's description could not
|
|
56119
|
+
* be loaded, so its values cannot be decoded.
|
|
56120
|
+
*/
|
|
56121
|
+
var DishwasherAvailabilitySchema = _enum([
|
|
56122
|
+
"available",
|
|
56123
|
+
"offline",
|
|
56124
|
+
"description-missing"
|
|
56125
|
+
]);
|
|
56068
56126
|
var DishwasherConsumableLevelSchema = _enum([
|
|
56069
56127
|
"ok",
|
|
56070
56128
|
"low",
|
|
56071
56129
|
"empty"
|
|
56072
56130
|
]);
|
|
56073
56131
|
var DishwasherStatusSchema = object({
|
|
56132
|
+
availability: DishwasherAvailabilitySchema,
|
|
56133
|
+
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
56074
56134
|
state: DishwasherStateSchema,
|
|
56075
|
-
/**
|
|
56135
|
+
/** The appliance's operation state as reported; null when not known. */
|
|
56136
|
+
operationState: DishwasherOperationStateSchema.nullable(),
|
|
56137
|
+
/** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
|
|
56076
56138
|
program: string().nullable(),
|
|
56077
|
-
/**
|
|
56139
|
+
/** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
|
|
56140
|
+
selectedProgram: string().nullable(),
|
|
56141
|
+
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
56078
56142
|
availablePrograms: array(string()),
|
|
56079
|
-
/**
|
|
56080
|
-
|
|
56143
|
+
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
56144
|
+
remainingSeconds: number().int().nonnegative().nullable(),
|
|
56145
|
+
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
56146
|
+
delayedStartSeconds: number().int().nonnegative().nullable(),
|
|
56081
56147
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
56082
56148
|
progressPercent: number().min(0).max(100).nullable(),
|
|
56083
|
-
/** True when the door is reported open. */
|
|
56084
|
-
doorOpen: boolean(),
|
|
56085
|
-
/** True when
|
|
56086
|
-
|
|
56087
|
-
/**
|
|
56088
|
-
|
|
56149
|
+
/** True when the door is reported open; null when the door state is not known. */
|
|
56150
|
+
doorOpen: boolean().nullable(),
|
|
56151
|
+
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
56152
|
+
doorLocked: boolean().nullable(),
|
|
56153
|
+
/** True when remote start is allowed (door closed, power on, etc.); null when not known. */
|
|
56154
|
+
remoteStartAllowed: boolean().nullable(),
|
|
56155
|
+
/** True when the appliance accepts remote control now; null when not known. */
|
|
56156
|
+
remoteControlActive: boolean().nullable(),
|
|
56157
|
+
/** True while somebody operates the appliance at its panel; null when not reported. */
|
|
56158
|
+
localControlActive: boolean().nullable(),
|
|
56159
|
+
/** Main power / switched-on state; null when not known. */
|
|
56160
|
+
powerOn: boolean().nullable(),
|
|
56161
|
+
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
56162
|
+
powerState: string().nullable(),
|
|
56089
56163
|
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56090
56164
|
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
56091
|
-
|
|
56092
|
-
|
|
56165
|
+
/** Option states: null when the appliance does not expose the option or has not said. */
|
|
56166
|
+
halfLoad: boolean().nullable(),
|
|
56167
|
+
hygienePlus: boolean().nullable(),
|
|
56168
|
+
/** Extra dry option when the appliance exposes it. */
|
|
56169
|
+
extraDry: boolean().nullable(),
|
|
56170
|
+
/** Intensive zone (lower basket) when the appliance exposes it. */
|
|
56171
|
+
intensiveZone: boolean().nullable(),
|
|
56172
|
+
/** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
|
|
56173
|
+
varioSpeedPlus: boolean().nullable(),
|
|
56174
|
+
/** Child lock (controls disabled on the appliance); null when not known. */
|
|
56175
|
+
childLock: boolean().nullable(),
|
|
56176
|
+
/** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
|
|
56177
|
+
activeEvents: array(string()),
|
|
56178
|
+
/** Numeric error code when the appliance reports one; null otherwise. */
|
|
56093
56179
|
errorCode: number().nullable(),
|
|
56180
|
+
/** Name of the raised alert-level event while the appliance is in error; null otherwise. */
|
|
56094
56181
|
errorLabel: string().nullable(),
|
|
56182
|
+
/** Ms epoch of the last value received from the appliance; 0 = never. */
|
|
56095
56183
|
lastFetchedAt: number()
|
|
56096
56184
|
});
|
|
56185
|
+
var DeviceIdSchema = number().int().nonnegative();
|
|
56186
|
+
/** A value a program option or setting can take. */
|
|
56187
|
+
var DishwasherValueSchema = union([
|
|
56188
|
+
boolean(),
|
|
56189
|
+
string(),
|
|
56190
|
+
number()
|
|
56191
|
+
]);
|
|
56192
|
+
var DishwasherAccessSchema = _enum([
|
|
56193
|
+
"none",
|
|
56194
|
+
"read",
|
|
56195
|
+
"readWrite",
|
|
56196
|
+
"writeOnly",
|
|
56197
|
+
"readStatic"
|
|
56198
|
+
]);
|
|
56199
|
+
/**
|
|
56200
|
+
* One option or setting the appliance declares, with the constraints its description
|
|
56201
|
+
* gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
|
|
56202
|
+
*/
|
|
56203
|
+
var DishwasherOptionDescriptorSchema = object({
|
|
56204
|
+
/** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
|
|
56205
|
+
key: string(),
|
|
56206
|
+
/** Last segment of the key, for display. */
|
|
56207
|
+
name: string(),
|
|
56208
|
+
type: _enum([
|
|
56209
|
+
"boolean",
|
|
56210
|
+
"number",
|
|
56211
|
+
"enum",
|
|
56212
|
+
"string"
|
|
56213
|
+
]),
|
|
56214
|
+
access: DishwasherAccessSchema,
|
|
56215
|
+
/** The appliance reports this entity as currently available. */
|
|
56216
|
+
available: boolean(),
|
|
56217
|
+
/** Unit the description declares for a number; null when it declares none. */
|
|
56218
|
+
unit: string().nullable(),
|
|
56219
|
+
min: number().nullable(),
|
|
56220
|
+
max: number().nullable(),
|
|
56221
|
+
step: number().nullable(),
|
|
56222
|
+
/** Allowed members of an enum; null for other types. */
|
|
56223
|
+
enumValues: array(string()).nullable(),
|
|
56224
|
+
defaultValue: DishwasherValueSchema.nullable()
|
|
56225
|
+
});
|
|
56226
|
+
var DishwasherProgramSchema = object({
|
|
56227
|
+
/** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
|
|
56228
|
+
key: string(),
|
|
56229
|
+
name: string(),
|
|
56230
|
+
/** The appliance currently offers this program. */
|
|
56231
|
+
available: boolean(),
|
|
56232
|
+
/** The options this program lists, with the program-level access / availability / default. */
|
|
56233
|
+
options: array(DishwasherOptionDescriptorSchema)
|
|
56234
|
+
});
|
|
56235
|
+
var DishwasherOptionsSchema = object({
|
|
56236
|
+
availability: DishwasherAvailabilitySchema,
|
|
56237
|
+
/** What the appliance can be told to do, from the commands its description declares. */
|
|
56238
|
+
supportsStart: boolean(),
|
|
56239
|
+
supportsPause: boolean(),
|
|
56240
|
+
supportsResume: boolean(),
|
|
56241
|
+
supportsStop: boolean(),
|
|
56242
|
+
supportsPower: boolean(),
|
|
56243
|
+
/** Every program the description lists, with its options. */
|
|
56244
|
+
programs: array(DishwasherProgramSchema),
|
|
56245
|
+
/** Every option and setting entity the description lists (programs reference these by key). */
|
|
56246
|
+
options: array(DishwasherOptionDescriptorSchema)
|
|
56247
|
+
});
|
|
56097
56248
|
var dishwasherCapability = {
|
|
56098
56249
|
name: "dishwasher",
|
|
56099
56250
|
scope: "device",
|
|
@@ -56101,58 +56252,102 @@ var dishwasherCapability = {
|
|
|
56101
56252
|
mode: "singleton",
|
|
56102
56253
|
deviceTypes: [DeviceType.Dishwasher],
|
|
56103
56254
|
methods: {
|
|
56104
|
-
|
|
56255
|
+
/**
|
|
56256
|
+
* Start a program. Without `program` the selected one starts. `options` are
|
|
56257
|
+
* option feature keys; each is checked against the program's constraints.
|
|
56258
|
+
*/
|
|
56259
|
+
start: method(object({
|
|
56260
|
+
deviceId: DeviceIdSchema,
|
|
56261
|
+
program: string().min(1).optional(),
|
|
56262
|
+
options: record(string(), DishwasherValueSchema).optional()
|
|
56263
|
+
}), _void(), {
|
|
56105
56264
|
kind: "mutation",
|
|
56106
56265
|
auth: "protected"
|
|
56107
56266
|
}),
|
|
56108
|
-
pause: method(object({ deviceId:
|
|
56267
|
+
pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
56109
56268
|
kind: "mutation",
|
|
56110
56269
|
auth: "protected"
|
|
56111
56270
|
}),
|
|
56112
|
-
|
|
56271
|
+
resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
56113
56272
|
kind: "mutation",
|
|
56114
56273
|
auth: "protected"
|
|
56115
56274
|
}),
|
|
56275
|
+
stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
56276
|
+
kind: "mutation",
|
|
56277
|
+
auth: "protected"
|
|
56278
|
+
}),
|
|
56279
|
+
/** Select (not start) a program; refused when the appliance does not offer it. */
|
|
56116
56280
|
setProgram: method(object({
|
|
56117
|
-
deviceId:
|
|
56281
|
+
deviceId: DeviceIdSchema,
|
|
56118
56282
|
program: string().min(1)
|
|
56119
56283
|
}), _void(), {
|
|
56120
56284
|
kind: "mutation",
|
|
56121
56285
|
auth: "protected"
|
|
56122
56286
|
}),
|
|
56123
56287
|
setPower: method(object({
|
|
56124
|
-
deviceId:
|
|
56288
|
+
deviceId: DeviceIdSchema,
|
|
56125
56289
|
on: boolean()
|
|
56126
56290
|
}), _void(), {
|
|
56127
56291
|
kind: "mutation",
|
|
56128
56292
|
auth: "protected"
|
|
56129
56293
|
}),
|
|
56130
56294
|
setHalfLoad: method(object({
|
|
56131
|
-
deviceId:
|
|
56295
|
+
deviceId: DeviceIdSchema,
|
|
56132
56296
|
on: boolean()
|
|
56133
56297
|
}), _void(), {
|
|
56134
56298
|
kind: "mutation",
|
|
56135
56299
|
auth: "protected"
|
|
56136
56300
|
}),
|
|
56137
56301
|
setHygienePlus: method(object({
|
|
56138
|
-
deviceId:
|
|
56302
|
+
deviceId: DeviceIdSchema,
|
|
56139
56303
|
on: boolean()
|
|
56140
56304
|
}), _void(), {
|
|
56141
56305
|
kind: "mutation",
|
|
56142
56306
|
auth: "protected"
|
|
56143
56307
|
}),
|
|
56308
|
+
setExtraDry: method(object({
|
|
56309
|
+
deviceId: DeviceIdSchema,
|
|
56310
|
+
on: boolean()
|
|
56311
|
+
}), _void(), {
|
|
56312
|
+
kind: "mutation",
|
|
56313
|
+
auth: "protected"
|
|
56314
|
+
}),
|
|
56315
|
+
setIntensiveZone: method(object({
|
|
56316
|
+
deviceId: DeviceIdSchema,
|
|
56317
|
+
on: boolean()
|
|
56318
|
+
}), _void(), {
|
|
56319
|
+
kind: "mutation",
|
|
56320
|
+
auth: "protected"
|
|
56321
|
+
}),
|
|
56322
|
+
setVarioSpeedPlus: method(object({
|
|
56323
|
+
deviceId: DeviceIdSchema,
|
|
56324
|
+
on: boolean()
|
|
56325
|
+
}), _void(), {
|
|
56326
|
+
kind: "mutation",
|
|
56327
|
+
auth: "protected"
|
|
56328
|
+
}),
|
|
56329
|
+
setChildLock: method(object({
|
|
56330
|
+
deviceId: DeviceIdSchema,
|
|
56331
|
+
on: boolean()
|
|
56332
|
+
}), _void(), {
|
|
56333
|
+
kind: "mutation",
|
|
56334
|
+
auth: "protected"
|
|
56335
|
+
}),
|
|
56336
|
+
/**
|
|
56337
|
+
* Write any option or setting by feature key. Refused when the description does
|
|
56338
|
+
* not list it, it is not writable or not available now, or the value is outside
|
|
56339
|
+
* its declared range / members.
|
|
56340
|
+
*/
|
|
56144
56341
|
setOption: method(object({
|
|
56145
|
-
deviceId:
|
|
56342
|
+
deviceId: DeviceIdSchema,
|
|
56146
56343
|
key: string().min(1),
|
|
56147
|
-
value:
|
|
56148
|
-
boolean(),
|
|
56149
|
-
string(),
|
|
56150
|
-
number()
|
|
56151
|
-
])
|
|
56344
|
+
value: DishwasherValueSchema
|
|
56152
56345
|
}), _void(), {
|
|
56153
56346
|
kind: "mutation",
|
|
56154
56347
|
auth: "protected"
|
|
56155
|
-
})
|
|
56348
|
+
}),
|
|
56349
|
+
/** What this appliance can do, from its own description — the UI is derived from it. */
|
|
56350
|
+
getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
|
|
56156
56351
|
},
|
|
56157
56352
|
status: {
|
|
56158
56353
|
schema: DishwasherStatusSchema,
|
|
@@ -70101,6 +70296,12 @@ Object.freeze({
|
|
|
70101
70296
|
addonId: null,
|
|
70102
70297
|
access: "view"
|
|
70103
70298
|
},
|
|
70299
|
+
"dishwasher.getOptions": {
|
|
70300
|
+
capName: "dishwasher",
|
|
70301
|
+
capScope: "device",
|
|
70302
|
+
addonId: null,
|
|
70303
|
+
access: "view"
|
|
70304
|
+
},
|
|
70104
70305
|
"dishwasher.getStatus": {
|
|
70105
70306
|
capName: "dishwasher",
|
|
70106
70307
|
capScope: "device",
|
|
@@ -70113,6 +70314,24 @@ Object.freeze({
|
|
|
70113
70314
|
addonId: null,
|
|
70114
70315
|
access: "create"
|
|
70115
70316
|
},
|
|
70317
|
+
"dishwasher.resume": {
|
|
70318
|
+
capName: "dishwasher",
|
|
70319
|
+
capScope: "device",
|
|
70320
|
+
addonId: null,
|
|
70321
|
+
access: "create"
|
|
70322
|
+
},
|
|
70323
|
+
"dishwasher.setChildLock": {
|
|
70324
|
+
capName: "dishwasher",
|
|
70325
|
+
capScope: "device",
|
|
70326
|
+
addonId: null,
|
|
70327
|
+
access: "create"
|
|
70328
|
+
},
|
|
70329
|
+
"dishwasher.setExtraDry": {
|
|
70330
|
+
capName: "dishwasher",
|
|
70331
|
+
capScope: "device",
|
|
70332
|
+
addonId: null,
|
|
70333
|
+
access: "create"
|
|
70334
|
+
},
|
|
70116
70335
|
"dishwasher.setHalfLoad": {
|
|
70117
70336
|
capName: "dishwasher",
|
|
70118
70337
|
capScope: "device",
|
|
@@ -70125,6 +70344,12 @@ Object.freeze({
|
|
|
70125
70344
|
addonId: null,
|
|
70126
70345
|
access: "create"
|
|
70127
70346
|
},
|
|
70347
|
+
"dishwasher.setIntensiveZone": {
|
|
70348
|
+
capName: "dishwasher",
|
|
70349
|
+
capScope: "device",
|
|
70350
|
+
addonId: null,
|
|
70351
|
+
access: "create"
|
|
70352
|
+
},
|
|
70128
70353
|
"dishwasher.setOption": {
|
|
70129
70354
|
capName: "dishwasher",
|
|
70130
70355
|
capScope: "device",
|
|
@@ -70143,6 +70368,12 @@ Object.freeze({
|
|
|
70143
70368
|
addonId: null,
|
|
70144
70369
|
access: "create"
|
|
70145
70370
|
},
|
|
70371
|
+
"dishwasher.setVarioSpeedPlus": {
|
|
70372
|
+
capName: "dishwasher",
|
|
70373
|
+
capScope: "device",
|
|
70374
|
+
addonId: null,
|
|
70375
|
+
access: "create"
|
|
70376
|
+
},
|
|
70146
70377
|
"dishwasher.start": {
|
|
70147
70378
|
capName: "dishwasher",
|
|
70148
70379
|
capScope: "device",
|
|
@@ -74589,6 +74820,12 @@ Object.freeze({
|
|
|
74589
74820
|
addonId: null,
|
|
74590
74821
|
access: "view"
|
|
74591
74822
|
},
|
|
74823
|
+
"storageMigration.moverClearance": {
|
|
74824
|
+
capName: "storage-migration",
|
|
74825
|
+
capScope: "system",
|
|
74826
|
+
addonId: null,
|
|
74827
|
+
access: "view"
|
|
74828
|
+
},
|
|
74592
74829
|
"storageMigration.movers": {
|
|
74593
74830
|
capName: "storage-migration",
|
|
74594
74831
|
capScope: "system",
|
|
@@ -76782,6 +77019,11 @@ Object.freeze({
|
|
|
76782
77019
|
form: "single",
|
|
76783
77020
|
optional: false
|
|
76784
77021
|
}],
|
|
77022
|
+
"dishwasher.getOptions": [{
|
|
77023
|
+
name: "deviceId",
|
|
77024
|
+
form: "single",
|
|
77025
|
+
optional: false
|
|
77026
|
+
}],
|
|
76785
77027
|
"dishwasher.getStatus": [{
|
|
76786
77028
|
name: "deviceId",
|
|
76787
77029
|
form: "single",
|
|
@@ -76792,6 +77034,21 @@ Object.freeze({
|
|
|
76792
77034
|
form: "single",
|
|
76793
77035
|
optional: false
|
|
76794
77036
|
}],
|
|
77037
|
+
"dishwasher.resume": [{
|
|
77038
|
+
name: "deviceId",
|
|
77039
|
+
form: "single",
|
|
77040
|
+
optional: false
|
|
77041
|
+
}],
|
|
77042
|
+
"dishwasher.setChildLock": [{
|
|
77043
|
+
name: "deviceId",
|
|
77044
|
+
form: "single",
|
|
77045
|
+
optional: false
|
|
77046
|
+
}],
|
|
77047
|
+
"dishwasher.setExtraDry": [{
|
|
77048
|
+
name: "deviceId",
|
|
77049
|
+
form: "single",
|
|
77050
|
+
optional: false
|
|
77051
|
+
}],
|
|
76795
77052
|
"dishwasher.setHalfLoad": [{
|
|
76796
77053
|
name: "deviceId",
|
|
76797
77054
|
form: "single",
|
|
@@ -76802,6 +77059,11 @@ Object.freeze({
|
|
|
76802
77059
|
form: "single",
|
|
76803
77060
|
optional: false
|
|
76804
77061
|
}],
|
|
77062
|
+
"dishwasher.setIntensiveZone": [{
|
|
77063
|
+
name: "deviceId",
|
|
77064
|
+
form: "single",
|
|
77065
|
+
optional: false
|
|
77066
|
+
}],
|
|
76805
77067
|
"dishwasher.setOption": [{
|
|
76806
77068
|
name: "deviceId",
|
|
76807
77069
|
form: "single",
|
|
@@ -76817,6 +77079,11 @@ Object.freeze({
|
|
|
76817
77079
|
form: "single",
|
|
76818
77080
|
optional: false
|
|
76819
77081
|
}],
|
|
77082
|
+
"dishwasher.setVarioSpeedPlus": [{
|
|
77083
|
+
name: "deviceId",
|
|
77084
|
+
form: "single",
|
|
77085
|
+
optional: false
|
|
77086
|
+
}],
|
|
76820
77087
|
"dishwasher.start": [{
|
|
76821
77088
|
name: "deviceId",
|
|
76822
77089
|
form: "single",
|
|
@@ -78858,6 +79125,9 @@ new Map(Object.entries({
|
|
|
78858
79125
|
"wrapper-update-available": "system",
|
|
78859
79126
|
"backup-completed": "system",
|
|
78860
79127
|
"export-completed": "system",
|
|
79128
|
+
"alert-critical": "system",
|
|
79129
|
+
"alert-error": "system",
|
|
79130
|
+
"alert-critical-resolved": "system",
|
|
78861
79131
|
"storage-location-low": "system",
|
|
78862
79132
|
"storage-location-critical": "system",
|
|
78863
79133
|
"storage-location-ok": "system",
|
|
@@ -78982,6 +79252,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
78982
79252
|
"storage-location-ok"
|
|
78983
79253
|
]
|
|
78984
79254
|
},
|
|
79255
|
+
{
|
|
79256
|
+
id: "alerts",
|
|
79257
|
+
family: "system",
|
|
79258
|
+
label: "Alerts",
|
|
79259
|
+
kinds: [
|
|
79260
|
+
"alert-critical",
|
|
79261
|
+
"alert-error",
|
|
79262
|
+
"alert-critical-resolved"
|
|
79263
|
+
]
|
|
79264
|
+
},
|
|
78985
79265
|
{
|
|
78986
79266
|
id: "alarm",
|
|
78987
79267
|
family: "alarm",
|
|
@@ -79026,6 +79306,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
|
|
|
79026
79306
|
return [[descriptor.kind, field]];
|
|
79027
79307
|
})));
|
|
79028
79308
|
Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
|
|
79309
|
+
object({
|
|
79310
|
+
phase: _enum(["raised", "resolved"]),
|
|
79311
|
+
episodeId: string().min(1),
|
|
79312
|
+
alertId: string().min(1),
|
|
79313
|
+
severity: AlertSeveritySchema,
|
|
79314
|
+
category: string(),
|
|
79315
|
+
title: string(),
|
|
79316
|
+
message: string(),
|
|
79317
|
+
sourceType: string().optional(),
|
|
79318
|
+
sourceId: string().optional(),
|
|
79319
|
+
nodeId: string().optional(),
|
|
79320
|
+
/** The alert's own action link (where the operator acts on it), when it has one. */
|
|
79321
|
+
actionUrl: string().optional(),
|
|
79322
|
+
at: number()
|
|
79323
|
+
});
|
|
79029
79324
|
var RULE_BODY_ONLY = ["body"];
|
|
79030
79325
|
var RULE_TEXT = ["title", "body"];
|
|
79031
79326
|
var BATTERY = ["device-battery-low", "device-battery-normal"];
|
|
@@ -79035,6 +79330,11 @@ var TANK = [
|
|
|
79035
79330
|
"device-tank-full",
|
|
79036
79331
|
"device-tank-normal"
|
|
79037
79332
|
];
|
|
79333
|
+
var ALERT_EPISODE = [
|
|
79334
|
+
"alert-critical",
|
|
79335
|
+
"alert-error",
|
|
79336
|
+
"alert-critical-resolved"
|
|
79337
|
+
];
|
|
79038
79338
|
var UPDATES = [
|
|
79039
79339
|
"addon-update-available",
|
|
79040
79340
|
"server-update-available",
|
|
@@ -79227,14 +79527,14 @@ var STATE_SUMMARY_VARS = [
|
|
|
79227
79527
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
79228
79528
|
([...RULE_TEXT], [...TANK]),
|
|
79229
79529
|
[...RULE_TEXT],
|
|
79230
|
-
([...RULE_TEXT], [...UPDATES]),
|
|
79231
|
-
([...RULE_TEXT], [...UPDATES]),
|
|
79232
|
-
[...RULE_TEXT],
|
|
79530
|
+
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
|
79531
|
+
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
|
79233
79532
|
[...RULE_TEXT],
|
|
79234
79533
|
[...RULE_TEXT],
|
|
79235
79534
|
[...RULE_TEXT],
|
|
79236
79535
|
[...RULE_TEXT],
|
|
79237
79536
|
[...RULE_TEXT],
|
|
79537
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79238
79538
|
[...RULE_TEXT],
|
|
79239
79539
|
[...RULE_TEXT],
|
|
79240
79540
|
[...RULE_TEXT],
|
|
@@ -79252,7 +79552,11 @@ var STATE_SUMMARY_VARS = [
|
|
|
79252
79552
|
[...RULE_TEXT],
|
|
79253
79553
|
[...RULE_TEXT],
|
|
79254
79554
|
[...RULE_TEXT],
|
|
79255
|
-
[...RULE_TEXT],
|
|
79555
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79556
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79557
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79558
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79559
|
+
([...RULE_TEXT], [...ALERT_EPISODE]),
|
|
79256
79560
|
[...RULE_TEXT],
|
|
79257
79561
|
[...RULE_TEXT],
|
|
79258
79562
|
[...RULE_TEXT],
|
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.128",
|
|
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",
|