@camstack/addon-provider-homeassistant 1.2.650 → 1.2.652
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/CHANGELOG.md +13 -0
- package/dist/addon.js +199 -1
- package/dist/addon.mjs +199 -1
- package/dist/{ha-broker-source-B2v2dnPe.mjs → ha-broker-source-CBWl6Wat.mjs} +369 -130
- package/dist/{ha-broker-source-DUj9pUWr.js → ha-broker-source-D3ScsO0T.js} +374 -129
- package/dist/ha-export/ha-export.addon.js +73 -8
- package/dist/ha-export/ha-export.addon.mjs +73 -8
- package/package.json +5 -2
|
@@ -5975,7 +5975,7 @@ var ZodIssueCode = {
|
|
|
5975
5975
|
var ZodFirstPartyTypeKind;
|
|
5976
5976
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5977
5977
|
//#endregion
|
|
5978
|
-
//#region ../types/dist/sleep-
|
|
5978
|
+
//#region ../types/dist/sleep-hmSP-eJt.mjs
|
|
5979
5979
|
/**
|
|
5980
5980
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5981
5981
|
* window to float samples (D455).
|
|
@@ -9764,6 +9764,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9764
9764
|
"backup",
|
|
9765
9765
|
"battery",
|
|
9766
9766
|
"binary",
|
|
9767
|
+
"board-key-source",
|
|
9767
9768
|
"brightness",
|
|
9768
9769
|
"broker",
|
|
9769
9770
|
"button",
|
|
@@ -9885,6 +9886,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9885
9886
|
"privacy-mask",
|
|
9886
9887
|
"ptz",
|
|
9887
9888
|
"ptz-autotrack",
|
|
9889
|
+
"pump-cycle",
|
|
9888
9890
|
"reboot",
|
|
9889
9891
|
"record-entries",
|
|
9890
9892
|
"recording",
|
|
@@ -11177,18 +11179,6 @@ Object.freeze({
|
|
|
11177
11179
|
"path": "pumpRunning",
|
|
11178
11180
|
"valueType": "boolean"
|
|
11179
11181
|
},
|
|
11180
|
-
{
|
|
11181
|
-
"path": "pumpIntervalEnabled",
|
|
11182
|
-
"valueType": "boolean"
|
|
11183
|
-
},
|
|
11184
|
-
{
|
|
11185
|
-
"path": "pumpOnTime",
|
|
11186
|
-
"valueType": "number"
|
|
11187
|
-
},
|
|
11188
|
-
{
|
|
11189
|
-
"path": "pumpOffTime",
|
|
11190
|
-
"valueType": "number"
|
|
11191
|
-
},
|
|
11192
11182
|
{
|
|
11193
11183
|
"path": "lastDrink",
|
|
11194
11184
|
"valueType": "number"
|
|
@@ -11312,6 +11302,20 @@ Object.freeze({
|
|
|
11312
11302
|
"valueType": "number"
|
|
11313
11303
|
}
|
|
11314
11304
|
],
|
|
11305
|
+
"pump-cycle": [
|
|
11306
|
+
{
|
|
11307
|
+
"path": "enabled",
|
|
11308
|
+
"valueType": "boolean"
|
|
11309
|
+
},
|
|
11310
|
+
{
|
|
11311
|
+
"path": "onTime",
|
|
11312
|
+
"valueType": "number"
|
|
11313
|
+
},
|
|
11314
|
+
{
|
|
11315
|
+
"path": "offTime",
|
|
11316
|
+
"valueType": "number"
|
|
11317
|
+
}
|
|
11318
|
+
],
|
|
11315
11319
|
"recording-archive": [
|
|
11316
11320
|
{
|
|
11317
11321
|
"path": "deviceId",
|
|
@@ -12975,6 +12979,73 @@ var NodeColorIdSchema = _enum([
|
|
|
12975
12979
|
"node-g",
|
|
12976
12980
|
"node-h"
|
|
12977
12981
|
]);
|
|
12982
|
+
//#endregion
|
|
12983
|
+
//#region ../types/dist/index.mjs
|
|
12984
|
+
var SMTP_INBOUND_DEFAULT_PORT = 2525;
|
|
12985
|
+
var SMTP_INBOUND_DEFAULT_DOMAIN = "camstack.local";
|
|
12986
|
+
var SMTP_INBOUND_DEFAULT_MAX_MESSAGE_BYTES = 25 * 1024 * 1024;
|
|
12987
|
+
/** The text excerpt a message carries on the bus. */
|
|
12988
|
+
var SMTP_INBOUND_TEXT_MAX_CHARS = 4096;
|
|
12989
|
+
var PortSchema = number().int().min(1).max(65535);
|
|
12990
|
+
/** A recipient local-part: what stands before the `@`. */
|
|
12991
|
+
var SmtpRecipientSchema = string().min(1).max(64).regex(/^[A-Za-z0-9._+-]+$/);
|
|
12992
|
+
object({
|
|
12993
|
+
port: PortSchema.default(SMTP_INBOUND_DEFAULT_PORT),
|
|
12994
|
+
bindHost: string().min(1).default("0.0.0.0"),
|
|
12995
|
+
domain: string().min(1).default(SMTP_INBOUND_DEFAULT_DOMAIN),
|
|
12996
|
+
requireAuth: boolean().default(true),
|
|
12997
|
+
username: string().default(""),
|
|
12998
|
+
password: string().default("").meta({ secret: true }),
|
|
12999
|
+
starttls: boolean().default(false),
|
|
13000
|
+
maxMessageBytes: number().int().positive().default(SMTP_INBOUND_DEFAULT_MAX_MESSAGE_BYTES)
|
|
13001
|
+
});
|
|
13002
|
+
object({
|
|
13003
|
+
host: string().min(1).nullable(),
|
|
13004
|
+
hostReason: string().nullable(),
|
|
13005
|
+
port: PortSchema,
|
|
13006
|
+
domain: string().min(1),
|
|
13007
|
+
requireAuth: boolean(),
|
|
13008
|
+
username: string(),
|
|
13009
|
+
password: string(),
|
|
13010
|
+
starttls: boolean()
|
|
13011
|
+
});
|
|
13012
|
+
object({
|
|
13013
|
+
recipients: array(SmtpRecipientSchema).min(1),
|
|
13014
|
+
/**
|
|
13015
|
+
* Who is subscribing. A second `subscribe` with the same id REPLACES that subscriber's
|
|
13016
|
+
* recipients (the way a consumer that restarted, or lost a device, declares its set again);
|
|
13017
|
+
* a recipient held by another subscriber is refused with `smtp-inbound/recipient-claimed`.
|
|
13018
|
+
* Absent, the subscriber is anonymous and unique.
|
|
13019
|
+
*/
|
|
13020
|
+
subscriberId: string().min(1).max(64).optional()
|
|
13021
|
+
});
|
|
13022
|
+
var SmtpInboundAttachmentSchema = object({
|
|
13023
|
+
filename: string(),
|
|
13024
|
+
contentType: string(),
|
|
13025
|
+
bytes: number().int().nonnegative()
|
|
13026
|
+
});
|
|
13027
|
+
/** The payload of one `broker.message` (the key is the recipient local-part). */
|
|
13028
|
+
var SmtpInboundMessageSchema = object({
|
|
13029
|
+
/** Monotonic per mailbox; a gap tells a consumer it missed an event. */
|
|
13030
|
+
seq: number().int().positive(),
|
|
13031
|
+
messageId: string(),
|
|
13032
|
+
receivedAt: number().int().nonnegative(),
|
|
13033
|
+
from: string(),
|
|
13034
|
+
to: string(),
|
|
13035
|
+
subject: string(),
|
|
13036
|
+
text: string().max(SMTP_INBOUND_TEXT_MAX_CHARS),
|
|
13037
|
+
attachments: array(SmtpInboundAttachmentSchema)
|
|
13038
|
+
});
|
|
13039
|
+
object({
|
|
13040
|
+
/** The newest seq issued so far (0 before any mail). */
|
|
13041
|
+
lastSeq: number().int().nonnegative(),
|
|
13042
|
+
/** The oldest seq still retained; messages below it are gone. */
|
|
13043
|
+
oldestSeq: number().int().nonnegative(),
|
|
13044
|
+
messages: array(object({
|
|
13045
|
+
key: string(),
|
|
13046
|
+
message: SmtpInboundMessageSchema
|
|
13047
|
+
}))
|
|
13048
|
+
});
|
|
12978
13049
|
new Set([
|
|
12979
13050
|
"track",
|
|
12980
13051
|
"face",
|
|
@@ -19401,24 +19472,52 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
19401
19472
|
args: { on: false }
|
|
19402
19473
|
},
|
|
19403
19474
|
{
|
|
19404
|
-
id: "petFountain.
|
|
19405
|
-
method: "
|
|
19475
|
+
id: "petFountain.resetDailyConsumption",
|
|
19476
|
+
method: "resetDailyConsumption",
|
|
19477
|
+
label: t("Clear daily consumption", "Azzera il consumo giornaliero"),
|
|
19478
|
+
phrase: t("Clear the daily water consumption of {device}", "Azzera il consumo giornaliero di acqua di {device}"),
|
|
19479
|
+
icon: "rotate-ccw"
|
|
19480
|
+
}
|
|
19481
|
+
],
|
|
19482
|
+
state: [{
|
|
19483
|
+
kind: "boolean",
|
|
19484
|
+
field: "empty",
|
|
19485
|
+
label: t("Tank empty", "Serbatoio vuoto"),
|
|
19486
|
+
whenTrue: t("When the tank of {device} is empty", "Quando il serbatoio di {device} è vuoto"),
|
|
19487
|
+
whenFalse: t("When the tank of {device} is refilled", "Quando il serbatoio di {device} viene riempito"),
|
|
19488
|
+
icon: "droplet"
|
|
19489
|
+
}, {
|
|
19490
|
+
kind: "numeric",
|
|
19491
|
+
field: "waterLevel",
|
|
19492
|
+
quantity: t("the water level", "il livello dell’acqua"),
|
|
19493
|
+
label: t("Water level", "Livello dell’acqua"),
|
|
19494
|
+
unit: "%",
|
|
19495
|
+
icon: "droplets"
|
|
19496
|
+
}]
|
|
19497
|
+
},
|
|
19498
|
+
"pump-cycle": {
|
|
19499
|
+
scope: "device",
|
|
19500
|
+
noun: t("Pump cycle", "Ciclo della pompa"),
|
|
19501
|
+
actions: [
|
|
19502
|
+
{
|
|
19503
|
+
id: "pumpCycle.on",
|
|
19504
|
+
method: "setEnabled",
|
|
19406
19505
|
label: t("Pump cycle on", "Ciclo pompa attivo"),
|
|
19407
19506
|
phrase: t("Run the pump of {device} on its on/off cycle", "Fai lavorare la pompa di {device} a ciclo acceso/spento"),
|
|
19408
19507
|
icon: "timer",
|
|
19409
19508
|
args: { on: true }
|
|
19410
19509
|
},
|
|
19411
19510
|
{
|
|
19412
|
-
id: "
|
|
19413
|
-
method: "
|
|
19511
|
+
id: "pumpCycle.off",
|
|
19512
|
+
method: "setEnabled",
|
|
19414
19513
|
label: t("Pump cycle off", "Ciclo pompa spento"),
|
|
19415
19514
|
phrase: t("Run the pump of {device} continuously", "Fai lavorare la pompa di {device} in continuo"),
|
|
19416
19515
|
icon: "timer-off",
|
|
19417
19516
|
args: { on: false }
|
|
19418
19517
|
},
|
|
19419
19518
|
{
|
|
19420
|
-
id: "
|
|
19421
|
-
method: "
|
|
19519
|
+
id: "pumpCycle.onMinutes",
|
|
19520
|
+
method: "setOnMinutes",
|
|
19422
19521
|
label: t("Set pump run time", "Imposta il tempo di lavoro della pompa"),
|
|
19423
19522
|
phrase: t("Set the pump of {device} to run {minutes} minutes per cycle", "Imposta la pompa di {device} a lavorare {minutes} minuti per ciclo"),
|
|
19424
19523
|
icon: "timer",
|
|
@@ -19434,8 +19533,8 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
19434
19533
|
}]
|
|
19435
19534
|
},
|
|
19436
19535
|
{
|
|
19437
|
-
id: "
|
|
19438
|
-
method: "
|
|
19536
|
+
id: "pumpCycle.offMinutes",
|
|
19537
|
+
method: "setOffMinutes",
|
|
19439
19538
|
label: t("Set pump rest time", "Imposta il tempo di riposo della pompa"),
|
|
19440
19539
|
phrase: t("Set the pump of {device} to rest {minutes} minutes per cycle", "Imposta la pompa di {device} a riposare {minutes} minuti per ciclo"),
|
|
19441
19540
|
icon: "timer-off",
|
|
@@ -19449,29 +19548,15 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
19449
19548
|
unit: "min"
|
|
19450
19549
|
}
|
|
19451
19550
|
}]
|
|
19452
|
-
},
|
|
19453
|
-
{
|
|
19454
|
-
id: "petFountain.resetDailyConsumption",
|
|
19455
|
-
method: "resetDailyConsumption",
|
|
19456
|
-
label: t("Clear daily consumption", "Azzera il consumo giornaliero"),
|
|
19457
|
-
phrase: t("Clear the daily water consumption of {device}", "Azzera il consumo giornaliero di acqua di {device}"),
|
|
19458
|
-
icon: "rotate-ccw"
|
|
19459
19551
|
}
|
|
19460
19552
|
],
|
|
19461
19553
|
state: [{
|
|
19462
19554
|
kind: "boolean",
|
|
19463
|
-
field: "
|
|
19464
|
-
label: t("
|
|
19465
|
-
whenTrue: t("When
|
|
19466
|
-
whenFalse: t("When
|
|
19467
|
-
icon: "
|
|
19468
|
-
}, {
|
|
19469
|
-
kind: "numeric",
|
|
19470
|
-
field: "waterLevel",
|
|
19471
|
-
quantity: t("the water level", "il livello dell’acqua"),
|
|
19472
|
-
label: t("Water level", "Livello dell’acqua"),
|
|
19473
|
-
unit: "%",
|
|
19474
|
-
icon: "droplets"
|
|
19555
|
+
field: "enabled",
|
|
19556
|
+
label: t("Pump cycle", "Ciclo pompa"),
|
|
19557
|
+
whenTrue: t("When {device} starts running its pump on a cycle", "Quando {device} inizia a far lavorare la pompa a ciclo"),
|
|
19558
|
+
whenFalse: t("When {device} runs its pump continuously", "Quando {device} fa lavorare la pompa in continuo"),
|
|
19559
|
+
icon: "timer"
|
|
19475
19560
|
}]
|
|
19476
19561
|
},
|
|
19477
19562
|
"media-player": {
|
|
@@ -21364,6 +21449,7 @@ var SYSTEM_CAP_VOCABULARY = {
|
|
|
21364
21449
|
"audio-analyzer": system(PIPELINE),
|
|
21365
21450
|
"audio-codec": system(INTERNAL),
|
|
21366
21451
|
"auth-provider": system(IDENTITY),
|
|
21452
|
+
"board-key-source": system(INTERNAL),
|
|
21367
21453
|
backup: system("system backups — run and restored from the Backups page"),
|
|
21368
21454
|
broker: system("message-broker connections — configured, not actuated"),
|
|
21369
21455
|
"calendar-source": system(INTERNAL),
|
|
@@ -46618,6 +46704,63 @@ var binaryCapability = {
|
|
|
46618
46704
|
volatileStateFields: ["lastChangedAt"]
|
|
46619
46705
|
};
|
|
46620
46706
|
/**
|
|
46707
|
+
* Why a board key could not be read. Typed so a caller reports the cause and
|
|
46708
|
+
* never treats "could not read" as "has no key" (D49).
|
|
46709
|
+
*/
|
|
46710
|
+
var BoardKeyFailureReasonSchema = _enum([
|
|
46711
|
+
"unknown-source",
|
|
46712
|
+
"not-admin",
|
|
46713
|
+
"no-builder",
|
|
46714
|
+
"no-ingress-url",
|
|
46715
|
+
"unreachable",
|
|
46716
|
+
"unknown-board",
|
|
46717
|
+
"no-encryption-key",
|
|
46718
|
+
"unreadable-config"
|
|
46719
|
+
]);
|
|
46720
|
+
var BoardKeySourceSchema = object({
|
|
46721
|
+
sourceId: string(),
|
|
46722
|
+
name: string()
|
|
46723
|
+
});
|
|
46724
|
+
var BoardKeyBoardSchema = object({
|
|
46725
|
+
/** The builder's file name, e.g. `kitchen.yaml`: the handle `getBoardKey` takes. */
|
|
46726
|
+
configuration: string(),
|
|
46727
|
+
/** The node name the builder gives the board. */
|
|
46728
|
+
name: string(),
|
|
46729
|
+
/** The address the builder knows the board by, when it has one. */
|
|
46730
|
+
address: string().nullable()
|
|
46731
|
+
});
|
|
46732
|
+
var BoardKeyFailureSchema = object({
|
|
46733
|
+
ok: literal(false),
|
|
46734
|
+
reason: BoardKeyFailureReasonSchema,
|
|
46735
|
+
detail: string().optional()
|
|
46736
|
+
});
|
|
46737
|
+
var ListBoardsResultSchema = discriminatedUnion("ok", [object({
|
|
46738
|
+
ok: literal(true),
|
|
46739
|
+
boards: array(BoardKeyBoardSchema).readonly()
|
|
46740
|
+
}), BoardKeyFailureSchema]);
|
|
46741
|
+
var GetBoardKeyResultSchema = discriminatedUnion("ok", [object({
|
|
46742
|
+
ok: literal(true),
|
|
46743
|
+
key: string()
|
|
46744
|
+
}), BoardKeyFailureSchema]);
|
|
46745
|
+
/**
|
|
46746
|
+
* Where a device board's API encryption key can be read from (the ESPHome
|
|
46747
|
+
* builder that runs beside a Home Assistant). Admin only: `getBoardKey`
|
|
46748
|
+
* returns a credential, and nothing else the source holds ever crosses.
|
|
46749
|
+
*/
|
|
46750
|
+
var boardKeySourceCapability = {
|
|
46751
|
+
name: "board-key-source",
|
|
46752
|
+
scope: "system",
|
|
46753
|
+
mode: "collection",
|
|
46754
|
+
methods: {
|
|
46755
|
+
listSources: method(_void(), array(BoardKeySourceSchema).readonly(), { auth: "admin" }),
|
|
46756
|
+
listBoards: method(object({ sourceId: string().min(1) }), ListBoardsResultSchema, { auth: "admin" }),
|
|
46757
|
+
getBoardKey: method(object({
|
|
46758
|
+
sourceId: string().min(1),
|
|
46759
|
+
configuration: string().min(1)
|
|
46760
|
+
}), GetBoardKeyResultSchema, { auth: "admin" })
|
|
46761
|
+
}
|
|
46762
|
+
};
|
|
46763
|
+
/**
|
|
46621
46764
|
* Dimmable-light brightness control. Co-exists with `switch` on the
|
|
46622
46765
|
* same device — the switch toggles on/off, this cap sets the level
|
|
46623
46766
|
* applied when the light is on. Drivers map their per-vendor dim
|
|
@@ -53361,7 +53504,7 @@ var DishwasherStatusSchema = object({
|
|
|
53361
53504
|
/** Ms epoch of the last value received from the appliance; 0 = never. */
|
|
53362
53505
|
lastFetchedAt: number()
|
|
53363
53506
|
});
|
|
53364
|
-
var DeviceIdSchema$
|
|
53507
|
+
var DeviceIdSchema$2 = number().int().nonnegative();
|
|
53365
53508
|
/** A value a program option or setting can take. */
|
|
53366
53509
|
var DishwasherValueSchema = union([
|
|
53367
53510
|
boolean(),
|
|
@@ -53436,77 +53579,77 @@ var dishwasherCapability = {
|
|
|
53436
53579
|
* option feature keys; each is checked against the program's constraints.
|
|
53437
53580
|
*/
|
|
53438
53581
|
start: method(object({
|
|
53439
|
-
deviceId: DeviceIdSchema$
|
|
53582
|
+
deviceId: DeviceIdSchema$2,
|
|
53440
53583
|
program: string().min(1).optional(),
|
|
53441
53584
|
options: record(string(), DishwasherValueSchema).optional()
|
|
53442
53585
|
}), _void(), {
|
|
53443
53586
|
kind: "mutation",
|
|
53444
53587
|
auth: "protected"
|
|
53445
53588
|
}),
|
|
53446
|
-
pause: method(object({ deviceId: DeviceIdSchema$
|
|
53589
|
+
pause: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
|
|
53447
53590
|
kind: "mutation",
|
|
53448
53591
|
auth: "protected"
|
|
53449
53592
|
}),
|
|
53450
|
-
resume: method(object({ deviceId: DeviceIdSchema$
|
|
53593
|
+
resume: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
|
|
53451
53594
|
kind: "mutation",
|
|
53452
53595
|
auth: "protected"
|
|
53453
53596
|
}),
|
|
53454
|
-
stop: method(object({ deviceId: DeviceIdSchema$
|
|
53597
|
+
stop: method(object({ deviceId: DeviceIdSchema$2 }), _void(), {
|
|
53455
53598
|
kind: "mutation",
|
|
53456
53599
|
auth: "protected"
|
|
53457
53600
|
}),
|
|
53458
53601
|
/** Select (not start) a program; refused when the appliance does not offer it. */
|
|
53459
53602
|
setProgram: method(object({
|
|
53460
|
-
deviceId: DeviceIdSchema$
|
|
53603
|
+
deviceId: DeviceIdSchema$2,
|
|
53461
53604
|
program: string().min(1)
|
|
53462
53605
|
}), _void(), {
|
|
53463
53606
|
kind: "mutation",
|
|
53464
53607
|
auth: "protected"
|
|
53465
53608
|
}),
|
|
53466
53609
|
setPower: method(object({
|
|
53467
|
-
deviceId: DeviceIdSchema$
|
|
53610
|
+
deviceId: DeviceIdSchema$2,
|
|
53468
53611
|
on: boolean()
|
|
53469
53612
|
}), _void(), {
|
|
53470
53613
|
kind: "mutation",
|
|
53471
53614
|
auth: "protected"
|
|
53472
53615
|
}),
|
|
53473
53616
|
setHalfLoad: method(object({
|
|
53474
|
-
deviceId: DeviceIdSchema$
|
|
53617
|
+
deviceId: DeviceIdSchema$2,
|
|
53475
53618
|
on: boolean()
|
|
53476
53619
|
}), _void(), {
|
|
53477
53620
|
kind: "mutation",
|
|
53478
53621
|
auth: "protected"
|
|
53479
53622
|
}),
|
|
53480
53623
|
setHygienePlus: method(object({
|
|
53481
|
-
deviceId: DeviceIdSchema$
|
|
53624
|
+
deviceId: DeviceIdSchema$2,
|
|
53482
53625
|
on: boolean()
|
|
53483
53626
|
}), _void(), {
|
|
53484
53627
|
kind: "mutation",
|
|
53485
53628
|
auth: "protected"
|
|
53486
53629
|
}),
|
|
53487
53630
|
setExtraDry: method(object({
|
|
53488
|
-
deviceId: DeviceIdSchema$
|
|
53631
|
+
deviceId: DeviceIdSchema$2,
|
|
53489
53632
|
on: boolean()
|
|
53490
53633
|
}), _void(), {
|
|
53491
53634
|
kind: "mutation",
|
|
53492
53635
|
auth: "protected"
|
|
53493
53636
|
}),
|
|
53494
53637
|
setIntensiveZone: method(object({
|
|
53495
|
-
deviceId: DeviceIdSchema$
|
|
53638
|
+
deviceId: DeviceIdSchema$2,
|
|
53496
53639
|
on: boolean()
|
|
53497
53640
|
}), _void(), {
|
|
53498
53641
|
kind: "mutation",
|
|
53499
53642
|
auth: "protected"
|
|
53500
53643
|
}),
|
|
53501
53644
|
setVarioSpeedPlus: method(object({
|
|
53502
|
-
deviceId: DeviceIdSchema$
|
|
53645
|
+
deviceId: DeviceIdSchema$2,
|
|
53503
53646
|
on: boolean()
|
|
53504
53647
|
}), _void(), {
|
|
53505
53648
|
kind: "mutation",
|
|
53506
53649
|
auth: "protected"
|
|
53507
53650
|
}),
|
|
53508
53651
|
setChildLock: method(object({
|
|
53509
|
-
deviceId: DeviceIdSchema$
|
|
53652
|
+
deviceId: DeviceIdSchema$2,
|
|
53510
53653
|
on: boolean()
|
|
53511
53654
|
}), _void(), {
|
|
53512
53655
|
kind: "mutation",
|
|
@@ -53518,7 +53661,7 @@ var dishwasherCapability = {
|
|
|
53518
53661
|
* its declared range / members.
|
|
53519
53662
|
*/
|
|
53520
53663
|
setOption: method(object({
|
|
53521
|
-
deviceId: DeviceIdSchema$
|
|
53664
|
+
deviceId: DeviceIdSchema$2,
|
|
53522
53665
|
key: string().min(1),
|
|
53523
53666
|
value: DishwasherValueSchema
|
|
53524
53667
|
}), _void(), {
|
|
@@ -53526,7 +53669,7 @@ var dishwasherCapability = {
|
|
|
53526
53669
|
auth: "protected"
|
|
53527
53670
|
}),
|
|
53528
53671
|
/** What this appliance can do, from its own description — the UI is derived from it. */
|
|
53529
|
-
getOptions: method(object({ deviceId: DeviceIdSchema$
|
|
53672
|
+
getOptions: method(object({ deviceId: DeviceIdSchema$2 }), DishwasherOptionsSchema, { auth: "protected" })
|
|
53530
53673
|
},
|
|
53531
53674
|
status: {
|
|
53532
53675
|
schema: DishwasherStatusSchema,
|
|
@@ -55901,6 +56044,11 @@ var IntegrationInstanceSchema = object({
|
|
|
55901
56044
|
name: string(),
|
|
55902
56045
|
/** The addon's own rule (an URL is present, a client id is present...). */
|
|
55903
56046
|
configured: boolean(),
|
|
56047
|
+
/**
|
|
56048
|
+
* The instance's own on/off switch (D996): always present, derived from the record body
|
|
56049
|
+
* (`enabled !== false`, so a row written before the field existed is on).
|
|
56050
|
+
*/
|
|
56051
|
+
enabled: boolean(),
|
|
55904
56052
|
/** Values for the instance form; a secret is a `SecretFieldView`, never text. */
|
|
55905
56053
|
formValues: record(string(), unknown()),
|
|
55906
56054
|
status: IntegrationInstanceStatusSchema.optional()
|
|
@@ -55920,6 +56068,12 @@ method(_void(), IntegrationInstanceDescriptionSchema, { auth: "admin" }), method
|
|
|
55920
56068
|
}), method(IntegrationInstancePatchSchema, object({ ok: literal(true) }), {
|
|
55921
56069
|
kind: "mutation",
|
|
55922
56070
|
auth: "admin"
|
|
56071
|
+
}), method(object({
|
|
56072
|
+
id: IntegrationInstanceIdSchema,
|
|
56073
|
+
enabled: boolean()
|
|
56074
|
+
}), object({ ok: literal(true) }), {
|
|
56075
|
+
kind: "mutation",
|
|
56076
|
+
auth: "admin"
|
|
55923
56077
|
}), method(object({ id: IntegrationInstanceIdSchema }), object({ ok: literal(true) }), {
|
|
55924
56078
|
kind: "mutation",
|
|
55925
56079
|
auth: "admin"
|
|
@@ -68864,7 +69018,7 @@ var petFeederCapability = {
|
|
|
68864
69018
|
/**
|
|
68865
69019
|
* Pet water-fountain cap. Models the telemetry and the control surface of a
|
|
68866
69020
|
* circulating drinking fountain: how much water is in the tank, how much the
|
|
68867
|
-
* pet drank, whether the pump runs
|
|
69021
|
+
* pet drank, whether the pump runs.
|
|
68868
69022
|
*
|
|
68869
69023
|
* It has no native vendor provider of its own: a fountain reaches CamStack as
|
|
68870
69024
|
* a container of loose entities (a pump switch, two number boxes, a "filter
|
|
@@ -68880,8 +69034,10 @@ var petFeederCapability = {
|
|
|
68880
69034
|
* never here. Every reading may be `null`: a source that is offline or does
|
|
68881
69035
|
* not report is unknown, never zero.
|
|
68882
69036
|
*
|
|
68883
|
-
* The
|
|
68884
|
-
* cap
|
|
69037
|
+
* The pump's on/off duty cycle is model-specific and lives in the optional
|
|
69038
|
+
* `pump-cycle` cap. The filter, the cleaning and the water change are not
|
|
69039
|
+
* fields of this cap: they are items of the `consumables` cap on the same
|
|
69040
|
+
* device (kind `wear`), reset by the same forward mechanism.
|
|
68885
69041
|
*/
|
|
68886
69042
|
var PetFountainStatusSchema = object({
|
|
68887
69043
|
/** Water in the tank, 0..100 (%). Null while the source has not reported. */
|
|
@@ -68892,27 +69048,20 @@ var PetFountainStatusSchema = object({
|
|
|
68892
69048
|
empty: boolean().nullable(),
|
|
68893
69049
|
/** True while the pump is running. Null while unknown. */
|
|
68894
69050
|
pumpRunning: boolean().nullable(),
|
|
68895
|
-
/** True when the pump works on an on/off duty cycle rather than continuously. */
|
|
68896
|
-
pumpIntervalEnabled: boolean().nullable(),
|
|
68897
|
-
/** How long the pump runs per cycle, in seconds. */
|
|
68898
|
-
pumpOnTime: number().min(0).nullable().meta(readingMeta("duration")),
|
|
68899
|
-
/** How long the pump rests per cycle, in seconds. */
|
|
68900
|
-
pumpOffTime: number().min(0).nullable().meta(readingMeta("duration")),
|
|
68901
69051
|
/** Water drunk in the last drink, in litres. */
|
|
68902
69052
|
lastDrink: number().min(0).nullable().meta(readingMeta("volume")),
|
|
68903
69053
|
/** Water drunk in the current hour, in litres. */
|
|
68904
69054
|
currentHourDrink: number().min(0).nullable().meta(readingMeta("volume")),
|
|
68905
69055
|
/** Water drunk over the last 24 hours (rolling), in litres. */
|
|
68906
69056
|
last24hDrink: number().min(0).nullable().meta(readingMeta("volume")),
|
|
68907
|
-
/** Water drunk since local midnight, in litres. */
|
|
69057
|
+
/** Water drunk since local midnight, in litres. Null when the fountain has no such sensor. */
|
|
68908
69058
|
todayDrink: number().min(0).nullable().meta(readingMeta("volume")),
|
|
68909
69059
|
/** Decoded fault message. Null means healthy; a non-null string is an active fault. */
|
|
68910
69060
|
error: string().nullable(),
|
|
68911
69061
|
/** Ms epoch when the slice was last refreshed. */
|
|
68912
69062
|
lastFetchedAt: number()
|
|
68913
69063
|
});
|
|
68914
|
-
var DeviceIdSchema = number().int().nonnegative();
|
|
68915
|
-
var MinutesSchema = number().int().min(0);
|
|
69064
|
+
var DeviceIdSchema$1 = number().int().nonnegative();
|
|
68916
69065
|
var petFountainCapability = {
|
|
68917
69066
|
name: "pet-fountain",
|
|
68918
69067
|
scope: "device",
|
|
@@ -68922,38 +69071,14 @@ var petFountainCapability = {
|
|
|
68922
69071
|
methods: {
|
|
68923
69072
|
/** Start or stop the pump. */
|
|
68924
69073
|
setPump: method(object({
|
|
68925
|
-
deviceId: DeviceIdSchema,
|
|
68926
|
-
on: boolean()
|
|
68927
|
-
}), _void(), {
|
|
68928
|
-
kind: "mutation",
|
|
68929
|
-
auth: "protected"
|
|
68930
|
-
}),
|
|
68931
|
-
/** Switch the on/off duty cycle on or off (off = the pump runs continuously). */
|
|
68932
|
-
setPumpInterval: method(object({
|
|
68933
|
-
deviceId: DeviceIdSchema,
|
|
69074
|
+
deviceId: DeviceIdSchema$1,
|
|
68934
69075
|
on: boolean()
|
|
68935
69076
|
}), _void(), {
|
|
68936
69077
|
kind: "mutation",
|
|
68937
69078
|
auth: "protected"
|
|
68938
69079
|
}),
|
|
68939
|
-
/** Set how many minutes the pump runs per cycle. */
|
|
68940
|
-
setPumpOnMinutes: method(object({
|
|
68941
|
-
deviceId: DeviceIdSchema,
|
|
68942
|
-
minutes: MinutesSchema
|
|
68943
|
-
}), _void(), {
|
|
68944
|
-
kind: "mutation",
|
|
68945
|
-
auth: "protected"
|
|
68946
|
-
}),
|
|
68947
|
-
/** Set how many minutes the pump rests per cycle. */
|
|
68948
|
-
setPumpOffMinutes: method(object({
|
|
68949
|
-
deviceId: DeviceIdSchema,
|
|
68950
|
-
minutes: MinutesSchema
|
|
68951
|
-
}), _void(), {
|
|
68952
|
-
kind: "mutation",
|
|
68953
|
-
auth: "protected"
|
|
68954
|
-
}),
|
|
68955
69080
|
/** Clear the rolling daily consumption counters on the device. */
|
|
68956
|
-
resetDailyConsumption: method(object({ deviceId: DeviceIdSchema }), _void(), {
|
|
69081
|
+
resetDailyConsumption: method(object({ deviceId: DeviceIdSchema$1 }), _void(), {
|
|
68957
69082
|
kind: "mutation",
|
|
68958
69083
|
auth: "protected"
|
|
68959
69084
|
})
|
|
@@ -71286,6 +71411,79 @@ var ptzAutotrackCapability = {
|
|
|
71286
71411
|
*/
|
|
71287
71412
|
history: "none"
|
|
71288
71413
|
};
|
|
71414
|
+
/**
|
|
71415
|
+
* The on/off duty cycle of a pet fountain's pump. Some models run the pump
|
|
71416
|
+
* continuously and have nothing to configure; others can alternate a run time
|
|
71417
|
+
* and a rest time. That is model-specific, so it is its own optional cap on the
|
|
71418
|
+
* fountain device: a fountain without cycle entities simply never composes it
|
|
71419
|
+
* (planning#366), and the `pet-fountain` cap stays the model-independent core.
|
|
71420
|
+
*
|
|
71421
|
+
* Like `pet-fountain` it has no native vendor provider: an operator BUILDS the
|
|
71422
|
+
* cycle from loose entities (a cycle switch and two number boxes) and every
|
|
71423
|
+
* method is a forward to one source entity (D659, D967). Durations are stored
|
|
71424
|
+
* in SECONDS (D944); a number box that cannot be read back leaves them `null`
|
|
71425
|
+
* — unknown, never zero (D393).
|
|
71426
|
+
*/
|
|
71427
|
+
var PumpCycleStatusSchema = object({
|
|
71428
|
+
/** True when the pump works on the on/off cycle, false when it runs continuously. Null while unknown. */
|
|
71429
|
+
enabled: boolean().nullable(),
|
|
71430
|
+
/** How long the pump runs per cycle, in seconds. Null while unknown. */
|
|
71431
|
+
onTime: number().min(0).nullable().meta(readingMeta("duration")),
|
|
71432
|
+
/** How long the pump rests per cycle, in seconds. Null while unknown. */
|
|
71433
|
+
offTime: number().min(0).nullable().meta(readingMeta("duration")),
|
|
71434
|
+
/** Ms epoch when the slice was last refreshed. */
|
|
71435
|
+
lastFetchedAt: number()
|
|
71436
|
+
});
|
|
71437
|
+
var DeviceIdSchema = number().int().nonnegative();
|
|
71438
|
+
var MinutesSchema = number().int().min(0);
|
|
71439
|
+
var pumpCycleCapability = {
|
|
71440
|
+
name: "pump-cycle",
|
|
71441
|
+
scope: "device",
|
|
71442
|
+
deviceNative: true,
|
|
71443
|
+
mode: "singleton",
|
|
71444
|
+
deviceTypes: [DeviceType.PetFountain],
|
|
71445
|
+
methods: {
|
|
71446
|
+
/** Switch the on/off duty cycle on or off (off = the pump runs continuously). */
|
|
71447
|
+
setEnabled: method(object({
|
|
71448
|
+
deviceId: DeviceIdSchema,
|
|
71449
|
+
on: boolean()
|
|
71450
|
+
}), _void(), {
|
|
71451
|
+
kind: "mutation",
|
|
71452
|
+
auth: "protected"
|
|
71453
|
+
}),
|
|
71454
|
+
/** Set how many minutes the pump runs per cycle. */
|
|
71455
|
+
setOnMinutes: method(object({
|
|
71456
|
+
deviceId: DeviceIdSchema,
|
|
71457
|
+
minutes: MinutesSchema
|
|
71458
|
+
}), _void(), {
|
|
71459
|
+
kind: "mutation",
|
|
71460
|
+
auth: "protected"
|
|
71461
|
+
}),
|
|
71462
|
+
/** Set how many minutes the pump rests per cycle. */
|
|
71463
|
+
setOffMinutes: method(object({
|
|
71464
|
+
deviceId: DeviceIdSchema,
|
|
71465
|
+
minutes: MinutesSchema
|
|
71466
|
+
}), _void(), {
|
|
71467
|
+
kind: "mutation",
|
|
71468
|
+
auth: "protected"
|
|
71469
|
+
})
|
|
71470
|
+
},
|
|
71471
|
+
status: {
|
|
71472
|
+
schema: PumpCycleStatusSchema,
|
|
71473
|
+
kind: "push"
|
|
71474
|
+
},
|
|
71475
|
+
/** Runtime-state slice — mirrored by the kernel; the hero card reads it whole. */
|
|
71476
|
+
runtimeState: PumpCycleStatusSchema,
|
|
71477
|
+
/**
|
|
71478
|
+
* Runtime-state durability: **session** — live appliance state re-published on connect.
|
|
71479
|
+
*
|
|
71480
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
71481
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
71482
|
+
*/
|
|
71483
|
+
durability: "session",
|
|
71484
|
+
/** History (D850): a duty-cycle setting is not a series worth recording. */
|
|
71485
|
+
history: "none"
|
|
71486
|
+
};
|
|
71289
71487
|
DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, DeviceType.Gateway, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
|
|
71290
71488
|
kind: "mutation",
|
|
71291
71489
|
auth: "admin"
|
|
@@ -80582,6 +80780,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
80582
80780
|
pressureSensor: pressureSensorCapability,
|
|
80583
80781
|
privacyMask: privacyMaskCapability,
|
|
80584
80782
|
ptzAutotrack: ptzAutotrackCapability,
|
|
80783
|
+
pumpCycle: pumpCycleCapability,
|
|
80585
80784
|
recordingOnboard: recordingOnboardCapability,
|
|
80586
80785
|
recordingSignal: recordingSignalCapability,
|
|
80587
80786
|
runningState: runningStateCapability,
|
|
@@ -82766,6 +82965,27 @@ Object.freeze({
|
|
|
82766
82965
|
access: "view",
|
|
82767
82966
|
role: "viewer"
|
|
82768
82967
|
},
|
|
82968
|
+
"boardKeySource.getBoardKey": {
|
|
82969
|
+
capName: "board-key-source",
|
|
82970
|
+
capScope: "system",
|
|
82971
|
+
addonId: null,
|
|
82972
|
+
access: "view",
|
|
82973
|
+
role: "admin"
|
|
82974
|
+
},
|
|
82975
|
+
"boardKeySource.listBoards": {
|
|
82976
|
+
capName: "board-key-source",
|
|
82977
|
+
capScope: "system",
|
|
82978
|
+
addonId: null,
|
|
82979
|
+
access: "view",
|
|
82980
|
+
role: "admin"
|
|
82981
|
+
},
|
|
82982
|
+
"boardKeySource.listSources": {
|
|
82983
|
+
capName: "board-key-source",
|
|
82984
|
+
capScope: "system",
|
|
82985
|
+
addonId: null,
|
|
82986
|
+
access: "view",
|
|
82987
|
+
role: "admin"
|
|
82988
|
+
},
|
|
82769
82989
|
"brightness.getStatus": {
|
|
82770
82990
|
capName: "brightness",
|
|
82771
82991
|
capScope: "device",
|
|
@@ -85447,6 +85667,13 @@ Object.freeze({
|
|
|
85447
85667
|
access: "view",
|
|
85448
85668
|
role: "admin"
|
|
85449
85669
|
},
|
|
85670
|
+
"integrationInstances.setInstanceEnabled": {
|
|
85671
|
+
capName: "integration-instances",
|
|
85672
|
+
capScope: "system",
|
|
85673
|
+
addonId: null,
|
|
85674
|
+
access: "create",
|
|
85675
|
+
role: "admin"
|
|
85676
|
+
},
|
|
85450
85677
|
"integrationInstances.testInstance": {
|
|
85451
85678
|
capName: "integration-instances",
|
|
85452
85679
|
capScope: "system",
|
|
@@ -87582,27 +87809,6 @@ Object.freeze({
|
|
|
87582
87809
|
access: "create",
|
|
87583
87810
|
role: "viewer"
|
|
87584
87811
|
},
|
|
87585
|
-
"petFountain.setPumpInterval": {
|
|
87586
|
-
capName: "pet-fountain",
|
|
87587
|
-
capScope: "device",
|
|
87588
|
-
addonId: null,
|
|
87589
|
-
access: "create",
|
|
87590
|
-
role: "viewer"
|
|
87591
|
-
},
|
|
87592
|
-
"petFountain.setPumpOffMinutes": {
|
|
87593
|
-
capName: "pet-fountain",
|
|
87594
|
-
capScope: "device",
|
|
87595
|
-
addonId: null,
|
|
87596
|
-
access: "create",
|
|
87597
|
-
role: "viewer"
|
|
87598
|
-
},
|
|
87599
|
-
"petFountain.setPumpOnMinutes": {
|
|
87600
|
-
capName: "pet-fountain",
|
|
87601
|
-
capScope: "device",
|
|
87602
|
-
addonId: null,
|
|
87603
|
-
access: "create",
|
|
87604
|
-
role: "viewer"
|
|
87605
|
-
},
|
|
87606
87812
|
"pipelineAnalytics.addRetrainFrameFromRecording": {
|
|
87607
87813
|
capName: "pipeline-analytics",
|
|
87608
87814
|
capScope: "device",
|
|
@@ -89381,6 +89587,34 @@ Object.freeze({
|
|
|
89381
89587
|
access: "create",
|
|
89382
89588
|
role: "admin"
|
|
89383
89589
|
},
|
|
89590
|
+
"pumpCycle.getStatus": {
|
|
89591
|
+
capName: "pump-cycle",
|
|
89592
|
+
capScope: "device",
|
|
89593
|
+
addonId: null,
|
|
89594
|
+
access: "view",
|
|
89595
|
+
role: "viewer"
|
|
89596
|
+
},
|
|
89597
|
+
"pumpCycle.setEnabled": {
|
|
89598
|
+
capName: "pump-cycle",
|
|
89599
|
+
capScope: "device",
|
|
89600
|
+
addonId: null,
|
|
89601
|
+
access: "create",
|
|
89602
|
+
role: "viewer"
|
|
89603
|
+
},
|
|
89604
|
+
"pumpCycle.setOffMinutes": {
|
|
89605
|
+
capName: "pump-cycle",
|
|
89606
|
+
capScope: "device",
|
|
89607
|
+
addonId: null,
|
|
89608
|
+
access: "create",
|
|
89609
|
+
role: "viewer"
|
|
89610
|
+
},
|
|
89611
|
+
"pumpCycle.setOnMinutes": {
|
|
89612
|
+
capName: "pump-cycle",
|
|
89613
|
+
capScope: "device",
|
|
89614
|
+
addonId: null,
|
|
89615
|
+
access: "create",
|
|
89616
|
+
role: "viewer"
|
|
89617
|
+
},
|
|
89384
89618
|
"reboot.reboot": {
|
|
89385
89619
|
capName: "reboot",
|
|
89386
89620
|
capScope: "device",
|
|
@@ -93936,21 +94170,6 @@ Object.freeze({
|
|
|
93936
94170
|
form: "single",
|
|
93937
94171
|
optional: false
|
|
93938
94172
|
}],
|
|
93939
|
-
"petFountain.setPumpInterval": [{
|
|
93940
|
-
name: "deviceId",
|
|
93941
|
-
form: "single",
|
|
93942
|
-
optional: false
|
|
93943
|
-
}],
|
|
93944
|
-
"petFountain.setPumpOffMinutes": [{
|
|
93945
|
-
name: "deviceId",
|
|
93946
|
-
form: "single",
|
|
93947
|
-
optional: false
|
|
93948
|
-
}],
|
|
93949
|
-
"petFountain.setPumpOnMinutes": [{
|
|
93950
|
-
name: "deviceId",
|
|
93951
|
-
form: "single",
|
|
93952
|
-
optional: false
|
|
93953
|
-
}],
|
|
93954
94173
|
"pipelineAnalytics.addRetrainFrameFromRecording": [{
|
|
93955
94174
|
name: "deviceId",
|
|
93956
94175
|
form: "single",
|
|
@@ -94586,6 +94805,26 @@ Object.freeze({
|
|
|
94586
94805
|
form: "single",
|
|
94587
94806
|
optional: false
|
|
94588
94807
|
}],
|
|
94808
|
+
"pumpCycle.getStatus": [{
|
|
94809
|
+
name: "deviceId",
|
|
94810
|
+
form: "single",
|
|
94811
|
+
optional: false
|
|
94812
|
+
}],
|
|
94813
|
+
"pumpCycle.setEnabled": [{
|
|
94814
|
+
name: "deviceId",
|
|
94815
|
+
form: "single",
|
|
94816
|
+
optional: false
|
|
94817
|
+
}],
|
|
94818
|
+
"pumpCycle.setOffMinutes": [{
|
|
94819
|
+
name: "deviceId",
|
|
94820
|
+
form: "single",
|
|
94821
|
+
optional: false
|
|
94822
|
+
}],
|
|
94823
|
+
"pumpCycle.setOnMinutes": [{
|
|
94824
|
+
name: "deviceId",
|
|
94825
|
+
form: "single",
|
|
94826
|
+
optional: false
|
|
94827
|
+
}],
|
|
94589
94828
|
"reboot.reboot": [{
|
|
94590
94829
|
name: "deviceId",
|
|
94591
94830
|
form: "single",
|
|
@@ -97440,6 +97679,12 @@ Object.defineProperty(exports, "binaryCapability", {
|
|
|
97440
97679
|
return binaryCapability;
|
|
97441
97680
|
}
|
|
97442
97681
|
});
|
|
97682
|
+
Object.defineProperty(exports, "boardKeySourceCapability", {
|
|
97683
|
+
enumerable: true,
|
|
97684
|
+
get: function() {
|
|
97685
|
+
return boardKeySourceCapability;
|
|
97686
|
+
}
|
|
97687
|
+
});
|
|
97443
97688
|
Object.defineProperty(exports, "boolean", {
|
|
97444
97689
|
enumerable: true,
|
|
97445
97690
|
get: function() {
|