@camstack/addon-provider-amcrest 0.2.125 → 0.2.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +698 -159
- package/dist/addon.mjs +698 -159
- package/package.json +1 -3
package/dist/addon.mjs
CHANGED
|
@@ -7426,7 +7426,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
7426
7426
|
return DeviceRole;
|
|
7427
7427
|
}({});
|
|
7428
7428
|
//#endregion
|
|
7429
|
-
//#region ../types/dist/composition-
|
|
7429
|
+
//#region ../types/dist/composition-Bzr7GwgP.mjs
|
|
7430
7430
|
/**
|
|
7431
7431
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
7432
7432
|
*
|
|
@@ -7480,20 +7480,20 @@ function portable(target) {
|
|
|
7480
7480
|
}
|
|
7481
7481
|
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
|
|
7482
7482
|
/**
|
|
7483
|
-
*
|
|
7484
|
-
*
|
|
7483
|
+
* THE table "which boolean of this device type counts as HIGH", and the
|
|
7484
|
+
* pure evaluator of its EDGE.
|
|
7485
7485
|
*
|
|
7486
|
-
*
|
|
7487
|
-
*
|
|
7488
|
-
*
|
|
7489
|
-
*
|
|
7490
|
-
*
|
|
7491
|
-
*
|
|
7486
|
+
* ONE table for everyone who asks "is this device HIGH?": the
|
|
7487
|
+
* recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
|
|
7488
|
+
* sensor markers, the orchestrator's camera-sensors bridge and
|
|
7489
|
+
* the sources of a composite doorbell (`doorbellFeatureSources`, D671).
|
|
7490
|
+
* A second copy would diverge at the first cap added, and the symptom — "the
|
|
7491
|
+
* sensor rings the doorbell but does not record" — is exactly D62.
|
|
7492
7492
|
*
|
|
7493
|
-
* ⚠
|
|
7494
|
-
*
|
|
7495
|
-
*
|
|
7496
|
-
*
|
|
7493
|
+
* ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
|
|
7494
|
+
* two must not be unified: that one answers "what is the state WORD for a
|
|
7495
|
+
* rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
|
|
7496
|
+
* boolean's EDGE counts". Deliberately different vocabularies.
|
|
7497
7497
|
*/
|
|
7498
7498
|
/**
|
|
7499
7499
|
* Known binary / switch source caps → the boolean slice field whose
|
|
@@ -7514,6 +7514,8 @@ var SOURCE_CAP_ACTIVE_FIELD = {
|
|
|
7514
7514
|
vibration: "detected",
|
|
7515
7515
|
tamper: "tampered"
|
|
7516
7516
|
};
|
|
7517
|
+
/** Cap names whose presence in a device's bindings qualify it as a source. */
|
|
7518
|
+
var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
|
|
7517
7519
|
/**
|
|
7518
7520
|
* Error types for the safe expression engine. Two distinct classes so callers
|
|
7519
7521
|
* can tell a compile-time (grammar) failure from a runtime (evaluation)
|
|
@@ -9120,22 +9122,22 @@ var CLASS_MAP_MACRO_TARGETS = [
|
|
|
9120
9122
|
"package"
|
|
9121
9123
|
];
|
|
9122
9124
|
/**
|
|
9123
|
-
*
|
|
9124
|
-
*
|
|
9125
|
+
* The FIRST-LEVEL macro classes: those an object detector emits and that
|
|
9126
|
+
* an operator can select.
|
|
9125
9127
|
*
|
|
9126
|
-
*
|
|
9128
|
+
* They are the three offered by the `object-detection` step
|
|
9127
9129
|
* (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
|
|
9128
|
-
* `enabledMacroClasses`). `package`
|
|
9129
|
-
* `MACRO_LABELS` —
|
|
9130
|
-
* `package-detection`,
|
|
9131
|
-
*
|
|
9130
|
+
* `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
|
|
9131
|
+
* `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
|
|
9132
|
+
* `package-detection`, whose enablement is driven by zones, and offering the
|
|
9133
|
+
* same word twice has already made an operator turn on the COCO proxy
|
|
9132
9134
|
* (suitcase/backpack/handbag) lasciando spento il detector dedicato.
|
|
9133
9135
|
*
|
|
9134
|
-
*
|
|
9135
|
-
*
|
|
9136
|
-
* (`types/detection.ts`);
|
|
9137
|
-
* (`RecordingTriggers.objectClasses`)
|
|
9138
|
-
*
|
|
9136
|
+
* ONE list. Before today the same three were hand-written in the step's offer
|
|
9137
|
+
* and a second time as the union `FirstLevelMacro`
|
|
9138
|
+
* (`types/detection.ts`); a third copy for the recording trigger
|
|
9139
|
+
* (`RecordingTriggers.objectClasses`) would have made the later divergence
|
|
9140
|
+
* invisible.
|
|
9139
9141
|
*/
|
|
9140
9142
|
var FIRST_LEVEL_MACRO_CLASSES = [
|
|
9141
9143
|
"person",
|
|
@@ -9200,17 +9202,17 @@ var RecordingStorageModeSchema = _enum([
|
|
|
9200
9202
|
"on-device-decision"
|
|
9201
9203
|
]);
|
|
9202
9204
|
/**
|
|
9203
|
-
*
|
|
9204
|
-
*
|
|
9205
|
+
* The macro classes that can open a recording window — the same
|
|
9206
|
+
* three offered by the `object-detection` step, from ONE list
|
|
9205
9207
|
* ({@link FIRST_LEVEL_MACRO_CLASSES}).
|
|
9206
9208
|
*/
|
|
9207
9209
|
var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
|
|
9208
9210
|
/**
|
|
9209
|
-
* True
|
|
9211
|
+
* True when `values` does not repeat an element.
|
|
9210
9212
|
*
|
|
9211
|
-
*
|
|
9212
|
-
*
|
|
9213
|
-
*
|
|
9213
|
+
* A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
|
|
9214
|
+
* becomes a SOURCE in `bandTriggerSources`, and the same source twice
|
|
9215
|
+
* would count its windows twice in `segmentMissedByMs`.
|
|
9214
9216
|
*/
|
|
9215
9217
|
var noDuplicates = (values) => new Set(values).size === values.length;
|
|
9216
9218
|
/** Which detectors trigger an `events`-mode band. */
|
|
@@ -9218,34 +9220,34 @@ var RecordingTriggersSchema = object({
|
|
|
9218
9220
|
motion: boolean().optional(),
|
|
9219
9221
|
audioThresholdDbfs: number().optional(),
|
|
9220
9222
|
/**
|
|
9221
|
-
*
|
|
9222
|
-
*
|
|
9223
|
-
*
|
|
9224
|
-
*
|
|
9223
|
+
* The macro classes whose detection opens a window. ABSENT = the source
|
|
9224
|
+
* is not listened to; an EMPTY array is rejected, because "events band, object
|
|
9225
|
+
* trigger on, no class" is the same shape "enabled and records
|
|
9226
|
+
* nothing, forever" that `eventsBandCanEverDemand` is written against.
|
|
9225
9227
|
*
|
|
9226
|
-
*
|
|
9227
|
-
*
|
|
9228
|
-
* `minConfidence<Macro>`
|
|
9229
|
-
* (`source: 'onboard'`)
|
|
9230
|
-
*
|
|
9228
|
+
* The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
|
|
9229
|
+
* those that went through `enabledMacroClasses`, the
|
|
9230
|
+
* `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
|
|
9231
|
+
* (`source: 'onboard'`) goes through none of those gates and does NOT open
|
|
9232
|
+
* windows — see `recorder/object-trigger.ts`.
|
|
9231
9233
|
*/
|
|
9232
9234
|
objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
|
|
9233
9235
|
/**
|
|
9234
|
-
*
|
|
9235
|
-
*
|
|
9236
|
+
* The LINKED devices whose RISING EDGE opens a window. Absent = the source
|
|
9237
|
+
* is not listened to; an empty array is rejected for the same reason as
|
|
9236
9238
|
* `objectClasses`.
|
|
9237
9239
|
*
|
|
9238
|
-
*
|
|
9239
|
-
*
|
|
9240
|
-
*
|
|
9241
|
-
*
|
|
9242
|
-
* device (D12) —
|
|
9240
|
+
* These are SOURCE device ids, not cameras: the band names them, so the
|
|
9241
|
+
* hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
|
|
9242
|
+
* does no RPC. The OFFER from which the operator picks them is another question, and
|
|
9243
|
+
* is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
|
|
9244
|
+
* device (D12) — never a global list of caps.
|
|
9243
9245
|
*
|
|
9244
|
-
*
|
|
9245
|
-
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`)
|
|
9246
|
-
*
|
|
9247
|
-
*
|
|
9248
|
-
*
|
|
9246
|
+
* What "high" means depends on the device TYPE and is not decided here:
|
|
9247
|
+
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
|
|
9248
|
+
* the same one as the composite doorbell (D671). And it is the EDGE, not
|
|
9249
|
+
* the level: a contact found already open at runner restart does not
|
|
9250
|
+
* record.
|
|
9249
9251
|
*/
|
|
9250
9252
|
sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
|
|
9251
9253
|
});
|
|
@@ -10322,7 +10324,7 @@ var DecoderSessionConfigSchema = object({
|
|
|
10322
10324
|
* - **VALUE** — at which level, for which scope, until when. That stays ONE
|
|
10323
10325
|
* thing: the logging settings document on the `system` cap. Two authorities
|
|
10324
10326
|
* over the values is the exact defect
|
|
10325
|
-
* `docs/design/plans/2026-08-26-
|
|
10327
|
+
* `docs/design/plans/2026-08-26-per-component-logging.md` was written to
|
|
10326
10328
|
* remove; re-introducing it from the cure side would be grotesque.
|
|
10327
10329
|
*
|
|
10328
10330
|
* Nothing in this file reads a clock, an env var or a store. The registry is
|
|
@@ -12033,7 +12035,7 @@ var BrokerStatusEnum = _enum([
|
|
|
12033
12035
|
"unreachable",
|
|
12034
12036
|
"error"
|
|
12035
12037
|
]);
|
|
12036
|
-
var BrokerInfoSchema
|
|
12038
|
+
var BrokerInfoSchema = object({
|
|
12037
12039
|
/** Stable broker id. Persisted; survives addon restarts. */
|
|
12038
12040
|
id: string(),
|
|
12039
12041
|
/** Addon id of the provider that OWNS this broker.
|
|
@@ -12166,7 +12168,7 @@ var GetStateInputSchema = object({
|
|
|
12166
12168
|
* HA: entity_id (returns the cached entity state). */
|
|
12167
12169
|
key: string()
|
|
12168
12170
|
});
|
|
12169
|
-
method(ListInputSchema, array(BrokerInfoSchema
|
|
12171
|
+
method(ListInputSchema, array(BrokerInfoSchema)), method(GetInputSchema, BrokerInfoSchema.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
|
|
12170
12172
|
kind: "mutation",
|
|
12171
12173
|
auth: "admin"
|
|
12172
12174
|
}), method(RemoveInputSchema, _void(), {
|
|
@@ -13877,7 +13879,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
13877
13879
|
*
|
|
13878
13880
|
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
13879
13881
|
* was wrong — corrected 2026-08-26 after the hop map
|
|
13880
|
-
* (`docs/design/2026-08-26-
|
|
13882
|
+
* (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
|
|
13881
13883
|
* There is **no Zod parse at all** between the door and the engine: the
|
|
13882
13884
|
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
13883
13885
|
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
@@ -14853,7 +14855,17 @@ var SiteZoneSchema = object({
|
|
|
14853
14855
|
var ProviderStatusSchema = object({
|
|
14854
14856
|
connected: boolean(),
|
|
14855
14857
|
deviceCount: number(),
|
|
14856
|
-
error: string().optional()
|
|
14858
|
+
error: string().optional(),
|
|
14859
|
+
/**
|
|
14860
|
+
* `'orchestrator'`: this provider writes NO camera's `motion` runtime slice
|
|
14861
|
+
* — the orchestrator is its only writer (D696). Set by `BaseDeviceProvider`,
|
|
14862
|
+
* which every provider bundles, so only a provider BUILT from D696-amended
|
|
14863
|
+
* code says it. ABSENT means an older provider that may still write it (raw
|
|
14864
|
+
* VMD writes, a boot seed), and the orchestrator's provider gate keeps that
|
|
14865
|
+
* provider's cameras unwritten (`camera-sensors/motion-slice-provider-gate.ts`)
|
|
14866
|
+
* — the provider twin of the runner's `getLocalLoad().motionSliceWriter`.
|
|
14867
|
+
*/
|
|
14868
|
+
motionSliceWriter: literal("orchestrator").optional()
|
|
14857
14869
|
});
|
|
14858
14870
|
object({
|
|
14859
14871
|
externalId: string(),
|
|
@@ -16070,7 +16082,7 @@ method(object({
|
|
|
16070
16082
|
* per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
|
|
16071
16083
|
* ends in a log line, and a log line is the thing the operator asked to stop
|
|
16072
16084
|
* needing: *"possiamo armare questi errori intanto? Così al prossimo giro
|
|
16073
|
-
* ricontrolliamo tutti questi punti"
|
|
16085
|
+
* ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
|
|
16074
16086
|
* hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
|
|
16075
16087
|
* media blackout were both diagnosed. The counters stay; this is where they can
|
|
16076
16088
|
* be READ.
|
|
@@ -17446,7 +17458,7 @@ var BrokerStatusSchema$1 = _enum([
|
|
|
17446
17458
|
"unreachable",
|
|
17447
17459
|
"tls-error"
|
|
17448
17460
|
]);
|
|
17449
|
-
var BrokerInfoSchema = object({
|
|
17461
|
+
var BrokerInfoSchema$1 = object({
|
|
17450
17462
|
id: string(),
|
|
17451
17463
|
name: string(),
|
|
17452
17464
|
url: string(),
|
|
@@ -17509,7 +17521,7 @@ var StatusSchema = object({
|
|
|
17509
17521
|
brokerCount: number(),
|
|
17510
17522
|
embeddedRunning: boolean()
|
|
17511
17523
|
});
|
|
17512
|
-
method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
|
|
17524
|
+
method(_void(), array(BrokerInfoSchema$1)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
|
|
17513
17525
|
kind: "mutation",
|
|
17514
17526
|
auth: "admin"
|
|
17515
17527
|
}), method(IdInputSchema, _void(), {
|
|
@@ -19723,78 +19735,16 @@ var NcRuleInputSchema = object({
|
|
|
19723
19735
|
*/
|
|
19724
19736
|
confirm: NcConfirmSchema.optional(),
|
|
19725
19737
|
/**
|
|
19726
|
-
*
|
|
19727
|
-
*
|
|
19728
|
-
*
|
|
19729
|
-
*
|
|
19730
|
-
*
|
|
19731
|
-
*
|
|
19732
|
-
*
|
|
19733
|
-
*
|
|
19734
|
-
*
|
|
19735
|
-
* Only two honest answers exist, and this flag picks between them. It has
|
|
19736
|
-
* effect ONLY on a rule that declares a recognition scope
|
|
19737
|
-
* ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
|
|
19738
|
-
* other rule there is nothing to wait for and the flag is inert.
|
|
19739
|
-
*
|
|
19740
|
-
* | value | what happens |
|
|
19741
|
-
* | --- | --- |
|
|
19742
|
-
* | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
|
|
19743
|
-
* | 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) |
|
|
19744
|
-
*
|
|
19745
|
-
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
19746
|
-
* on the addon cap path, and absent has to keep meaning exactly what every
|
|
19747
|
-
* rule authored before this field meant.
|
|
19748
|
-
*
|
|
19749
|
-
* The cost of `true` is stated here because the editor states it too: a rule
|
|
19750
|
-
* that waits also inherits track-close SEMANTICS — its `zones` condition
|
|
19751
|
-
* tests every zone the track visited and a `crossing` condition can no longer
|
|
19752
|
-
* be satisfied, because a closed track carries no crossing.
|
|
19753
|
-
*/
|
|
19754
|
-
waitForEnhancement: boolean().optional(),
|
|
19755
|
-
/**
|
|
19756
|
-
* GROUP a burst of subjects into ONE notification that grows.
|
|
19757
|
-
*
|
|
19758
|
-
* Seconds of quiet after the last matching subject before the burst is
|
|
19759
|
-
* considered over. While it is open, the first subject enqueues immediately —
|
|
19760
|
-
* **exactly as today, with no added latency** — and every real growth (a new
|
|
19761
|
-
* subject, or a name confirmed on one already in it) REPLACES that
|
|
19762
|
-
* notification with an updated one naming everybody. The push carries the
|
|
19763
|
-
* group's own coalescing tag, so the phone replaces rather than stacks.
|
|
19764
|
-
*
|
|
19765
|
-
* `0` / absent = off, and off is today's behaviour byte for byte.
|
|
19766
|
-
*
|
|
19767
|
-
* ### Why an idle cutoff and not a window
|
|
19768
|
-
*
|
|
19769
|
-
* The measured seven-person arrival on device 590 spans 110 s with every
|
|
19770
|
-
* internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
|
|
19771
|
-
* idle cutoff holds it as one and ends it when the arrival actually ends.
|
|
19772
|
-
* 30 s is a widely shipped value for the same decision.
|
|
19773
|
-
*
|
|
19774
|
-
* ### What it replaces
|
|
19775
|
-
*
|
|
19776
|
-
* The blind cooldown, which collapses a burst by DISCARDING it. Measured on
|
|
19777
|
-
* device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
|
|
19778
|
-
* notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
|
|
19779
|
-
* track that did fire and 7 carrying a confirmed identity nobody heard about.
|
|
19780
|
-
* A group collapses the same volume by MERGING, so the cooldown becomes a
|
|
19781
|
-
* budget over GROUPS — which is what it always meant — and a growth is never
|
|
19782
|
-
* throttled by the window its own first member spent.
|
|
19783
|
-
*
|
|
19784
|
-
* ### Interaction with {@link waitForEnhancement}
|
|
19785
|
-
*
|
|
19786
|
-
* They compose, and the order matters. `waitForEnhancement` defers the rule to
|
|
19787
|
-
* TRACK CLOSE, so with both set the group is opened by the first member to
|
|
19788
|
-
* CLOSE — already carrying its name — and grows as later members close. That
|
|
19789
|
-
* is later, and complete. With grouping alone the group opens on the first
|
|
19790
|
-
* object event and picks up names as they are confirmed, through the growth
|
|
19791
|
-
* path. Neither combination fires twice for one subject.
|
|
19792
|
-
*
|
|
19793
|
-
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
19794
|
-
* on the addon cap path, so absent must keep meaning what it meant before this
|
|
19795
|
-
* field existed.
|
|
19738
|
+
* IMMEDIATE GROUPED (D692): the first matching subject opens a window of this many
|
|
19739
|
+
* seconds; the rule sends ONE message when the window closes — early, once every
|
|
19740
|
+
* subject in it is final, never before {@link NC_GROUPING_MIN_SEC} — naming everybody
|
|
19741
|
+
* the rule matched, with one mosaic tile per subject.
|
|
19742
|
+
* Absent = plain immediate (one message per track, at the first match).
|
|
19743
|
+
* Only an `immediate` DETECTION rule may carry it (`ruleGroupingApplies`, enforced on
|
|
19744
|
+
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
19745
|
+
* path does not run Zod defaults.
|
|
19796
19746
|
*/
|
|
19797
|
-
|
|
19747
|
+
groupingSec: number().int().min(5).max(60).optional()
|
|
19798
19748
|
});
|
|
19799
19749
|
/**
|
|
19800
19750
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -19842,9 +19792,10 @@ var NcRuleClearableKeySchema = _enum([
|
|
|
19842
19792
|
"targetUsers",
|
|
19843
19793
|
"snoozeOptions",
|
|
19844
19794
|
"snoozeAllowGlobal",
|
|
19845
|
-
"waitForEnhancement",
|
|
19846
19795
|
"actions",
|
|
19847
19796
|
"confirm",
|
|
19797
|
+
"groupingSec",
|
|
19798
|
+
"waitForEnhancement",
|
|
19848
19799
|
"groupIdleSec"
|
|
19849
19800
|
]);
|
|
19850
19801
|
var NcRuleUpdateInputSchema = object({
|
|
@@ -19866,9 +19817,25 @@ var NcRuleSchema = NcRuleInputSchema.extend({
|
|
|
19866
19817
|
*/
|
|
19867
19818
|
disabledTargetIds: array(string()).default([])
|
|
19868
19819
|
});
|
|
19820
|
+
/**
|
|
19821
|
+
* The state-summary SECTIONS (D647 / D698): the D637 kind groups that report a
|
|
19822
|
+
* still-true state. `backups-exports` and `alarm` are not sections — a completed
|
|
19823
|
+
* job is not an open state, and the alarm stays instant.
|
|
19824
|
+
*/
|
|
19825
|
+
var NcStateSummarySectionIdSchema = _enum([
|
|
19826
|
+
"device-state",
|
|
19827
|
+
"streams",
|
|
19828
|
+
"battery",
|
|
19829
|
+
"consumables",
|
|
19830
|
+
"tanks",
|
|
19831
|
+
"detection-blind",
|
|
19832
|
+
"nodes",
|
|
19833
|
+
"addons",
|
|
19834
|
+
"updates"
|
|
19835
|
+
]);
|
|
19869
19836
|
/** One section of a previewed state summary. `unavailable` = its state could not be read. */
|
|
19870
19837
|
var NcStateSummaryPreviewSectionSchema = object({
|
|
19871
|
-
id:
|
|
19838
|
+
id: NcStateSummarySectionIdSchema,
|
|
19872
19839
|
status: _enum(["read", "unavailable"]),
|
|
19873
19840
|
items: number().int().nonnegative(),
|
|
19874
19841
|
reason: string().optional()
|
|
@@ -19878,7 +19845,7 @@ var NcStateSummaryPreviewSectionSchema = object({
|
|
|
19878
19845
|
* a `rule` split (no `section`), one section's on a `section` split.
|
|
19879
19846
|
*/
|
|
19880
19847
|
var NcStateSummaryPreviewRowSchema = object({
|
|
19881
|
-
section:
|
|
19848
|
+
section: NcStateSummarySectionIdSchema.optional(),
|
|
19882
19849
|
/** The section's name on a per-section row; every reported section's, joined, on a combined one. */
|
|
19883
19850
|
title: string(),
|
|
19884
19851
|
text: string(),
|
|
@@ -20315,6 +20282,29 @@ object({
|
|
|
20315
20282
|
firstAt: number(),
|
|
20316
20283
|
lastAt: number()
|
|
20317
20284
|
});
|
|
20285
|
+
var NC_ALARM_TRIGGERED_MAX_SEC = 3600;
|
|
20286
|
+
var NcAlarmDelaySecSchema = number().int().min(0).max(600);
|
|
20287
|
+
var NcAlarmTriggeredSecSchema = number().int().min(0).max(NC_ALARM_TRIGGERED_MAX_SEC);
|
|
20288
|
+
var uniqueModes = (entries) => new Set(entries.map((e) => e.mode)).size === entries.length;
|
|
20289
|
+
var NcAlarmModeDelaysListSchema = array(object({
|
|
20290
|
+
mode: AlarmArmModeSchema,
|
|
20291
|
+
exitDelaySec: NcAlarmDelaySecSchema.optional(),
|
|
20292
|
+
entryDelaySec: NcAlarmDelaySecSchema.optional(),
|
|
20293
|
+
triggeredDurationSec: NcAlarmTriggeredSecSchema.optional()
|
|
20294
|
+
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20295
|
+
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20296
|
+
mode: AlarmArmModeSchema,
|
|
20297
|
+
exitDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
|
|
20298
|
+
entryDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
|
|
20299
|
+
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional()
|
|
20300
|
+
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20301
|
+
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20302
|
+
var NcAlarmNonBlockingEditSchema = object({
|
|
20303
|
+
mode: AlarmArmModeSchema,
|
|
20304
|
+
deviceId: number().int().positive(),
|
|
20305
|
+
/** true = on the list (may be open, does not block); false = off the list (blocks). */
|
|
20306
|
+
nonBlocking: boolean()
|
|
20307
|
+
});
|
|
20318
20308
|
/**
|
|
20319
20309
|
* The per-mode lists, at most one per mode. Two lists for one mode have no
|
|
20320
20310
|
* meaning a reader could agree on (union? the last one?), so they are refused
|
|
@@ -20323,10 +20313,10 @@ object({
|
|
|
20323
20313
|
var NcAlarmNonBlockingListSchema = array(object({
|
|
20324
20314
|
mode: AlarmArmModeSchema,
|
|
20325
20315
|
deviceIds: array(number().int()).max(200)
|
|
20326
|
-
})).max(8).refine(
|
|
20316
|
+
})).max(8).refine(uniqueModes, { message: "nonBlocking: at most one list per arm mode" });
|
|
20327
20317
|
/**
|
|
20328
|
-
* The three durations
|
|
20329
|
-
* transitions, and which openings each mode tolerates.
|
|
20318
|
+
* The three durations — global, and per mode since D697 — the panel's state
|
|
20319
|
+
* machine runs on, who hears about its transitions, and which openings each mode tolerates.
|
|
20330
20320
|
*
|
|
20331
20321
|
* They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
|
|
20332
20322
|
* `alarm-panel` is `deviceNative` and its other provider mirrors somebody
|
|
@@ -20336,15 +20326,15 @@ var NcAlarmNonBlockingListSchema = array(object({
|
|
|
20336
20326
|
*/
|
|
20337
20327
|
var NcAlarmSettingsSchema = object({
|
|
20338
20328
|
/** Grace period between arming and the mode taking effect. 0 = immediate. */
|
|
20339
|
-
exitDelaySec:
|
|
20329
|
+
exitDelaySec: NcAlarmDelaySecSchema,
|
|
20340
20330
|
/** Grace period between a trigger and the alarm firing. 0 = immediate. */
|
|
20341
|
-
entryDelaySec:
|
|
20331
|
+
entryDelaySec: NcAlarmDelaySecSchema,
|
|
20342
20332
|
/**
|
|
20343
20333
|
* How long `triggered` lasts before the panel re-arms itself.
|
|
20344
20334
|
* **0 = until an operator disarms it** — the behaviour before this field
|
|
20345
20335
|
* existed, and therefore what an untouched install keeps doing.
|
|
20346
20336
|
*/
|
|
20347
|
-
triggeredDurationSec:
|
|
20337
|
+
triggeredDurationSec: NcAlarmTriggeredSecSchema,
|
|
20348
20338
|
/**
|
|
20349
20339
|
* Deprecated by D630 — every transition is announced. Parsed, never read;
|
|
20350
20340
|
* remove after one release. Optional so an older admin's patch (which still
|
|
@@ -20367,17 +20357,30 @@ var NcAlarmSettingsSchema = object({
|
|
|
20367
20357
|
* per mode is meaningful. Defaulted to `[]` so a blob stored before D630
|
|
20368
20358
|
* parses as "every opening blocks" — the behaviour it was written under.
|
|
20369
20359
|
*/
|
|
20370
|
-
nonBlocking: NcAlarmNonBlockingListSchema.default([])
|
|
20360
|
+
nonBlocking: NcAlarmNonBlockingListSchema.default([]),
|
|
20361
|
+
/**
|
|
20362
|
+
* Per arm mode, the delays that mode OVERRIDES (D697). A mode with no entry, or an entry
|
|
20363
|
+
* without a field, uses the global value above — so `[]`, the default, is exactly the
|
|
20364
|
+
* behaviour of a blob stored before this field existed. Read through `resolveModeDelays`.
|
|
20365
|
+
*/
|
|
20366
|
+
modeDelays: NcAlarmModeDelaysListSchema.default([])
|
|
20371
20367
|
});
|
|
20372
20368
|
/**
|
|
20373
20369
|
* Every field optional — a tab edits one control at a time.
|
|
20374
20370
|
*
|
|
20375
|
-
* `nonBlocking`
|
|
20376
|
-
* remove an inner `.default()`, so a patch that never
|
|
20377
|
-
* parse to `
|
|
20378
|
-
* (the same trap {@link NcRulePatchSchema} documents).
|
|
20371
|
+
* `nonBlocking` and `modeDelays` are re-declared WITHOUT their defaults:
|
|
20372
|
+
* `.partial()` does not remove an inner `.default()`, so a patch that never
|
|
20373
|
+
* named the field would parse to `[]` and wipe every mode's list on an
|
|
20374
|
+
* unrelated edit (the same trap {@link NcRulePatchSchema} documents). Here
|
|
20375
|
+
* `modeDelays` means EDITS, not the stored overrides.
|
|
20379
20376
|
*/
|
|
20380
|
-
var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
|
|
20377
|
+
var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
|
|
20378
|
+
nonBlocking: NcAlarmNonBlockingListSchema,
|
|
20379
|
+
/** Per-mode, per-field edits — NOT the whole list (see NcAlarmModeDelaysEditSchema). */
|
|
20380
|
+
modeDelays: NcAlarmModeDelaysEditListSchema,
|
|
20381
|
+
/** ONE membership change; the panel applies it to the list it holds at its turn. */
|
|
20382
|
+
nonBlockingEdit: NcAlarmNonBlockingEditSchema
|
|
20383
|
+
}).partial().refine((p) => p.nonBlocking === void 0 || p.nonBlockingEdit === void 0, { message: "nonBlocking and nonBlockingEdit are exclusive — send the whole lists or one edit" });
|
|
20381
20384
|
/**
|
|
20382
20385
|
* What one arm mode actually arms, DERIVED from the enabled rules gated on it.
|
|
20383
20386
|
* Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
|
|
@@ -20477,6 +20480,28 @@ var NcAlarmConfigSchema = object({
|
|
|
20477
20480
|
*/
|
|
20478
20481
|
live: NcAlarmLiveSchema.optional()
|
|
20479
20482
|
});
|
|
20483
|
+
var NcAlarmSensorReadingSchema = _enum([
|
|
20484
|
+
"open",
|
|
20485
|
+
"closed",
|
|
20486
|
+
"unknown",
|
|
20487
|
+
"not-opening"
|
|
20488
|
+
]);
|
|
20489
|
+
/** One device's state as the alarm reads it — the classifier the arm check uses. */
|
|
20490
|
+
var NcAlarmSensorStateSchema = object({
|
|
20491
|
+
deviceId: number().int().positive(),
|
|
20492
|
+
reading: NcAlarmSensorReadingSchema,
|
|
20493
|
+
/** The word as read (`open`, `closed`, `unlocked`, `stopped`, …); null when unknown / not an opening. */
|
|
20494
|
+
state: string().nullable(),
|
|
20495
|
+
/** Why `unknown`: the read failed, or the slice holds no word its cap defines (a placeholder included). */
|
|
20496
|
+
unknownWhy: _enum(["read-failed", "unknown-word"]).nullable(),
|
|
20497
|
+
/** The device manager's liveness as the centre mirrors it; null = not known. */
|
|
20498
|
+
online: boolean().nullable()
|
|
20499
|
+
});
|
|
20500
|
+
var NcAlarmSensorsInputSchema = object({ deviceIds: array(number().int().positive()).max(500) });
|
|
20501
|
+
var NcAlarmSensorsSchema = object({
|
|
20502
|
+
sensors: array(NcAlarmSensorStateSchema),
|
|
20503
|
+
readAt: number().int().nonnegative()
|
|
20504
|
+
});
|
|
20480
20505
|
/**
|
|
20481
20506
|
* ONE rule's demand on ONE camera's clip ring.
|
|
20482
20507
|
*
|
|
@@ -20567,7 +20592,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
20567
20592
|
}), method(object({}), NcAlarmConfigSchema, { auth: "admin" }), method(object({ patch: NcAlarmSettingsPatchSchema }), NcAlarmConfigSchema, {
|
|
20568
20593
|
kind: "mutation",
|
|
20569
20594
|
auth: "admin"
|
|
20570
|
-
});
|
|
20595
|
+
}), method(NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, { auth: "admin" });
|
|
20571
20596
|
/**
|
|
20572
20597
|
* Zod schemas for persisted record types.
|
|
20573
20598
|
*
|
|
@@ -21719,14 +21744,14 @@ var TrackSchema = object({
|
|
|
21719
21744
|
* `derive-returned-null tile=standin`,
|
|
21720
21745
|
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
21721
21746
|
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
21722
|
-
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
21747
|
+
* The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
|
|
21723
21748
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
21724
21749
|
*
|
|
21725
21750
|
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
21726
21751
|
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
21727
21752
|
* while its key frame missed carried no reason at all — three of the four
|
|
21728
21753
|
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
21729
|
-
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
21754
|
+
* that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
|
|
21730
21755
|
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
21731
21756
|
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
21732
21757
|
* tile ended up being.
|
|
@@ -21813,7 +21838,7 @@ var MotionEventSchema = object({
|
|
|
21813
21838
|
/**
|
|
21814
21839
|
* Ms offsets from `timestamp` (the episode's own first rising edge, so the
|
|
21815
21840
|
* first entry is always `0`) of every genuine off→on transition the
|
|
21816
|
-
* episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
|
|
21841
|
+
* episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
|
|
21817
21842
|
* push: a firmware source that keepalives at ~1 Hz for the whole burst
|
|
21818
21843
|
* (Reolink, Hikvision) produces exactly one edge; a source that reports an
|
|
21819
21844
|
* explicit `false` mid-episode and then resumes before the quiet window
|
|
@@ -22337,6 +22362,7 @@ var KeyEventSchema = object({
|
|
|
22337
22362
|
bestEventId: string(),
|
|
22338
22363
|
/** Track lifetime in ms (lastSeen - firstSeen). */
|
|
22339
22364
|
windowMs: number().optional(),
|
|
22365
|
+
audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
|
|
22340
22366
|
...TrackFlagFields,
|
|
22341
22367
|
...TrackRetrainFields
|
|
22342
22368
|
});
|
|
@@ -27261,7 +27287,7 @@ var ClipPlaybackSchema = object({
|
|
|
27261
27287
|
* **One authorised yes is one wake.** `next-natural` — take the clip the next
|
|
27262
27288
|
* time the camera is awake for its own reasons — is deliberately not a member:
|
|
27263
27289
|
* it was proposed, it is free on the battery, and the operator declined it on
|
|
27264
|
-
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."
|
|
27290
|
+
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
|
|
27265
27291
|
* D558 "Considered and not taken").
|
|
27266
27292
|
*/
|
|
27267
27293
|
var ClipWakeSchema = _enum(["authorised"]);
|
|
@@ -27657,7 +27683,7 @@ var videoclipsCapability = {
|
|
|
27657
27683
|
* **It is a SECTION of the Recording tab, at the end of it — not a tab of
|
|
27658
27684
|
* its own.** It shipped as a `clips` top-tab and the operator rejected the
|
|
27659
27685
|
* placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
|
|
27660
|
-
* necessario, una nuova sezione alla fine per le clips"
|
|
27686
|
+
* necessario, una nuova sezione alla fine per le clips"* [I would use the same recordings tab, there we already have everything necessary, a new section at the end for the clips]. The Recording tab
|
|
27661
27687
|
* already holds the recorder's panel, the schedule bands and the unified
|
|
27662
27688
|
* retention policy; footage the camera itself holds is the same question,
|
|
27663
27689
|
* asked of a different store. `order: 100` puts it after all of them with
|
|
@@ -27718,7 +27744,7 @@ var videoclipsCapability = {
|
|
|
27718
27744
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
27719
27745
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
27720
27746
|
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
27721
|
-
* solo"* — so the list is asked of one provider at a time and there is
|
|
27747
|
+
* solo"* [there is only one user] — so the list is asked of one provider at a time and there is
|
|
27722
27748
|
* nothing to filter out of it.
|
|
27723
27749
|
*/
|
|
27724
27750
|
provider: string().min(1)
|
|
@@ -36040,7 +36066,7 @@ var ReadGopBytesResultSchema = object({
|
|
|
36040
36066
|
/**
|
|
36041
36067
|
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
36042
36068
|
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
36043
|
-
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-
|
|
36069
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
|
|
36044
36070
|
* a replay needs several seconds of native pixels, not one frame.
|
|
36045
36071
|
*
|
|
36046
36072
|
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
@@ -39708,6 +39734,7 @@ var zoneRulesCapability = {
|
|
|
39708
39734
|
*/
|
|
39709
39735
|
durability: "restored"
|
|
39710
39736
|
};
|
|
39737
|
+
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
39711
39738
|
/**
|
|
39712
39739
|
* Accessory device helpers — shared across drivers.
|
|
39713
39740
|
*
|
|
@@ -40767,13 +40794,14 @@ var BaseDeviceProvider = class extends BaseAddon {
|
|
|
40767
40794
|
async getStatus() {
|
|
40768
40795
|
const all = await this.ctx.kernel.devices?.getAll() ?? [];
|
|
40769
40796
|
const summary = this.restoreFailureSummary();
|
|
40770
|
-
|
|
40797
|
+
const base = {
|
|
40771
40798
|
connected: true,
|
|
40772
|
-
deviceCount: all.length
|
|
40799
|
+
deviceCount: all.length,
|
|
40800
|
+
motionSliceWriter: "orchestrator"
|
|
40773
40801
|
};
|
|
40802
|
+
if (summary === null) return base;
|
|
40774
40803
|
return {
|
|
40775
|
-
|
|
40776
|
-
deviceCount: all.length,
|
|
40804
|
+
...base,
|
|
40777
40805
|
error: summary
|
|
40778
40806
|
};
|
|
40779
40807
|
}
|
|
@@ -46415,6 +46443,12 @@ Object.freeze({
|
|
|
46415
46443
|
addonId: null,
|
|
46416
46444
|
access: "view"
|
|
46417
46445
|
},
|
|
46446
|
+
"notificationRules.getAlarmSensors": {
|
|
46447
|
+
capName: "notification-rules",
|
|
46448
|
+
capScope: "system",
|
|
46449
|
+
addonId: null,
|
|
46450
|
+
access: "view"
|
|
46451
|
+
},
|
|
46418
46452
|
"notificationRules.getClipRetentionAsks": {
|
|
46419
46453
|
capName: "notification-rules",
|
|
46420
46454
|
capScope: "system",
|
|
@@ -49993,6 +50027,11 @@ Object.freeze({
|
|
|
49993
50027
|
}
|
|
49994
50028
|
});
|
|
49995
50029
|
Object.freeze({
|
|
50030
|
+
"accessories.getStatus": [{
|
|
50031
|
+
name: "deviceId",
|
|
50032
|
+
form: "single",
|
|
50033
|
+
optional: false
|
|
50034
|
+
}],
|
|
49996
50035
|
"accessories.setChildHidden": [{
|
|
49997
50036
|
name: "childDeviceId",
|
|
49998
50037
|
form: "single",
|
|
@@ -50012,6 +50051,11 @@ Object.freeze({
|
|
|
50012
50051
|
form: "single",
|
|
50013
50052
|
optional: false
|
|
50014
50053
|
}],
|
|
50054
|
+
"airQualitySensor.getStatus": [{
|
|
50055
|
+
name: "deviceId",
|
|
50056
|
+
form: "single",
|
|
50057
|
+
optional: false
|
|
50058
|
+
}],
|
|
50015
50059
|
"alarmPanel.arm": [{
|
|
50016
50060
|
name: "deviceId",
|
|
50017
50061
|
form: "single",
|
|
@@ -50022,11 +50066,36 @@ Object.freeze({
|
|
|
50022
50066
|
form: "single",
|
|
50023
50067
|
optional: false
|
|
50024
50068
|
}],
|
|
50069
|
+
"alarmPanel.getStatus": [{
|
|
50070
|
+
name: "deviceId",
|
|
50071
|
+
form: "single",
|
|
50072
|
+
optional: false
|
|
50073
|
+
}],
|
|
50025
50074
|
"alarmPanel.trigger": [{
|
|
50026
50075
|
name: "deviceId",
|
|
50027
50076
|
form: "single",
|
|
50028
50077
|
optional: false
|
|
50029
50078
|
}],
|
|
50079
|
+
"ambientLightSensor.getStatus": [{
|
|
50080
|
+
name: "deviceId",
|
|
50081
|
+
form: "single",
|
|
50082
|
+
optional: false
|
|
50083
|
+
}],
|
|
50084
|
+
"audioAnalysis.applyDeviceSettingsPatch": [{
|
|
50085
|
+
name: "deviceId",
|
|
50086
|
+
form: "single",
|
|
50087
|
+
optional: false
|
|
50088
|
+
}],
|
|
50089
|
+
"audioAnalysis.getDeviceLiveContribution": [{
|
|
50090
|
+
name: "deviceId",
|
|
50091
|
+
form: "single",
|
|
50092
|
+
optional: false
|
|
50093
|
+
}],
|
|
50094
|
+
"audioAnalysis.getDeviceSettingsContribution": [{
|
|
50095
|
+
name: "deviceId",
|
|
50096
|
+
form: "single",
|
|
50097
|
+
optional: false
|
|
50098
|
+
}],
|
|
50030
50099
|
"audioAnalysis.resolveDeviceSettings": [{
|
|
50031
50100
|
name: "deviceId",
|
|
50032
50101
|
form: "single",
|
|
@@ -50067,16 +50136,36 @@ Object.freeze({
|
|
|
50067
50136
|
form: "single",
|
|
50068
50137
|
optional: false
|
|
50069
50138
|
}],
|
|
50139
|
+
"automationControl.getStatus": [{
|
|
50140
|
+
name: "deviceId",
|
|
50141
|
+
form: "single",
|
|
50142
|
+
optional: false
|
|
50143
|
+
}],
|
|
50070
50144
|
"automationControl.trigger": [{
|
|
50071
50145
|
name: "deviceId",
|
|
50072
50146
|
form: "single",
|
|
50073
50147
|
optional: false
|
|
50074
50148
|
}],
|
|
50149
|
+
"battery.getStatus": [{
|
|
50150
|
+
name: "deviceId",
|
|
50151
|
+
form: "single",
|
|
50152
|
+
optional: false
|
|
50153
|
+
}],
|
|
50075
50154
|
"battery.wakeForStream": [{
|
|
50076
50155
|
name: "deviceId",
|
|
50077
50156
|
form: "single",
|
|
50078
50157
|
optional: false
|
|
50079
50158
|
}],
|
|
50159
|
+
"binary.getStatus": [{
|
|
50160
|
+
name: "deviceId",
|
|
50161
|
+
form: "single",
|
|
50162
|
+
optional: false
|
|
50163
|
+
}],
|
|
50164
|
+
"brightness.getStatus": [{
|
|
50165
|
+
name: "deviceId",
|
|
50166
|
+
form: "single",
|
|
50167
|
+
optional: false
|
|
50168
|
+
}],
|
|
50080
50169
|
"brightness.setBrightness": [{
|
|
50081
50170
|
name: "deviceId",
|
|
50082
50171
|
form: "single",
|
|
@@ -50092,6 +50181,26 @@ Object.freeze({
|
|
|
50092
50181
|
form: "single",
|
|
50093
50182
|
optional: false
|
|
50094
50183
|
}],
|
|
50184
|
+
"cameraCredentials.getStatus": [{
|
|
50185
|
+
name: "deviceId",
|
|
50186
|
+
form: "single",
|
|
50187
|
+
optional: false
|
|
50188
|
+
}],
|
|
50189
|
+
"cameraGridLayout.applyDeviceSettingsPatch": [{
|
|
50190
|
+
name: "deviceId",
|
|
50191
|
+
form: "single",
|
|
50192
|
+
optional: false
|
|
50193
|
+
}],
|
|
50194
|
+
"cameraGridLayout.getDeviceLiveContribution": [{
|
|
50195
|
+
name: "deviceId",
|
|
50196
|
+
form: "single",
|
|
50197
|
+
optional: false
|
|
50198
|
+
}],
|
|
50199
|
+
"cameraGridLayout.getDeviceSettingsContribution": [{
|
|
50200
|
+
name: "deviceId",
|
|
50201
|
+
form: "single",
|
|
50202
|
+
optional: false
|
|
50203
|
+
}],
|
|
50095
50204
|
"cameraGridLayout.getLayout": [{
|
|
50096
50205
|
name: "deviceId",
|
|
50097
50206
|
form: "single",
|
|
@@ -50107,6 +50216,21 @@ Object.freeze({
|
|
|
50107
50216
|
form: "single",
|
|
50108
50217
|
optional: false
|
|
50109
50218
|
}],
|
|
50219
|
+
"cameraPipelineConfig.applyDeviceSettingsPatch": [{
|
|
50220
|
+
name: "deviceId",
|
|
50221
|
+
form: "single",
|
|
50222
|
+
optional: false
|
|
50223
|
+
}],
|
|
50224
|
+
"cameraPipelineConfig.getDeviceLiveContribution": [{
|
|
50225
|
+
name: "deviceId",
|
|
50226
|
+
form: "single",
|
|
50227
|
+
optional: false
|
|
50228
|
+
}],
|
|
50229
|
+
"cameraPipelineConfig.getDeviceSettingsContribution": [{
|
|
50230
|
+
name: "deviceId",
|
|
50231
|
+
form: "single",
|
|
50232
|
+
optional: false
|
|
50233
|
+
}],
|
|
50110
50234
|
"cameraStreams.getBrokerStreams": [{
|
|
50111
50235
|
name: "deviceId",
|
|
50112
50236
|
form: "single",
|
|
@@ -50132,6 +50256,16 @@ Object.freeze({
|
|
|
50132
50256
|
form: "single",
|
|
50133
50257
|
optional: false
|
|
50134
50258
|
}],
|
|
50259
|
+
"carbonMonoxide.getStatus": [{
|
|
50260
|
+
name: "deviceId",
|
|
50261
|
+
form: "single",
|
|
50262
|
+
optional: false
|
|
50263
|
+
}],
|
|
50264
|
+
"climateControl.getStatus": [{
|
|
50265
|
+
name: "deviceId",
|
|
50266
|
+
form: "single",
|
|
50267
|
+
optional: false
|
|
50268
|
+
}],
|
|
50135
50269
|
"climateControl.setFanMode": [{
|
|
50136
50270
|
name: "deviceId",
|
|
50137
50271
|
form: "single",
|
|
@@ -50172,16 +50306,41 @@ Object.freeze({
|
|
|
50172
50306
|
form: "single",
|
|
50173
50307
|
optional: false
|
|
50174
50308
|
}],
|
|
50309
|
+
"color.getStatus": [{
|
|
50310
|
+
name: "deviceId",
|
|
50311
|
+
form: "single",
|
|
50312
|
+
optional: false
|
|
50313
|
+
}],
|
|
50175
50314
|
"color.setColor": [{
|
|
50176
50315
|
name: "deviceId",
|
|
50177
50316
|
form: "single",
|
|
50178
50317
|
optional: false
|
|
50179
50318
|
}],
|
|
50319
|
+
"connectivity.getStatus": [{
|
|
50320
|
+
name: "deviceId",
|
|
50321
|
+
form: "single",
|
|
50322
|
+
optional: false
|
|
50323
|
+
}],
|
|
50324
|
+
"consumables.getStatus": [{
|
|
50325
|
+
name: "deviceId",
|
|
50326
|
+
form: "single",
|
|
50327
|
+
optional: false
|
|
50328
|
+
}],
|
|
50180
50329
|
"consumables.reset": [{
|
|
50181
50330
|
name: "deviceId",
|
|
50182
50331
|
form: "single",
|
|
50183
50332
|
optional: false
|
|
50184
50333
|
}],
|
|
50334
|
+
"contact.getStatus": [{
|
|
50335
|
+
name: "deviceId",
|
|
50336
|
+
form: "single",
|
|
50337
|
+
optional: false
|
|
50338
|
+
}],
|
|
50339
|
+
"control.getStatus": [{
|
|
50340
|
+
name: "deviceId",
|
|
50341
|
+
form: "single",
|
|
50342
|
+
optional: false
|
|
50343
|
+
}],
|
|
50185
50344
|
"control.setValue": [{
|
|
50186
50345
|
name: "deviceId",
|
|
50187
50346
|
form: "single",
|
|
@@ -50192,6 +50351,11 @@ Object.freeze({
|
|
|
50192
50351
|
form: "single",
|
|
50193
50352
|
optional: false
|
|
50194
50353
|
}],
|
|
50354
|
+
"cover.getStatus": [{
|
|
50355
|
+
name: "deviceId",
|
|
50356
|
+
form: "single",
|
|
50357
|
+
optional: false
|
|
50358
|
+
}],
|
|
50195
50359
|
"cover.open": [{
|
|
50196
50360
|
name: "deviceId",
|
|
50197
50361
|
form: "single",
|
|
@@ -50217,6 +50381,11 @@ Object.freeze({
|
|
|
50217
50381
|
form: "single",
|
|
50218
50382
|
optional: false
|
|
50219
50383
|
}],
|
|
50384
|
+
"dayNight.getStatus": [{
|
|
50385
|
+
name: "deviceId",
|
|
50386
|
+
form: "single",
|
|
50387
|
+
optional: false
|
|
50388
|
+
}],
|
|
50220
50389
|
"dayNight.setSettings": [{
|
|
50221
50390
|
name: "deviceId",
|
|
50222
50391
|
form: "single",
|
|
@@ -50227,11 +50396,31 @@ Object.freeze({
|
|
|
50227
50396
|
form: "single",
|
|
50228
50397
|
optional: true
|
|
50229
50398
|
}],
|
|
50399
|
+
"detectionPipeline.applyDeviceSettingsPatch": [{
|
|
50400
|
+
name: "deviceId",
|
|
50401
|
+
form: "single",
|
|
50402
|
+
optional: false
|
|
50403
|
+
}],
|
|
50404
|
+
"detectionPipeline.getDeviceLiveContribution": [{
|
|
50405
|
+
name: "deviceId",
|
|
50406
|
+
form: "single",
|
|
50407
|
+
optional: false
|
|
50408
|
+
}],
|
|
50409
|
+
"detectionPipeline.getDeviceSettingsContribution": [{
|
|
50410
|
+
name: "deviceId",
|
|
50411
|
+
form: "single",
|
|
50412
|
+
optional: false
|
|
50413
|
+
}],
|
|
50230
50414
|
"deviceAdminLink.getAdminLink": [{
|
|
50231
50415
|
name: "deviceId",
|
|
50232
50416
|
form: "single",
|
|
50233
50417
|
optional: false
|
|
50234
50418
|
}],
|
|
50419
|
+
"deviceAdoption.getStatus": [{
|
|
50420
|
+
name: "deviceId",
|
|
50421
|
+
form: "single",
|
|
50422
|
+
optional: false
|
|
50423
|
+
}],
|
|
50235
50424
|
"deviceAdoption.release": [{
|
|
50236
50425
|
name: "camDeviceId",
|
|
50237
50426
|
form: "single",
|
|
@@ -50247,6 +50436,11 @@ Object.freeze({
|
|
|
50247
50436
|
form: "single",
|
|
50248
50437
|
optional: false
|
|
50249
50438
|
}],
|
|
50439
|
+
"deviceDiscovery.getStatus": [{
|
|
50440
|
+
name: "deviceId",
|
|
50441
|
+
form: "single",
|
|
50442
|
+
optional: false
|
|
50443
|
+
}],
|
|
50250
50444
|
"deviceDiscovery.listDiscovered": [{
|
|
50251
50445
|
name: "deviceId",
|
|
50252
50446
|
form: "single",
|
|
@@ -50266,6 +50460,21 @@ Object.freeze({
|
|
|
50266
50460
|
form: "single",
|
|
50267
50461
|
optional: false
|
|
50268
50462
|
}],
|
|
50463
|
+
"deviceExport.applyDeviceSettingsPatch": [{
|
|
50464
|
+
name: "deviceId",
|
|
50465
|
+
form: "single",
|
|
50466
|
+
optional: false
|
|
50467
|
+
}],
|
|
50468
|
+
"deviceExport.getDeviceLiveContribution": [{
|
|
50469
|
+
name: "deviceId",
|
|
50470
|
+
form: "single",
|
|
50471
|
+
optional: false
|
|
50472
|
+
}],
|
|
50473
|
+
"deviceExport.getDeviceSettingsContribution": [{
|
|
50474
|
+
name: "deviceId",
|
|
50475
|
+
form: "single",
|
|
50476
|
+
optional: false
|
|
50477
|
+
}],
|
|
50269
50478
|
"deviceExtension.listCandidates": [{
|
|
50270
50479
|
name: "deviceId",
|
|
50271
50480
|
form: "single",
|
|
@@ -50614,6 +50823,26 @@ Object.freeze({
|
|
|
50614
50823
|
form: "single",
|
|
50615
50824
|
optional: false
|
|
50616
50825
|
}],
|
|
50826
|
+
"deviceStatus.getStatus": [{
|
|
50827
|
+
name: "deviceId",
|
|
50828
|
+
form: "single",
|
|
50829
|
+
optional: false
|
|
50830
|
+
}],
|
|
50831
|
+
"doorbell.getStatus": [{
|
|
50832
|
+
name: "deviceId",
|
|
50833
|
+
form: "single",
|
|
50834
|
+
optional: false
|
|
50835
|
+
}],
|
|
50836
|
+
"enumSensor.getStatus": [{
|
|
50837
|
+
name: "deviceId",
|
|
50838
|
+
form: "single",
|
|
50839
|
+
optional: false
|
|
50840
|
+
}],
|
|
50841
|
+
"eventEmitter.getStatus": [{
|
|
50842
|
+
name: "deviceId",
|
|
50843
|
+
form: "single",
|
|
50844
|
+
optional: false
|
|
50845
|
+
}],
|
|
50617
50846
|
"faceGallery.getFaceByTrack": [{
|
|
50618
50847
|
name: "deviceId",
|
|
50619
50848
|
form: "single",
|
|
@@ -50628,6 +50857,11 @@ Object.freeze({
|
|
|
50628
50857
|
form: "array",
|
|
50629
50858
|
optional: true
|
|
50630
50859
|
}],
|
|
50860
|
+
"fanControl.getStatus": [{
|
|
50861
|
+
name: "deviceId",
|
|
50862
|
+
form: "single",
|
|
50863
|
+
optional: false
|
|
50864
|
+
}],
|
|
50631
50865
|
"fanControl.setDirection": [{
|
|
50632
50866
|
name: "deviceId",
|
|
50633
50867
|
form: "single",
|
|
@@ -50648,6 +50882,26 @@ Object.freeze({
|
|
|
50648
50882
|
form: "single",
|
|
50649
50883
|
optional: false
|
|
50650
50884
|
}],
|
|
50885
|
+
"featureProbe.getStatus": [{
|
|
50886
|
+
name: "deviceId",
|
|
50887
|
+
form: "single",
|
|
50888
|
+
optional: false
|
|
50889
|
+
}],
|
|
50890
|
+
"flood.getStatus": [{
|
|
50891
|
+
name: "deviceId",
|
|
50892
|
+
form: "single",
|
|
50893
|
+
optional: false
|
|
50894
|
+
}],
|
|
50895
|
+
"gas.getStatus": [{
|
|
50896
|
+
name: "deviceId",
|
|
50897
|
+
form: "single",
|
|
50898
|
+
optional: false
|
|
50899
|
+
}],
|
|
50900
|
+
"humidifier.getStatus": [{
|
|
50901
|
+
name: "deviceId",
|
|
50902
|
+
form: "single",
|
|
50903
|
+
optional: false
|
|
50904
|
+
}],
|
|
50651
50905
|
"humidifier.setMode": [{
|
|
50652
50906
|
name: "deviceId",
|
|
50653
50907
|
form: "single",
|
|
@@ -50663,11 +50917,26 @@ Object.freeze({
|
|
|
50663
50917
|
form: "single",
|
|
50664
50918
|
optional: false
|
|
50665
50919
|
}],
|
|
50920
|
+
"humiditySensor.getStatus": [{
|
|
50921
|
+
name: "deviceId",
|
|
50922
|
+
form: "single",
|
|
50923
|
+
optional: false
|
|
50924
|
+
}],
|
|
50925
|
+
"image.getStatus": [{
|
|
50926
|
+
name: "deviceId",
|
|
50927
|
+
form: "single",
|
|
50928
|
+
optional: false
|
|
50929
|
+
}],
|
|
50666
50930
|
"imageSettings.getOptions": [{
|
|
50667
50931
|
name: "deviceId",
|
|
50668
50932
|
form: "single",
|
|
50669
50933
|
optional: false
|
|
50670
50934
|
}],
|
|
50935
|
+
"imageSettings.getStatus": [{
|
|
50936
|
+
name: "deviceId",
|
|
50937
|
+
form: "single",
|
|
50938
|
+
optional: false
|
|
50939
|
+
}],
|
|
50671
50940
|
"imageSettings.setSettings": [{
|
|
50672
50941
|
name: "deviceId",
|
|
50673
50942
|
form: "single",
|
|
@@ -50678,6 +50947,11 @@ Object.freeze({
|
|
|
50678
50947
|
form: "single",
|
|
50679
50948
|
optional: false
|
|
50680
50949
|
}],
|
|
50950
|
+
"intercom.getStatus": [{
|
|
50951
|
+
name: "deviceId",
|
|
50952
|
+
form: "single",
|
|
50953
|
+
optional: false
|
|
50954
|
+
}],
|
|
50681
50955
|
"intercom.handleAnswer": [{
|
|
50682
50956
|
name: "deviceId",
|
|
50683
50957
|
form: "single",
|
|
@@ -50708,6 +50982,11 @@ Object.freeze({
|
|
|
50708
50982
|
form: "single",
|
|
50709
50983
|
optional: false
|
|
50710
50984
|
}],
|
|
50985
|
+
"lawnMowerControl.getStatus": [{
|
|
50986
|
+
name: "deviceId",
|
|
50987
|
+
form: "single",
|
|
50988
|
+
optional: false
|
|
50989
|
+
}],
|
|
50711
50990
|
"lawnMowerControl.pause": [{
|
|
50712
50991
|
name: "deviceId",
|
|
50713
50992
|
form: "single",
|
|
@@ -50718,6 +50997,11 @@ Object.freeze({
|
|
|
50718
50997
|
form: "single",
|
|
50719
50998
|
optional: false
|
|
50720
50999
|
}],
|
|
51000
|
+
"lockControl.getStatus": [{
|
|
51001
|
+
name: "deviceId",
|
|
51002
|
+
form: "single",
|
|
51003
|
+
optional: false
|
|
51004
|
+
}],
|
|
50721
51005
|
"lockControl.lock": [{
|
|
50722
51006
|
name: "deviceId",
|
|
50723
51007
|
form: "single",
|
|
@@ -50733,6 +51017,11 @@ Object.freeze({
|
|
|
50733
51017
|
form: "single",
|
|
50734
51018
|
optional: false
|
|
50735
51019
|
}],
|
|
51020
|
+
"mediaPlayer.getStatus": [{
|
|
51021
|
+
name: "deviceId",
|
|
51022
|
+
form: "single",
|
|
51023
|
+
optional: false
|
|
51024
|
+
}],
|
|
50736
51025
|
"mediaPlayer.next": [{
|
|
50737
51026
|
name: "deviceId",
|
|
50738
51027
|
form: "single",
|
|
@@ -50793,6 +51082,11 @@ Object.freeze({
|
|
|
50793
51082
|
form: "single",
|
|
50794
51083
|
optional: false
|
|
50795
51084
|
}],
|
|
51085
|
+
"motion.getStatus": [{
|
|
51086
|
+
name: "deviceId",
|
|
51087
|
+
form: "single",
|
|
51088
|
+
optional: false
|
|
51089
|
+
}],
|
|
50796
51090
|
"motion.isDetected": [{
|
|
50797
51091
|
name: "deviceId",
|
|
50798
51092
|
form: "single",
|
|
@@ -50803,11 +51097,31 @@ Object.freeze({
|
|
|
50803
51097
|
form: "single",
|
|
50804
51098
|
optional: false
|
|
50805
51099
|
}],
|
|
51100
|
+
"motionDetection.applyDeviceSettingsPatch": [{
|
|
51101
|
+
name: "deviceId",
|
|
51102
|
+
form: "single",
|
|
51103
|
+
optional: false
|
|
51104
|
+
}],
|
|
51105
|
+
"motionDetection.getDeviceLiveContribution": [{
|
|
51106
|
+
name: "deviceId",
|
|
51107
|
+
form: "single",
|
|
51108
|
+
optional: false
|
|
51109
|
+
}],
|
|
51110
|
+
"motionDetection.getDeviceSettingsContribution": [{
|
|
51111
|
+
name: "deviceId",
|
|
51112
|
+
form: "single",
|
|
51113
|
+
optional: false
|
|
51114
|
+
}],
|
|
50806
51115
|
"motionDetection.removeCamera": [{
|
|
50807
51116
|
name: "deviceId",
|
|
50808
51117
|
form: "single",
|
|
50809
51118
|
optional: false
|
|
50810
51119
|
}],
|
|
51120
|
+
"motionTrigger.getStatus": [{
|
|
51121
|
+
name: "deviceId",
|
|
51122
|
+
form: "single",
|
|
51123
|
+
optional: false
|
|
51124
|
+
}],
|
|
50811
51125
|
"motionTrigger.setMotionTrigger": [{
|
|
50812
51126
|
name: "deviceId",
|
|
50813
51127
|
form: "single",
|
|
@@ -50818,6 +51132,11 @@ Object.freeze({
|
|
|
50818
51132
|
form: "single",
|
|
50819
51133
|
optional: false
|
|
50820
51134
|
}],
|
|
51135
|
+
"motionZones.getStatus": [{
|
|
51136
|
+
name: "deviceId",
|
|
51137
|
+
form: "single",
|
|
51138
|
+
optional: false
|
|
51139
|
+
}],
|
|
50821
51140
|
"motionZones.setZone": [{
|
|
50822
51141
|
name: "deviceId",
|
|
50823
51142
|
form: "single",
|
|
@@ -50828,6 +51147,11 @@ Object.freeze({
|
|
|
50828
51147
|
form: "single",
|
|
50829
51148
|
optional: false
|
|
50830
51149
|
}],
|
|
51150
|
+
"nativeObjectDetection.getStatus": [{
|
|
51151
|
+
name: "deviceId",
|
|
51152
|
+
form: "single",
|
|
51153
|
+
optional: false
|
|
51154
|
+
}],
|
|
50831
51155
|
"nativeObjectDetection.setEnabled": [{
|
|
50832
51156
|
name: "deviceId",
|
|
50833
51157
|
form: "single",
|
|
@@ -50843,6 +51167,11 @@ Object.freeze({
|
|
|
50843
51167
|
form: "single",
|
|
50844
51168
|
optional: false
|
|
50845
51169
|
}],
|
|
51170
|
+
"navigation.getStatus": [{
|
|
51171
|
+
name: "deviceId",
|
|
51172
|
+
form: "single",
|
|
51173
|
+
optional: false
|
|
51174
|
+
}],
|
|
50846
51175
|
"navigation.goToPoint": [{
|
|
50847
51176
|
name: "deviceId",
|
|
50848
51177
|
form: "single",
|
|
@@ -50888,6 +51217,11 @@ Object.freeze({
|
|
|
50888
51217
|
form: "single",
|
|
50889
51218
|
optional: false
|
|
50890
51219
|
}],
|
|
51220
|
+
"networkLink.getStatus": [{
|
|
51221
|
+
name: "deviceId",
|
|
51222
|
+
form: "single",
|
|
51223
|
+
optional: false
|
|
51224
|
+
}],
|
|
50891
51225
|
"networkQuality.getDeviceStats": [{
|
|
50892
51226
|
name: "deviceId",
|
|
50893
51227
|
form: "single",
|
|
@@ -50898,6 +51232,11 @@ Object.freeze({
|
|
|
50898
51232
|
form: "single",
|
|
50899
51233
|
optional: false
|
|
50900
51234
|
}],
|
|
51235
|
+
"notificationRules.getAlarmSensors": [{
|
|
51236
|
+
name: "deviceIds",
|
|
51237
|
+
form: "array",
|
|
51238
|
+
optional: false
|
|
51239
|
+
}],
|
|
50901
51240
|
"notificationRules.setDeviceMuted": [{
|
|
50902
51241
|
name: "deviceId",
|
|
50903
51242
|
form: "single",
|
|
@@ -50908,11 +51247,26 @@ Object.freeze({
|
|
|
50908
51247
|
form: "single",
|
|
50909
51248
|
optional: false
|
|
50910
51249
|
}],
|
|
51250
|
+
"notifier.getStatus": [{
|
|
51251
|
+
name: "deviceId",
|
|
51252
|
+
form: "single",
|
|
51253
|
+
optional: false
|
|
51254
|
+
}],
|
|
50911
51255
|
"notifier.send": [{
|
|
50912
51256
|
name: "deviceId",
|
|
50913
51257
|
form: "single",
|
|
50914
51258
|
optional: false
|
|
50915
51259
|
}],
|
|
51260
|
+
"numericSensor.getStatus": [{
|
|
51261
|
+
name: "deviceId",
|
|
51262
|
+
form: "single",
|
|
51263
|
+
optional: false
|
|
51264
|
+
}],
|
|
51265
|
+
"osd.getStatus": [{
|
|
51266
|
+
name: "deviceId",
|
|
51267
|
+
form: "single",
|
|
51268
|
+
optional: false
|
|
51269
|
+
}],
|
|
50916
51270
|
"osd.setOverlay": [{
|
|
50917
51271
|
name: "deviceId",
|
|
50918
51272
|
form: "single",
|
|
@@ -50972,6 +51326,11 @@ Object.freeze({
|
|
|
50972
51326
|
form: "single",
|
|
50973
51327
|
optional: false
|
|
50974
51328
|
}],
|
|
51329
|
+
"petFeeder.getStatus": [{
|
|
51330
|
+
name: "deviceId",
|
|
51331
|
+
form: "single",
|
|
51332
|
+
optional: false
|
|
51333
|
+
}],
|
|
50975
51334
|
"petFeeder.markFoodReplenished": [{
|
|
50976
51335
|
name: "deviceId",
|
|
50977
51336
|
form: "single",
|
|
@@ -51007,6 +51366,11 @@ Object.freeze({
|
|
|
51007
51366
|
form: "single",
|
|
51008
51367
|
optional: false
|
|
51009
51368
|
}],
|
|
51369
|
+
"pipelineAnalytics.applyDeviceSettingsPatch": [{
|
|
51370
|
+
name: "deviceId",
|
|
51371
|
+
form: "single",
|
|
51372
|
+
optional: false
|
|
51373
|
+
}],
|
|
51010
51374
|
"pipelineAnalytics.clearTrackRelation": [{
|
|
51011
51375
|
name: "deviceId",
|
|
51012
51376
|
form: "single",
|
|
@@ -51047,6 +51411,16 @@ Object.freeze({
|
|
|
51047
51411
|
form: "single",
|
|
51048
51412
|
optional: false
|
|
51049
51413
|
}],
|
|
51414
|
+
"pipelineAnalytics.getDeviceLiveContribution": [{
|
|
51415
|
+
name: "deviceId",
|
|
51416
|
+
form: "single",
|
|
51417
|
+
optional: false
|
|
51418
|
+
}],
|
|
51419
|
+
"pipelineAnalytics.getDeviceSettingsContribution": [{
|
|
51420
|
+
name: "deviceId",
|
|
51421
|
+
form: "single",
|
|
51422
|
+
optional: false
|
|
51423
|
+
}],
|
|
51050
51424
|
"pipelineAnalytics.getEventDensity": [{
|
|
51051
51425
|
name: "deviceId",
|
|
51052
51426
|
form: "single",
|
|
@@ -51262,6 +51636,11 @@ Object.freeze({
|
|
|
51262
51636
|
form: "single",
|
|
51263
51637
|
optional: true
|
|
51264
51638
|
}],
|
|
51639
|
+
"pipelineOrchestrator.applyDeviceSettingsPatch": [{
|
|
51640
|
+
name: "deviceId",
|
|
51641
|
+
form: "single",
|
|
51642
|
+
optional: false
|
|
51643
|
+
}],
|
|
51265
51644
|
"pipelineOrchestrator.assignAudio": [{
|
|
51266
51645
|
name: "deviceId",
|
|
51267
51646
|
form: "single",
|
|
@@ -51307,6 +51686,16 @@ Object.freeze({
|
|
|
51307
51686
|
form: "single",
|
|
51308
51687
|
optional: false
|
|
51309
51688
|
}],
|
|
51689
|
+
"pipelineOrchestrator.getDeviceLiveContribution": [{
|
|
51690
|
+
name: "deviceId",
|
|
51691
|
+
form: "single",
|
|
51692
|
+
optional: false
|
|
51693
|
+
}],
|
|
51694
|
+
"pipelineOrchestrator.getDeviceSettingsContribution": [{
|
|
51695
|
+
name: "deviceId",
|
|
51696
|
+
form: "single",
|
|
51697
|
+
optional: false
|
|
51698
|
+
}],
|
|
51310
51699
|
"pipelineOrchestrator.getPipelineAssignment": [{
|
|
51311
51700
|
name: "deviceId",
|
|
51312
51701
|
form: "single",
|
|
@@ -51427,11 +51816,31 @@ Object.freeze({
|
|
|
51427
51816
|
form: "single",
|
|
51428
51817
|
optional: true
|
|
51429
51818
|
}],
|
|
51819
|
+
"powerMeter.getStatus": [{
|
|
51820
|
+
name: "deviceId",
|
|
51821
|
+
form: "single",
|
|
51822
|
+
optional: false
|
|
51823
|
+
}],
|
|
51824
|
+
"presence.getStatus": [{
|
|
51825
|
+
name: "deviceId",
|
|
51826
|
+
form: "single",
|
|
51827
|
+
optional: false
|
|
51828
|
+
}],
|
|
51829
|
+
"pressureSensor.getStatus": [{
|
|
51830
|
+
name: "deviceId",
|
|
51831
|
+
form: "single",
|
|
51832
|
+
optional: false
|
|
51833
|
+
}],
|
|
51430
51834
|
"privacyMask.getOptions": [{
|
|
51431
51835
|
name: "deviceId",
|
|
51432
51836
|
form: "single",
|
|
51433
51837
|
optional: false
|
|
51434
51838
|
}],
|
|
51839
|
+
"privacyMask.getStatus": [{
|
|
51840
|
+
name: "deviceId",
|
|
51841
|
+
form: "single",
|
|
51842
|
+
optional: false
|
|
51843
|
+
}],
|
|
51435
51844
|
"privacyMask.setAudioEnabled": [{
|
|
51436
51845
|
name: "deviceId",
|
|
51437
51846
|
form: "single",
|
|
@@ -51482,6 +51891,11 @@ Object.freeze({
|
|
|
51482
51891
|
form: "single",
|
|
51483
51892
|
optional: false
|
|
51484
51893
|
}],
|
|
51894
|
+
"ptz.getStatus": [{
|
|
51895
|
+
name: "deviceId",
|
|
51896
|
+
form: "single",
|
|
51897
|
+
optional: false
|
|
51898
|
+
}],
|
|
51485
51899
|
"ptz.goHome": [{
|
|
51486
51900
|
name: "deviceId",
|
|
51487
51901
|
form: "single",
|
|
@@ -51572,6 +51986,11 @@ Object.freeze({
|
|
|
51572
51986
|
form: "single",
|
|
51573
51987
|
optional: false
|
|
51574
51988
|
}],
|
|
51989
|
+
"recordingArchive.applyDeviceSettingsPatch": [{
|
|
51990
|
+
name: "deviceId",
|
|
51991
|
+
form: "single",
|
|
51992
|
+
optional: false
|
|
51993
|
+
}],
|
|
51575
51994
|
"recordingArchive.deleteFootprint": [{
|
|
51576
51995
|
name: "deviceId",
|
|
51577
51996
|
form: "single",
|
|
@@ -51592,6 +52011,21 @@ Object.freeze({
|
|
|
51592
52011
|
form: "single",
|
|
51593
52012
|
optional: false
|
|
51594
52013
|
}],
|
|
52014
|
+
"recordingArchive.getDeviceLiveContribution": [{
|
|
52015
|
+
name: "deviceId",
|
|
52016
|
+
form: "single",
|
|
52017
|
+
optional: false
|
|
52018
|
+
}],
|
|
52019
|
+
"recordingArchive.getDeviceSettingsContribution": [{
|
|
52020
|
+
name: "deviceId",
|
|
52021
|
+
form: "single",
|
|
52022
|
+
optional: false
|
|
52023
|
+
}],
|
|
52024
|
+
"recordingArchive.getStatus": [{
|
|
52025
|
+
name: "deviceId",
|
|
52026
|
+
form: "single",
|
|
52027
|
+
optional: false
|
|
52028
|
+
}],
|
|
51595
52029
|
"recordingArchive.listOpsLog": [{
|
|
51596
52030
|
name: "deviceId",
|
|
51597
52031
|
form: "single",
|
|
@@ -51677,6 +52111,11 @@ Object.freeze({
|
|
|
51677
52111
|
form: "single",
|
|
51678
52112
|
optional: false
|
|
51679
52113
|
}],
|
|
52114
|
+
"recordingOnboard.getStatus": [{
|
|
52115
|
+
name: "deviceId",
|
|
52116
|
+
form: "single",
|
|
52117
|
+
optional: false
|
|
52118
|
+
}],
|
|
51680
52119
|
"recordingOnboard.setSettings": [{
|
|
51681
52120
|
name: "deviceId",
|
|
51682
52121
|
form: "single",
|
|
@@ -51707,6 +52146,11 @@ Object.freeze({
|
|
|
51707
52146
|
form: "single",
|
|
51708
52147
|
optional: false
|
|
51709
52148
|
}],
|
|
52149
|
+
"sceneMonitor.getStatus": [{
|
|
52150
|
+
name: "deviceId",
|
|
52151
|
+
form: "single",
|
|
52152
|
+
optional: false
|
|
52153
|
+
}],
|
|
51710
52154
|
"sceneMonitor.listScenes": [{
|
|
51711
52155
|
name: "deviceId",
|
|
51712
52156
|
form: "single",
|
|
@@ -51732,6 +52176,11 @@ Object.freeze({
|
|
|
51732
52176
|
form: "single",
|
|
51733
52177
|
optional: false
|
|
51734
52178
|
}],
|
|
52179
|
+
"scriptRunner.getStatus": [{
|
|
52180
|
+
name: "deviceId",
|
|
52181
|
+
form: "single",
|
|
52182
|
+
optional: false
|
|
52183
|
+
}],
|
|
51735
52184
|
"scriptRunner.run": [{
|
|
51736
52185
|
name: "deviceId",
|
|
51737
52186
|
form: "single",
|
|
@@ -51742,11 +52191,31 @@ Object.freeze({
|
|
|
51742
52191
|
form: "single",
|
|
51743
52192
|
optional: false
|
|
51744
52193
|
}],
|
|
52194
|
+
"smoke.getStatus": [{
|
|
52195
|
+
name: "deviceId",
|
|
52196
|
+
form: "single",
|
|
52197
|
+
optional: false
|
|
52198
|
+
}],
|
|
52199
|
+
"snapshot.applyDeviceSettingsPatch": [{
|
|
52200
|
+
name: "deviceId",
|
|
52201
|
+
form: "single",
|
|
52202
|
+
optional: false
|
|
52203
|
+
}],
|
|
51745
52204
|
"snapshot.getDebugState": [{
|
|
51746
52205
|
name: "deviceId",
|
|
51747
52206
|
form: "single",
|
|
51748
52207
|
optional: false
|
|
51749
52208
|
}],
|
|
52209
|
+
"snapshot.getDeviceLiveContribution": [{
|
|
52210
|
+
name: "deviceId",
|
|
52211
|
+
form: "single",
|
|
52212
|
+
optional: false
|
|
52213
|
+
}],
|
|
52214
|
+
"snapshot.getDeviceSettingsContribution": [{
|
|
52215
|
+
name: "deviceId",
|
|
52216
|
+
form: "single",
|
|
52217
|
+
optional: false
|
|
52218
|
+
}],
|
|
51750
52219
|
"snapshot.getSnapshot": [{
|
|
51751
52220
|
name: "deviceId",
|
|
51752
52221
|
form: "single",
|
|
@@ -51763,6 +52232,11 @@ Object.freeze({
|
|
|
51763
52232
|
form: "array",
|
|
51764
52233
|
optional: false
|
|
51765
52234
|
}],
|
|
52235
|
+
"snapshot.getStatus": [{
|
|
52236
|
+
name: "deviceId",
|
|
52237
|
+
form: "single",
|
|
52238
|
+
optional: false
|
|
52239
|
+
}],
|
|
51766
52240
|
"snapshot.invalidateCache": [{
|
|
51767
52241
|
name: "deviceId",
|
|
51768
52242
|
form: "single",
|
|
@@ -51773,6 +52247,11 @@ Object.freeze({
|
|
|
51773
52247
|
form: "single",
|
|
51774
52248
|
optional: false
|
|
51775
52249
|
}],
|
|
52250
|
+
"streamBroker.applyDeviceSettingsPatch": [{
|
|
52251
|
+
name: "deviceId",
|
|
52252
|
+
form: "single",
|
|
52253
|
+
optional: false
|
|
52254
|
+
}],
|
|
51776
52255
|
"streamBroker.assignProfile": [{
|
|
51777
52256
|
name: "deviceId",
|
|
51778
52257
|
form: "single",
|
|
@@ -51788,6 +52267,16 @@ Object.freeze({
|
|
|
51788
52267
|
form: "single",
|
|
51789
52268
|
optional: false
|
|
51790
52269
|
}],
|
|
52270
|
+
"streamBroker.getDeviceLiveContribution": [{
|
|
52271
|
+
name: "deviceId",
|
|
52272
|
+
form: "single",
|
|
52273
|
+
optional: false
|
|
52274
|
+
}],
|
|
52275
|
+
"streamBroker.getDeviceSettingsContribution": [{
|
|
52276
|
+
name: "deviceId",
|
|
52277
|
+
form: "single",
|
|
52278
|
+
optional: false
|
|
52279
|
+
}],
|
|
51791
52280
|
"streamBroker.getStreamWithCodec": [{
|
|
51792
52281
|
name: "deviceId",
|
|
51793
52282
|
form: "single",
|
|
@@ -51848,16 +52337,46 @@ Object.freeze({
|
|
|
51848
52337
|
form: "single",
|
|
51849
52338
|
optional: false
|
|
51850
52339
|
}],
|
|
52340
|
+
"streamParams.getStatus": [{
|
|
52341
|
+
name: "deviceId",
|
|
52342
|
+
form: "single",
|
|
52343
|
+
optional: false
|
|
52344
|
+
}],
|
|
51851
52345
|
"streamParams.setProfile": [{
|
|
51852
52346
|
name: "deviceId",
|
|
51853
52347
|
form: "single",
|
|
51854
52348
|
optional: false
|
|
51855
52349
|
}],
|
|
52350
|
+
"switch.getStatus": [{
|
|
52351
|
+
name: "deviceId",
|
|
52352
|
+
form: "single",
|
|
52353
|
+
optional: false
|
|
52354
|
+
}],
|
|
51856
52355
|
"switch.setState": [{
|
|
51857
52356
|
name: "deviceId",
|
|
51858
52357
|
form: "single",
|
|
51859
52358
|
optional: false
|
|
51860
52359
|
}],
|
|
52360
|
+
"tamper.getStatus": [{
|
|
52361
|
+
name: "deviceId",
|
|
52362
|
+
form: "single",
|
|
52363
|
+
optional: false
|
|
52364
|
+
}],
|
|
52365
|
+
"temperatureSensor.getStatus": [{
|
|
52366
|
+
name: "deviceId",
|
|
52367
|
+
form: "single",
|
|
52368
|
+
optional: false
|
|
52369
|
+
}],
|
|
52370
|
+
"update.getStatus": [{
|
|
52371
|
+
name: "deviceId",
|
|
52372
|
+
form: "single",
|
|
52373
|
+
optional: false
|
|
52374
|
+
}],
|
|
52375
|
+
"vacuumControl.getStatus": [{
|
|
52376
|
+
name: "deviceId",
|
|
52377
|
+
form: "single",
|
|
52378
|
+
optional: false
|
|
52379
|
+
}],
|
|
51861
52380
|
"vacuumControl.locate": [{
|
|
51862
52381
|
name: "deviceId",
|
|
51863
52382
|
form: "single",
|
|
@@ -51893,6 +52412,11 @@ Object.freeze({
|
|
|
51893
52412
|
form: "single",
|
|
51894
52413
|
optional: false
|
|
51895
52414
|
}],
|
|
52415
|
+
"valve.getStatus": [{
|
|
52416
|
+
name: "deviceId",
|
|
52417
|
+
form: "single",
|
|
52418
|
+
optional: false
|
|
52419
|
+
}],
|
|
51896
52420
|
"valve.open": [{
|
|
51897
52421
|
name: "deviceId",
|
|
51898
52422
|
form: "single",
|
|
@@ -51908,6 +52432,11 @@ Object.freeze({
|
|
|
51908
52432
|
form: "single",
|
|
51909
52433
|
optional: false
|
|
51910
52434
|
}],
|
|
52435
|
+
"vibration.getStatus": [{
|
|
52436
|
+
name: "deviceId",
|
|
52437
|
+
form: "single",
|
|
52438
|
+
optional: false
|
|
52439
|
+
}],
|
|
51911
52440
|
"videoclips.dialClipStream": [{
|
|
51912
52441
|
name: "deviceId",
|
|
51913
52442
|
form: "single",
|
|
@@ -51943,6 +52472,11 @@ Object.freeze({
|
|
|
51943
52472
|
form: "single",
|
|
51944
52473
|
optional: false
|
|
51945
52474
|
}],
|
|
52475
|
+
"waterHeater.getStatus": [{
|
|
52476
|
+
name: "deviceId",
|
|
52477
|
+
form: "single",
|
|
52478
|
+
optional: false
|
|
52479
|
+
}],
|
|
51946
52480
|
"waterHeater.setAway": [{
|
|
51947
52481
|
name: "deviceId",
|
|
51948
52482
|
form: "single",
|
|
@@ -51958,6 +52492,11 @@ Object.freeze({
|
|
|
51958
52492
|
form: "single",
|
|
51959
52493
|
optional: false
|
|
51960
52494
|
}],
|
|
52495
|
+
"weather.getStatus": [{
|
|
52496
|
+
name: "deviceId",
|
|
52497
|
+
form: "single",
|
|
52498
|
+
optional: false
|
|
52499
|
+
}],
|
|
51961
52500
|
"webrtcSession.addIceCandidate": [{
|
|
51962
52501
|
name: "deviceId",
|
|
51963
52502
|
form: "single",
|
|
@@ -52695,7 +53234,7 @@ var PreviewTextField = string().max(200);
|
|
|
52695
53234
|
* Whether the notification's preview is a STILL or a short animation.
|
|
52696
53235
|
*
|
|
52697
53236
|
* The operator's ask, verbatim: *"inviato come gif o video (come per le altre
|
|
52698
|
-
* rule)"* — the other rules already offer an animated preview, and a ten-hour
|
|
53237
|
+
* rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
|
|
52699
53238
|
* night reads better as three seconds of motion than as one frame of it. Both
|
|
52700
53239
|
* modes get the SAME treatment (blurred frame, large centred title); `'gif'`
|
|
52701
53240
|
* simply applies it to a dozen frames sampled across the render and assembles
|