camstack 1.2.24 → 1.2.26
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.
|
@@ -14522,7 +14522,7 @@ function date4(params) {
|
|
|
14522
14522
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14523
14523
|
config(en_default());
|
|
14524
14524
|
|
|
14525
|
-
// ../types/dist/sleep-
|
|
14525
|
+
// ../types/dist/sleep-DlC2kJYf.mjs
|
|
14526
14526
|
var WELL_KNOWN_TABS = [
|
|
14527
14527
|
{
|
|
14528
14528
|
id: "overview",
|
|
@@ -15278,6 +15278,15 @@ var deviceOpsCapability = {
|
|
|
15278
15278
|
getRawState: method(external_exports.object({ deviceId: external_exports.number() }), RawStateResultSchema.nullable(), { auth: "protected" })
|
|
15279
15279
|
}
|
|
15280
15280
|
};
|
|
15281
|
+
var BOOT_RECOVERY_BACKOFF_MS = [
|
|
15282
|
+
15e3,
|
|
15283
|
+
6e4,
|
|
15284
|
+
5 * 6e4,
|
|
15285
|
+
15 * 6e4,
|
|
15286
|
+
30 * 6e4,
|
|
15287
|
+
60 * 6e4,
|
|
15288
|
+
90 * 6e4
|
|
15289
|
+
];
|
|
15281
15290
|
function sleep(ms) {
|
|
15282
15291
|
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
15283
15292
|
}
|
|
@@ -18893,6 +18902,8 @@ var QueryFilterSchema = external_exports.object({
|
|
|
18893
18902
|
where: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
18894
18903
|
whereIn: external_exports.record(external_exports.string(), external_exports.array(external_exports.unknown())).optional(),
|
|
18895
18904
|
whereBetween: external_exports.record(external_exports.string(), external_exports.tuple([external_exports.unknown(), external_exports.unknown()])).optional(),
|
|
18905
|
+
/** NULL-safe exclusion: matches rows whose field is NULL OR != the value. */
|
|
18906
|
+
whereNot: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
18896
18907
|
orderBy: external_exports.object({
|
|
18897
18908
|
field: external_exports.string(),
|
|
18898
18909
|
direction: external_exports.enum(["asc", "desc"])
|
|
@@ -18903,7 +18914,8 @@ var QueryFilterSchema = external_exports.object({
|
|
|
18903
18914
|
var MutationFilterSchema = external_exports.object({
|
|
18904
18915
|
where: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
18905
18916
|
whereIn: external_exports.record(external_exports.string(), external_exports.array(external_exports.unknown())).optional(),
|
|
18906
|
-
whereBetween: external_exports.record(external_exports.string(), external_exports.tuple([external_exports.unknown(), external_exports.unknown()])).optional()
|
|
18917
|
+
whereBetween: external_exports.record(external_exports.string(), external_exports.tuple([external_exports.unknown(), external_exports.unknown()])).optional(),
|
|
18918
|
+
whereNot: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
18907
18919
|
});
|
|
18908
18920
|
var SettingsRecordSchema = external_exports.object({
|
|
18909
18921
|
id: external_exports.string(),
|
|
@@ -20726,6 +20738,11 @@ var LlmImageSchema = external_exports.object({
|
|
|
20726
20738
|
bytes: external_exports.instanceof(Uint8Array),
|
|
20727
20739
|
mimeType: external_exports.string()
|
|
20728
20740
|
});
|
|
20741
|
+
var LlmRetryPolicySchema = external_exports.object({
|
|
20742
|
+
enabled: external_exports.boolean().default(false),
|
|
20743
|
+
/** Total attempts INCLUDING the first. 1 = no retry. */
|
|
20744
|
+
maxAttempts: external_exports.number().int().min(1).max(5).default(1)
|
|
20745
|
+
});
|
|
20729
20746
|
var LlmGenerateBaseInputSchema = external_exports.object({
|
|
20730
20747
|
/** Collection routing (the notification-output posture). */
|
|
20731
20748
|
addonId: external_exports.string().optional(),
|
|
@@ -20740,7 +20757,34 @@ var LlmGenerateBaseInputSchema = external_exports.object({
|
|
|
20740
20757
|
jsonSchema: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
20741
20758
|
/** Per-call override of the profile default. */
|
|
20742
20759
|
maxTokens: external_exports.number().int().positive().optional(),
|
|
20743
|
-
temperature: external_exports.number().optional()
|
|
20760
|
+
temperature: external_exports.number().optional(),
|
|
20761
|
+
/** Per-call override of the profile default (nucleus sampling). */
|
|
20762
|
+
topP: external_exports.number().min(0).max(1).optional(),
|
|
20763
|
+
/** Per-call override of the profile default (top-k sampling). */
|
|
20764
|
+
topK: external_exports.number().int().positive().optional(),
|
|
20765
|
+
/** Per-call override of `profile.timeoutMs` — the total generation bound. */
|
|
20766
|
+
timeoutMs: external_exports.number().int().positive().optional(),
|
|
20767
|
+
/** Per-call override; beats both the consumer table and the profile. */
|
|
20768
|
+
retry: LlmRetryPolicySchema.optional(),
|
|
20769
|
+
/**
|
|
20770
|
+
* Caller-minted id that makes this generation CANCELLABLE.
|
|
20771
|
+
*
|
|
20772
|
+
* Without it a caller that stops waiting cannot stop the work: the gates race
|
|
20773
|
+
* the call against 8 s and free their own slot when the timer wins, while the
|
|
20774
|
+
* generation upstream keeps running to `profile.timeoutMs` — 60 s by default,
|
|
20775
|
+
* on a single-threaded local model. The per-camera bound then counts WAITS,
|
|
20776
|
+
* not generations, and the real load is unbounded.
|
|
20777
|
+
*
|
|
20778
|
+
* `AbortSignal` cannot cross a process boundary; an id can. Pass one here and
|
|
20779
|
+
* `llm.cancel({ requestId })` tears the socket down.
|
|
20780
|
+
*/
|
|
20781
|
+
requestId: external_exports.string().optional()
|
|
20782
|
+
});
|
|
20783
|
+
var ManagedModelExtraFileSchema = external_exports.object({
|
|
20784
|
+
url: external_exports.string(),
|
|
20785
|
+
filename: external_exports.string(),
|
|
20786
|
+
sizeBytes: external_exports.number(),
|
|
20787
|
+
sha256: external_exports.string().optional()
|
|
20744
20788
|
});
|
|
20745
20789
|
var ManagedModelRefSchema = external_exports.discriminatedUnion("kind", [
|
|
20746
20790
|
external_exports.object({
|
|
@@ -20750,7 +20794,11 @@ var ManagedModelRefSchema = external_exports.discriminatedUnion("kind", [
|
|
|
20750
20794
|
external_exports.object({
|
|
20751
20795
|
kind: external_exports.literal("url"),
|
|
20752
20796
|
url: external_exports.string(),
|
|
20753
|
-
sha256: external_exports.string().optional()
|
|
20797
|
+
sha256: external_exports.string().optional(),
|
|
20798
|
+
/** Picker/status label; the file basename when absent. */
|
|
20799
|
+
label: external_exports.string().optional(),
|
|
20800
|
+
sizeBytes: external_exports.number().optional(),
|
|
20801
|
+
extraFiles: external_exports.array(ManagedModelExtraFileSchema).optional()
|
|
20754
20802
|
}),
|
|
20755
20803
|
external_exports.object({
|
|
20756
20804
|
kind: external_exports.literal("path"),
|
|
@@ -20768,13 +20816,76 @@ var ManagedRuntimeConfigSchema = external_exports.object({
|
|
|
20768
20816
|
gpuLayers: external_exports.number().int().default(0),
|
|
20769
20817
|
/** Default: cpus-2, clamped ≥1 (resolved node-side). */
|
|
20770
20818
|
threads: external_exports.number().int().optional(),
|
|
20771
|
-
/** Concurrent slots. */
|
|
20819
|
+
/** Concurrent slots (`--parallel`). */
|
|
20772
20820
|
parallel: external_exports.number().int().default(1),
|
|
20821
|
+
/** Logical batch size (`-b`). Larger = faster prompt ingest, more RAM. */
|
|
20822
|
+
batchSize: external_exports.number().int().positive().optional(),
|
|
20823
|
+
/** Physical batch / micro-batch (`-ub`). */
|
|
20824
|
+
ubatchSize: external_exports.number().int().positive().optional(),
|
|
20825
|
+
/**
|
|
20826
|
+
* `--flash-attn`. Cuts KV-cache memory on the backends that implement it and
|
|
20827
|
+
* is a no-op elsewhere, so it is offered rather than assumed.
|
|
20828
|
+
*/
|
|
20829
|
+
flashAttention: external_exports.boolean().default(false),
|
|
20830
|
+
/**
|
|
20831
|
+
* `--mlock`. Pins the weights in RAM so the OS cannot page them out mid
|
|
20832
|
+
* inference. Costs the full model size in resident memory — which is exactly
|
|
20833
|
+
* what the RAM budget is counting.
|
|
20834
|
+
*/
|
|
20835
|
+
mlock: external_exports.boolean().default(false),
|
|
20836
|
+
/**
|
|
20837
|
+
* `--no-mmap`. Reads the whole GGUF up front instead of mapping it. Slower to
|
|
20838
|
+
* start, but avoids the page-fault stalls a network or spinning-disk model
|
|
20839
|
+
* store produces on every first token.
|
|
20840
|
+
*/
|
|
20841
|
+
noMmap: external_exports.boolean().default(false),
|
|
20842
|
+
/** `--cache-type-k` / `--cache-type-v` — quantising the KV cache is the
|
|
20843
|
+
* cheapest way to fit a longer context in the same RAM. */
|
|
20844
|
+
cacheTypeK: external_exports.enum([
|
|
20845
|
+
"f32",
|
|
20846
|
+
"f16",
|
|
20847
|
+
"q8_0",
|
|
20848
|
+
"q5_1",
|
|
20849
|
+
"q5_0",
|
|
20850
|
+
"q4_1",
|
|
20851
|
+
"q4_0"
|
|
20852
|
+
]).optional(),
|
|
20853
|
+
cacheTypeV: external_exports.enum([
|
|
20854
|
+
"f32",
|
|
20855
|
+
"f16",
|
|
20856
|
+
"q8_0",
|
|
20857
|
+
"q5_1",
|
|
20858
|
+
"q5_0",
|
|
20859
|
+
"q4_1",
|
|
20860
|
+
"q4_0"
|
|
20861
|
+
]).optional(),
|
|
20862
|
+
/**
|
|
20863
|
+
* Escape hatch for llama-server flags this schema does NOT model — `--jinja`
|
|
20864
|
+
* (which most vision chat templates need and some language-only models
|
|
20865
|
+
* dislike), `--cont-batching`, `--rope-scaling`, …
|
|
20866
|
+
*
|
|
20867
|
+
* It is NOT a second place to set the flags above. A token that collides
|
|
20868
|
+
* with a typed field is REJECTED at start, naming the field that owns it
|
|
20869
|
+
* (`assertNoOwnedFlags`), because two knobs writing the same argv is exactly
|
|
20870
|
+
* the "two switches that disagree" failure this repo has already shipped
|
|
20871
|
+
* twice (D62).
|
|
20872
|
+
*/
|
|
20873
|
+
extraArgs: external_exports.array(external_exports.string()).default([]),
|
|
20773
20874
|
/** Else lazy: first generate boots it. */
|
|
20774
20875
|
autoStart: external_exports.boolean().default(false),
|
|
20775
20876
|
/** 0 = never; frees RAM after quiet periods. */
|
|
20776
20877
|
idleStopMinutes: external_exports.number().int().default(30)
|
|
20777
20878
|
});
|
|
20879
|
+
var LlmDownloadProgressSchema = external_exports.object({
|
|
20880
|
+
phase: external_exports.enum(["downloading", "verifying"]),
|
|
20881
|
+
/** The artifact currently moving, e.g. `mmproj-F16.gguf`. */
|
|
20882
|
+
file: external_exports.string(),
|
|
20883
|
+
fileIndex: external_exports.number().int(),
|
|
20884
|
+
fileCount: external_exports.number().int(),
|
|
20885
|
+
/** Across the WHOLE install, not the current file. */
|
|
20886
|
+
downloadedBytes: external_exports.number(),
|
|
20887
|
+
totalBytes: external_exports.number().optional()
|
|
20888
|
+
});
|
|
20778
20889
|
var LlmRuntimeStatusSchema = external_exports.object({
|
|
20779
20890
|
/** Status is ALWAYS node-qualified. */
|
|
20780
20891
|
nodeId: external_exports.string(),
|
|
@@ -20791,6 +20902,8 @@ var LlmRuntimeStatusSchema = external_exports.object({
|
|
|
20791
20902
|
modelPath: external_exports.string().optional(),
|
|
20792
20903
|
modelId: external_exports.string().optional(),
|
|
20793
20904
|
downloadProgress: external_exports.number().min(0).max(1).optional(),
|
|
20905
|
+
/** Detail behind `downloadProgress`; present for the same lifetime. */
|
|
20906
|
+
download: LlmDownloadProgressSchema.optional(),
|
|
20794
20907
|
lastError: external_exports.string().optional(),
|
|
20795
20908
|
crashesInWindow: external_exports.number(),
|
|
20796
20909
|
/** Child RSS (sampled best-effort). */
|
|
@@ -20801,7 +20914,14 @@ var LlmNodeModelSchema = external_exports.object({
|
|
|
20801
20914
|
file: external_exports.string(),
|
|
20802
20915
|
sizeBytes: external_exports.number(),
|
|
20803
20916
|
catalogId: external_exports.string().optional(),
|
|
20804
|
-
installedAt: external_exports.number().optional()
|
|
20917
|
+
installedAt: external_exports.number().optional(),
|
|
20918
|
+
/**
|
|
20919
|
+
* Absolute path on the node. Present so a file that is on disk but matches
|
|
20920
|
+
* no catalog entry — a custom Hugging Face install, or a GGUF the operator
|
|
20921
|
+
* copied in by hand — is still SELECTABLE, as a `{kind:'path'}` ref. Without
|
|
20922
|
+
* it the picker could list such a file and do nothing with it.
|
|
20923
|
+
*/
|
|
20924
|
+
path: external_exports.string().optional()
|
|
20805
20925
|
});
|
|
20806
20926
|
var LlmRuntimeDiskUsageSchema = external_exports.object({
|
|
20807
20927
|
nodeId: external_exports.string(),
|
|
@@ -20862,10 +20982,47 @@ var LlmProfileSchema = external_exports.object({
|
|
|
20862
20982
|
baseUrl: external_exports.string().optional(),
|
|
20863
20983
|
/** ConfigUISchema type:'password' — never round-trips (spec §5). */
|
|
20864
20984
|
apiKey: external_exports.string().optional(),
|
|
20985
|
+
/** Vision on/off. A vision call against a `false` profile is REFUSED, never
|
|
20986
|
+
* degraded to text — that shipped once and produced a confident answer to a
|
|
20987
|
+
* question about a picture nobody sent. */
|
|
20865
20988
|
supportsVision: external_exports.boolean(),
|
|
20866
20989
|
temperature: external_exports.number().min(0).max(2).optional(),
|
|
20990
|
+
/** Nucleus sampling. Every wire we speak has it. */
|
|
20991
|
+
topP: external_exports.number().min(0).max(1).optional(),
|
|
20992
|
+
/** Top-k sampling. Carried only by the wires that have it — NEITHER OpenAI
|
|
20993
|
+
* wire does, and the client drops it there (measured: the request body gets
|
|
20994
|
+
* `top_p` and no `top_k`). The profile editor hides the field wherever it
|
|
20995
|
+
* would change nothing; `KINDS_WITH_TOP_K` is the single owner of that list. */
|
|
20996
|
+
topK: external_exports.number().int().positive().optional(),
|
|
20867
20997
|
maxTokens: external_exports.number().int().positive().optional(),
|
|
20998
|
+
/** Prompt context window. Advisory for cloud kinds (they enforce their own);
|
|
20999
|
+
* for `managed-local` it is the llama.cpp `--ctx-size` the runtime starts
|
|
21000
|
+
* the model with, so it is the one field that changes a PROCESS. */
|
|
21001
|
+
contextLength: external_exports.number().int().positive().optional(),
|
|
21002
|
+
/** Default system prompt. A caller's `system` REPLACES it (never appends —
|
|
21003
|
+
* two system prompts fighting is worse than either alone). */
|
|
21004
|
+
systemPrompt: external_exports.string().optional(),
|
|
21005
|
+
/** Total generation bound — the only one a unary call has. */
|
|
20868
21006
|
timeoutMs: external_exports.number().int().positive().default(6e4),
|
|
21007
|
+
/** The TCP handshake only — "is the port even open". NOT the wait for
|
|
21008
|
+
* response headers: on the LM Studio / llama-server wire those are written
|
|
21009
|
+
* once the model has finished loading, so they belong to the bound below. */
|
|
21010
|
+
connectTimeoutMs: external_exports.number().int().positive().default(1e4),
|
|
21011
|
+
/** Accepted, but no output yet — response headers included, because a cold
|
|
21012
|
+
* GPU load is exactly what happens before them. */
|
|
21013
|
+
firstTokenTimeoutMs: external_exports.number().int().positive().default(12e4),
|
|
21014
|
+
/** Output started then stopped. */
|
|
21015
|
+
idleTimeoutMs: external_exports.number().int().positive().default(6e4),
|
|
21016
|
+
/** Profile-level default. The per-consumer table and a per-call override
|
|
21017
|
+
* both beat it — see `resolveRetryPolicy`. */
|
|
21018
|
+
retry: LlmRetryPolicySchema.default({
|
|
21019
|
+
enabled: false,
|
|
21020
|
+
maxAttempts: 1
|
|
21021
|
+
}),
|
|
21022
|
+
/** Whether this profile may use tools. The tool-call plumbing rides the
|
|
21023
|
+
* library; the REGISTRY of callable tools is ours and is empty in v1, so a
|
|
21024
|
+
* `true` here buys the wiring, not behaviour, until tools are registered. */
|
|
21025
|
+
toolsEnabled: external_exports.boolean().default(false),
|
|
20869
21026
|
extraHeaders: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
20870
21027
|
/** kind === 'managed-local' only (spec §4). */
|
|
20871
21028
|
runtime: ManagedRuntimeConfigSchema.optional()
|
|
@@ -20910,6 +21067,27 @@ var ManagedModelCatalogEntrySchema = external_exports.object({
|
|
|
20910
21067
|
/** Vision models: companion projector file. */
|
|
20911
21068
|
mmprojUrl: external_exports.string().optional()
|
|
20912
21069
|
});
|
|
21070
|
+
var HfModelResolutionSchema = external_exports.discriminatedUnion("ok", [external_exports.object({
|
|
21071
|
+
ok: external_exports.literal(true),
|
|
21072
|
+
/** Ready to hand to `installModel` unchanged. */
|
|
21073
|
+
model: ManagedModelRefSchema,
|
|
21074
|
+
label: external_exports.string(),
|
|
21075
|
+
repo: external_exports.string(),
|
|
21076
|
+
quantization: external_exports.string(),
|
|
21077
|
+
purpose: external_exports.enum(["text", "vision"]),
|
|
21078
|
+
totalBytes: external_exports.number(),
|
|
21079
|
+
/** mmproj + shards, for the preview: an operator approving 23 GB should
|
|
21080
|
+
* see that 0.9 GB of it is a projector they did not name. */
|
|
21081
|
+
extraFilenames: external_exports.array(external_exports.string())
|
|
21082
|
+
}), external_exports.object({
|
|
21083
|
+
ok: external_exports.literal(false),
|
|
21084
|
+
code: external_exports.string(),
|
|
21085
|
+
message: external_exports.string(),
|
|
21086
|
+
candidates: external_exports.array(external_exports.string()).optional(),
|
|
21087
|
+
/** Set when the refusal was only the ceiling: re-calling with
|
|
21088
|
+
* `maxBytes: requiredBytes` is the operator's explicit override. */
|
|
21089
|
+
requiredBytes: external_exports.number().optional()
|
|
21090
|
+
})]);
|
|
20913
21091
|
var LlmRuntimeNodeSchema = external_exports.object({
|
|
20914
21092
|
nodeId: external_exports.string(),
|
|
20915
21093
|
reachable: external_exports.boolean(),
|
|
@@ -20933,6 +21111,17 @@ var llmCapability = {
|
|
|
20933
21111
|
methods: {
|
|
20934
21112
|
generate: method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
|
|
20935
21113
|
generateVision: method(GenerateVisionInputSchema, LlmGenerateResultSchema, { kind: "mutation" }),
|
|
21114
|
+
/**
|
|
21115
|
+
* Stop a generation started with a `requestId`.
|
|
21116
|
+
*
|
|
21117
|
+
* Idempotent and always successful: cancelling an id that already finished,
|
|
21118
|
+
* never existed, or was cancelled a moment ago is a no-op. A caller that has
|
|
21119
|
+
* given up must never have to handle an error from giving up.
|
|
21120
|
+
*/
|
|
21121
|
+
cancel: method(external_exports.object({
|
|
21122
|
+
addonId: external_exports.string().optional(),
|
|
21123
|
+
requestId: external_exports.string()
|
|
21124
|
+
}), external_exports.void(), { kind: "mutation" }),
|
|
20936
21125
|
listProfileKinds: method(external_exports.object({}), external_exports.array(LlmProfileKindDescriptorSchema)),
|
|
20937
21126
|
listProfiles: method(external_exports.object({}), external_exports.array(LlmProfileSchema)),
|
|
20938
21127
|
upsertProfile: method(external_exports.object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
@@ -20966,6 +21155,25 @@ var llmCapability = {
|
|
|
20966
21155
|
listModelCatalog: method(external_exports.object({}), external_exports.array(ManagedModelCatalogEntrySchema)),
|
|
20967
21156
|
listRuntimeNodes: method(external_exports.object({}), external_exports.array(LlmRuntimeNodeSchema)),
|
|
20968
21157
|
listNodeModels: method(external_exports.object({ nodeId: external_exports.string() }), external_exports.array(LlmNodeModelSchema)),
|
|
21158
|
+
/**
|
|
21159
|
+
* One typed Hugging Face reference → a pinned, verified `ManagedModelRef`.
|
|
21160
|
+
*
|
|
21161
|
+
* Runs on the HUB, not on the target node: resolution needs egress to
|
|
21162
|
+
* huggingface.co, and an agent that cannot reach it still installs fine
|
|
21163
|
+
* through the model-distributor relay. Nothing is downloaded here — this is
|
|
21164
|
+
* a tree read plus a HEAD, so the operator sees the size, the quantization
|
|
21165
|
+
* and the mmproj BEFORE approving a multi-GB pull.
|
|
21166
|
+
*/
|
|
21167
|
+
resolveModelRef: method(external_exports.object({
|
|
21168
|
+
/** `https://huggingface.co/<org>/<repo>/resolve/main/<f>.gguf`,
|
|
21169
|
+
* `<org>/<repo>/<f>.gguf`, `<org>/<repo>` or `<org>/<repo>:<QUANT>`. */
|
|
21170
|
+
ref: external_exports.string(),
|
|
21171
|
+
/** Explicit ceiling override, in bytes. Absent = the built-in ceiling. */
|
|
21172
|
+
maxBytes: external_exports.number().positive().optional()
|
|
21173
|
+
}), HfModelResolutionSchema, {
|
|
21174
|
+
kind: "mutation",
|
|
21175
|
+
auth: "admin"
|
|
21176
|
+
}),
|
|
20969
21177
|
installModel: method(external_exports.object({
|
|
20970
21178
|
nodeId: external_exports.string(),
|
|
20971
21179
|
model: ManagedModelRefSchema
|
|
@@ -21541,6 +21749,7 @@ var NotificationActionIconSchema = external_exports.enum([
|
|
|
21541
21749
|
"acknowledge",
|
|
21542
21750
|
"dismiss",
|
|
21543
21751
|
"silence",
|
|
21752
|
+
"snooze",
|
|
21544
21753
|
"view",
|
|
21545
21754
|
"play",
|
|
21546
21755
|
"open",
|
|
@@ -21548,9 +21757,13 @@ var NotificationActionIconSchema = external_exports.enum([
|
|
|
21548
21757
|
"lock",
|
|
21549
21758
|
"unlock",
|
|
21550
21759
|
"arm",
|
|
21760
|
+
"arm-home",
|
|
21761
|
+
"arm-away",
|
|
21762
|
+
"arm-night",
|
|
21551
21763
|
"disarm",
|
|
21552
21764
|
"light",
|
|
21553
|
-
"alert"
|
|
21765
|
+
"alert",
|
|
21766
|
+
"camera"
|
|
21554
21767
|
]);
|
|
21555
21768
|
var NotificationActionSchema = external_exports.object({
|
|
21556
21769
|
id: external_exports.string(),
|
|
@@ -21739,6 +21952,25 @@ var notificationOutputCapability = {
|
|
|
21739
21952
|
}), external_exports.void(), { kind: "mutation" })
|
|
21740
21953
|
}
|
|
21741
21954
|
};
|
|
21955
|
+
var MACRO_LABELS = [
|
|
21956
|
+
{
|
|
21957
|
+
id: "person",
|
|
21958
|
+
name: "Person"
|
|
21959
|
+
},
|
|
21960
|
+
{
|
|
21961
|
+
id: "vehicle",
|
|
21962
|
+
name: "Vehicle"
|
|
21963
|
+
},
|
|
21964
|
+
{
|
|
21965
|
+
id: "animal",
|
|
21966
|
+
name: "Animal"
|
|
21967
|
+
},
|
|
21968
|
+
{
|
|
21969
|
+
id: "package",
|
|
21970
|
+
name: "Package"
|
|
21971
|
+
}
|
|
21972
|
+
];
|
|
21973
|
+
var DETECTION_MACRO_CLASSES = new Set(MACRO_LABELS.map((l) => l.id));
|
|
21742
21974
|
var COCO_TO_MACRO = {
|
|
21743
21975
|
mapping: {
|
|
21744
21976
|
person: "person",
|
|
@@ -22432,11 +22664,15 @@ var NcSystemEventKindSchema = external_exports.enum([
|
|
|
22432
22664
|
"stream-offline",
|
|
22433
22665
|
"node-online",
|
|
22434
22666
|
"node-offline",
|
|
22667
|
+
"node-inference-unavailable",
|
|
22668
|
+
"detection-blind",
|
|
22435
22669
|
"addon-update-available",
|
|
22436
22670
|
"server-update-available",
|
|
22437
22671
|
"alarm-triggered",
|
|
22438
22672
|
"alarm-armed",
|
|
22439
22673
|
"alarm-disarmed",
|
|
22674
|
+
"alarm-arming",
|
|
22675
|
+
"alarm-arm-refused",
|
|
22440
22676
|
"camera-online",
|
|
22441
22677
|
"camera-offline",
|
|
22442
22678
|
"camera-disabled",
|
|
@@ -22482,7 +22718,16 @@ var NcScheduleSchema = external_exports.object({
|
|
|
22482
22718
|
invert: external_exports.boolean().optional()
|
|
22483
22719
|
});
|
|
22484
22720
|
var NcPlateMatcherSchema = external_exports.object({
|
|
22485
|
-
|
|
22721
|
+
/**
|
|
22722
|
+
* Plate texts (or gallery vehicle names) to match. EMPTY = **any plate the
|
|
22723
|
+
* pipeline could read** — the plate half of "no selection = no narrowing",
|
|
22724
|
+
* and the switch that says this rule is about vehicles that were IDENTIFIED
|
|
22725
|
+
* rather than merely seen. A subject carrying no plate still fails.
|
|
22726
|
+
*
|
|
22727
|
+
* The `.min(1)` this used to carry made that state unauthorable; nothing has
|
|
22728
|
+
* ever persisted an empty list, so widening it cannot change an existing rule.
|
|
22729
|
+
*/
|
|
22730
|
+
values: external_exports.array(external_exports.string().min(1)),
|
|
22486
22731
|
/** Max Levenshtein distance after normalization (uppercase alphanumeric). */
|
|
22487
22732
|
maxDistance: external_exports.number().int().min(0).max(3).default(1)
|
|
22488
22733
|
});
|
|
@@ -22501,13 +22746,13 @@ var NcOccupancyConditionSchema = external_exports.object({
|
|
|
22501
22746
|
sustainSeconds: external_exports.number().int().min(0).max(3600).default(15)
|
|
22502
22747
|
});
|
|
22503
22748
|
var NcAudioConditionSchema = external_exports.object({
|
|
22504
|
-
/**
|
|
22749
|
+
/** LABEL MODE: audio macro labels. Present ⇒ fires on the first labelled frame. */
|
|
22505
22750
|
labels: external_exports.array(external_exports.string().min(1)).min(1).optional(),
|
|
22506
|
-
/**
|
|
22751
|
+
/** LEVEL MODE: floor in dBFS (negative-going, `0` = full scale). */
|
|
22507
22752
|
dbThreshold: external_exports.number().min(-96).max(0).optional(),
|
|
22508
|
-
/**
|
|
22753
|
+
/** LEVEL MODE ONLY: percentage of the window's samples that must be hits (1–100). */
|
|
22509
22754
|
hitPercent: external_exports.number().int().min(1).max(100).default(60),
|
|
22510
|
-
/**
|
|
22755
|
+
/** LEVEL MODE ONLY: length of the sampling window in seconds. */
|
|
22511
22756
|
samplingSeconds: external_exports.number().int().min(1).max(300).default(10)
|
|
22512
22757
|
});
|
|
22513
22758
|
var NcCrossingSchema = external_exports.enum([
|
|
@@ -22574,9 +22819,29 @@ var NcDeviceStateConditionSchema = external_exports.object({
|
|
|
22574
22819
|
/** Any of these matches. */
|
|
22575
22820
|
states: external_exports.array(external_exports.string().min(1)).min(1)
|
|
22576
22821
|
});
|
|
22822
|
+
var NcSceneConditionSchema = external_exports.object({
|
|
22823
|
+
/** `SceneMonitor.id` — the uuid the cap mints. The whole lookup key. */
|
|
22824
|
+
sceneId: external_exports.string().min(1),
|
|
22825
|
+
/** The camera the scene lives on. A hint for the editor and the log line. */
|
|
22826
|
+
deviceId: external_exports.number().int().optional(),
|
|
22827
|
+
/** The state the scene must be in for the rule to fire. */
|
|
22828
|
+
requiredState: external_exports.enum(["matched", "diverged"]),
|
|
22829
|
+
/**
|
|
22830
|
+
* Read the LATCH (`true`) or the LIVE verdict (`false`). Absent = follow the
|
|
22831
|
+
* scene's own `emit` field, which is the only place that decision belongs.
|
|
22832
|
+
*/
|
|
22833
|
+
latched: external_exports.boolean().optional()
|
|
22834
|
+
});
|
|
22577
22835
|
var NcConditionsSchema = external_exports.object({
|
|
22578
22836
|
/** Gate on ANOTHER device's current state (the alarm armed, a switch on). */
|
|
22579
22837
|
deviceState: NcDeviceStateConditionSchema.optional(),
|
|
22838
|
+
/**
|
|
22839
|
+
* Gate on a SCENE's state — "only while the bin is still out". Composes with
|
|
22840
|
+
* every trigger (detection, occupancy, audio, sensor, package, track-end);
|
|
22841
|
+
* unlike `occupancy`/`audio` it discriminates nothing. See
|
|
22842
|
+
* {@link NcSceneCondition} and D159.
|
|
22843
|
+
*/
|
|
22844
|
+
scene: NcSceneConditionSchema.optional(),
|
|
22580
22845
|
/** Device scope — absent = all devices. */
|
|
22581
22846
|
devices: external_exports.array(external_exports.number()).optional(),
|
|
22582
22847
|
/** Detector class names (any overlap with the record's class set). */
|
|
@@ -22602,18 +22867,47 @@ var NcConditionsSchema = external_exports.object({
|
|
|
22602
22867
|
*/
|
|
22603
22868
|
labelEquals: external_exports.array(external_exports.string().min(1)).optional(),
|
|
22604
22869
|
/**
|
|
22605
|
-
*
|
|
22606
|
-
*
|
|
22607
|
-
*
|
|
22870
|
+
* KNOWN FACES — the rule's identity scope, and the switch that says the rule
|
|
22871
|
+
* is about recognised people at all.
|
|
22872
|
+
*
|
|
22873
|
+
* Three states, and the empty one is the point:
|
|
22874
|
+
*
|
|
22875
|
+
* | value | meaning |
|
|
22876
|
+
* | --- | --- |
|
|
22877
|
+
* | absent | the rule does not care who it is; an unrecognised person matches |
|
|
22878
|
+
* | `[]` | **only known faces** — any identity in the gallery, nobody in particular |
|
|
22879
|
+
* | a list | only these identities |
|
|
22880
|
+
*
|
|
22881
|
+
* `[]` is the repo-wide "no selection = no narrowing" reading (an absent
|
|
22882
|
+
* `devices` list is every device), applied one level down: the operator has
|
|
22883
|
+
* turned the face scope ON and narrowed it to nothing, which is every known
|
|
22884
|
+
* face. No second field states the same thing — a switch that can disagree
|
|
22885
|
+
* with the list under it is worse than no switch (D62).
|
|
22886
|
+
*
|
|
22887
|
+
* MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
|
|
22888
|
+
* renameable, and a rule authored on "Gianluca" went silently dark the moment
|
|
22889
|
+
* the operator fixed the spelling. The id reaches the record on
|
|
22890
|
+
* `LabelAttribution.identityId`; the name is what the editor shows and what
|
|
22891
|
+
* `{{label}}` renders.
|
|
22892
|
+
*
|
|
22893
|
+
* Rules written before this carry NAMES, and are resolved to ids lazily at
|
|
22894
|
+
* load (`NcRuleStore.load`) against the live gallery — a name nothing answers
|
|
22895
|
+
* for is left as it stands and reported, never dropped. The engine also
|
|
22896
|
+
* accepts a display-name hit as a compatibility leg, so a rule whose
|
|
22897
|
+
* migration could not resolve keeps matching exactly what it matched before.
|
|
22608
22898
|
*/
|
|
22609
22899
|
identities: external_exports.array(external_exports.string().min(1)).optional(),
|
|
22610
|
-
/**
|
|
22900
|
+
/**
|
|
22901
|
+
* KNOWN PLATES / VEHICLES — the plate mirror of {@link identities}, including
|
|
22902
|
+
* the empty-list reading: `values: []` is "any plate the OCR could read",
|
|
22903
|
+
* a non-empty list is those plates (fuzzily). See {@link NcPlateMatcherSchema}.
|
|
22904
|
+
*/
|
|
22611
22905
|
plates: NcPlateMatcherSchema.optional(),
|
|
22612
22906
|
/**
|
|
22613
|
-
* Identity EXCLUDE — mirror of {@link identities} with `notIn` semantics
|
|
22614
|
-
*
|
|
22615
|
-
* identity
|
|
22616
|
-
*
|
|
22907
|
+
* Identity EXCLUDE — mirror of {@link identities} with `notIn` semantics, and
|
|
22908
|
+
* the same id members and the same lazy name→id migration. A record with NO
|
|
22909
|
+
* identity passes (nothing to exclude), unlike the include variant which
|
|
22910
|
+
* fails on an unrecognised subject. An EMPTY list excludes nobody.
|
|
22617
22911
|
*/
|
|
22618
22912
|
identitiesExclude: external_exports.array(external_exports.string().min(1)).optional(),
|
|
22619
22913
|
/**
|
|
@@ -22938,7 +23232,80 @@ var NcRuleInputSchema = external_exports.object({
|
|
|
22938
23232
|
* a rule that predates the gate must keep delivering byte-for-byte as it
|
|
22939
23233
|
* did, and absent is the only way to say that without a migration.
|
|
22940
23234
|
*/
|
|
22941
|
-
confirm: NcConfirmSchema.optional()
|
|
23235
|
+
confirm: NcConfirmSchema.optional(),
|
|
23236
|
+
/**
|
|
23237
|
+
* WAIT for face/plate recognition before saying anything.
|
|
23238
|
+
*
|
|
23239
|
+
* A notification's TEXT is frozen at enqueue and its media is re-resolved at
|
|
23240
|
+
* send; the identity is neither. A face is confirmed after `confirmFrames`
|
|
23241
|
+
* agreeing observations — p50 **11.4 s** after the track was first seen,
|
|
23242
|
+
* measured on this hub — and an `immediate` rule enqueues on the first object
|
|
23243
|
+
* event, seconds before that. So "Gianluca è arrivato" is unsayable on the
|
|
23244
|
+
* immediate path, and no amount of media re-resolution fixes a sentence.
|
|
23245
|
+
*
|
|
23246
|
+
* Only two honest answers exist, and this flag picks between them. It has
|
|
23247
|
+
* effect ONLY on a rule that declares a recognition scope
|
|
23248
|
+
* ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
|
|
23249
|
+
* other rule there is nothing to wait for and the flag is inert.
|
|
23250
|
+
*
|
|
23251
|
+
* | value | what happens |
|
|
23252
|
+
* | --- | --- |
|
|
23253
|
+
* | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
|
|
23254
|
+
* | absent / `false` | it fires at once WITHOUT the name, and if recognition lands before the track closes a SECOND, "…is Gianluca" notification follows (one per track, per rule, per target) |
|
|
23255
|
+
*
|
|
23256
|
+
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
23257
|
+
* on the addon cap path, and absent has to keep meaning exactly what every
|
|
23258
|
+
* rule authored before this field meant.
|
|
23259
|
+
*
|
|
23260
|
+
* The cost of `true` is stated here because the editor states it too: a rule
|
|
23261
|
+
* that waits also inherits track-close SEMANTICS — its `zones` condition
|
|
23262
|
+
* tests every zone the track visited and a `crossing` condition can no longer
|
|
23263
|
+
* be satisfied, because a closed track carries no crossing.
|
|
23264
|
+
*/
|
|
23265
|
+
waitForEnhancement: external_exports.boolean().optional(),
|
|
23266
|
+
/**
|
|
23267
|
+
* GROUP a burst of subjects into ONE notification that grows.
|
|
23268
|
+
*
|
|
23269
|
+
* Seconds of quiet after the last matching subject before the burst is
|
|
23270
|
+
* considered over. While it is open, the first subject enqueues immediately —
|
|
23271
|
+
* **exactly as today, with no added latency** — and every real growth (a new
|
|
23272
|
+
* subject, or a name confirmed on one already in it) REPLACES that
|
|
23273
|
+
* notification with an updated one naming everybody. The push carries the
|
|
23274
|
+
* group's own coalescing tag, so the phone replaces rather than stacks.
|
|
23275
|
+
*
|
|
23276
|
+
* `0` / absent = off, and off is today's behaviour byte for byte.
|
|
23277
|
+
*
|
|
23278
|
+
* ### Why an idle cutoff and not a window
|
|
23279
|
+
*
|
|
23280
|
+
* The measured seven-person arrival on device 590 spans 110 s with every
|
|
23281
|
+
* internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
|
|
23282
|
+
* idle cutoff holds it as one and ends it when the arrival actually ends.
|
|
23283
|
+
* 30 is Frigate's shipped value for the same decision.
|
|
23284
|
+
*
|
|
23285
|
+
* ### What it replaces
|
|
23286
|
+
*
|
|
23287
|
+
* The blind cooldown, which collapses a burst by DISCARDING it. Measured on
|
|
23288
|
+
* device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
|
|
23289
|
+
* notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
|
|
23290
|
+
* track that did fire and 7 carrying a confirmed identity nobody heard about.
|
|
23291
|
+
* A group collapses the same volume by MERGING, so the cooldown becomes a
|
|
23292
|
+
* budget over GROUPS — which is what it always meant — and a growth is never
|
|
23293
|
+
* throttled by the window its own first member spent.
|
|
23294
|
+
*
|
|
23295
|
+
* ### Interaction with {@link waitForEnhancement}
|
|
23296
|
+
*
|
|
23297
|
+
* They compose, and the order matters. `waitForEnhancement` defers the rule to
|
|
23298
|
+
* TRACK CLOSE, so with both set the group is opened by the first member to
|
|
23299
|
+
* CLOSE — already carrying its name — and grows as later members close. That
|
|
23300
|
+
* is later, and complete. With grouping alone the group opens on the first
|
|
23301
|
+
* object event and picks up names as they are confirmed, through the growth
|
|
23302
|
+
* path. Neither combination fires twice for one subject.
|
|
23303
|
+
*
|
|
23304
|
+
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
23305
|
+
* on the addon cap path, so absent must keep meaning what it meant before this
|
|
23306
|
+
* field existed.
|
|
23307
|
+
*/
|
|
23308
|
+
groupIdleSec: external_exports.number().int().min(0).max(600).optional()
|
|
22942
23309
|
});
|
|
22943
23310
|
var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
|
|
22944
23311
|
disabledTargetIds: external_exports.array(external_exports.string()).optional(),
|
|
@@ -23035,6 +23402,7 @@ var NcConditionDescriptorSchema = external_exports.object({
|
|
|
23035
23402
|
"occupancy",
|
|
23036
23403
|
"audio",
|
|
23037
23404
|
"deviceState",
|
|
23405
|
+
"scene",
|
|
23038
23406
|
"systemEvent"
|
|
23039
23407
|
]),
|
|
23040
23408
|
operator: external_exports.enum([
|
|
@@ -23426,7 +23794,55 @@ var MethodAccessSchema = external_exports.enum([
|
|
|
23426
23794
|
var AllowedProviderSchema = external_exports.union([external_exports.literal("*"), external_exports.array(external_exports.string())]);
|
|
23427
23795
|
var AllowedDevicesSchema = external_exports.record(external_exports.string(), external_exports.union([external_exports.literal("*"), external_exports.array(external_exports.string())]));
|
|
23428
23796
|
var CapScopeSchema = external_exports.enum(["device", "system"]);
|
|
23429
|
-
var
|
|
23797
|
+
var DeviceSelectorSchema = external_exports.discriminatedUnion("kind", [
|
|
23798
|
+
external_exports.object({ kind: external_exports.literal("all") }),
|
|
23799
|
+
external_exports.object({
|
|
23800
|
+
kind: external_exports.literal("ids"),
|
|
23801
|
+
ids: external_exports.array(external_exports.number().int()).min(1)
|
|
23802
|
+
}),
|
|
23803
|
+
external_exports.object({
|
|
23804
|
+
kind: external_exports.literal("types"),
|
|
23805
|
+
types: external_exports.array(external_exports.enum(DeviceType)).min(1)
|
|
23806
|
+
}),
|
|
23807
|
+
external_exports.object({
|
|
23808
|
+
kind: external_exports.literal("locations"),
|
|
23809
|
+
locations: external_exports.array(external_exports.string().min(1)).min(1)
|
|
23810
|
+
})
|
|
23811
|
+
]);
|
|
23812
|
+
var DeviceTokenScopeSchema = external_exports.object({
|
|
23813
|
+
type: external_exports.literal("device"),
|
|
23814
|
+
/** The device SET this grant covers — resolved against the live fleet. */
|
|
23815
|
+
selector: DeviceSelectorSchema,
|
|
23816
|
+
access: external_exports.array(MethodAccessSchema).min(1),
|
|
23817
|
+
/**
|
|
23818
|
+
* Whether a grant on a PARENT device transparently covers its accessory
|
|
23819
|
+
* CHILDREN (siren / floodlight / PIR) via the persisted-parentage walk.
|
|
23820
|
+
* Direction is parent → children ONLY.
|
|
23821
|
+
*
|
|
23822
|
+
* Absent → the matcher DERIVES it from the access flavour: `view`
|
|
23823
|
+
* inherits (a camera viewer sees the camera's accessories), `create` /
|
|
23824
|
+
* `delete` do NOT (actuating/removing a child is an explicit act the
|
|
23825
|
+
* operator must grant on the child, not inherit from the parent). Set it
|
|
23826
|
+
* explicitly to override that default per grant.
|
|
23827
|
+
*/
|
|
23828
|
+
includeLinked: external_exports.boolean().optional()
|
|
23829
|
+
});
|
|
23830
|
+
function migrateLegacyTokenScope(raw) {
|
|
23831
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
23832
|
+
if (Reflect.get(raw, "type") !== "device") return raw;
|
|
23833
|
+
if (Reflect.get(raw, "selector") !== void 0) return raw;
|
|
23834
|
+
const targets = Reflect.get(raw, "targets");
|
|
23835
|
+
if (!Array.isArray(targets)) return raw;
|
|
23836
|
+
return {
|
|
23837
|
+
type: "device",
|
|
23838
|
+
selector: {
|
|
23839
|
+
kind: "ids",
|
|
23840
|
+
ids: targets.map((t) => typeof t === "string" ? Number(t) : t).filter((n) => typeof n === "number" && Number.isInteger(n))
|
|
23841
|
+
},
|
|
23842
|
+
access: Reflect.get(raw, "access")
|
|
23843
|
+
};
|
|
23844
|
+
}
|
|
23845
|
+
var TokenScopeSchema = external_exports.preprocess(migrateLegacyTokenScope, external_exports.discriminatedUnion("type", [
|
|
23430
23846
|
external_exports.object({
|
|
23431
23847
|
type: external_exports.literal("category"),
|
|
23432
23848
|
target: CapScopeSchema,
|
|
@@ -23442,18 +23858,8 @@ var TokenScopeSchema = external_exports.discriminatedUnion("type", [
|
|
|
23442
23858
|
target: external_exports.string(),
|
|
23443
23859
|
access: external_exports.array(MethodAccessSchema).min(1)
|
|
23444
23860
|
}),
|
|
23445
|
-
|
|
23446
|
-
|
|
23447
|
-
/**
|
|
23448
|
-
* One or more deviceIds (serialised as strings for wire-format
|
|
23449
|
-
* consistency with the rest of the union). Matcher accepts if
|
|
23450
|
-
* `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
|
|
23451
|
-
* of one scope-per-device when granting access to a set of cameras.
|
|
23452
|
-
*/
|
|
23453
|
-
targets: external_exports.array(external_exports.string()).min(1),
|
|
23454
|
-
access: external_exports.array(MethodAccessSchema).min(1)
|
|
23455
|
-
})
|
|
23456
|
-
]);
|
|
23861
|
+
DeviceTokenScopeSchema
|
|
23862
|
+
]));
|
|
23457
23863
|
var UserRecordSchema = external_exports.object({
|
|
23458
23864
|
id: external_exports.string(),
|
|
23459
23865
|
username: external_exports.string(),
|
|
@@ -23698,7 +24104,21 @@ var LabelTierSchema = external_exports.union([external_exports.literal(1), exter
|
|
|
23698
24104
|
var LabelAttributionSchema = external_exports.object({
|
|
23699
24105
|
stepId: external_exports.string(),
|
|
23700
24106
|
modelId: external_exports.string().optional(),
|
|
23701
|
-
decidedAt: external_exports.number()
|
|
24107
|
+
decidedAt: external_exports.number(),
|
|
24108
|
+
/**
|
|
24109
|
+
* The GALLERY id behind a recognised tier-2 label — a face-gallery
|
|
24110
|
+
* `Identity.id` or a plate-gallery `Vehicle.id` (both `randomUUID`).
|
|
24111
|
+
*
|
|
24112
|
+
* The text alone is a DISPLAY NAME, and a display name is renameable: a
|
|
24113
|
+
* notification rule authored on "Gianluca" stopped matching the moment the
|
|
24114
|
+
* operator fixed the spelling in the gallery, and nothing said so. The id is
|
|
24115
|
+
* the thing that does not move, so it is what a rule matches on
|
|
24116
|
+
* (`NcConditions.identities`) and the text is what a human is shown.
|
|
24117
|
+
*
|
|
24118
|
+
* Absent when the label names no gallery row — a plate the OCR read but no
|
|
24119
|
+
* vehicle claims, a sub-class, a species, any tier-1 value.
|
|
24120
|
+
*/
|
|
24121
|
+
identityId: external_exports.string().optional()
|
|
23702
24122
|
});
|
|
23703
24123
|
var TieredLabelFields = {
|
|
23704
24124
|
/** Tier 1 — the sub-class. See {@link LabelTierSchema}. */
|
|
@@ -23808,6 +24228,28 @@ var TrackSchema = external_exports.object({
|
|
|
23808
24228
|
* `=== true` and render nothing otherwise, never infer "no face".
|
|
23809
24229
|
*/
|
|
23810
24230
|
hasFace: external_exports.boolean().optional(),
|
|
24231
|
+
/**
|
|
24232
|
+
* This subject CONTAINS a folded rider — a person the rider-pairing step
|
|
24233
|
+
* ([D34](../decisions/adr-0034.md)) removed from the frame BEFORE the tracker,
|
|
24234
|
+
* so the passage is tracked once and as a VEHICLE.
|
|
24235
|
+
*
|
|
24236
|
+
* It exists because the fold's record was dishonest. D34 and the code both
|
|
24237
|
+
* said "the person is not lost — it is reported so both entities stay on the
|
|
24238
|
+
* record"; in fact the pair went into a per-processor RAM field behind an
|
|
24239
|
+
* accessor nobody called, and every durable surface said `vehicle`, full
|
|
24240
|
+
* stop. This is the composition note that makes the row true.
|
|
24241
|
+
*
|
|
24242
|
+
* A COMPOSITION, never a class and never a label. "This vehicle contains a
|
|
24243
|
+
* person" is not an answer to "what is this" — both label tiers would refuse
|
|
24244
|
+
* a macro token anyway (D89), and correctly. Nothing here changes what the
|
|
24245
|
+
* subject IS: a cyclist stays one vehicle track, occupancy still counts one,
|
|
24246
|
+
* and a `person` rule still does not fire for someone cycling past.
|
|
24247
|
+
*
|
|
24248
|
+
* **Absent ≠ false**, exactly like {@link hasFace}: every row written before
|
|
24249
|
+
* the column, and every hub that predates the field, omits it. Test
|
|
24250
|
+
* `=== true` and render nothing otherwise — never infer "no rider".
|
|
24251
|
+
*/
|
|
24252
|
+
hasRider: external_exports.boolean().optional(),
|
|
23811
24253
|
...TrackFlagFields,
|
|
23812
24254
|
...TrackRetrainFields
|
|
23813
24255
|
});
|
|
@@ -24086,7 +24528,10 @@ var RecentTracksQueryInput = external_exports.object({
|
|
|
24086
24528
|
* Encodes the (lastSeen, trackId) sort position — treat as opaque. */
|
|
24087
24529
|
cursor: external_exports.string().optional(),
|
|
24088
24530
|
/** See {@link TrackProjectionSchema}. Default `full`. */
|
|
24089
|
-
projection: TrackProjectionSchema.optional()
|
|
24531
|
+
projection: TrackProjectionSchema.optional(),
|
|
24532
|
+
/** Include stationary-promoted rows (parked objects). Default false: the
|
|
24533
|
+
* feed lists passages; parking records live on the stationary registry. */
|
|
24534
|
+
includeStationary: external_exports.boolean().optional()
|
|
24090
24535
|
});
|
|
24091
24536
|
var RecentTracksPageSchema = external_exports.object({
|
|
24092
24537
|
/** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
|
|
@@ -24289,7 +24734,11 @@ var pipelineAnalyticsCapability = {
|
|
|
24289
24734
|
zone: TrackZoneFilterSchema.optional(),
|
|
24290
24735
|
/** See {@link TrackProjectionSchema}. Default `full` (backward
|
|
24291
24736
|
* compatible — omitting the field keeps today's exact behaviour). */
|
|
24292
|
-
projection: TrackProjectionSchema.optional()
|
|
24737
|
+
projection: TrackProjectionSchema.optional(),
|
|
24738
|
+
/** Include stationary-promoted rows (parked objects handed to the
|
|
24739
|
+
* stationary registry). Default false: the timeline lists passages,
|
|
24740
|
+
* not parking records (operator decision, 2026-08-15). */
|
|
24741
|
+
includeStationary: external_exports.boolean().optional()
|
|
24293
24742
|
}), external_exports.array(TrackSchema).readonly()),
|
|
24294
24743
|
/**
|
|
24295
24744
|
* Batched cluster-wide track listing — ONE call for the events page /
|
|
@@ -24780,7 +25229,8 @@ var pipelineAnalyticsCapability = {
|
|
|
24780
25229
|
}),
|
|
24781
25230
|
getEventMedia: method(external_exports.object({
|
|
24782
25231
|
eventId: external_exports.string(),
|
|
24783
|
-
kind: MediaFileKindEnum.optional()
|
|
25232
|
+
kind: MediaFileKindEnum.optional(),
|
|
25233
|
+
deviceId: external_exports.number()
|
|
24784
25234
|
}), external_exports.array(MediaFileSchema).readonly()),
|
|
24785
25235
|
/** All media rows owned by a track. `kinds` narrows to a kind subset so a
|
|
24786
25236
|
* client can fetch the SMALL display variants on open and pull the
|
|
@@ -24788,7 +25238,8 @@ var pipelineAnalyticsCapability = {
|
|
|
24788
25238
|
* Absent ⇒ every kind (back-compat). */
|
|
24789
25239
|
getTrackMedia: method(external_exports.object({
|
|
24790
25240
|
trackId: external_exports.string(),
|
|
24791
|
-
kinds: external_exports.array(MediaFileKindEnum).optional()
|
|
25241
|
+
kinds: external_exports.array(MediaFileKindEnum).optional(),
|
|
25242
|
+
deviceId: external_exports.number()
|
|
24792
25243
|
}), external_exports.array(MediaFileSchema).readonly()),
|
|
24793
25244
|
/**
|
|
24794
25245
|
* What media a track HAS, without any of it.
|
|
@@ -24805,7 +25256,10 @@ var pipelineAnalyticsCapability = {
|
|
|
24805
25256
|
* tell a full-resolution variant existed — and the affordance that opens it
|
|
24806
25257
|
* would silently disappear.
|
|
24807
25258
|
*/
|
|
24808
|
-
listTrackMedia: method(external_exports.object({
|
|
25259
|
+
listTrackMedia: method(external_exports.object({
|
|
25260
|
+
trackId: external_exports.string(),
|
|
25261
|
+
deviceId: external_exports.number()
|
|
25262
|
+
}), external_exports.array(MediaFileInfoSchema).readonly()),
|
|
24809
25263
|
/**
|
|
24810
25264
|
* Search object events by text query using CLIP cosine similarity.
|
|
24811
25265
|
* Encodes `text` via the `embedding-encoder` cap, queries the
|
|
@@ -25582,6 +26036,12 @@ var maxSessionHoldMsField = {
|
|
|
25582
26036
|
default: 12e4,
|
|
25583
26037
|
step: 5e3
|
|
25584
26038
|
};
|
|
26039
|
+
var audioMotionWindowMsField = {
|
|
26040
|
+
min: 5e3,
|
|
26041
|
+
max: 6e5,
|
|
26042
|
+
default: 9e4,
|
|
26043
|
+
step: 5e3
|
|
26044
|
+
};
|
|
25585
26045
|
var motionFpsField = {
|
|
25586
26046
|
min: 1,
|
|
25587
26047
|
max: 30,
|
|
@@ -25597,7 +26057,7 @@ var detectionFpsField = {
|
|
|
25597
26057
|
var occupancyRecheckSecField = {
|
|
25598
26058
|
min: 0,
|
|
25599
26059
|
max: 300,
|
|
25600
|
-
default:
|
|
26060
|
+
default: 300,
|
|
25601
26061
|
step: 5
|
|
25602
26062
|
};
|
|
25603
26063
|
var occupancyRecheckFramesField = {
|
|
@@ -25675,6 +26135,27 @@ var RunnerCameraConfigSchema = external_exports.object({
|
|
|
25675
26135
|
* resolved `CameraDetectionConfig`.
|
|
25676
26136
|
*/
|
|
25677
26137
|
maxSessionHoldMs: external_exports.number().min(maxSessionHoldMsField.min).max(maxSessionHoldMsField.max).optional(),
|
|
26138
|
+
/**
|
|
26139
|
+
* Orchestrator-side quiet period (ms) that closes an `audioMode:
|
|
26140
|
+
* 'on-motion'` audio window, measured from the LAST motion event.
|
|
26141
|
+
*
|
|
26142
|
+
* This exists because the falling edge cannot be relied on. Camera-native
|
|
26143
|
+
* providers emit motion as a RISING EDGE ONLY (Reolink's Baichuan push and
|
|
26144
|
+
* its email-push SMTP path both emit `detected: true` and never the
|
|
26145
|
+
* counterpart); only the frame-diff analyzer emits falls. So on an
|
|
26146
|
+
* onboard-only camera a window that closed only on `detected: false` never
|
|
26147
|
+
* closed at all, and `on-motion` silently behaved as `always-on` — on a
|
|
26148
|
+
* battery camera, the one failure mode the mode exists to prevent.
|
|
26149
|
+
*
|
|
26150
|
+
* Every motion event rearms this timer WITHOUT restarting the stream, so a
|
|
26151
|
+
* burst of re-fires costs nothing. A falling edge, when one does arrive,
|
|
26152
|
+
* still closes earlier via `motionCooldownMs` — whichever comes first wins.
|
|
26153
|
+
*
|
|
26154
|
+
* Not consumed by the runner: carried here so it shares the per-camera
|
|
26155
|
+
* device-settings surface with `motionCooldownMs`, exactly like
|
|
26156
|
+
* `maxSessionHoldMs`.
|
|
26157
|
+
*/
|
|
26158
|
+
audioMotionWindowMs: external_exports.number().min(audioMotionWindowMsField.min).max(audioMotionWindowMsField.max).optional(),
|
|
25678
26159
|
motionFps: external_exports.number().min(motionFpsField.min).max(motionFpsField.max).default(motionFpsField.default),
|
|
25679
26160
|
detectionFps: external_exports.number().min(detectionFpsField.min).max(detectionFpsField.max).default(detectionFpsField.default),
|
|
25680
26161
|
motionStreamId: external_exports.string(),
|
|
@@ -25728,15 +26209,21 @@ var RunnerCameraConfigSchema = external_exports.object({
|
|
|
25728
26209
|
*/
|
|
25729
26210
|
onboardMotionDrivesAnalyzer: external_exports.boolean().default(true),
|
|
25730
26211
|
/**
|
|
25731
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
25732
|
-
*
|
|
25733
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
25734
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
25735
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
26212
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
26213
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
25736
26214
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
25737
26215
|
* (and only render) when this is enabled.
|
|
25738
|
-
|
|
25739
|
-
|
|
26216
|
+
*
|
|
26217
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
26218
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
26219
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
26220
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
26221
|
+
* object is counted only while the stationary registry holds it, and the
|
|
26222
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
26223
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
26224
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
26225
|
+
*/
|
|
26226
|
+
occupancyRecheckEnabled: external_exports.boolean().default(true),
|
|
25740
26227
|
occupancyRecheckSec: external_exports.number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
25741
26228
|
occupancyRecheckFrames: external_exports.number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
25742
26229
|
/**
|
|
@@ -25838,6 +26325,25 @@ var RunnerCameraDeviceUIFields = [
|
|
|
25838
26325
|
nullable: true,
|
|
25839
26326
|
nullLabel: "Default"
|
|
25840
26327
|
},
|
|
26328
|
+
{
|
|
26329
|
+
key: "audioMotionWindowMs",
|
|
26330
|
+
type: "slider",
|
|
26331
|
+
label: "Audio window after motion",
|
|
26332
|
+
description: "How long audio keeps being analysed after the last motion event. Each new motion event extends the window without restarting the audio stream.",
|
|
26333
|
+
min: audioMotionWindowMsField.min,
|
|
26334
|
+
max: audioMotionWindowMsField.max,
|
|
26335
|
+
step: audioMotionWindowMsField.step,
|
|
26336
|
+
default: audioMotionWindowMsField.default,
|
|
26337
|
+
showValue: true,
|
|
26338
|
+
unit: "s",
|
|
26339
|
+
displayScale: 1e3,
|
|
26340
|
+
nullable: true,
|
|
26341
|
+
nullLabel: "Default",
|
|
26342
|
+
showWhen: {
|
|
26343
|
+
field: "audioMode",
|
|
26344
|
+
equals: "on-motion"
|
|
26345
|
+
}
|
|
26346
|
+
},
|
|
25841
26347
|
{
|
|
25842
26348
|
key: "onboardMotionDrivesAnalyzer",
|
|
25843
26349
|
type: "boolean",
|
|
@@ -25854,8 +26360,8 @@ var RunnerCameraDeviceUIFields = [
|
|
|
25854
26360
|
type: "boolean",
|
|
25855
26361
|
style: "checkbox",
|
|
25856
26362
|
label: "Occupancy re-check",
|
|
25857
|
-
description: "Periodically re-sample a few frames during the watching phase
|
|
25858
|
-
default:
|
|
26363
|
+
description: "Periodically re-sample a few frames during the watching phase, so objects that are simply parked are still counted (motion gating alone loses them after a restart). On by default at a wide interval; turn it off on cameras where the extra decoder re-dial is expensive.",
|
|
26364
|
+
default: true
|
|
25859
26365
|
},
|
|
25860
26366
|
{
|
|
25861
26367
|
key: "occupancyRecheckSec",
|
|
@@ -27296,7 +27802,16 @@ var snapshotCapability = {
|
|
|
27296
27802
|
/** A sleeping battery camera: the frame is deliberately stale and will
|
|
27297
27803
|
* NOT refresh in the background. A surface should say so rather than
|
|
27298
27804
|
* present it as current. */
|
|
27299
|
-
sleeping: external_exports.boolean()
|
|
27805
|
+
sleeping: external_exports.boolean(),
|
|
27806
|
+
/** Current device state rendered over the cached frame. State images
|
|
27807
|
+
* remain authoritative even when their photographic background is
|
|
27808
|
+
* old; null means the link must carry a current camera frame. */
|
|
27809
|
+
stateReason: external_exports.enum([
|
|
27810
|
+
"disabled",
|
|
27811
|
+
"sleeping",
|
|
27812
|
+
"unreachable",
|
|
27813
|
+
"waking"
|
|
27814
|
+
]).nullable()
|
|
27300
27815
|
})))
|
|
27301
27816
|
},
|
|
27302
27817
|
status: {
|
|
@@ -29120,6 +29635,25 @@ var BatteryStatusSchema = external_exports.object({
|
|
|
29120
29635
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
29121
29636
|
lastUpdated: external_exports.number(),
|
|
29122
29637
|
/**
|
|
29638
|
+
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
29639
|
+
* completed firmware round-trip, an observed wake, or an inbound push
|
|
29640
|
+
* (firmware event, email). `0`/absent = never since this slice was born.
|
|
29641
|
+
*
|
|
29642
|
+
* This is the ONLY input that separates "asleep" from "gone", and it is
|
|
29643
|
+
* fed exclusively by PASSIVE signals: nothing may write it by reaching
|
|
29644
|
+
* for the radio, because a poll that confirms reachability is the same
|
|
29645
|
+
* poll that drains the battery. See {@link deriveBatteryPresence} — the
|
|
29646
|
+
* single derivation every consumer must use; no surface computes its own.
|
|
29647
|
+
*
|
|
29648
|
+
* It is deliberately NOT a clock in the
|
|
29649
|
+
* `scripts/check-runtime-state-durability.ts` sense: it is the
|
|
29650
|
+
* observation itself, and it is the only thing a 30-hour silence is
|
|
29651
|
+
* visible in. Writers quantise it (see `CONTACT_WRITE_QUANTUM_MS` in the
|
|
29652
|
+
* Reolink provider) so a value that means "recently" cannot cost a
|
|
29653
|
+
* SQLite commit per round-trip.
|
|
29654
|
+
*/
|
|
29655
|
+
lastContactAt: external_exports.number().optional(),
|
|
29656
|
+
/**
|
|
29123
29657
|
* True when the source is a BINARY low-battery indicator (HA
|
|
29124
29658
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
29125
29659
|
* charge level — `percentage` is then a coarse stand-in (100 = normal,
|
|
@@ -31110,7 +31644,41 @@ var intercomCapability = {
|
|
|
31110
31644
|
status: {
|
|
31111
31645
|
schema: IntercomStatusSchema,
|
|
31112
31646
|
kind: "command-driven"
|
|
31113
|
-
}
|
|
31647
|
+
},
|
|
31648
|
+
/**
|
|
31649
|
+
* Runtime-state slice — mirrored by the kernel.
|
|
31650
|
+
*
|
|
31651
|
+
* The cap declared `status` and nothing else, so the only two sources an
|
|
31652
|
+
* exporter has for a value — the `device.state-changed` slice event and the
|
|
31653
|
+
* `deviceState.getAllSnapshots` snapshot, both built from runtime state —
|
|
31654
|
+
* carried nothing for `intercom`. A talk-back entity in Home Assistant would
|
|
31655
|
+
* have been published and never received a value, which is the defect the
|
|
31656
|
+
* export's two classification tables exist to prevent (177 of them, once), so
|
|
31657
|
+
* `intercom` was excluded rather than exported.
|
|
31658
|
+
*
|
|
31659
|
+
* The shape is the status shape: there is exactly one truth about talk-back
|
|
31660
|
+
* and duplicating it into a second schema is how two halves of one capability
|
|
31661
|
+
* come to disagree. Providers write it through
|
|
31662
|
+
* `this.runtimeState.setCapState('intercom', …)` at the four points that open
|
|
31663
|
+
* and close a session, and seed it at registration so the slice exists before
|
|
31664
|
+
* the first session rather than after it.
|
|
31665
|
+
*
|
|
31666
|
+
* **Bound, named rather than hidden:** `talking` mirrors the provider's own
|
|
31667
|
+
* session handle, so a session torn down by a transport death that never
|
|
31668
|
+
* reaches `stopSession` / `endTalkSession` leaves it latched until the next
|
|
31669
|
+
* session or the next restart. That is why the slice is `session` and not
|
|
31670
|
+
* `restored` — a restart must never restore "talking".
|
|
31671
|
+
*/
|
|
31672
|
+
runtimeState: IntercomStatusSchema,
|
|
31673
|
+
/**
|
|
31674
|
+
* Runtime-state durability: **session** — `talking` describes a live audio
|
|
31675
|
+
* session, which by definition does not survive the process that held it.
|
|
31676
|
+
* Restoring it would publish a camera as talking to nobody.
|
|
31677
|
+
*
|
|
31678
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
31679
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
31680
|
+
*/
|
|
31681
|
+
durability: "session"
|
|
31114
31682
|
};
|
|
31115
31683
|
var LawnMowerActivitySchema = external_exports.enum([
|
|
31116
31684
|
"idle",
|
|
@@ -33764,7 +34332,7 @@ var recordingCapability = {
|
|
|
33764
34332
|
toMs: external_exports.number()
|
|
33765
34333
|
}), RecordingAvailabilitySchema, {
|
|
33766
34334
|
kind: "query",
|
|
33767
|
-
auth: "
|
|
34335
|
+
auth: "protected"
|
|
33768
34336
|
}),
|
|
33769
34337
|
/** Which calendar days in [fromMs,toMs) have ≥1 recorded segment, bucketed by
|
|
33770
34338
|
* the client's local day (`tzOffsetMinutes` = minutes to add to UTC). Drives
|
|
@@ -33776,7 +34344,7 @@ var recordingCapability = {
|
|
|
33776
34344
|
tzOffsetMinutes: external_exports.number()
|
|
33777
34345
|
}), RecordingDaysSchema, {
|
|
33778
34346
|
kind: "query",
|
|
33779
|
-
auth: "
|
|
34347
|
+
auth: "protected"
|
|
33780
34348
|
}),
|
|
33781
34349
|
getPlaybackManifest: method(external_exports.object({
|
|
33782
34350
|
deviceId: external_exports.number(),
|
|
@@ -33784,7 +34352,7 @@ var recordingCapability = {
|
|
|
33784
34352
|
toMs: external_exports.number()
|
|
33785
34353
|
}), RecordingManifestSchema, {
|
|
33786
34354
|
kind: "query",
|
|
33787
|
-
auth: "
|
|
34355
|
+
auth: "protected"
|
|
33788
34356
|
}),
|
|
33789
34357
|
getStorageUsage: method(external_exports.object({}), RecordingStorageUsageSchema, {
|
|
33790
34358
|
kind: "query",
|
|
@@ -34129,12 +34697,32 @@ var recordingExportCapability = {
|
|
|
34129
34697
|
}
|
|
34130
34698
|
};
|
|
34131
34699
|
var SceneConditionSchema = external_exports.string();
|
|
34700
|
+
var SceneUncoveredPolicySchema = external_exports.enum(["skip", "judge-anyway"]);
|
|
34701
|
+
var SceneVerdictSchema = external_exports.enum([
|
|
34702
|
+
"matched",
|
|
34703
|
+
"diverged",
|
|
34704
|
+
"unknown"
|
|
34705
|
+
]);
|
|
34706
|
+
var SceneUnavailableSchema = external_exports.enum([
|
|
34707
|
+
"no-reference-for-condition",
|
|
34708
|
+
"view-shifted",
|
|
34709
|
+
"no-vision-profile",
|
|
34710
|
+
"encoder-model-changed",
|
|
34711
|
+
"no-snapshot"
|
|
34712
|
+
]);
|
|
34132
34713
|
var SceneReferenceSchema = external_exports.object({
|
|
34133
34714
|
embedding: external_exports.array(external_exports.number()),
|
|
34134
34715
|
modelId: external_exports.string(),
|
|
34135
34716
|
condition: SceneConditionSchema,
|
|
34136
34717
|
capturedAt: external_exports.number(),
|
|
34137
|
-
thumbnailMediaId: external_exports.string().optional()
|
|
34718
|
+
thumbnailMediaId: external_exports.string().optional(),
|
|
34719
|
+
/** Whole-frame (downscaled) embedding captured alongside the ROI crop. The
|
|
34720
|
+
* anti-view-shift anchor: a bumped camera, a PTZ preset or a re-aim makes the
|
|
34721
|
+
* normalized rect frame a different piece of world, and the scene would
|
|
34722
|
+
* diverge forever with a perfectly plausible cosine. Checked LAZILY, only
|
|
34723
|
+
* when hysteresis is about to flip — one extra encode per candidate
|
|
34724
|
+
* transition, not per poll. */
|
|
34725
|
+
anchorEmbedding: external_exports.array(external_exports.number()).optional()
|
|
34138
34726
|
});
|
|
34139
34727
|
var SceneMonitorStateSchema = external_exports.object({
|
|
34140
34728
|
id: external_exports.string(),
|
|
@@ -34154,6 +34742,18 @@ var SceneCheckSchema = external_exports.discriminatedUnion("mode", [external_exp
|
|
|
34154
34742
|
profileId: external_exports.string().optional(),
|
|
34155
34743
|
hysteresisCount: external_exports.number().int().positive()
|
|
34156
34744
|
})]);
|
|
34745
|
+
var SCENE_DEFAULT_ANCHOR_THRESHOLD = 0.85;
|
|
34746
|
+
var SCENE_DEFAULT_UNCOVERED_POLICY = "skip";
|
|
34747
|
+
var SCENE_CONFIRM_DEFAULT_TIMEOUT_MS = 8e3;
|
|
34748
|
+
var SceneConfirmSchema = external_exports.object({
|
|
34749
|
+
enabled: external_exports.boolean().default(false),
|
|
34750
|
+
prompt: external_exports.string().min(1).max(1e3),
|
|
34751
|
+
profileId: external_exports.string().optional(),
|
|
34752
|
+
timeoutMs: external_exports.number().int().min(1e3).max(2e4).default(SCENE_CONFIRM_DEFAULT_TIMEOUT_MS),
|
|
34753
|
+
maxImagePx: external_exports.number().int().min(64).max(2048).default(448),
|
|
34754
|
+
/** What a timeout / unavailable model means for the PENDING flip. */
|
|
34755
|
+
onTimeout: external_exports.enum(["flip", "hold"]).default("hold")
|
|
34756
|
+
});
|
|
34157
34757
|
var SceneMonitorSchema = external_exports.object({
|
|
34158
34758
|
id: external_exports.string(),
|
|
34159
34759
|
label: external_exports.string(),
|
|
@@ -34172,7 +34772,56 @@ var SceneMonitorSchema = external_exports.object({
|
|
|
34172
34772
|
lastConfidence: external_exports.number().nullable(),
|
|
34173
34773
|
currentCondition: SceneConditionSchema.nullable(),
|
|
34174
34774
|
availability: external_exports.enum(["ok", "unavailable"]),
|
|
34175
|
-
unavailableReason: external_exports.string().nullable()
|
|
34775
|
+
unavailableReason: external_exports.string().nullable(),
|
|
34776
|
+
/** Which state is "the initial screen". `null` until the first capture. */
|
|
34777
|
+
baselineStateId: external_exports.string().nullable(),
|
|
34778
|
+
/** Which boolean drives notification rules and any export. */
|
|
34779
|
+
emit: external_exports.enum(["latched", "live"]).default("latched"),
|
|
34780
|
+
/** Live: does the region match the baseline RIGHT NOW. */
|
|
34781
|
+
verdict: SceneVerdictSchema,
|
|
34782
|
+
/** Has it been `diverged` at least once since `armedAt` — the operator's boolean. */
|
|
34783
|
+
latched: external_exports.boolean(),
|
|
34784
|
+
/** Last reset (or creation). */
|
|
34785
|
+
armedAt: external_exports.number(),
|
|
34786
|
+
divergedAt: external_exports.number().nullable(),
|
|
34787
|
+
restoredAt: external_exports.number().nullable(),
|
|
34788
|
+
/** A check is only COUNTED when the device has been quiet this long. Motion
|
|
34789
|
+
* during the window DISCARDS the observation — a car pulling up in front of
|
|
34790
|
+
* the bin must not be able to spend hysteresis credit. */
|
|
34791
|
+
quietSeconds: external_exports.number().int().min(0).max(3600).default(60),
|
|
34792
|
+
/** An observation only advances the pending count when it is at least this
|
|
34793
|
+
* far from the previously counted one, so N agreeing checks span real time
|
|
34794
|
+
* rather than N adjacent polls inside one occlusion. */
|
|
34795
|
+
minObservationSpacingSec: external_exports.number().int().min(0).max(3600).default(120),
|
|
34796
|
+
/** Vision-model adjudication of a candidate flip. Similarity primary only. */
|
|
34797
|
+
confirm: SceneConfirmSchema.optional(),
|
|
34798
|
+
/** Whole-frame anchor cosine below which a flip is REFUSED as `view-shifted`. */
|
|
34799
|
+
anchorThreshold: external_exports.number().min(0).max(1).default(SCENE_DEFAULT_ANCHOR_THRESHOLD),
|
|
34800
|
+
/** Clear the latch on its own when the scene matches again? Default false —
|
|
34801
|
+
* `restoredAt` and the `scene-restored` edge are recorded regardless, so an
|
|
34802
|
+
* automation can react to the bin coming back without the operator's own
|
|
34803
|
+
* alarm silently clearing itself. */
|
|
34804
|
+
autoRestore: external_exports.boolean().default(false),
|
|
34805
|
+
/** What to do when the current light has no reference of its own. See
|
|
34806
|
+
* {@link SceneUncoveredPolicySchema} — the default makes night OPTIONAL. */
|
|
34807
|
+
onUncoveredCondition: SceneUncoveredPolicySchema.default(SCENE_DEFAULT_UNCOVERED_POLICY),
|
|
34808
|
+
/**
|
|
34809
|
+
* The light whose checks are currently being SAT OUT under
|
|
34810
|
+
* `onUncoveredCondition: 'skip'` — `null` when the scene is checking normally.
|
|
34811
|
+
*
|
|
34812
|
+
* Engine-reported and advisory only: it moves no verdict, no latch and no
|
|
34813
|
+
* hysteresis. It exists so the card can say *"night (IR) — checks paused,
|
|
34814
|
+
* nothing captured in this light"* in the same calm voice as the coverage
|
|
34815
|
+
* line, because the alternative is a scene that silently stops answering
|
|
34816
|
+
* after sunset with nothing anywhere saying why. A skipped check must never
|
|
34817
|
+
* read as a broken one.
|
|
34818
|
+
*/
|
|
34819
|
+
suspendedCondition: SceneConditionSchema.nullable().default(null),
|
|
34820
|
+
/** Named cause when `verdict === 'unknown'`. */
|
|
34821
|
+
unavailable: SceneUnavailableSchema.nullable(),
|
|
34822
|
+
/** Conditions that have at least one comparable reference — the coverage line
|
|
34823
|
+
* ("day ✓ · ir ✓ · dusk ✗") that turns a silent fallback into a visible fact. */
|
|
34824
|
+
coveredConditions: external_exports.array(SceneConditionSchema)
|
|
34176
34825
|
});
|
|
34177
34826
|
var SceneMonitorStatusSchema = external_exports.object({
|
|
34178
34827
|
monitors: external_exports.array(SceneMonitorSchema),
|
|
@@ -34185,12 +34834,6 @@ var sceneMonitorCapability = {
|
|
|
34185
34834
|
kind: "wrapper",
|
|
34186
34835
|
defaultActive: true,
|
|
34187
34836
|
deviceTypes: [DeviceType.Camera],
|
|
34188
|
-
deviceConfig: { ui: {
|
|
34189
|
-
kind: "widget",
|
|
34190
|
-
widgetId: "host/scene-monitor-editor",
|
|
34191
|
-
tab: "scenes",
|
|
34192
|
-
label: "Scenes"
|
|
34193
|
-
} },
|
|
34194
34837
|
methods: {
|
|
34195
34838
|
listScenes: method(external_exports.object({ deviceId: external_exports.number() }), SceneMonitorStatusSchema),
|
|
34196
34839
|
createScene: method(external_exports.object({
|
|
@@ -34221,7 +34864,15 @@ var sceneMonitorCapability = {
|
|
|
34221
34864
|
"both"
|
|
34222
34865
|
]).optional(),
|
|
34223
34866
|
checkIntervalSec: external_exports.number().optional(),
|
|
34224
|
-
check: SceneCheckSchema.optional()
|
|
34867
|
+
check: SceneCheckSchema.optional(),
|
|
34868
|
+
emit: external_exports.enum(["latched", "live"]).optional(),
|
|
34869
|
+
quietSeconds: external_exports.number().int().min(0).max(3600).optional(),
|
|
34870
|
+
minObservationSpacingSec: external_exports.number().int().min(0).max(3600).optional(),
|
|
34871
|
+
anchorThreshold: external_exports.number().min(0).max(1).optional(),
|
|
34872
|
+
autoRestore: external_exports.boolean().optional(),
|
|
34873
|
+
onUncoveredCondition: SceneUncoveredPolicySchema.optional(),
|
|
34874
|
+
/** `null` clears the vision-model adjudicator. */
|
|
34875
|
+
confirm: SceneConfirmSchema.nullable().optional()
|
|
34225
34876
|
})
|
|
34226
34877
|
}), external_exports.void(), {
|
|
34227
34878
|
kind: "mutation",
|
|
@@ -34262,6 +34913,26 @@ var sceneMonitorCapability = {
|
|
|
34262
34913
|
}), external_exports.void(), {
|
|
34263
34914
|
kind: "mutation",
|
|
34264
34915
|
auth: "admin"
|
|
34916
|
+
}),
|
|
34917
|
+
/**
|
|
34918
|
+
* Clear the latch, re-arm, and — by default — RE-CAPTURE the baseline for
|
|
34919
|
+
* the CURRENT condition. The bin never goes back in exactly the same spot;
|
|
34920
|
+
* "reset" in the operator's head means *this is the new normal*, and
|
|
34921
|
+
* re-capture is what makes the feature self-healing against slow drift
|
|
34922
|
+
* instead of failing silently weeks later.
|
|
34923
|
+
*
|
|
34924
|
+
* Reachable from three surfaces on this one mutation: the scene card, a
|
|
34925
|
+
* notification button (an `onTrigger` sequence with a `kind:'cap'` step —
|
|
34926
|
+
* no new Notification-Center code at all), and tRPC for scripts.
|
|
34927
|
+
*/
|
|
34928
|
+
resetScene: method(external_exports.object({
|
|
34929
|
+
deviceId: external_exports.number(),
|
|
34930
|
+
monitorId: external_exports.string(),
|
|
34931
|
+
/** Defaults to TRUE at the provider seam — see `SCENE_RESET_RECAPTURES`. */
|
|
34932
|
+
recapture: external_exports.boolean().optional()
|
|
34933
|
+
}), external_exports.void(), {
|
|
34934
|
+
kind: "mutation",
|
|
34935
|
+
auth: "admin"
|
|
34265
34936
|
})
|
|
34266
34937
|
},
|
|
34267
34938
|
status: {
|
|
@@ -34429,13 +35100,40 @@ var CamStreamDescriptorSchema = external_exports.object({
|
|
|
34429
35100
|
/** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
|
|
34430
35101
|
metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
34431
35102
|
});
|
|
35103
|
+
var StreamCatalogStateSchema = external_exports.object({
|
|
35104
|
+
/** The descriptors as last built from a real camera response. Never a guess:
|
|
35105
|
+
* a failed or refused build writes NOTHING, so a restored catalog is always
|
|
35106
|
+
* one the camera itself once produced. */
|
|
35107
|
+
descriptors: external_exports.array(CamStreamDescriptorSchema),
|
|
35108
|
+
/** Ms epoch of the build that produced {@link descriptors}. Lets the wake
|
|
35109
|
+
* path decide whether the camera's own awake window is worth spending on a
|
|
35110
|
+
* re-read. */
|
|
35111
|
+
lastFetchedAt: external_exports.number()
|
|
35112
|
+
});
|
|
34432
35113
|
var streamCatalogCapability = {
|
|
34433
35114
|
name: "stream-catalog",
|
|
34434
35115
|
scope: "device",
|
|
34435
35116
|
deviceNative: true,
|
|
34436
35117
|
mode: "singleton",
|
|
34437
35118
|
deviceTypes: [DeviceType.Camera],
|
|
34438
|
-
methods: { getCatalog: method(external_exports.object({ deviceId: external_exports.number().int().nonnegative() }), external_exports.array(CamStreamDescriptorSchema).readonly()) }
|
|
35119
|
+
methods: { getCatalog: method(external_exports.object({ deviceId: external_exports.number().int().nonnegative() }), external_exports.array(CamStreamDescriptorSchema).readonly()) },
|
|
35120
|
+
runtimeState: StreamCatalogStateSchema,
|
|
35121
|
+
/**
|
|
35122
|
+
* Runtime-state durability: **restored** — see the schema doc. A cold
|
|
35123
|
+
* catalog on a sleeping battery camera is not a slow first frame, it is a
|
|
35124
|
+
* camera that cannot be watched at all until it happens to wake.
|
|
35125
|
+
*
|
|
35126
|
+
* Churn is nil by construction: the slice is written only by a SUCCESSFUL
|
|
35127
|
+
* build, and a build only runs when there is no cached copy (or the copy is
|
|
35128
|
+
* a day old and the camera is awake anyway).
|
|
35129
|
+
*
|
|
35130
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
35131
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
35132
|
+
*/
|
|
35133
|
+
durability: "restored",
|
|
35134
|
+
/** Clock field: written, but excluded from the compare that decides whether
|
|
35135
|
+
* persisting is worth a SQLite commit — the descriptors are the value. */
|
|
35136
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
34439
35137
|
};
|
|
34440
35138
|
var StreamProfileSchema = external_exports.enum([
|
|
34441
35139
|
"main",
|
|
@@ -34654,6 +35352,30 @@ var NetworkAddressSchema = external_exports.object({
|
|
|
34654
35352
|
family: external_exports.string(),
|
|
34655
35353
|
internal: external_exports.boolean()
|
|
34656
35354
|
});
|
|
35355
|
+
var SiteLocationSourceSchema = external_exports.enum(["operator-set", "derived-from-ip"]);
|
|
35356
|
+
var SiteLocationSchema = external_exports.object({
|
|
35357
|
+
/** WGS84 decimal degrees. */
|
|
35358
|
+
latitude: external_exports.number().min(-90).max(90),
|
|
35359
|
+
longitude: external_exports.number().min(-180).max(180),
|
|
35360
|
+
source: SiteLocationSourceSchema,
|
|
35361
|
+
/** Epoch ms the value was last written. */
|
|
35362
|
+
updatedAt: external_exports.number(),
|
|
35363
|
+
/**
|
|
35364
|
+
* Human-readable place the geo-IP service reported ("Napoli, IT"). Display
|
|
35365
|
+
* only — never parsed, never matched on. Absent for an operator-typed value.
|
|
35366
|
+
*/
|
|
35367
|
+
label: external_exports.string().optional()
|
|
35368
|
+
});
|
|
35369
|
+
var SiteLocationStatusSchema = external_exports.object({
|
|
35370
|
+
location: SiteLocationSchema.nullable(),
|
|
35371
|
+
derivationAttemptedAt: external_exports.number().nullable(),
|
|
35372
|
+
/** Why the last derivation failed, for the UI to show instead of a shrug. */
|
|
35373
|
+
derivationError: external_exports.string().nullable()
|
|
35374
|
+
});
|
|
35375
|
+
var SetSiteLocationInputSchema = external_exports.object({
|
|
35376
|
+
latitude: external_exports.number().min(-90).max(90),
|
|
35377
|
+
longitude: external_exports.number().min(-180).max(180)
|
|
35378
|
+
}).nullable();
|
|
34657
35379
|
var systemCapability = {
|
|
34658
35380
|
name: "system",
|
|
34659
35381
|
scope: "system",
|
|
@@ -34671,6 +35393,32 @@ var systemCapability = {
|
|
|
34671
35393
|
forceRetentionCleanup: method(external_exports.void(), external_exports.void(), {
|
|
34672
35394
|
kind: "mutation",
|
|
34673
35395
|
auth: "admin"
|
|
35396
|
+
}),
|
|
35397
|
+
/**
|
|
35398
|
+
* The site coordinates, deriving a default from the hub's public IP on the
|
|
35399
|
+
* FIRST read that finds nothing stored.
|
|
35400
|
+
*
|
|
35401
|
+
* The derivation is one-shot and bounded: one outbound request, a few
|
|
35402
|
+
* seconds, its outcome persisted either way. A hub with no internet pays it
|
|
35403
|
+
* once and never again, and neither boot nor any consumer is blocked on it —
|
|
35404
|
+
* the caller gets `location: null` and degrades exactly as it did before this
|
|
35405
|
+
* method existed.
|
|
35406
|
+
*/
|
|
35407
|
+
getSiteLocation: method(external_exports.void(), SiteLocationStatusSchema),
|
|
35408
|
+
/** Operator input. Always lands as `source: 'operator-set'`. */
|
|
35409
|
+
setSiteLocation: method(SetSiteLocationInputSchema, SiteLocationStatusSchema, {
|
|
35410
|
+
kind: "mutation",
|
|
35411
|
+
auth: "admin"
|
|
35412
|
+
}),
|
|
35413
|
+
/**
|
|
35414
|
+
* Re-run the geo-IP derivation now. The ONLY way a spent or failed
|
|
35415
|
+
* derivation is retried — there is no timer, and no read path retries.
|
|
35416
|
+
* Overwrites an existing `derived-from-ip` value; refuses to clobber an
|
|
35417
|
+
* `operator-set` one.
|
|
35418
|
+
*/
|
|
35419
|
+
detectSiteLocation: method(external_exports.void(), SiteLocationStatusSchema, {
|
|
35420
|
+
kind: "mutation",
|
|
35421
|
+
auth: "admin"
|
|
34674
35422
|
})
|
|
34675
35423
|
},
|
|
34676
35424
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
@@ -35600,6 +36348,7 @@ var BATTERY_DEVICE_PROFILE = {
|
|
|
35600
36348
|
},
|
|
35601
36349
|
settings: {}
|
|
35602
36350
|
};
|
|
36351
|
+
var BATTERY_UNREACHABLE_AFTER_MS = 360 * 6e4;
|
|
35603
36352
|
var METHOD_ACCESS_MAP = Object.freeze({
|
|
35604
36353
|
"accessories.setChildHidden": {
|
|
35605
36354
|
capName: "accessories",
|
|
@@ -37659,6 +38408,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
37659
38408
|
addonId: null,
|
|
37660
38409
|
access: "create"
|
|
37661
38410
|
},
|
|
38411
|
+
"llm.cancel": {
|
|
38412
|
+
capName: "llm",
|
|
38413
|
+
capScope: "system",
|
|
38414
|
+
addonId: null,
|
|
38415
|
+
access: "create"
|
|
38416
|
+
},
|
|
37662
38417
|
"llm.deleteModel": {
|
|
37663
38418
|
capName: "llm",
|
|
37664
38419
|
capScope: "system",
|
|
@@ -37743,6 +38498,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
37743
38498
|
addonId: null,
|
|
37744
38499
|
access: "view"
|
|
37745
38500
|
},
|
|
38501
|
+
"llm.resolveModelRef": {
|
|
38502
|
+
capName: "llm",
|
|
38503
|
+
capScope: "system",
|
|
38504
|
+
addonId: null,
|
|
38505
|
+
access: "create"
|
|
38506
|
+
},
|
|
37746
38507
|
"llm.setDefault": {
|
|
37747
38508
|
capName: "llm",
|
|
37748
38509
|
capScope: "system",
|
|
@@ -39909,6 +40670,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
39909
40670
|
addonId: null,
|
|
39910
40671
|
access: "create"
|
|
39911
40672
|
},
|
|
40673
|
+
"sceneMonitor.resetScene": {
|
|
40674
|
+
capName: "scene-monitor",
|
|
40675
|
+
capScope: "device",
|
|
40676
|
+
addonId: null,
|
|
40677
|
+
access: "delete"
|
|
40678
|
+
},
|
|
39912
40679
|
"sceneMonitor.updateScene": {
|
|
39913
40680
|
capName: "scene-monitor",
|
|
39914
40681
|
capScope: "device",
|
|
@@ -40587,6 +41354,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
40587
41354
|
addonId: null,
|
|
40588
41355
|
access: "create"
|
|
40589
41356
|
},
|
|
41357
|
+
"system.detectSiteLocation": {
|
|
41358
|
+
capName: "system",
|
|
41359
|
+
capScope: "system",
|
|
41360
|
+
addonId: null,
|
|
41361
|
+
access: "create"
|
|
41362
|
+
},
|
|
40590
41363
|
"system.featureFlags": {
|
|
40591
41364
|
capName: "system",
|
|
40592
41365
|
capScope: "system",
|
|
@@ -40605,6 +41378,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
40605
41378
|
addonId: null,
|
|
40606
41379
|
access: "view"
|
|
40607
41380
|
},
|
|
41381
|
+
"system.getSiteLocation": {
|
|
41382
|
+
capName: "system",
|
|
41383
|
+
capScope: "system",
|
|
41384
|
+
addonId: null,
|
|
41385
|
+
access: "view"
|
|
41386
|
+
},
|
|
40608
41387
|
"system.health": {
|
|
40609
41388
|
capName: "system",
|
|
40610
41389
|
capScope: "system",
|
|
@@ -40629,6 +41408,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
40629
41408
|
addonId: null,
|
|
40630
41409
|
access: "create"
|
|
40631
41410
|
},
|
|
41411
|
+
"system.setSiteLocation": {
|
|
41412
|
+
capName: "system",
|
|
41413
|
+
capScope: "system",
|
|
41414
|
+
addonId: null,
|
|
41415
|
+
access: "create"
|
|
41416
|
+
},
|
|
40632
41417
|
"terminalSession.adoptLegacyMonitor": {
|
|
40633
41418
|
capName: "terminal-session",
|
|
40634
41419
|
capScope: "system",
|
|
@@ -41200,6 +41985,1704 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
41200
41985
|
access: "create"
|
|
41201
41986
|
}
|
|
41202
41987
|
});
|
|
41988
|
+
var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
41989
|
+
"accessories.setChildHidden": [{
|
|
41990
|
+
name: "childDeviceId",
|
|
41991
|
+
form: "single",
|
|
41992
|
+
optional: false
|
|
41993
|
+
}, {
|
|
41994
|
+
name: "deviceId",
|
|
41995
|
+
form: "single",
|
|
41996
|
+
optional: false
|
|
41997
|
+
}],
|
|
41998
|
+
"addonSettings.getDeviceSettings": [{
|
|
41999
|
+
name: "deviceId",
|
|
42000
|
+
form: "single",
|
|
42001
|
+
optional: false
|
|
42002
|
+
}],
|
|
42003
|
+
"addonSettings.updateDeviceSettings": [{
|
|
42004
|
+
name: "deviceId",
|
|
42005
|
+
form: "single",
|
|
42006
|
+
optional: false
|
|
42007
|
+
}],
|
|
42008
|
+
"alarmPanel.arm": [{
|
|
42009
|
+
name: "deviceId",
|
|
42010
|
+
form: "single",
|
|
42011
|
+
optional: false
|
|
42012
|
+
}],
|
|
42013
|
+
"alarmPanel.disarm": [{
|
|
42014
|
+
name: "deviceId",
|
|
42015
|
+
form: "single",
|
|
42016
|
+
optional: false
|
|
42017
|
+
}],
|
|
42018
|
+
"alarmPanel.trigger": [{
|
|
42019
|
+
name: "deviceId",
|
|
42020
|
+
form: "single",
|
|
42021
|
+
optional: false
|
|
42022
|
+
}],
|
|
42023
|
+
"audioAnalysis.resolveDeviceSettings": [{
|
|
42024
|
+
name: "deviceId",
|
|
42025
|
+
form: "single",
|
|
42026
|
+
optional: false
|
|
42027
|
+
}],
|
|
42028
|
+
"audioAnalyzer.classify": [{
|
|
42029
|
+
name: "deviceId",
|
|
42030
|
+
form: "single",
|
|
42031
|
+
optional: true
|
|
42032
|
+
}],
|
|
42033
|
+
"audioMetrics.getCurrentSnapshot": [{
|
|
42034
|
+
name: "deviceId",
|
|
42035
|
+
form: "single",
|
|
42036
|
+
optional: false
|
|
42037
|
+
}],
|
|
42038
|
+
"audioMetrics.getHistory": [{
|
|
42039
|
+
name: "deviceId",
|
|
42040
|
+
form: "single",
|
|
42041
|
+
optional: false
|
|
42042
|
+
}],
|
|
42043
|
+
"automationControl.disable": [{
|
|
42044
|
+
name: "deviceId",
|
|
42045
|
+
form: "single",
|
|
42046
|
+
optional: false
|
|
42047
|
+
}],
|
|
42048
|
+
"automationControl.enable": [{
|
|
42049
|
+
name: "deviceId",
|
|
42050
|
+
form: "single",
|
|
42051
|
+
optional: false
|
|
42052
|
+
}],
|
|
42053
|
+
"automationControl.trigger": [{
|
|
42054
|
+
name: "deviceId",
|
|
42055
|
+
form: "single",
|
|
42056
|
+
optional: false
|
|
42057
|
+
}],
|
|
42058
|
+
"battery.wakeForStream": [{
|
|
42059
|
+
name: "deviceId",
|
|
42060
|
+
form: "single",
|
|
42061
|
+
optional: false
|
|
42062
|
+
}],
|
|
42063
|
+
"brightness.setBrightness": [{
|
|
42064
|
+
name: "deviceId",
|
|
42065
|
+
form: "single",
|
|
42066
|
+
optional: false
|
|
42067
|
+
}],
|
|
42068
|
+
"button.press": [{
|
|
42069
|
+
name: "deviceId",
|
|
42070
|
+
form: "single",
|
|
42071
|
+
optional: false
|
|
42072
|
+
}],
|
|
42073
|
+
"cameraCredentials.getCredentials": [{
|
|
42074
|
+
name: "deviceId",
|
|
42075
|
+
form: "single",
|
|
42076
|
+
optional: false
|
|
42077
|
+
}],
|
|
42078
|
+
"cameraStreams.getBrokerStreams": [{
|
|
42079
|
+
name: "deviceId",
|
|
42080
|
+
form: "single",
|
|
42081
|
+
optional: false
|
|
42082
|
+
}],
|
|
42083
|
+
"cameraStreams.getCameraStreams": [{
|
|
42084
|
+
name: "deviceId",
|
|
42085
|
+
form: "single",
|
|
42086
|
+
optional: false
|
|
42087
|
+
}],
|
|
42088
|
+
"cameraStreams.getProfileRtspEntries": [{
|
|
42089
|
+
name: "deviceId",
|
|
42090
|
+
form: "single",
|
|
42091
|
+
optional: false
|
|
42092
|
+
}],
|
|
42093
|
+
"cameraStreams.getRtspEntries": [{
|
|
42094
|
+
name: "deviceId",
|
|
42095
|
+
form: "single",
|
|
42096
|
+
optional: false
|
|
42097
|
+
}],
|
|
42098
|
+
"cameraStreams.pickStream": [{
|
|
42099
|
+
name: "deviceId",
|
|
42100
|
+
form: "single",
|
|
42101
|
+
optional: false
|
|
42102
|
+
}],
|
|
42103
|
+
"climateControl.setFanMode": [{
|
|
42104
|
+
name: "deviceId",
|
|
42105
|
+
form: "single",
|
|
42106
|
+
optional: false
|
|
42107
|
+
}],
|
|
42108
|
+
"climateControl.setMode": [{
|
|
42109
|
+
name: "deviceId",
|
|
42110
|
+
form: "single",
|
|
42111
|
+
optional: false
|
|
42112
|
+
}],
|
|
42113
|
+
"climateControl.setPreset": [{
|
|
42114
|
+
name: "deviceId",
|
|
42115
|
+
form: "single",
|
|
42116
|
+
optional: false
|
|
42117
|
+
}],
|
|
42118
|
+
"climateControl.setSwingHorizontal": [{
|
|
42119
|
+
name: "deviceId",
|
|
42120
|
+
form: "single",
|
|
42121
|
+
optional: false
|
|
42122
|
+
}],
|
|
42123
|
+
"climateControl.setSwingVertical": [{
|
|
42124
|
+
name: "deviceId",
|
|
42125
|
+
form: "single",
|
|
42126
|
+
optional: false
|
|
42127
|
+
}],
|
|
42128
|
+
"climateControl.setTarget": [{
|
|
42129
|
+
name: "deviceId",
|
|
42130
|
+
form: "single",
|
|
42131
|
+
optional: false
|
|
42132
|
+
}],
|
|
42133
|
+
"climateControl.setTargetHumidity": [{
|
|
42134
|
+
name: "deviceId",
|
|
42135
|
+
form: "single",
|
|
42136
|
+
optional: false
|
|
42137
|
+
}],
|
|
42138
|
+
"climateControl.setTargetRange": [{
|
|
42139
|
+
name: "deviceId",
|
|
42140
|
+
form: "single",
|
|
42141
|
+
optional: false
|
|
42142
|
+
}],
|
|
42143
|
+
"color.setColor": [{
|
|
42144
|
+
name: "deviceId",
|
|
42145
|
+
form: "single",
|
|
42146
|
+
optional: false
|
|
42147
|
+
}],
|
|
42148
|
+
"consumables.reset": [{
|
|
42149
|
+
name: "deviceId",
|
|
42150
|
+
form: "single",
|
|
42151
|
+
optional: false
|
|
42152
|
+
}],
|
|
42153
|
+
"control.setValue": [{
|
|
42154
|
+
name: "deviceId",
|
|
42155
|
+
form: "single",
|
|
42156
|
+
optional: false
|
|
42157
|
+
}],
|
|
42158
|
+
"cover.close": [{
|
|
42159
|
+
name: "deviceId",
|
|
42160
|
+
form: "single",
|
|
42161
|
+
optional: false
|
|
42162
|
+
}],
|
|
42163
|
+
"cover.open": [{
|
|
42164
|
+
name: "deviceId",
|
|
42165
|
+
form: "single",
|
|
42166
|
+
optional: false
|
|
42167
|
+
}],
|
|
42168
|
+
"cover.setPosition": [{
|
|
42169
|
+
name: "deviceId",
|
|
42170
|
+
form: "single",
|
|
42171
|
+
optional: false
|
|
42172
|
+
}],
|
|
42173
|
+
"cover.setTiltPosition": [{
|
|
42174
|
+
name: "deviceId",
|
|
42175
|
+
form: "single",
|
|
42176
|
+
optional: false
|
|
42177
|
+
}],
|
|
42178
|
+
"cover.stop": [{
|
|
42179
|
+
name: "deviceId",
|
|
42180
|
+
form: "single",
|
|
42181
|
+
optional: false
|
|
42182
|
+
}],
|
|
42183
|
+
"dayNight.getOptions": [{
|
|
42184
|
+
name: "deviceId",
|
|
42185
|
+
form: "single",
|
|
42186
|
+
optional: false
|
|
42187
|
+
}],
|
|
42188
|
+
"dayNight.setSettings": [{
|
|
42189
|
+
name: "deviceId",
|
|
42190
|
+
form: "single",
|
|
42191
|
+
optional: false
|
|
42192
|
+
}],
|
|
42193
|
+
"decoder.createSession": [{
|
|
42194
|
+
name: "deviceId",
|
|
42195
|
+
form: "single",
|
|
42196
|
+
optional: true
|
|
42197
|
+
}],
|
|
42198
|
+
"deviceAdoption.release": [{
|
|
42199
|
+
name: "camDeviceId",
|
|
42200
|
+
form: "single",
|
|
42201
|
+
optional: false
|
|
42202
|
+
}],
|
|
42203
|
+
"deviceAdoption.resync": [{
|
|
42204
|
+
name: "camDeviceId",
|
|
42205
|
+
form: "single",
|
|
42206
|
+
optional: false
|
|
42207
|
+
}],
|
|
42208
|
+
"deviceDiscovery.adoptDevice": [{
|
|
42209
|
+
name: "deviceId",
|
|
42210
|
+
form: "single",
|
|
42211
|
+
optional: false
|
|
42212
|
+
}],
|
|
42213
|
+
"deviceDiscovery.listDiscovered": [{
|
|
42214
|
+
name: "deviceId",
|
|
42215
|
+
form: "single",
|
|
42216
|
+
optional: false
|
|
42217
|
+
}],
|
|
42218
|
+
"deviceDiscovery.refreshDiscovery": [{
|
|
42219
|
+
name: "deviceId",
|
|
42220
|
+
form: "single",
|
|
42221
|
+
optional: false
|
|
42222
|
+
}],
|
|
42223
|
+
"deviceDiscovery.releaseDevice": [{
|
|
42224
|
+
name: "childDeviceId",
|
|
42225
|
+
form: "single",
|
|
42226
|
+
optional: false
|
|
42227
|
+
}, {
|
|
42228
|
+
name: "deviceId",
|
|
42229
|
+
form: "single",
|
|
42230
|
+
optional: false
|
|
42231
|
+
}],
|
|
42232
|
+
"deviceManager.adoptionRelease": [{
|
|
42233
|
+
name: "camDeviceId",
|
|
42234
|
+
form: "single",
|
|
42235
|
+
optional: false
|
|
42236
|
+
}],
|
|
42237
|
+
"deviceManager.adoptionResync": [{
|
|
42238
|
+
name: "camDeviceId",
|
|
42239
|
+
form: "single",
|
|
42240
|
+
optional: false
|
|
42241
|
+
}],
|
|
42242
|
+
"deviceManager.applyInitialMeta": [{
|
|
42243
|
+
name: "deviceId",
|
|
42244
|
+
form: "single",
|
|
42245
|
+
optional: false
|
|
42246
|
+
}, {
|
|
42247
|
+
name: "linkDeviceId",
|
|
42248
|
+
form: "single",
|
|
42249
|
+
optional: true
|
|
42250
|
+
}],
|
|
42251
|
+
"deviceManager.disable": [{
|
|
42252
|
+
name: "deviceId",
|
|
42253
|
+
form: "single",
|
|
42254
|
+
optional: false
|
|
42255
|
+
}],
|
|
42256
|
+
"deviceManager.enable": [{
|
|
42257
|
+
name: "deviceId",
|
|
42258
|
+
form: "single",
|
|
42259
|
+
optional: false
|
|
42260
|
+
}],
|
|
42261
|
+
"deviceManager.getBindings": [{
|
|
42262
|
+
name: "deviceId",
|
|
42263
|
+
form: "single",
|
|
42264
|
+
optional: false
|
|
42265
|
+
}],
|
|
42266
|
+
"deviceManager.getChildren": [{
|
|
42267
|
+
name: "parentDeviceId",
|
|
42268
|
+
form: "single",
|
|
42269
|
+
optional: false
|
|
42270
|
+
}],
|
|
42271
|
+
"deviceManager.getConfigSchema": [{
|
|
42272
|
+
name: "deviceId",
|
|
42273
|
+
form: "single",
|
|
42274
|
+
optional: false
|
|
42275
|
+
}],
|
|
42276
|
+
"deviceManager.getDevice": [{
|
|
42277
|
+
name: "deviceId",
|
|
42278
|
+
form: "single",
|
|
42279
|
+
optional: false
|
|
42280
|
+
}],
|
|
42281
|
+
"deviceManager.getDeviceAggregate": [{
|
|
42282
|
+
name: "deviceId",
|
|
42283
|
+
form: "single",
|
|
42284
|
+
optional: false
|
|
42285
|
+
}],
|
|
42286
|
+
"deviceManager.getDeviceLiveInfoAggregate": [{
|
|
42287
|
+
name: "deviceId",
|
|
42288
|
+
form: "single",
|
|
42289
|
+
optional: false
|
|
42290
|
+
}],
|
|
42291
|
+
"deviceManager.getDeviceSettingsAggregate": [{
|
|
42292
|
+
name: "deviceId",
|
|
42293
|
+
form: "single",
|
|
42294
|
+
optional: false
|
|
42295
|
+
}],
|
|
42296
|
+
"deviceManager.getDeviceStatusAggregate": [{
|
|
42297
|
+
name: "deviceId",
|
|
42298
|
+
form: "single",
|
|
42299
|
+
optional: false
|
|
42300
|
+
}],
|
|
42301
|
+
"deviceManager.getDeviceStatusAggregateBatch": [{
|
|
42302
|
+
name: "deviceIds",
|
|
42303
|
+
form: "array",
|
|
42304
|
+
optional: false
|
|
42305
|
+
}],
|
|
42306
|
+
"deviceManager.getLinkedDevices": [{
|
|
42307
|
+
name: "deviceId",
|
|
42308
|
+
form: "single",
|
|
42309
|
+
optional: false
|
|
42310
|
+
}],
|
|
42311
|
+
"deviceManager.getSettingsSchema": [{
|
|
42312
|
+
name: "deviceId",
|
|
42313
|
+
form: "single",
|
|
42314
|
+
optional: false
|
|
42315
|
+
}],
|
|
42316
|
+
"deviceManager.getStreamProfileMap": [{
|
|
42317
|
+
name: "deviceId",
|
|
42318
|
+
form: "single",
|
|
42319
|
+
optional: false
|
|
42320
|
+
}],
|
|
42321
|
+
"deviceManager.getStreamSources": [{
|
|
42322
|
+
name: "deviceId",
|
|
42323
|
+
form: "single",
|
|
42324
|
+
optional: false
|
|
42325
|
+
}],
|
|
42326
|
+
"deviceManager.getWireableFields": [{
|
|
42327
|
+
name: "deviceId",
|
|
42328
|
+
form: "single",
|
|
42329
|
+
optional: false
|
|
42330
|
+
}],
|
|
42331
|
+
"deviceManager.loadConfig": [{
|
|
42332
|
+
name: "deviceId",
|
|
42333
|
+
form: "single",
|
|
42334
|
+
optional: false
|
|
42335
|
+
}],
|
|
42336
|
+
"deviceManager.loadMeta": [{
|
|
42337
|
+
name: "deviceId",
|
|
42338
|
+
form: "single",
|
|
42339
|
+
optional: false
|
|
42340
|
+
}],
|
|
42341
|
+
"deviceManager.loadRuntimeState": [{
|
|
42342
|
+
name: "deviceId",
|
|
42343
|
+
form: "single",
|
|
42344
|
+
optional: false
|
|
42345
|
+
}],
|
|
42346
|
+
"deviceManager.persistConfig": [{
|
|
42347
|
+
name: "deviceId",
|
|
42348
|
+
form: "single",
|
|
42349
|
+
optional: false
|
|
42350
|
+
}],
|
|
42351
|
+
"deviceManager.probeStreams": [{
|
|
42352
|
+
name: "deviceId",
|
|
42353
|
+
form: "single",
|
|
42354
|
+
optional: false
|
|
42355
|
+
}],
|
|
42356
|
+
"deviceManager.registerDevice": [{
|
|
42357
|
+
name: "parentDeviceId",
|
|
42358
|
+
form: "single",
|
|
42359
|
+
optional: true
|
|
42360
|
+
}],
|
|
42361
|
+
"deviceManager.remove": [{
|
|
42362
|
+
name: "deviceId",
|
|
42363
|
+
form: "single",
|
|
42364
|
+
optional: false
|
|
42365
|
+
}],
|
|
42366
|
+
"deviceManager.removeDevice": [{
|
|
42367
|
+
name: "deviceId",
|
|
42368
|
+
form: "single",
|
|
42369
|
+
optional: false
|
|
42370
|
+
}],
|
|
42371
|
+
"deviceManager.runDeviceAction": [{
|
|
42372
|
+
name: "deviceId",
|
|
42373
|
+
form: "single",
|
|
42374
|
+
optional: false
|
|
42375
|
+
}],
|
|
42376
|
+
"deviceManager.setChildLayout": [{
|
|
42377
|
+
name: "deviceId",
|
|
42378
|
+
form: "single",
|
|
42379
|
+
optional: false
|
|
42380
|
+
}],
|
|
42381
|
+
"deviceManager.setDisabled": [{
|
|
42382
|
+
name: "deviceId",
|
|
42383
|
+
form: "single",
|
|
42384
|
+
optional: false
|
|
42385
|
+
}],
|
|
42386
|
+
"deviceManager.setDisplay": [{
|
|
42387
|
+
name: "deviceId",
|
|
42388
|
+
form: "single",
|
|
42389
|
+
optional: false
|
|
42390
|
+
}],
|
|
42391
|
+
"deviceManager.setIntegrationId": [{
|
|
42392
|
+
name: "deviceId",
|
|
42393
|
+
form: "single",
|
|
42394
|
+
optional: false
|
|
42395
|
+
}],
|
|
42396
|
+
"deviceManager.setLinkDeviceId": [{
|
|
42397
|
+
name: "deviceId",
|
|
42398
|
+
form: "single",
|
|
42399
|
+
optional: false
|
|
42400
|
+
}, {
|
|
42401
|
+
name: "linkDeviceId",
|
|
42402
|
+
form: "single",
|
|
42403
|
+
optional: true
|
|
42404
|
+
}],
|
|
42405
|
+
"deviceManager.setLocation": [{
|
|
42406
|
+
name: "deviceId",
|
|
42407
|
+
form: "single",
|
|
42408
|
+
optional: false
|
|
42409
|
+
}],
|
|
42410
|
+
"deviceManager.setMetadata": [{
|
|
42411
|
+
name: "deviceId",
|
|
42412
|
+
form: "single",
|
|
42413
|
+
optional: false
|
|
42414
|
+
}],
|
|
42415
|
+
"deviceManager.setName": [{
|
|
42416
|
+
name: "deviceId",
|
|
42417
|
+
form: "single",
|
|
42418
|
+
optional: false
|
|
42419
|
+
}],
|
|
42420
|
+
"deviceManager.setPrimaryChildEntityId": [{
|
|
42421
|
+
name: "deviceId",
|
|
42422
|
+
form: "single",
|
|
42423
|
+
optional: false
|
|
42424
|
+
}],
|
|
42425
|
+
"deviceManager.setRole": [{
|
|
42426
|
+
name: "deviceId",
|
|
42427
|
+
form: "single",
|
|
42428
|
+
optional: false
|
|
42429
|
+
}],
|
|
42430
|
+
"deviceManager.setStreamProfileMap": [{
|
|
42431
|
+
name: "deviceId",
|
|
42432
|
+
form: "single",
|
|
42433
|
+
optional: false
|
|
42434
|
+
}],
|
|
42435
|
+
"deviceManager.setType": [{
|
|
42436
|
+
name: "deviceId",
|
|
42437
|
+
form: "single",
|
|
42438
|
+
optional: false
|
|
42439
|
+
}],
|
|
42440
|
+
"deviceManager.setWrapperActive": [{
|
|
42441
|
+
name: "deviceId",
|
|
42442
|
+
form: "single",
|
|
42443
|
+
optional: false
|
|
42444
|
+
}],
|
|
42445
|
+
"deviceManager.testField": [{
|
|
42446
|
+
name: "deviceId",
|
|
42447
|
+
form: "single",
|
|
42448
|
+
optional: false
|
|
42449
|
+
}],
|
|
42450
|
+
"deviceManager.updateConfig": [{
|
|
42451
|
+
name: "deviceId",
|
|
42452
|
+
form: "single",
|
|
42453
|
+
optional: false
|
|
42454
|
+
}],
|
|
42455
|
+
"deviceManager.updateDeviceField": [{
|
|
42456
|
+
name: "deviceId",
|
|
42457
|
+
form: "single",
|
|
42458
|
+
optional: false
|
|
42459
|
+
}],
|
|
42460
|
+
"deviceManager.updateDeviceFieldsBatch": [{
|
|
42461
|
+
name: "deviceId",
|
|
42462
|
+
form: "single",
|
|
42463
|
+
optional: false
|
|
42464
|
+
}],
|
|
42465
|
+
"deviceOps.getConfigEntries": [{
|
|
42466
|
+
name: "deviceId",
|
|
42467
|
+
form: "single",
|
|
42468
|
+
optional: false
|
|
42469
|
+
}],
|
|
42470
|
+
"deviceOps.getRawState": [{
|
|
42471
|
+
name: "deviceId",
|
|
42472
|
+
form: "single",
|
|
42473
|
+
optional: false
|
|
42474
|
+
}],
|
|
42475
|
+
"deviceOps.getSettingsSchema": [{
|
|
42476
|
+
name: "deviceId",
|
|
42477
|
+
form: "single",
|
|
42478
|
+
optional: false
|
|
42479
|
+
}],
|
|
42480
|
+
"deviceOps.getStreamSources": [{
|
|
42481
|
+
name: "deviceId",
|
|
42482
|
+
form: "single",
|
|
42483
|
+
optional: false
|
|
42484
|
+
}],
|
|
42485
|
+
"deviceOps.removeDevice": [{
|
|
42486
|
+
name: "deviceId",
|
|
42487
|
+
form: "single",
|
|
42488
|
+
optional: false
|
|
42489
|
+
}],
|
|
42490
|
+
"deviceOps.runAction": [{
|
|
42491
|
+
name: "deviceId",
|
|
42492
|
+
form: "single",
|
|
42493
|
+
optional: false
|
|
42494
|
+
}],
|
|
42495
|
+
"deviceOps.setConfig": [{
|
|
42496
|
+
name: "deviceId",
|
|
42497
|
+
form: "single",
|
|
42498
|
+
optional: false
|
|
42499
|
+
}],
|
|
42500
|
+
"deviceState.getCapSlice": [{
|
|
42501
|
+
name: "deviceId",
|
|
42502
|
+
form: "single",
|
|
42503
|
+
optional: false
|
|
42504
|
+
}],
|
|
42505
|
+
"deviceState.getSnapshot": [{
|
|
42506
|
+
name: "deviceId",
|
|
42507
|
+
form: "single",
|
|
42508
|
+
optional: false
|
|
42509
|
+
}],
|
|
42510
|
+
"deviceState.setCapSlice": [{
|
|
42511
|
+
name: "deviceId",
|
|
42512
|
+
form: "single",
|
|
42513
|
+
optional: false
|
|
42514
|
+
}],
|
|
42515
|
+
"events.getEventClipUrl": [{
|
|
42516
|
+
name: "deviceId",
|
|
42517
|
+
form: "single",
|
|
42518
|
+
optional: false
|
|
42519
|
+
}],
|
|
42520
|
+
"events.getEvents": [{
|
|
42521
|
+
name: "deviceId",
|
|
42522
|
+
form: "single",
|
|
42523
|
+
optional: false
|
|
42524
|
+
}],
|
|
42525
|
+
"events.getEventThumbnail": [{
|
|
42526
|
+
name: "deviceId",
|
|
42527
|
+
form: "single",
|
|
42528
|
+
optional: false
|
|
42529
|
+
}],
|
|
42530
|
+
"faceGallery.getFaceByTrack": [{
|
|
42531
|
+
name: "deviceId",
|
|
42532
|
+
form: "single",
|
|
42533
|
+
optional: false
|
|
42534
|
+
}],
|
|
42535
|
+
"faceGallery.listRecentFaces": [{
|
|
42536
|
+
name: "deviceId",
|
|
42537
|
+
form: "single",
|
|
42538
|
+
optional: true
|
|
42539
|
+
}],
|
|
42540
|
+
"fanControl.setDirection": [{
|
|
42541
|
+
name: "deviceId",
|
|
42542
|
+
form: "single",
|
|
42543
|
+
optional: false
|
|
42544
|
+
}],
|
|
42545
|
+
"fanControl.setOscillating": [{
|
|
42546
|
+
name: "deviceId",
|
|
42547
|
+
form: "single",
|
|
42548
|
+
optional: false
|
|
42549
|
+
}],
|
|
42550
|
+
"fanControl.setPercentage": [{
|
|
42551
|
+
name: "deviceId",
|
|
42552
|
+
form: "single",
|
|
42553
|
+
optional: false
|
|
42554
|
+
}],
|
|
42555
|
+
"fanControl.setPreset": [{
|
|
42556
|
+
name: "deviceId",
|
|
42557
|
+
form: "single",
|
|
42558
|
+
optional: false
|
|
42559
|
+
}],
|
|
42560
|
+
"humidifier.setMode": [{
|
|
42561
|
+
name: "deviceId",
|
|
42562
|
+
form: "single",
|
|
42563
|
+
optional: false
|
|
42564
|
+
}],
|
|
42565
|
+
"humidifier.setOn": [{
|
|
42566
|
+
name: "deviceId",
|
|
42567
|
+
form: "single",
|
|
42568
|
+
optional: false
|
|
42569
|
+
}],
|
|
42570
|
+
"humidifier.setTargetHumidity": [{
|
|
42571
|
+
name: "deviceId",
|
|
42572
|
+
form: "single",
|
|
42573
|
+
optional: false
|
|
42574
|
+
}],
|
|
42575
|
+
"imageSettings.getOptions": [{
|
|
42576
|
+
name: "deviceId",
|
|
42577
|
+
form: "single",
|
|
42578
|
+
optional: false
|
|
42579
|
+
}],
|
|
42580
|
+
"imageSettings.setSettings": [{
|
|
42581
|
+
name: "deviceId",
|
|
42582
|
+
form: "single",
|
|
42583
|
+
optional: false
|
|
42584
|
+
}],
|
|
42585
|
+
"intercom.endTalkSession": [{
|
|
42586
|
+
name: "deviceId",
|
|
42587
|
+
form: "single",
|
|
42588
|
+
optional: false
|
|
42589
|
+
}],
|
|
42590
|
+
"intercom.handleAnswer": [{
|
|
42591
|
+
name: "deviceId",
|
|
42592
|
+
form: "single",
|
|
42593
|
+
optional: false
|
|
42594
|
+
}],
|
|
42595
|
+
"intercom.pushTalkAudio": [{
|
|
42596
|
+
name: "deviceId",
|
|
42597
|
+
form: "single",
|
|
42598
|
+
optional: false
|
|
42599
|
+
}],
|
|
42600
|
+
"intercom.startSession": [{
|
|
42601
|
+
name: "deviceId",
|
|
42602
|
+
form: "single",
|
|
42603
|
+
optional: false
|
|
42604
|
+
}],
|
|
42605
|
+
"intercom.startTalkSession": [{
|
|
42606
|
+
name: "deviceId",
|
|
42607
|
+
form: "single",
|
|
42608
|
+
optional: false
|
|
42609
|
+
}],
|
|
42610
|
+
"intercom.stopSession": [{
|
|
42611
|
+
name: "deviceId",
|
|
42612
|
+
form: "single",
|
|
42613
|
+
optional: false
|
|
42614
|
+
}],
|
|
42615
|
+
"lawnMowerControl.dock": [{
|
|
42616
|
+
name: "deviceId",
|
|
42617
|
+
form: "single",
|
|
42618
|
+
optional: false
|
|
42619
|
+
}],
|
|
42620
|
+
"lawnMowerControl.pause": [{
|
|
42621
|
+
name: "deviceId",
|
|
42622
|
+
form: "single",
|
|
42623
|
+
optional: false
|
|
42624
|
+
}],
|
|
42625
|
+
"lawnMowerControl.startMowing": [{
|
|
42626
|
+
name: "deviceId",
|
|
42627
|
+
form: "single",
|
|
42628
|
+
optional: false
|
|
42629
|
+
}],
|
|
42630
|
+
"lockControl.lock": [{
|
|
42631
|
+
name: "deviceId",
|
|
42632
|
+
form: "single",
|
|
42633
|
+
optional: false
|
|
42634
|
+
}],
|
|
42635
|
+
"lockControl.open": [{
|
|
42636
|
+
name: "deviceId",
|
|
42637
|
+
form: "single",
|
|
42638
|
+
optional: false
|
|
42639
|
+
}],
|
|
42640
|
+
"lockControl.unlock": [{
|
|
42641
|
+
name: "deviceId",
|
|
42642
|
+
form: "single",
|
|
42643
|
+
optional: false
|
|
42644
|
+
}],
|
|
42645
|
+
"mediaPlayer.next": [{
|
|
42646
|
+
name: "deviceId",
|
|
42647
|
+
form: "single",
|
|
42648
|
+
optional: false
|
|
42649
|
+
}],
|
|
42650
|
+
"mediaPlayer.pause": [{
|
|
42651
|
+
name: "deviceId",
|
|
42652
|
+
form: "single",
|
|
42653
|
+
optional: false
|
|
42654
|
+
}],
|
|
42655
|
+
"mediaPlayer.play": [{
|
|
42656
|
+
name: "deviceId",
|
|
42657
|
+
form: "single",
|
|
42658
|
+
optional: false
|
|
42659
|
+
}],
|
|
42660
|
+
"mediaPlayer.playMedia": [{
|
|
42661
|
+
name: "deviceId",
|
|
42662
|
+
form: "single",
|
|
42663
|
+
optional: false
|
|
42664
|
+
}],
|
|
42665
|
+
"mediaPlayer.previous": [{
|
|
42666
|
+
name: "deviceId",
|
|
42667
|
+
form: "single",
|
|
42668
|
+
optional: false
|
|
42669
|
+
}],
|
|
42670
|
+
"mediaPlayer.seek": [{
|
|
42671
|
+
name: "deviceId",
|
|
42672
|
+
form: "single",
|
|
42673
|
+
optional: false
|
|
42674
|
+
}],
|
|
42675
|
+
"mediaPlayer.selectSource": [{
|
|
42676
|
+
name: "deviceId",
|
|
42677
|
+
form: "single",
|
|
42678
|
+
optional: false
|
|
42679
|
+
}],
|
|
42680
|
+
"mediaPlayer.setMute": [{
|
|
42681
|
+
name: "deviceId",
|
|
42682
|
+
form: "single",
|
|
42683
|
+
optional: false
|
|
42684
|
+
}],
|
|
42685
|
+
"mediaPlayer.setRepeat": [{
|
|
42686
|
+
name: "deviceId",
|
|
42687
|
+
form: "single",
|
|
42688
|
+
optional: false
|
|
42689
|
+
}],
|
|
42690
|
+
"mediaPlayer.setShuffle": [{
|
|
42691
|
+
name: "deviceId",
|
|
42692
|
+
form: "single",
|
|
42693
|
+
optional: false
|
|
42694
|
+
}],
|
|
42695
|
+
"mediaPlayer.setVolume": [{
|
|
42696
|
+
name: "deviceId",
|
|
42697
|
+
form: "single",
|
|
42698
|
+
optional: false
|
|
42699
|
+
}],
|
|
42700
|
+
"mediaPlayer.stop": [{
|
|
42701
|
+
name: "deviceId",
|
|
42702
|
+
form: "single",
|
|
42703
|
+
optional: false
|
|
42704
|
+
}],
|
|
42705
|
+
"motion.isDetected": [{
|
|
42706
|
+
name: "deviceId",
|
|
42707
|
+
form: "single",
|
|
42708
|
+
optional: false
|
|
42709
|
+
}],
|
|
42710
|
+
"motionDetection.analyze": [{
|
|
42711
|
+
name: "deviceId",
|
|
42712
|
+
form: "single",
|
|
42713
|
+
optional: false
|
|
42714
|
+
}],
|
|
42715
|
+
"motionDetection.removeCamera": [{
|
|
42716
|
+
name: "deviceId",
|
|
42717
|
+
form: "single",
|
|
42718
|
+
optional: false
|
|
42719
|
+
}],
|
|
42720
|
+
"motionTrigger.setMotionTrigger": [{
|
|
42721
|
+
name: "deviceId",
|
|
42722
|
+
form: "single",
|
|
42723
|
+
optional: false
|
|
42724
|
+
}],
|
|
42725
|
+
"motionZones.getOptions": [{
|
|
42726
|
+
name: "deviceId",
|
|
42727
|
+
form: "single",
|
|
42728
|
+
optional: false
|
|
42729
|
+
}],
|
|
42730
|
+
"motionZones.setZone": [{
|
|
42731
|
+
name: "deviceId",
|
|
42732
|
+
form: "single",
|
|
42733
|
+
optional: false
|
|
42734
|
+
}],
|
|
42735
|
+
"nativeObjectDetection.setEnabled": [{
|
|
42736
|
+
name: "deviceId",
|
|
42737
|
+
form: "single",
|
|
42738
|
+
optional: false
|
|
42739
|
+
}],
|
|
42740
|
+
"networkQuality.getDeviceStats": [{
|
|
42741
|
+
name: "deviceId",
|
|
42742
|
+
form: "single",
|
|
42743
|
+
optional: false
|
|
42744
|
+
}],
|
|
42745
|
+
"networkQuality.reportClientStats": [{
|
|
42746
|
+
name: "deviceId",
|
|
42747
|
+
form: "single",
|
|
42748
|
+
optional: false
|
|
42749
|
+
}],
|
|
42750
|
+
"notificationRules.setDeviceMuted": [{
|
|
42751
|
+
name: "deviceId",
|
|
42752
|
+
form: "single",
|
|
42753
|
+
optional: false
|
|
42754
|
+
}],
|
|
42755
|
+
"notifier.cancel": [{
|
|
42756
|
+
name: "deviceId",
|
|
42757
|
+
form: "single",
|
|
42758
|
+
optional: false
|
|
42759
|
+
}],
|
|
42760
|
+
"notifier.send": [{
|
|
42761
|
+
name: "deviceId",
|
|
42762
|
+
form: "single",
|
|
42763
|
+
optional: false
|
|
42764
|
+
}],
|
|
42765
|
+
"osd.setOverlay": [{
|
|
42766
|
+
name: "deviceId",
|
|
42767
|
+
form: "single",
|
|
42768
|
+
optional: false
|
|
42769
|
+
}],
|
|
42770
|
+
"osdManager.clearSlotBinding": [{
|
|
42771
|
+
name: "deviceId",
|
|
42772
|
+
form: "single",
|
|
42773
|
+
optional: false
|
|
42774
|
+
}],
|
|
42775
|
+
"osdManager.copyDeviceConfiguration": [{
|
|
42776
|
+
name: "sourceDeviceId",
|
|
42777
|
+
form: "single",
|
|
42778
|
+
optional: false
|
|
42779
|
+
}, {
|
|
42780
|
+
name: "targetDeviceId",
|
|
42781
|
+
form: "single",
|
|
42782
|
+
optional: false
|
|
42783
|
+
}],
|
|
42784
|
+
"osdManager.getDeviceOsd": [{
|
|
42785
|
+
name: "deviceId",
|
|
42786
|
+
form: "single",
|
|
42787
|
+
optional: false
|
|
42788
|
+
}],
|
|
42789
|
+
"osdManager.getSourceCatalog": [{
|
|
42790
|
+
name: "deviceId",
|
|
42791
|
+
form: "single",
|
|
42792
|
+
optional: false
|
|
42793
|
+
}],
|
|
42794
|
+
"osdManager.previewSlot": [{
|
|
42795
|
+
name: "deviceId",
|
|
42796
|
+
form: "single",
|
|
42797
|
+
optional: false
|
|
42798
|
+
}],
|
|
42799
|
+
"osdManager.renderDevice": [{
|
|
42800
|
+
name: "deviceId",
|
|
42801
|
+
form: "single",
|
|
42802
|
+
optional: false
|
|
42803
|
+
}],
|
|
42804
|
+
"osdManager.setSlotBinding": [{
|
|
42805
|
+
name: "deviceId",
|
|
42806
|
+
form: "single",
|
|
42807
|
+
optional: false
|
|
42808
|
+
}],
|
|
42809
|
+
"petFeeder.callPet": [{
|
|
42810
|
+
name: "deviceId",
|
|
42811
|
+
form: "single",
|
|
42812
|
+
optional: false
|
|
42813
|
+
}],
|
|
42814
|
+
"petFeeder.cancelFeed": [{
|
|
42815
|
+
name: "deviceId",
|
|
42816
|
+
form: "single",
|
|
42817
|
+
optional: false
|
|
42818
|
+
}],
|
|
42819
|
+
"petFeeder.feed": [{
|
|
42820
|
+
name: "deviceId",
|
|
42821
|
+
form: "single",
|
|
42822
|
+
optional: false
|
|
42823
|
+
}],
|
|
42824
|
+
"petFeeder.markFoodReplenished": [{
|
|
42825
|
+
name: "deviceId",
|
|
42826
|
+
form: "single",
|
|
42827
|
+
optional: false
|
|
42828
|
+
}],
|
|
42829
|
+
"petFeeder.playSound": [{
|
|
42830
|
+
name: "deviceId",
|
|
42831
|
+
form: "single",
|
|
42832
|
+
optional: false
|
|
42833
|
+
}],
|
|
42834
|
+
"petFeeder.resetDesiccant": [{
|
|
42835
|
+
name: "deviceId",
|
|
42836
|
+
form: "single",
|
|
42837
|
+
optional: false
|
|
42838
|
+
}],
|
|
42839
|
+
"petFeeder.setChildLock": [{
|
|
42840
|
+
name: "deviceId",
|
|
42841
|
+
form: "single",
|
|
42842
|
+
optional: false
|
|
42843
|
+
}],
|
|
42844
|
+
"petFeeder.setFeedSound": [{
|
|
42845
|
+
name: "deviceId",
|
|
42846
|
+
form: "single",
|
|
42847
|
+
optional: false
|
|
42848
|
+
}],
|
|
42849
|
+
"petFeeder.setIndicatorLight": [{
|
|
42850
|
+
name: "deviceId",
|
|
42851
|
+
form: "single",
|
|
42852
|
+
optional: false
|
|
42853
|
+
}],
|
|
42854
|
+
"petFeeder.setVolume": [{
|
|
42855
|
+
name: "deviceId",
|
|
42856
|
+
form: "single",
|
|
42857
|
+
optional: false
|
|
42858
|
+
}],
|
|
42859
|
+
"pipelineAnalytics.clearTracks": [{
|
|
42860
|
+
name: "deviceId",
|
|
42861
|
+
form: "single",
|
|
42862
|
+
optional: false
|
|
42863
|
+
}],
|
|
42864
|
+
"pipelineAnalytics.completeRetrainTrack": [{
|
|
42865
|
+
name: "deviceId",
|
|
42866
|
+
form: "single",
|
|
42867
|
+
optional: false
|
|
42868
|
+
}],
|
|
42869
|
+
"pipelineAnalytics.deleteDeviceEvents": [{
|
|
42870
|
+
name: "deviceId",
|
|
42871
|
+
form: "single",
|
|
42872
|
+
optional: false
|
|
42873
|
+
}],
|
|
42874
|
+
"pipelineAnalytics.deleteTracks": [{
|
|
42875
|
+
name: "deviceId",
|
|
42876
|
+
form: "single",
|
|
42877
|
+
optional: false
|
|
42878
|
+
}],
|
|
42879
|
+
"pipelineAnalytics.deselectRetrainFrame": [{
|
|
42880
|
+
name: "deviceId",
|
|
42881
|
+
form: "single",
|
|
42882
|
+
optional: false
|
|
42883
|
+
}],
|
|
42884
|
+
"pipelineAnalytics.getActiveTracks": [{
|
|
42885
|
+
name: "deviceId",
|
|
42886
|
+
form: "single",
|
|
42887
|
+
optional: false
|
|
42888
|
+
}],
|
|
42889
|
+
"pipelineAnalytics.getAudioEvents": [{
|
|
42890
|
+
name: "deviceId",
|
|
42891
|
+
form: "single",
|
|
42892
|
+
optional: false
|
|
42893
|
+
}],
|
|
42894
|
+
"pipelineAnalytics.getEventDensity": [{
|
|
42895
|
+
name: "deviceId",
|
|
42896
|
+
form: "single",
|
|
42897
|
+
optional: false
|
|
42898
|
+
}],
|
|
42899
|
+
"pipelineAnalytics.getEventMedia": [{
|
|
42900
|
+
name: "deviceId",
|
|
42901
|
+
form: "single",
|
|
42902
|
+
optional: false
|
|
42903
|
+
}],
|
|
42904
|
+
"pipelineAnalytics.getKeyEvents": [{
|
|
42905
|
+
name: "deviceId",
|
|
42906
|
+
form: "single",
|
|
42907
|
+
optional: false
|
|
42908
|
+
}],
|
|
42909
|
+
"pipelineAnalytics.getMotionEvents": [{
|
|
42910
|
+
name: "deviceId",
|
|
42911
|
+
form: "single",
|
|
42912
|
+
optional: false
|
|
42913
|
+
}],
|
|
42914
|
+
"pipelineAnalytics.getObjectEvents": [{
|
|
42915
|
+
name: "deviceId",
|
|
42916
|
+
form: "single",
|
|
42917
|
+
optional: false
|
|
42918
|
+
}],
|
|
42919
|
+
"pipelineAnalytics.getRetrainExportUrl": [{
|
|
42920
|
+
name: "deviceIds",
|
|
42921
|
+
form: "array",
|
|
42922
|
+
optional: true
|
|
42923
|
+
}],
|
|
42924
|
+
"pipelineAnalytics.getSensorEvents": [{
|
|
42925
|
+
name: "deviceId",
|
|
42926
|
+
form: "single",
|
|
42927
|
+
optional: false
|
|
42928
|
+
}],
|
|
42929
|
+
"pipelineAnalytics.getTrack": [{
|
|
42930
|
+
name: "deviceId",
|
|
42931
|
+
form: "single",
|
|
42932
|
+
optional: false
|
|
42933
|
+
}],
|
|
42934
|
+
"pipelineAnalytics.getTrackMedia": [{
|
|
42935
|
+
name: "deviceId",
|
|
42936
|
+
form: "single",
|
|
42937
|
+
optional: false
|
|
42938
|
+
}],
|
|
42939
|
+
"pipelineAnalytics.getTrainingExportSummary": [{
|
|
42940
|
+
name: "deviceIds",
|
|
42941
|
+
form: "array",
|
|
42942
|
+
optional: true
|
|
42943
|
+
}],
|
|
42944
|
+
"pipelineAnalytics.getTrainingExportUrl": [{
|
|
42945
|
+
name: "deviceIds",
|
|
42946
|
+
form: "array",
|
|
42947
|
+
optional: true
|
|
42948
|
+
}],
|
|
42949
|
+
"pipelineAnalytics.listEventKinds": [{
|
|
42950
|
+
name: "deviceId",
|
|
42951
|
+
form: "single",
|
|
42952
|
+
optional: false
|
|
42953
|
+
}],
|
|
42954
|
+
"pipelineAnalytics.listEventKindsBatch": [{
|
|
42955
|
+
name: "deviceIds",
|
|
42956
|
+
form: "array",
|
|
42957
|
+
optional: false
|
|
42958
|
+
}],
|
|
42959
|
+
"pipelineAnalytics.listOpsLog": [{
|
|
42960
|
+
name: "deviceId",
|
|
42961
|
+
form: "single",
|
|
42962
|
+
optional: true
|
|
42963
|
+
}],
|
|
42964
|
+
"pipelineAnalytics.listRecentTracks": [{
|
|
42965
|
+
name: "deviceIds",
|
|
42966
|
+
form: "array",
|
|
42967
|
+
optional: false
|
|
42968
|
+
}],
|
|
42969
|
+
"pipelineAnalytics.listRetrainStaging": [{
|
|
42970
|
+
name: "deviceIds",
|
|
42971
|
+
form: "array",
|
|
42972
|
+
optional: true
|
|
42973
|
+
}],
|
|
42974
|
+
"pipelineAnalytics.listTrackMedia": [{
|
|
42975
|
+
name: "deviceId",
|
|
42976
|
+
form: "single",
|
|
42977
|
+
optional: false
|
|
42978
|
+
}],
|
|
42979
|
+
"pipelineAnalytics.listTracks": [{
|
|
42980
|
+
name: "deviceId",
|
|
42981
|
+
form: "single",
|
|
42982
|
+
optional: false
|
|
42983
|
+
}],
|
|
42984
|
+
"pipelineAnalytics.proposeRetrainAnnotations": [{
|
|
42985
|
+
name: "deviceId",
|
|
42986
|
+
form: "single",
|
|
42987
|
+
optional: false
|
|
42988
|
+
}],
|
|
42989
|
+
"pipelineAnalytics.pruneEventsBefore": [{
|
|
42990
|
+
name: "deviceId",
|
|
42991
|
+
form: "single",
|
|
42992
|
+
optional: false
|
|
42993
|
+
}],
|
|
42994
|
+
"pipelineAnalytics.pruneTracksBefore": [{
|
|
42995
|
+
name: "deviceId",
|
|
42996
|
+
form: "single",
|
|
42997
|
+
optional: false
|
|
42998
|
+
}],
|
|
42999
|
+
"pipelineAnalytics.rebuildObjectEmbeddings": [{
|
|
43000
|
+
name: "deviceId",
|
|
43001
|
+
form: "single",
|
|
43002
|
+
optional: true
|
|
43003
|
+
}],
|
|
43004
|
+
"pipelineAnalytics.restageRetrainTrack": [{
|
|
43005
|
+
name: "deviceId",
|
|
43006
|
+
form: "single",
|
|
43007
|
+
optional: false
|
|
43008
|
+
}],
|
|
43009
|
+
"pipelineAnalytics.saveRetrainAnnotations": [{
|
|
43010
|
+
name: "deviceId",
|
|
43011
|
+
form: "single",
|
|
43012
|
+
optional: false
|
|
43013
|
+
}],
|
|
43014
|
+
"pipelineAnalytics.searchObjectEvents": [{
|
|
43015
|
+
name: "deviceId",
|
|
43016
|
+
form: "single",
|
|
43017
|
+
optional: true
|
|
43018
|
+
}],
|
|
43019
|
+
"pipelineAnalytics.selectRetrainFrames": [{
|
|
43020
|
+
name: "deviceId",
|
|
43021
|
+
form: "single",
|
|
43022
|
+
optional: false
|
|
43023
|
+
}],
|
|
43024
|
+
"pipelineAnalytics.setTrackFlags": [{
|
|
43025
|
+
name: "deviceId",
|
|
43026
|
+
form: "single",
|
|
43027
|
+
optional: false
|
|
43028
|
+
}],
|
|
43029
|
+
"pipelineAnalytics.wipeAllAnalytics": [{
|
|
43030
|
+
name: "deviceId",
|
|
43031
|
+
form: "single",
|
|
43032
|
+
optional: false
|
|
43033
|
+
}],
|
|
43034
|
+
"pipelineExecutor.runPipeline": [{
|
|
43035
|
+
name: "deviceId",
|
|
43036
|
+
form: "single",
|
|
43037
|
+
optional: true
|
|
43038
|
+
}],
|
|
43039
|
+
"pipelineExecutor.runPipelineBatch": [{
|
|
43040
|
+
name: "deviceId",
|
|
43041
|
+
form: "single",
|
|
43042
|
+
optional: true
|
|
43043
|
+
}],
|
|
43044
|
+
"pipelineOrchestrator.assignAudio": [{
|
|
43045
|
+
name: "deviceId",
|
|
43046
|
+
form: "single",
|
|
43047
|
+
optional: false
|
|
43048
|
+
}],
|
|
43049
|
+
"pipelineOrchestrator.assignPipeline": [{
|
|
43050
|
+
name: "deviceId",
|
|
43051
|
+
form: "single",
|
|
43052
|
+
optional: false
|
|
43053
|
+
}],
|
|
43054
|
+
"pipelineOrchestrator.getAudioAssignment": [{
|
|
43055
|
+
name: "deviceId",
|
|
43056
|
+
form: "single",
|
|
43057
|
+
optional: false
|
|
43058
|
+
}],
|
|
43059
|
+
"pipelineOrchestrator.getCameraMetrics": [{
|
|
43060
|
+
name: "deviceId",
|
|
43061
|
+
form: "single",
|
|
43062
|
+
optional: false
|
|
43063
|
+
}],
|
|
43064
|
+
"pipelineOrchestrator.getCameraSettings": [{
|
|
43065
|
+
name: "deviceId",
|
|
43066
|
+
form: "single",
|
|
43067
|
+
optional: false
|
|
43068
|
+
}],
|
|
43069
|
+
"pipelineOrchestrator.getCameraStatus": [{
|
|
43070
|
+
name: "deviceId",
|
|
43071
|
+
form: "single",
|
|
43072
|
+
optional: false
|
|
43073
|
+
}],
|
|
43074
|
+
"pipelineOrchestrator.getCameraStatuses": [{
|
|
43075
|
+
name: "deviceIds",
|
|
43076
|
+
form: "array",
|
|
43077
|
+
optional: true
|
|
43078
|
+
}],
|
|
43079
|
+
"pipelineOrchestrator.getCameraStepOverrides": [{
|
|
43080
|
+
name: "deviceId",
|
|
43081
|
+
form: "single",
|
|
43082
|
+
optional: false
|
|
43083
|
+
}],
|
|
43084
|
+
"pipelineOrchestrator.getCameraSwitches": [{
|
|
43085
|
+
name: "deviceId",
|
|
43086
|
+
form: "single",
|
|
43087
|
+
optional: false
|
|
43088
|
+
}],
|
|
43089
|
+
"pipelineOrchestrator.getPipelineAssignment": [{
|
|
43090
|
+
name: "deviceId",
|
|
43091
|
+
form: "single",
|
|
43092
|
+
optional: false
|
|
43093
|
+
}],
|
|
43094
|
+
"pipelineOrchestrator.getPipelineDevicePin": [{
|
|
43095
|
+
name: "deviceId",
|
|
43096
|
+
form: "single",
|
|
43097
|
+
optional: false
|
|
43098
|
+
}],
|
|
43099
|
+
"pipelineOrchestrator.resolvePipeline": [{
|
|
43100
|
+
name: "deviceId",
|
|
43101
|
+
form: "single",
|
|
43102
|
+
optional: false
|
|
43103
|
+
}],
|
|
43104
|
+
"pipelineOrchestrator.setCameraPipelineForAgent": [{
|
|
43105
|
+
name: "deviceId",
|
|
43106
|
+
form: "single",
|
|
43107
|
+
optional: false
|
|
43108
|
+
}],
|
|
43109
|
+
"pipelineOrchestrator.setCameraStepOverride": [{
|
|
43110
|
+
name: "deviceId",
|
|
43111
|
+
form: "single",
|
|
43112
|
+
optional: false
|
|
43113
|
+
}],
|
|
43114
|
+
"pipelineOrchestrator.setCameraStepToggle": [{
|
|
43115
|
+
name: "deviceId",
|
|
43116
|
+
form: "single",
|
|
43117
|
+
optional: false
|
|
43118
|
+
}],
|
|
43119
|
+
"pipelineOrchestrator.setCameraSwitch": [{
|
|
43120
|
+
name: "deviceId",
|
|
43121
|
+
form: "single",
|
|
43122
|
+
optional: false
|
|
43123
|
+
}],
|
|
43124
|
+
"pipelineOrchestrator.setPipelineDevicePin": [{
|
|
43125
|
+
name: "deviceId",
|
|
43126
|
+
form: "single",
|
|
43127
|
+
optional: false
|
|
43128
|
+
}],
|
|
43129
|
+
"pipelineOrchestrator.unassignAudio": [{
|
|
43130
|
+
name: "deviceId",
|
|
43131
|
+
form: "single",
|
|
43132
|
+
optional: false
|
|
43133
|
+
}],
|
|
43134
|
+
"pipelineOrchestrator.unassignPipeline": [{
|
|
43135
|
+
name: "deviceId",
|
|
43136
|
+
form: "single",
|
|
43137
|
+
optional: false
|
|
43138
|
+
}],
|
|
43139
|
+
"pipelineRunner.attachCamera": [{
|
|
43140
|
+
name: "deviceId",
|
|
43141
|
+
form: "single",
|
|
43142
|
+
optional: false
|
|
43143
|
+
}],
|
|
43144
|
+
"pipelineRunner.detachCamera": [{
|
|
43145
|
+
name: "deviceId",
|
|
43146
|
+
form: "single",
|
|
43147
|
+
optional: false
|
|
43148
|
+
}],
|
|
43149
|
+
"pipelineRunner.getCameraMetrics": [{
|
|
43150
|
+
name: "deviceId",
|
|
43151
|
+
form: "single",
|
|
43152
|
+
optional: false
|
|
43153
|
+
}],
|
|
43154
|
+
"pipelineRunner.reportMotion": [{
|
|
43155
|
+
name: "deviceId",
|
|
43156
|
+
form: "single",
|
|
43157
|
+
optional: false
|
|
43158
|
+
}],
|
|
43159
|
+
"pipelineRunner.runDetailSubtree": [{
|
|
43160
|
+
name: "deviceId",
|
|
43161
|
+
form: "single",
|
|
43162
|
+
optional: false
|
|
43163
|
+
}],
|
|
43164
|
+
"pipelineRunner.runStatelessStep": [{
|
|
43165
|
+
name: "sourceDeviceId",
|
|
43166
|
+
form: "single",
|
|
43167
|
+
optional: false
|
|
43168
|
+
}],
|
|
43169
|
+
"plateGallery.getPlateByTrack": [{
|
|
43170
|
+
name: "deviceId",
|
|
43171
|
+
form: "single",
|
|
43172
|
+
optional: false
|
|
43173
|
+
}],
|
|
43174
|
+
"plateGallery.listPlates": [{
|
|
43175
|
+
name: "deviceId",
|
|
43176
|
+
form: "single",
|
|
43177
|
+
optional: true
|
|
43178
|
+
}],
|
|
43179
|
+
"privacyMask.getOptions": [{
|
|
43180
|
+
name: "deviceId",
|
|
43181
|
+
form: "single",
|
|
43182
|
+
optional: false
|
|
43183
|
+
}],
|
|
43184
|
+
"privacyMask.setAudioEnabled": [{
|
|
43185
|
+
name: "deviceId",
|
|
43186
|
+
form: "single",
|
|
43187
|
+
optional: false
|
|
43188
|
+
}],
|
|
43189
|
+
"privacyMask.setMask": [{
|
|
43190
|
+
name: "deviceId",
|
|
43191
|
+
form: "single",
|
|
43192
|
+
optional: false
|
|
43193
|
+
}],
|
|
43194
|
+
"ptz.continuousMove": [{
|
|
43195
|
+
name: "deviceId",
|
|
43196
|
+
form: "single",
|
|
43197
|
+
optional: false
|
|
43198
|
+
}],
|
|
43199
|
+
"ptz.deletePreset": [{
|
|
43200
|
+
name: "deviceId",
|
|
43201
|
+
form: "single",
|
|
43202
|
+
optional: false
|
|
43203
|
+
}],
|
|
43204
|
+
"ptz.getOptions": [{
|
|
43205
|
+
name: "deviceId",
|
|
43206
|
+
form: "single",
|
|
43207
|
+
optional: false
|
|
43208
|
+
}],
|
|
43209
|
+
"ptz.getPosition": [{
|
|
43210
|
+
name: "deviceId",
|
|
43211
|
+
form: "single",
|
|
43212
|
+
optional: false
|
|
43213
|
+
}],
|
|
43214
|
+
"ptz.getPresets": [{
|
|
43215
|
+
name: "deviceId",
|
|
43216
|
+
form: "single",
|
|
43217
|
+
optional: false
|
|
43218
|
+
}],
|
|
43219
|
+
"ptz.goHome": [{
|
|
43220
|
+
name: "deviceId",
|
|
43221
|
+
form: "single",
|
|
43222
|
+
optional: false
|
|
43223
|
+
}],
|
|
43224
|
+
"ptz.goToPreset": [{
|
|
43225
|
+
name: "deviceId",
|
|
43226
|
+
form: "single",
|
|
43227
|
+
optional: false
|
|
43228
|
+
}],
|
|
43229
|
+
"ptz.move": [{
|
|
43230
|
+
name: "deviceId",
|
|
43231
|
+
form: "single",
|
|
43232
|
+
optional: false
|
|
43233
|
+
}],
|
|
43234
|
+
"ptz.savePreset": [{
|
|
43235
|
+
name: "deviceId",
|
|
43236
|
+
form: "single",
|
|
43237
|
+
optional: false
|
|
43238
|
+
}],
|
|
43239
|
+
"ptz.setAutofocus": [{
|
|
43240
|
+
name: "deviceId",
|
|
43241
|
+
form: "single",
|
|
43242
|
+
optional: false
|
|
43243
|
+
}],
|
|
43244
|
+
"ptz.stop": [{
|
|
43245
|
+
name: "deviceId",
|
|
43246
|
+
form: "single",
|
|
43247
|
+
optional: false
|
|
43248
|
+
}],
|
|
43249
|
+
"ptzAutotrack.getSettings": [{
|
|
43250
|
+
name: "deviceId",
|
|
43251
|
+
form: "single",
|
|
43252
|
+
optional: false
|
|
43253
|
+
}],
|
|
43254
|
+
"ptzAutotrack.getStatus": [{
|
|
43255
|
+
name: "deviceId",
|
|
43256
|
+
form: "single",
|
|
43257
|
+
optional: false
|
|
43258
|
+
}],
|
|
43259
|
+
"ptzAutotrack.setEnabled": [{
|
|
43260
|
+
name: "deviceId",
|
|
43261
|
+
form: "single",
|
|
43262
|
+
optional: false
|
|
43263
|
+
}],
|
|
43264
|
+
"ptzAutotrack.setSettings": [{
|
|
43265
|
+
name: "deviceId",
|
|
43266
|
+
form: "single",
|
|
43267
|
+
optional: false
|
|
43268
|
+
}],
|
|
43269
|
+
"reboot.reboot": [{
|
|
43270
|
+
name: "deviceId",
|
|
43271
|
+
form: "single",
|
|
43272
|
+
optional: false
|
|
43273
|
+
}],
|
|
43274
|
+
"recording.deleteFootprint": [{
|
|
43275
|
+
name: "deviceId",
|
|
43276
|
+
form: "single",
|
|
43277
|
+
optional: false
|
|
43278
|
+
}],
|
|
43279
|
+
"recording.getAvailability": [{
|
|
43280
|
+
name: "deviceId",
|
|
43281
|
+
form: "single",
|
|
43282
|
+
optional: false
|
|
43283
|
+
}],
|
|
43284
|
+
"recording.getDaysWithRecordings": [{
|
|
43285
|
+
name: "deviceId",
|
|
43286
|
+
form: "single",
|
|
43287
|
+
optional: false
|
|
43288
|
+
}],
|
|
43289
|
+
"recording.getDeviceConfig": [{
|
|
43290
|
+
name: "deviceId",
|
|
43291
|
+
form: "single",
|
|
43292
|
+
optional: false
|
|
43293
|
+
}],
|
|
43294
|
+
"recording.getPlaybackManifest": [{
|
|
43295
|
+
name: "deviceId",
|
|
43296
|
+
form: "single",
|
|
43297
|
+
optional: false
|
|
43298
|
+
}],
|
|
43299
|
+
"recording.listOpsLog": [{
|
|
43300
|
+
name: "deviceId",
|
|
43301
|
+
form: "single",
|
|
43302
|
+
optional: true
|
|
43303
|
+
}],
|
|
43304
|
+
"recording.locateSegment": [{
|
|
43305
|
+
name: "deviceId",
|
|
43306
|
+
form: "single",
|
|
43307
|
+
optional: false
|
|
43308
|
+
}],
|
|
43309
|
+
"recording.pruneFootage": [{
|
|
43310
|
+
name: "deviceId",
|
|
43311
|
+
form: "single",
|
|
43312
|
+
optional: false
|
|
43313
|
+
}],
|
|
43314
|
+
"recording.readGopBytes": [{
|
|
43315
|
+
name: "deviceId",
|
|
43316
|
+
form: "single",
|
|
43317
|
+
optional: false
|
|
43318
|
+
}],
|
|
43319
|
+
"recording.readSegmentBytes": [{
|
|
43320
|
+
name: "deviceId",
|
|
43321
|
+
form: "single",
|
|
43322
|
+
optional: false
|
|
43323
|
+
}],
|
|
43324
|
+
"recording.relocateFootage": [{
|
|
43325
|
+
name: "deviceId",
|
|
43326
|
+
form: "single",
|
|
43327
|
+
optional: true
|
|
43328
|
+
}],
|
|
43329
|
+
"recording.renderClip": [{
|
|
43330
|
+
name: "deviceId",
|
|
43331
|
+
form: "single",
|
|
43332
|
+
optional: false
|
|
43333
|
+
}],
|
|
43334
|
+
"recording.renderGif": [{
|
|
43335
|
+
name: "deviceId",
|
|
43336
|
+
form: "single",
|
|
43337
|
+
optional: false
|
|
43338
|
+
}],
|
|
43339
|
+
"recording.rescanStorage": [{
|
|
43340
|
+
name: "deviceId",
|
|
43341
|
+
form: "single",
|
|
43342
|
+
optional: false
|
|
43343
|
+
}],
|
|
43344
|
+
"recording.setDeviceConfig": [{
|
|
43345
|
+
name: "deviceId",
|
|
43346
|
+
form: "single",
|
|
43347
|
+
optional: false
|
|
43348
|
+
}],
|
|
43349
|
+
"recording.startStorageMigrationMove": [{
|
|
43350
|
+
name: "deviceId",
|
|
43351
|
+
form: "single",
|
|
43352
|
+
optional: true
|
|
43353
|
+
}],
|
|
43354
|
+
"recordingExport.createExport": [{
|
|
43355
|
+
name: "deviceId",
|
|
43356
|
+
form: "single",
|
|
43357
|
+
optional: false
|
|
43358
|
+
}],
|
|
43359
|
+
"recordingExport.listExports": [{
|
|
43360
|
+
name: "deviceId",
|
|
43361
|
+
form: "single",
|
|
43362
|
+
optional: true
|
|
43363
|
+
}],
|
|
43364
|
+
"sceneMonitor.captureReference": [{
|
|
43365
|
+
name: "deviceId",
|
|
43366
|
+
form: "single",
|
|
43367
|
+
optional: false
|
|
43368
|
+
}],
|
|
43369
|
+
"sceneMonitor.createScene": [{
|
|
43370
|
+
name: "deviceId",
|
|
43371
|
+
form: "single",
|
|
43372
|
+
optional: false
|
|
43373
|
+
}],
|
|
43374
|
+
"sceneMonitor.deleteReference": [{
|
|
43375
|
+
name: "deviceId",
|
|
43376
|
+
form: "single",
|
|
43377
|
+
optional: false
|
|
43378
|
+
}],
|
|
43379
|
+
"sceneMonitor.deleteScene": [{
|
|
43380
|
+
name: "deviceId",
|
|
43381
|
+
form: "single",
|
|
43382
|
+
optional: false
|
|
43383
|
+
}],
|
|
43384
|
+
"sceneMonitor.listScenes": [{
|
|
43385
|
+
name: "deviceId",
|
|
43386
|
+
form: "single",
|
|
43387
|
+
optional: false
|
|
43388
|
+
}],
|
|
43389
|
+
"sceneMonitor.recheckNow": [{
|
|
43390
|
+
name: "deviceId",
|
|
43391
|
+
form: "single",
|
|
43392
|
+
optional: false
|
|
43393
|
+
}],
|
|
43394
|
+
"sceneMonitor.resetScene": [{
|
|
43395
|
+
name: "deviceId",
|
|
43396
|
+
form: "single",
|
|
43397
|
+
optional: false
|
|
43398
|
+
}],
|
|
43399
|
+
"sceneMonitor.updateScene": [{
|
|
43400
|
+
name: "deviceId",
|
|
43401
|
+
form: "single",
|
|
43402
|
+
optional: false
|
|
43403
|
+
}],
|
|
43404
|
+
"scriptRunner.run": [{
|
|
43405
|
+
name: "deviceId",
|
|
43406
|
+
form: "single",
|
|
43407
|
+
optional: false
|
|
43408
|
+
}],
|
|
43409
|
+
"scriptRunner.stop": [{
|
|
43410
|
+
name: "deviceId",
|
|
43411
|
+
form: "single",
|
|
43412
|
+
optional: false
|
|
43413
|
+
}],
|
|
43414
|
+
"snapshot.getSnapshot": [{
|
|
43415
|
+
name: "deviceId",
|
|
43416
|
+
form: "single",
|
|
43417
|
+
optional: false
|
|
43418
|
+
}],
|
|
43419
|
+
"snapshot.getSnapshotLinks": [{
|
|
43420
|
+
name: "targets",
|
|
43421
|
+
form: "object-array",
|
|
43422
|
+
optional: false,
|
|
43423
|
+
itemField: "deviceId"
|
|
43424
|
+
}],
|
|
43425
|
+
"snapshot.getSnapshotOverview": [{
|
|
43426
|
+
name: "deviceIds",
|
|
43427
|
+
form: "array",
|
|
43428
|
+
optional: false
|
|
43429
|
+
}],
|
|
43430
|
+
"snapshot.invalidateCache": [{
|
|
43431
|
+
name: "deviceId",
|
|
43432
|
+
form: "single",
|
|
43433
|
+
optional: false
|
|
43434
|
+
}],
|
|
43435
|
+
"streamBroker.acquireEgressTranscode": [{
|
|
43436
|
+
name: "deviceId",
|
|
43437
|
+
form: "single",
|
|
43438
|
+
optional: false
|
|
43439
|
+
}],
|
|
43440
|
+
"streamBroker.assignProfile": [{
|
|
43441
|
+
name: "deviceId",
|
|
43442
|
+
form: "single",
|
|
43443
|
+
optional: false
|
|
43444
|
+
}],
|
|
43445
|
+
"streamBroker.getDeviceAudioMute": [{
|
|
43446
|
+
name: "deviceId",
|
|
43447
|
+
form: "single",
|
|
43448
|
+
optional: false
|
|
43449
|
+
}],
|
|
43450
|
+
"streamBroker.getStreamWithCodec": [{
|
|
43451
|
+
name: "deviceId",
|
|
43452
|
+
form: "single",
|
|
43453
|
+
optional: false
|
|
43454
|
+
}],
|
|
43455
|
+
"streamBroker.produceEventMedia": [{
|
|
43456
|
+
name: "deviceId",
|
|
43457
|
+
form: "single",
|
|
43458
|
+
optional: false
|
|
43459
|
+
}],
|
|
43460
|
+
"streamBroker.publishCameraStream": [{
|
|
43461
|
+
name: "deviceId",
|
|
43462
|
+
form: "single",
|
|
43463
|
+
optional: false
|
|
43464
|
+
}],
|
|
43465
|
+
"streamBroker.renderPreBufferClip": [{
|
|
43466
|
+
name: "deviceId",
|
|
43467
|
+
form: "single",
|
|
43468
|
+
optional: false
|
|
43469
|
+
}],
|
|
43470
|
+
"streamBroker.restartProfile": [{
|
|
43471
|
+
name: "deviceId",
|
|
43472
|
+
form: "single",
|
|
43473
|
+
optional: false
|
|
43474
|
+
}],
|
|
43475
|
+
"streamBroker.retractCameraStream": [{
|
|
43476
|
+
name: "deviceId",
|
|
43477
|
+
form: "single",
|
|
43478
|
+
optional: false
|
|
43479
|
+
}],
|
|
43480
|
+
"streamBroker.setDeviceAudioMute": [{
|
|
43481
|
+
name: "deviceId",
|
|
43482
|
+
form: "single",
|
|
43483
|
+
optional: false
|
|
43484
|
+
}],
|
|
43485
|
+
"streamBroker.unassignProfile": [{
|
|
43486
|
+
name: "deviceId",
|
|
43487
|
+
form: "single",
|
|
43488
|
+
optional: false
|
|
43489
|
+
}],
|
|
43490
|
+
"streamCatalog.getCatalog": [{
|
|
43491
|
+
name: "deviceId",
|
|
43492
|
+
form: "single",
|
|
43493
|
+
optional: false
|
|
43494
|
+
}],
|
|
43495
|
+
"streamParams.getConfigSchema": [{
|
|
43496
|
+
name: "deviceId",
|
|
43497
|
+
form: "single",
|
|
43498
|
+
optional: false
|
|
43499
|
+
}],
|
|
43500
|
+
"streamParams.getOptions": [{
|
|
43501
|
+
name: "deviceId",
|
|
43502
|
+
form: "single",
|
|
43503
|
+
optional: false
|
|
43504
|
+
}],
|
|
43505
|
+
"streamParams.setProfile": [{
|
|
43506
|
+
name: "deviceId",
|
|
43507
|
+
form: "single",
|
|
43508
|
+
optional: false
|
|
43509
|
+
}],
|
|
43510
|
+
"switch.setState": [{
|
|
43511
|
+
name: "deviceId",
|
|
43512
|
+
form: "single",
|
|
43513
|
+
optional: false
|
|
43514
|
+
}],
|
|
43515
|
+
"vacuumControl.locate": [{
|
|
43516
|
+
name: "deviceId",
|
|
43517
|
+
form: "single",
|
|
43518
|
+
optional: false
|
|
43519
|
+
}],
|
|
43520
|
+
"vacuumControl.pause": [{
|
|
43521
|
+
name: "deviceId",
|
|
43522
|
+
form: "single",
|
|
43523
|
+
optional: false
|
|
43524
|
+
}],
|
|
43525
|
+
"vacuumControl.returnToBase": [{
|
|
43526
|
+
name: "deviceId",
|
|
43527
|
+
form: "single",
|
|
43528
|
+
optional: false
|
|
43529
|
+
}],
|
|
43530
|
+
"vacuumControl.setFanSpeed": [{
|
|
43531
|
+
name: "deviceId",
|
|
43532
|
+
form: "single",
|
|
43533
|
+
optional: false
|
|
43534
|
+
}],
|
|
43535
|
+
"vacuumControl.start": [{
|
|
43536
|
+
name: "deviceId",
|
|
43537
|
+
form: "single",
|
|
43538
|
+
optional: false
|
|
43539
|
+
}],
|
|
43540
|
+
"vacuumControl.stop": [{
|
|
43541
|
+
name: "deviceId",
|
|
43542
|
+
form: "single",
|
|
43543
|
+
optional: false
|
|
43544
|
+
}],
|
|
43545
|
+
"valve.close": [{
|
|
43546
|
+
name: "deviceId",
|
|
43547
|
+
form: "single",
|
|
43548
|
+
optional: false
|
|
43549
|
+
}],
|
|
43550
|
+
"valve.open": [{
|
|
43551
|
+
name: "deviceId",
|
|
43552
|
+
form: "single",
|
|
43553
|
+
optional: false
|
|
43554
|
+
}],
|
|
43555
|
+
"valve.setPosition": [{
|
|
43556
|
+
name: "deviceId",
|
|
43557
|
+
form: "single",
|
|
43558
|
+
optional: false
|
|
43559
|
+
}],
|
|
43560
|
+
"valve.stop": [{
|
|
43561
|
+
name: "deviceId",
|
|
43562
|
+
form: "single",
|
|
43563
|
+
optional: false
|
|
43564
|
+
}],
|
|
43565
|
+
"videoclips.getClipPlayback": [{
|
|
43566
|
+
name: "deviceId",
|
|
43567
|
+
form: "single",
|
|
43568
|
+
optional: false
|
|
43569
|
+
}],
|
|
43570
|
+
"videoclips.listClips": [{
|
|
43571
|
+
name: "deviceId",
|
|
43572
|
+
form: "single",
|
|
43573
|
+
optional: false
|
|
43574
|
+
}],
|
|
43575
|
+
"waterHeater.setAway": [{
|
|
43576
|
+
name: "deviceId",
|
|
43577
|
+
form: "single",
|
|
43578
|
+
optional: false
|
|
43579
|
+
}],
|
|
43580
|
+
"waterHeater.setOperationMode": [{
|
|
43581
|
+
name: "deviceId",
|
|
43582
|
+
form: "single",
|
|
43583
|
+
optional: false
|
|
43584
|
+
}],
|
|
43585
|
+
"waterHeater.setTargetTemp": [{
|
|
43586
|
+
name: "deviceId",
|
|
43587
|
+
form: "single",
|
|
43588
|
+
optional: false
|
|
43589
|
+
}],
|
|
43590
|
+
"webrtcSession.addIceCandidate": [{
|
|
43591
|
+
name: "deviceId",
|
|
43592
|
+
form: "single",
|
|
43593
|
+
optional: false
|
|
43594
|
+
}],
|
|
43595
|
+
"webrtcSession.closeSession": [{
|
|
43596
|
+
name: "deviceId",
|
|
43597
|
+
form: "single",
|
|
43598
|
+
optional: false
|
|
43599
|
+
}],
|
|
43600
|
+
"webrtcSession.createSession": [{
|
|
43601
|
+
name: "deviceId",
|
|
43602
|
+
form: "single",
|
|
43603
|
+
optional: false
|
|
43604
|
+
}],
|
|
43605
|
+
"webrtcSession.getIceCandidates": [{
|
|
43606
|
+
name: "deviceId",
|
|
43607
|
+
form: "single",
|
|
43608
|
+
optional: false
|
|
43609
|
+
}],
|
|
43610
|
+
"webrtcSession.getSessionState": [{
|
|
43611
|
+
name: "deviceId",
|
|
43612
|
+
form: "single",
|
|
43613
|
+
optional: false
|
|
43614
|
+
}],
|
|
43615
|
+
"webrtcSession.handleAnswer": [{
|
|
43616
|
+
name: "deviceId",
|
|
43617
|
+
form: "single",
|
|
43618
|
+
optional: false
|
|
43619
|
+
}],
|
|
43620
|
+
"webrtcSession.handleOffer": [{
|
|
43621
|
+
name: "deviceId",
|
|
43622
|
+
form: "single",
|
|
43623
|
+
optional: false
|
|
43624
|
+
}],
|
|
43625
|
+
"webrtcSession.hasAdaptiveBitrate": [{
|
|
43626
|
+
name: "deviceId",
|
|
43627
|
+
form: "single",
|
|
43628
|
+
optional: false
|
|
43629
|
+
}],
|
|
43630
|
+
"webrtcSession.listStreams": [{
|
|
43631
|
+
name: "deviceId",
|
|
43632
|
+
form: "single",
|
|
43633
|
+
optional: false
|
|
43634
|
+
}],
|
|
43635
|
+
"zoneAnalytics.getCameraHistory": [{
|
|
43636
|
+
name: "deviceId",
|
|
43637
|
+
form: "single",
|
|
43638
|
+
optional: false
|
|
43639
|
+
}],
|
|
43640
|
+
"zoneAnalytics.getCurrentSnapshot": [{
|
|
43641
|
+
name: "deviceId",
|
|
43642
|
+
form: "single",
|
|
43643
|
+
optional: false
|
|
43644
|
+
}],
|
|
43645
|
+
"zoneAnalytics.getUnzonedHistory": [{
|
|
43646
|
+
name: "deviceId",
|
|
43647
|
+
form: "single",
|
|
43648
|
+
optional: false
|
|
43649
|
+
}],
|
|
43650
|
+
"zoneAnalytics.getZoneHistory": [{
|
|
43651
|
+
name: "deviceId",
|
|
43652
|
+
form: "single",
|
|
43653
|
+
optional: false
|
|
43654
|
+
}],
|
|
43655
|
+
"zoneRules.listRules": [{
|
|
43656
|
+
name: "deviceId",
|
|
43657
|
+
form: "single",
|
|
43658
|
+
optional: false
|
|
43659
|
+
}],
|
|
43660
|
+
"zoneRules.setRules": [{
|
|
43661
|
+
name: "deviceId",
|
|
43662
|
+
form: "single",
|
|
43663
|
+
optional: false
|
|
43664
|
+
}],
|
|
43665
|
+
"zones.addZone": [{
|
|
43666
|
+
name: "deviceId",
|
|
43667
|
+
form: "single",
|
|
43668
|
+
optional: false
|
|
43669
|
+
}],
|
|
43670
|
+
"zones.listZones": [{
|
|
43671
|
+
name: "deviceId",
|
|
43672
|
+
form: "single",
|
|
43673
|
+
optional: false
|
|
43674
|
+
}],
|
|
43675
|
+
"zones.removeZone": [{
|
|
43676
|
+
name: "deviceId",
|
|
43677
|
+
form: "single",
|
|
43678
|
+
optional: false
|
|
43679
|
+
}],
|
|
43680
|
+
"zones.updateZone": [{
|
|
43681
|
+
name: "deviceId",
|
|
43682
|
+
form: "single",
|
|
43683
|
+
optional: false
|
|
43684
|
+
}]
|
|
43685
|
+
});
|
|
41203
43686
|
var CAP_PROVIDER_KIND_MAP = Object.freeze({
|
|
41204
43687
|
"broker": "broker",
|
|
41205
43688
|
"device-export": "device-export",
|